retagging 2.0.1


git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/tags/STRUTS_2_0_1@462597 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java b/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java
index 95c0fc9..4c45409 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java
@@ -105,9 +105,8 @@
      * @param parse <tt>true</tt> if HTTP header values should be evaluated agains the ValueStack, <tt>false</tt>
      *              otherwise.
      */
-    public HttpHeaderResult setParse(boolean parse) {
+    public void setParse(boolean parse) {
         this.parse = parse;
-        return this;
     }
 
     /**
@@ -116,9 +115,8 @@
      * @param status the Http status code
      * @see javax.servlet.http.HttpServletResponse#setStatus(int)
      */
-    public HttpHeaderResult setStatus(int status) {
+    public void setStatus(int status) {
         this.status = status;
-        return this;
     }
     
     /**
@@ -126,9 +124,8 @@
      * @param name
      * @param value
      */
-    public HttpHeaderResult addHeader(String name, String value) {
+    public void addHeader(String name, String value) {
     	headers.put(name, value);
-    	return this;
     }
 
     /**
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/PlainTextResult.java b/core/src/main/java/org/apache/struts2/dispatcher/PlainTextResult.java
index 671eeef..62490a4 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/PlainTextResult.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/PlainTextResult.java
@@ -101,9 +101,8 @@
      * 
      * @param charSet The character set
      */
-	public PlainTextResult setCharSet(String charSet) {
+	public void setCharSet(String charSet) {
 		this.charSet = charSet;
-		return this;
 	}
 	
 	/* (non-Javadoc)
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java b/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java
index 4d4a920..33222a8 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java
@@ -204,9 +204,8 @@
      *
      * @param actionName The name
      */
-    public ServletActionRedirectResult setActionName(String actionName) {
+    public void setActionName(String actionName) {
         this.actionName = actionName;
-        return this;
     }
 
     /**
@@ -214,9 +213,8 @@
      *
      * @param namespace The namespace
      */
-    public ServletActionRedirectResult setNamespace(String namespace) {
+    public void setNamespace(String namespace) {
         this.namespace = namespace;
-        return this;
     }
 
     /**
@@ -224,9 +222,8 @@
      *
      * @param method The method
      */
-    public ServletActionRedirectResult setMethod(String method) {
+    public void setMethod(String method) {
     	this.method = method;
-    	return this;
     }
     
     /**
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java b/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java
index 86ddba8..5eee5b9 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java
@@ -94,9 +94,8 @@
      * @param prependServletContext <tt>true</tt> to prepend the location with the servlet context path,
      *                              <tt>false</tt> otherwise.
      */
-    public ServletRedirectResult setPrependServletContext(boolean prependServletContext) {
+    public void setPrependServletContext(boolean prependServletContext) {
         this.prependServletContext = prependServletContext;
-        return this;
     }
 
     /**
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java b/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java
index a698164..6f4f0a0 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java
@@ -104,9 +104,8 @@
     /**
      * @param bufferSize The bufferSize to set.
      */
-    public StreamResult setBufferSize(int bufferSize) {
+    public void setBufferSize(int bufferSize) {
         this.bufferSize = bufferSize;
-        return this;
     }
 
     /**
@@ -119,9 +118,8 @@
     /**
      * @param contentType The contentType to set.
      */
-    public StreamResult setContentType(String contentType) {
+    public void setContentType(String contentType) {
         this.contentType = contentType;
-        return this;
     }
 
     /**
@@ -134,9 +132,8 @@
     /**
      * @param contentLength The contentLength to set.
      */
-    public StreamResult setContentLength(String contentLength) {
+    public void setContentLength(String contentLength) {
         this.contentLength = contentLength;
-        return this;
     }
 
     /**
@@ -149,9 +146,8 @@
     /**
      * @param contentDisposition the Content-disposition header value to use.
      */
-    public StreamResult setContentDisposition(String contentDisposition) {
+    public void setContentDisposition(String contentDisposition) {
         this.contentDisposition = contentDisposition;
-        return this;
     }
 
     /**
@@ -164,9 +160,8 @@
     /**
      * @param inputName The inputName to set.
      */
-    public StreamResult setInputName(String inputName) {
+    public void setInputName(String inputName) {
         this.inputName = inputName;
-        return this;
     }
 
     /**
diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
index 3260734..ac6105d 100644
--- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
+++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
@@ -113,9 +113,8 @@
     	super(location);
     }
 
-    public FreemarkerResult setContentType(String aContentType) {
+    public void setContentType(String aContentType) {
         pContentType = aContentType;
-        return this;
     }
 
     /**
diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java b/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java
index 49b6b54..b5d3c5a 100644
--- a/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java
+++ b/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java
@@ -73,9 +73,8 @@
     	super(location);
     }
     
-    public PortletFreemarkerResult setContentType(String aContentType) {
+    public void setContentType(String aContentType) {
         pContentType = aContentType;
-        return this;
     }
 
     /**
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java b/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
index 93f496b..b0ee149 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
+++ b/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
@@ -214,11 +214,10 @@
         setStylesheetLocation(location);
     }
 
-    public XSLTResult setStylesheetLocation(String location) {
+    public void setStylesheetLocation(String location) {
         if (location == null)
             throw new IllegalArgumentException("Null location");
         this.stylesheetLocation = location;
-        return this;
     }
 
     public String getStylesheetLocation() {
@@ -230,9 +229,8 @@
      *
      * @param parse
      */
-    public XSLTResult setParse(boolean parse) {
+    public void setParse(boolean parse) {
         this.parse = parse;
-        return this;
     }
 
     public void execute(ActionInvocation invocation) throws Exception {
diff --git a/trunk/all/pom.xml b/trunk/all/pom.xml
deleted file mode 100644
index 9ae365f..0000000
--- a/trunk/all/pom.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-parent</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-all</artifactId>
-    <packaging>jar</packaging>
-    <name>Combined Struts 2 Jar</name>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>dependency-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>unjar-deps</id>
-                        <phase>compile</phase>
-                        <goals>
-                            <goal>unpack</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>struts2-core</artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>struts2-api</artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-config-browser-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-jasperreports-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-jfreechart-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-jsf-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-pell-multipart-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-plexus-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-quickstart-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-sitegraph-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-sitemesh-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-struts1-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>
-                                        struts2-tiles-plugin
-                                    </artifactId>
-                                    <version>${version}</version>
-                                </artifactItem>
-                                
-                           </artifactItems>
-                            <outputDirectory>${project.build.directory}/classes</outputDirectory>
-                        </configuration>
-                   </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/trunk/api/pom.xml b/trunk/api/pom.xml
deleted file mode 100644
index 801b142..0000000
--- a/trunk/api/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-parent</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-api</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 API</name>
-   <dependencies>
-        <dependency>
-           <groupId>javax.servlet</groupId>
-           <artifactId>servlet-api</artifactId>
-           <version>2.4</version>
-           <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-            <scope>test</scope>
-            <!-- has to be compile for StrutsTestCase, which is part of the base package so others can write unit tests -->
-            <optional>true</optional>
-        </dependency>            
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>test</scope>
-            <version>2.0</version>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <configuration>
-                    <showPackage>false</showPackage>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/trunk/api/src/main/java/org/apache/struts2/Action.java b/trunk/api/src/main/java/org/apache/struts2/Action.java
deleted file mode 100644
index ded7942..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/Action.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.apache.struts2;
-
-/**
- * Default action interface. Provided purely for user convenience. Struts does not require actions to implement any
- * interfaces. Actions need only implement a public, no argument method which returns {@code String}. If a user does
- * not specify a method name, Struts defaults to {@code execute()}.
- *
- * <p>For example:
- *
- * <pre>
- *   static import ResultNames.*;
- *
- *   public class MyAction <b>implements Action</b> {
- *
- *     public String execute() {
- *       return SUCCESS;
- *     }
- *   }
- * </pre>
- *
- * <p>is equivalent to:
- *
- * <pre>
- *   static import ResultNames.*;
- *
- *   public class MyAction {
- *
- *     public String execute() {
- *       return SUCCESS;
- *     }
- *   }
- * </pre>
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface Action {
-
-    /**
-     * Executes this action.
-     *
-     * @return result name which matches a result name from the action mapping in the configuration file. See {@link
-     *  ResultNames} for common suggestions.
-     */
-    String execute();
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/MessageAware.java b/trunk/api/src/main/java/org/apache/struts2/MessageAware.java
deleted file mode 100644
index 70357b9..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/MessageAware.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.apache.struts2;
-
-/**
- * Implemented by actions which may need to record errors or messages.
- *
- * <pre>
- *   static import ResultNames.*;
- *
- *   public class SetName implements MessageAware {
- *
- *     Messages messages;
- *     String name;
- *
- *     public String execute() {
- *       return SUCCESS;
- *     }
- *
- *     public void setName(String name) {
- *       if ("".equals(name))
- *         messages.forField("name").addError("name.required");
- *
- *       this.name = name;
- *     }
- *
- *     public void setMessages(Messages messages) {
- *       this.messages = messages;
- *     }
- *   }
- * </pre>
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface MessageAware {
-
-    /**
-     * Sets messages.
-     *
-     * @param messages messages
-     */
-    void setMessages(Messages messages);
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/Messages.java b/trunk/api/src/main/java/org/apache/struts2/Messages.java
deleted file mode 100644
index d3a3d29..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/Messages.java
+++ /dev/null
@@ -1,196 +0,0 @@
-package org.apache.struts2;
-
-import java.util.List;
-import java.util.Set;
-import java.util.Map;
-
-/**
- * Collection of messages. Supports nesting messages by field name.
- *
- * <p>Uses keys when adding instead of actual messages to decouple code from messages.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface Messages {
-
-    // TODO: Use Object[] for args instead of String[].
-
-    /**
-     * Message severity.
-     */
-    public enum Severity {
-
-        /**
-         * Informational messages.
-         */
-        INFO,
-
-        /**
-         * Warning messages.
-         */
-        WARN,
-
-        /**
-         * Error messages.
-         */
-        ERROR,
-    }
-
-    /**
-     * Gets nested messages for the given field.
-     *
-     * <p>Supports dot notation to represent nesting. For example:
-     *
-     * <pre>
-     * messages.forField("foo").forField("bar") == messages.forField("foo.bar")
-     * </pre>
-     *
-     * @param fieldName name of the field
-     * @return nested {@code Messages} for given field name
-     */
-    Messages forField(String fieldName);
-
-    /**
-     * Gets map of field name to messages for that field.
-     *
-     * @return map of field name to {@code Messages}
-     */
-    Map<String, Messages> forFields();
-
-    /**
-     * Adds informational message.
-     *
-     * @param key message key
-     * @see Severity.INFO
-     */
-    void addInformation(String key);
-
-    /**
-     * Adds informational message.
-     *
-     * @param key message key
-     * @param arguments message arguments
-     * @see Severity.INFO
-     */
-    void addInformation(String key, String... arguments);
-
-    /**
-     * Adds warning message.
-     *
-     * @param key message key
-     * @see Severity.WARN
-     */
-    void addWarning(String key);
-
-    /**
-     * Adds warning message.
-     *
-     * @param key message key
-     * @param arguments message arguments
-     * @see Severity.WARN
-     */
-    void addWarning(String key, String... arguments);
-
-    /**
-     * Adds error message.
-     *
-     * @param key message key
-     * @see Severity.ERROR
-     */
-    void addError(String key);
-
-    /**
-     * Adds error message.
-     *
-     * @param key message key
-     * @param arguments message arguments
-     * @see Severity.ERROR
-     */
-    void addError(String key, String... arguments);
-
-    /**
-     * Adds message.
-     *
-     * @param severity message severity
-     * @param key message key
-     */
-    void add(Severity severity, String key);
-
-    /**
-     * Adds request-scoped message.
-     *
-     * @param severity message severity
-     * @param key message key
-     * @param arguments message arguments
-     */
-    void add(Severity severity, String key, String... arguments);
-
-    /**
-     * Gets set of severities for which this {@code Messages} instance has messages. Not recursive.
-     *
-     * @return unmodifiable set of {@link Severity} sorted from least to most severe
-     */
-    Set<Severity> getSeverities();
-
-    /**
-     * Gets message strings for the given severity. Not recursive.
-     *
-     * @param severity message severity
-     * @return unmodifiable list of messages
-     */
-    List<String> forSeverity(Severity severity);
-
-    /**
-     * Gets error message strings for this {@code Messages} instance. Not recursive.
-     *
-     * @return unmodifiable list of messages
-     */
-    List<String> getErrors();
-
-    /**
-     * Gets error message strings for this {@code Messages} instance. Not recursive.
-     *
-     * @return unmodifiable list of messages
-     */
-    List<String> getWarnings();
-
-    /**
-     * Gets informational message strings for this {@code Messages} instance. Not recursive.
-     *
-     * @return unmodifiable list of messages
-     */
-    List<String> getInformation();
-
-    /**
-     * Returns true if this or a nested {@code Messages} instance has error messages.
-     *
-     * @see Severity.ERROR
-     */
-    boolean hasErrors();
-
-    /**
-     * Returns true if this or a nested {@code Messages} instance has warning messages.
-     *
-     * @see Severity.WARN
-     */
-    boolean hasWarnings();
-
-    /**
-     * Returns true if this or a nested {@code Messages} instance has informational messages.
-     *
-     * @see Severity.INFO
-     */
-    boolean hasInformation();
-
-    /**
-     * Returns true if this and all nested {@code Messages} instances have no messages.
-     */
-    boolean isEmpty();
-
-    /**
-     * Returns true if this and all nested {@code Messages} instances have no messages for the given severity.
-     *
-     * @param severity message severity
-     */
-    boolean isEmpty(Severity severity);
-}
\ No newline at end of file
diff --git a/trunk/api/src/main/java/org/apache/struts2/ResultNames.java b/trunk/api/src/main/java/org/apache/struts2/ResultNames.java
deleted file mode 100644
index 1a93a7d..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/ResultNames.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.apache.struts2;
-
-/**
- * Commonly used result names returned by action methods.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public final class ResultNames {
-
-    private ResultNames() {}
-
-    /**
-     * The action executed successfully.
-     */
-    public static final String SUCCESS = "success";
-
-    /**
-     * The action requires more input, i.e.&nbsp;a validation error occurred.
-     */
-    public static final String INPUT = "input";
-
-    /**
-     * The action requires the user to log in before executing.
-     */
-    public static final String LOGIN = "login";
-
-    /**
-     * The action execution failed irrecoverably.
-     */
-    public static final String ERROR = "error";
-
-    /**
-     * The action executed successfully, but do not execute a result.
-     */
-    public static final String NONE = "none";
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/Validatable.java b/trunk/api/src/main/java/org/apache/struts2/Validatable.java
deleted file mode 100644
index b3eef9c..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/Validatable.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.apache.struts2;
-
-import org.apache.struts2.MessageAware;
-
-/**
- * Implemented by actions which wish to execute some validation logic before their action method. Useful for
- * cross-field validations.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface Validatable extends MessageAware {
-
-    /**
-     * Validates input. Executes before action method.
-     */
-    public void validate();
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/servlet/ParameterAware.java b/trunk/api/src/main/java/org/apache/struts2/servlet/ParameterAware.java
deleted file mode 100644
index 1dcfbe4..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/servlet/ParameterAware.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.apache.struts2.servlet;
-
-import java.util.Map;
-
-/**
- * Implemented by actions which need direct access to the request parameters.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface ParameterAware {
-
-    /**
-     * Sets parameters.
-     *
-     * @param parameters map of parameter name to parameter values
-     */
-    void setParameters(Map<String, String[]> parameters);
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/servlet/ServletRequestAware.java b/trunk/api/src/main/java/org/apache/struts2/servlet/ServletRequestAware.java
deleted file mode 100644
index 49e110b..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/servlet/ServletRequestAware.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.apache.struts2.servlet;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Implemented by actions which need direct access to the servlet request.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface ServletRequestAware {
-
-    /**
-     * Sets the servlet request.
-     *
-     * @param request servlet request.
-     */
-    void setServletRequest(HttpServletRequest request);
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/servlet/ServletResponseAware.java b/trunk/api/src/main/java/org/apache/struts2/servlet/ServletResponseAware.java
deleted file mode 100644
index 427e986..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/servlet/ServletResponseAware.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.apache.struts2.servlet;
-
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Implemented by actions which need direct access to the servlet response.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface ServletResponseAware {
-
-    /**
-     * Sets the servlet response.
-     *
-     * @param response servlet response
-     */
-    void setServletResponse(HttpServletResponse response);
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/spi/ActionContext.java b/trunk/api/src/main/java/org/apache/struts2/spi/ActionContext.java
deleted file mode 100644
index e45754a..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/spi/ActionContext.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.apache.struts2.spi;
-
-import java.lang.reflect.Method;
-
-/**
- * Context of an action execution.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface ActionContext {
-
-    /**
-     * Gets action instance.
-     */
-    Object getAction();
-
-    /**
-     * Gets action method.
-     */
-    Method getMethod();
-
-    /**
-     * Gets action name.
-     */
-    String getActionName();
-
-    /**
-     * Gets the path for the action's namespace.
-     */
-    String getNamespacePath();
-
-    /**
-     * Gets the {@link Result} instance for the action.
-     *
-     * @return {@link Result} instance or {@code null} if we don't have a result yet.
-     */
-    Result getResult();
-
-    /**
-     * Adds a result interceptor for the action. Enables executing code before and after a result, executing an
-     * alternate result, etc.
-     */
-    void addResultInterceptor(Result interceptor);
-
-    /**
-     * Gets context of action which chained to us.
-     *
-     * @return context of previous action or {@code null} if this is the first action in the chain
-     */
-    ActionContext getPrevious();
-
-    /**
-     * Gets context of action which this action chained to.
-     *
-     * @return context of next action or {@code null} if we haven't chained to another action yet or this is the last
-     *  action in the chain.
-     */
-    ActionContext getNext();
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/spi/Interceptor.java b/trunk/api/src/main/java/org/apache/struts2/spi/Interceptor.java
deleted file mode 100644
index 16b27bc..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/spi/Interceptor.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.apache.struts2.spi;
-
-/**
- * Intercepts an action request.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface Interceptor {
-
-    /**
-     * Intercepts an action request.
-     *
-     * @param requestContext current request context
-     */
-    String intercept(RequestContext requestContext) throws Exception;
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/spi/RequestContext.java b/trunk/api/src/main/java/org/apache/struts2/spi/RequestContext.java
deleted file mode 100644
index 559e8bd..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/spi/RequestContext.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.apache.struts2.spi;
-
-import org.apache.struts2.Messages;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * Request context. A single request may span multiple actions with action chaining.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface RequestContext {
-
-    /**
-     * Gets context of the currently executing action.
-     *
-     * @return current action context
-     */
-    ActionContext getActionContext();
-
-    /**
-     * Convenience method.&nbsp;Equivalent to {@code getActionContext().getAction()}.
-     *
-     * @return currently executing action
-     */
-    Object getAction();
-
-    /**
-     * Gets map of request parameters.
-     */
-    Map<String, String[]> getParameterMap();
-
-    /**
-     * Gets map of request attributes.
-     */
-    Map<String, Object> getAttributeMap();
-
-    /**
-     * Gets map of session attributes.
-     */
-    Map<String, Object> getSessionMap();
-
-    /**
-     * Gets map of application (servlet context) attributes.
-     */
-    Map<String, Object> getApplicationMap();
-
-    /**
-     * Finds cookies with the given name,
-     */
-    List<Cookie> findCookiesForName(String name);
-
-    /**
-     * Gets locale.
-     */
-    Locale getLocale();
-
-    /**
-     * Sets locale. Stores the locale in the session for future requests.
-     */
-    void setLocale(Locale locale);
-
-    /**
-     * Gets messages.
-     */
-    Messages getMessages();
-
-    /**
-     * Gets the servlet request.
-     */
-    HttpServletRequest getServletRequest();
-
-    /**
-     * Gets the servlet response.
-     */
-    HttpServletResponse getServletResponse();
-
-    /**
-     * Gets the servlet context.
-     */
-    ServletContext getServletContext();
-
-    /**
-     * Gets the value stack.
-     */
-    ValueStack getValueStack();
-
-    /**
-     * Invokes the next interceptor or the action method if no more interceptors remain.
-     *
-     * @return result name
-     * @throws IllegalStateException if already invoked or called from the action
-     */
-    String proceed() throws Exception;
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/spi/RequestContextAware.java b/trunk/api/src/main/java/org/apache/struts2/spi/RequestContextAware.java
deleted file mode 100644
index 2bd6797..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/spi/RequestContextAware.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.apache.struts2.spi;
-
-import org.apache.struts2.spi.RequestContext;
-
-/**
- * Implemented by actions that need access to the current {@link org.apache.struts2.spi.RequestContext}. Use
- * judiciously.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface RequestContextAware {
-
-    /**
-     * Sets {@link org.apache.struts2.spi.RequestContext}.
-     *
-     * @param requestContext
-     */
-    void setRequestContext(RequestContext requestContext);
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/spi/Result.java b/trunk/api/src/main/java/org/apache/struts2/spi/Result.java
deleted file mode 100644
index 6cb4ecd..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/spi/Result.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.apache.struts2.spi;
-
-import org.apache.struts2.spi.RequestContext;
-
-/**
- * The result of an action request. Struts creates a new {@code Result} instance for each request.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface Result {
-
-    /**
-     * Executes result.
-     *
-     * @param requestContext
-     */
-    void execute(RequestContext requestContext) throws Exception;
-}
diff --git a/trunk/api/src/main/java/org/apache/struts2/spi/ValueStack.java b/trunk/api/src/main/java/org/apache/struts2/spi/ValueStack.java
deleted file mode 100644
index b3cd87b..0000000
--- a/trunk/api/src/main/java/org/apache/struts2/spi/ValueStack.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.apache.struts2.spi;
-
-/**
- * A central fixture of the Struts framework, the {@code ValueStack} is a stack which contains the actions
- * which have executed in addition to other objects. Users can get and set values on the stack using expressions. The
- * {@code ValueStack} will search down the stack starting with the most recent objects until it finds an object to
- * which the expression can apply.
- *
- * @author crazybob@google.com (Bob Lee)
- */
-public interface ValueStack extends Iterable<Object> {
-
-    /**
-     * Gets the top, most recent object from the stack without changing the stack.
-     *
-     * @return the top object
-     */
-    Object peek();
-
-    /**
-     * Removes the top, most recent object from the stack.
-     *
-     * @return the top object
-     */
-    Object pop();
-
-    /**
-     * Pushes an object onto the stack.
-     *
-     * @param o
-     */
-    void push(Object o);
-
-    /**
-     * Creates a shallow copy of this stack.
-     *
-     * @return a new stack which contains the same objects as this one
-     */
-    ValueStack clone();
-
-    /**
-     * Queries the stack. Starts with the top, most recent object. If the expression can apply to the object, this
-     * method returns the result of evaluating the expression. If the expression does not apply, this method moves
-     * down the stack to the next object and repeats. Returns {@code null} if the expression doesn't apply to any
-     * objects.
-     *
-     * @param expression
-     * @return the evaluation of the expression against the first applicable object in the stack
-     */
-    Object get(String expression);
-
-    /**
-     * Queries the stack and converts the result to the specified type. Starts with the top, most recent object. If
-     * the expression can apply to the object, this method returns the result of evaluating the expression converted
-     * to the specified type. If the expression does not apply, this method moves down the stack to the next object
-     * and repeats. Returns {@code null} if the expression doesn't apply to any objects.
-     *
-     * @param expression
-     * @param asType the type to convert the result to
-     * @return the evaluation of the expression against the first applicable object in the stack converted to the
-     *  specified type
-     */
-    <T> T get(String expression, Class<T> asType);
-
-    /**
-     * Queries the stack and converts the result to a {@code String}. Starts with the top, most recent object. If the
-     * expression can apply to the object, this method returns the result of evaluating the expression converted to a
-     * {@code String}. If the expression does not apply, this method moves down the stack to the next object and
-     * repeats. Returns {@code null} if the expression doesn't apply to any objects.
-     *
-     * @param expression
-     * @return the evaluation of the expression against the first applicable object in the stack converted to a {@code
-     *  String}
-     */
-    String getString(String expression);
-
-    /**
-     * Sets a value on an object from the stack. This method starts at the top, most recent object. If the expression
-     * applies to that object, this methods sets the given value on that object using the expression and converting
-     * the type as necessary. If the expression does not apply, this method moves to the next object and repeats.
-     *
-     * @param expression
-     * @param value
-     */
-    void set(String expression, Object value);
-
-    /**
-     * Returns the number of object on the stack.
-     *
-     * @return size of stack
-     */
-    int size();
-}
diff --git a/trunk/apps/blank/README.txt b/trunk/apps/blank/README.txt
deleted file mode 100644
index db14cea..0000000
--- a/trunk/apps/blank/README.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-README.txt - blank

-

-This is an "empty" application that you can deploy as the basis of your own 

-application. 

-

-For more on getting started with Struts, see 

-

-* http://cwiki.apache.org/WW/home.html

-

-----------------------------------------------------------------------------
\ No newline at end of file
diff --git a/trunk/apps/blank/pom.xml b/trunk/apps/blank/pom.xml
deleted file mode 100644
index 96c0d2b..0000000
--- a/trunk/apps/blank/pom.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-apps</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-blank</artifactId>
-    <packaging>war</packaging>
-    <name>Blank Webapp</name>
-    <dependencies>
-
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>maven-jetty6-plugin</artifactId>
-                <configuration>
-                    <scanIntervalSeconds>10</scanIntervalSeconds>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.apache.geronimo.specs</groupId>
-                        <artifactId>geronimo-j2ee_1.4_spec</artifactId>
-                        <version>1.0</version>
-                        <scope>provided</scope>
-                    </dependency>
-                </dependencies>
-            </plugin>
-        </plugins>
-    </build>
-
-
-</project>
diff --git a/trunk/apps/blank/src/main/java/example/ExampleSupport.java b/trunk/apps/blank/src/main/java/example/ExampleSupport.java
deleted file mode 100644
index c86b1fc..0000000
--- a/trunk/apps/blank/src/main/java/example/ExampleSupport.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package example;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Base Action class for the Tutorial package.
- */
-public class ExampleSupport extends ActionSupport {
-}
diff --git a/trunk/apps/blank/src/main/java/example/HelloWorld.java b/trunk/apps/blank/src/main/java/example/HelloWorld.java
deleted file mode 100644
index 68f8e72..0000000
--- a/trunk/apps/blank/src/main/java/example/HelloWorld.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package example;
-
-/**
- * <code>Set welcome message.</code>
- */
-public class HelloWorld extends ExampleSupport {
-
-    public String execute() throws Exception {
-        setMessage(getText(MESSAGE));
-        return SUCCESS;
-    }
-
-    /**
-     * Provide default valuie for Message property.
-     */
-    public static final String MESSAGE = "HelloWorld.message";
-
-    /**
-     * Field for Message property.
-     */
-    private String message;
-
-    /**
-     * Return Message property.
-     *
-     * @return Message property
-     */
-    public String getMessage() {
-        return message;
-    }
-
-    /**
-     * Set Message property.
-     *
-     * @param message Text to display on HelloWorld page.
-     */
-    public void setMessage(String message) {
-        this.message = message;
-    }
-}
diff --git a/trunk/apps/blank/src/main/java/example/Login.java b/trunk/apps/blank/src/main/java/example/Login.java
deleted file mode 100644
index a4e6804..0000000
--- a/trunk/apps/blank/src/main/java/example/Login.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package example;
-
-public class Login extends ExampleSupport {
-
-    public String execute() throws Exception {
-
-        if (isInvalid(getUsername())) return INPUT;
-
-        if (isInvalid(getPassword())) return INPUT;
-
-        return SUCCESS;
-    }
-
-    private boolean isInvalid(String value) {
-        return (value == null || value.length() == 0);
-    }
-
-    private String username;
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    private String password;
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-}
\ No newline at end of file
diff --git a/trunk/apps/blank/src/main/java/example/build.bat b/trunk/apps/blank/src/main/java/example/build.bat
deleted file mode 100644
index a3f4edd..0000000
--- a/trunk/apps/blank/src/main/java/example/build.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-@echo off

-set CLASSPATH=..\..\..\lib\xwork-2.0-beta-1.jar

-javac *.java -d ..\..\..\classes

diff --git a/trunk/apps/blank/src/main/resources/example.xml b/trunk/apps/blank/src/main/resources/example.xml
deleted file mode 100644
index 5a18fe5..0000000
--- a/trunk/apps/blank/src/main/resources/example.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE struts PUBLIC

-        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

-        "http://struts.apache.org/dtds/struts-2.0.dtd">

-

-<struts>

-

-    <package name="example" namespace="/example" extends="struts-default">

-

-        <action name="HelloWorld" class="example.HelloWorld">

-            <result>/example/HelloWorld.jsp</result>

-        </action>

-

-        <action name="Login!*" method="{1}" class="example.Login">

-            <result name="input">/example/Login.jsp</result>

-            <result type="redirect-action">Menu</result>

-        </action>

-

-        <action name="*" class="example.ExampleSupport">

-            <result>/example/{1}.jsp</result>

-        </action>

-

-        <!-- Add actions here -->

-    </package>

-</struts>

diff --git a/trunk/apps/blank/src/main/resources/example/Login-validation.xml b/trunk/apps/blank/src/main/resources/example/Login-validation.xml
deleted file mode 100644
index d703ee7..0000000
--- a/trunk/apps/blank/src/main/resources/example/Login-validation.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE validators PUBLIC

-        "-//OpenSymphony Group//XWork Validator 1.0.2//EN"

-        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

-

-<validators>

-    <field name="username">

-        <field-validator type="requiredstring">

-            <message key="requiredstring"/>

-        </field-validator>

-    </field>

-    <field name="password">

-        <field-validator type="requiredstring">

-            <message key="requiredstring"/>

-        </field-validator>

-    </field>

-</validators>

diff --git a/trunk/apps/blank/src/main/resources/example/package.properties b/trunk/apps/blank/src/main/resources/example/package.properties
deleted file mode 100644
index 77d589d..0000000
--- a/trunk/apps/blank/src/main/resources/example/package.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-HelloWorld.message= Struts is up and running ...

-requiredstring = ${getText(fieldName)} is required.

-password = Password

-username = User Name

-Missing.message =  This feature is under construction. Please try again in the next interation.

diff --git a/trunk/apps/blank/src/main/resources/example/package_es.properties b/trunk/apps/blank/src/main/resources/example/package_es.properties
deleted file mode 100644
index e4740a4..0000000
--- a/trunk/apps/blank/src/main/resources/example/package_es.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-HelloWorld.message= ¡Struts está bien! ...

-requiredstring = ${getText(fieldName)} se requiere.

-password = Contraseña

-username = Nombre de Usuario

-Missing.message =   ¡en obras! ¡seguir intentando!

diff --git a/trunk/apps/blank/src/main/resources/struts.properties b/trunk/apps/blank/src/main/resources/struts.properties
deleted file mode 100644
index 8c29875..0000000
--- a/trunk/apps/blank/src/main/resources/struts.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-struts.devMode = true
-struts.enable.DynamicMethodInvocation = false
diff --git a/trunk/apps/blank/src/main/resources/struts.xml b/trunk/apps/blank/src/main/resources/struts.xml
deleted file mode 100644
index 67e1a93..0000000
--- a/trunk/apps/blank/src/main/resources/struts.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE struts PUBLIC
-        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-        "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-
-    <include file="example.xml"/>
-
-    <!-- Add packages here -->
-
-</struts>
diff --git a/trunk/apps/blank/src/main/webapp/WEB-INF/applicationContext.xml b/trunk/apps/blank/src/main/webapp/WEB-INF/applicationContext.xml
deleted file mode 100644
index afbdcb4..0000000
--- a/trunk/apps/blank/src/main/webapp/WEB-INF/applicationContext.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans default-autowire="autodetect">
-    <!-- add your spring beans here -->
-</beans>
diff --git a/trunk/apps/blank/src/main/webapp/WEB-INF/web.xml b/trunk/apps/blank/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index c5c245a..0000000
--- a/trunk/apps/blank/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
-    <display-name>Struts Blank</display-name>
-
-    <filter>
-        <filter-name>struts2</filter-name>
-        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>struts2</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-
-    <listener>
-        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-    </listener>
-
-    <welcome-file-list>
-        <welcome-file>index.html</welcome-file>
-    </welcome-file-list>
-
-    <!--
-        This typically isn't required, as the taglib is included in struts-core.jar.
-        If you really need a taglib configuration within web.xml,
-        copy struts2-core/core/src/main/resources/META-INF/struts-tags.tld
-        to the WEB-INF directory as struts-tags.tld.
-     -->
-    <!--taglib>
-        <taglib-uri>/s</taglib-uri>
-        <taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
-    </taglib-->
-</web-app>
diff --git a/trunk/apps/blank/src/main/webapp/example/HelloWorld.jsp b/trunk/apps/blank/src/main/webapp/example/HelloWorld.jsp
deleted file mode 100644
index 938c761..0000000
--- a/trunk/apps/blank/src/main/webapp/example/HelloWorld.jsp
+++ /dev/null
@@ -1,28 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title><s:text name="HelloWorld.message"/></title>
-</head>
-
-<body>
-<h2><s:property value="message"/></h2>
-
-<h3>Languages</h3>
-<ul>
-    <li>
-        <s:url id="url" action="HelloWorld">
-            <s:param name="request_locale">en</s:param>
-        </s:url>
-        <s:a href="%{url}">English</s:a>
-    </li>
-    <li>
-        <s:url id="url" action="HelloWorld">
-            <s:param name="request_locale">es</s:param>
-        </s:url>
-        <s:a href="%{url}">Espanol</s:a>
-    </li>
-</ul>
-
-</body>
-</html>
diff --git a/trunk/apps/blank/src/main/webapp/example/Login.jsp b/trunk/apps/blank/src/main/webapp/example/Login.jsp
deleted file mode 100644
index 13d2dc4..0000000
--- a/trunk/apps/blank/src/main/webapp/example/Login.jsp
+++ /dev/null
@@ -1,15 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Sign On</title>
-</head>
-
-<body>
-<s:form action="Login">
-    <s:textfield label="%{getText('username')}" name="username"/>
-    <s:password label="%{getText('password')}" name="password" />
-    <s:submit/>
-</s:form>
-</body>
-</html>
diff --git a/trunk/apps/blank/src/main/webapp/example/Menu.jsp b/trunk/apps/blank/src/main/webapp/example/Menu.jsp
deleted file mode 100644
index a74bd2c..0000000
--- a/trunk/apps/blank/src/main/webapp/example/Menu.jsp
+++ /dev/null
@@ -1,3 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<s:include value="Missing.jsp"/>
\ No newline at end of file
diff --git a/trunk/apps/blank/src/main/webapp/example/Missing.jsp b/trunk/apps/blank/src/main/webapp/example/Missing.jsp
deleted file mode 100644
index 7c01ac9..0000000
--- a/trunk/apps/blank/src/main/webapp/example/Missing.jsp
+++ /dev/null
@@ -1,11 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head><title>Missing Feature</title></head>
-
-<body>
-<p>
-    <s:text name="Missing.message"/>
-</p>
-</body>
-</html>
diff --git a/trunk/apps/blank/src/main/webapp/example/Register.jsp b/trunk/apps/blank/src/main/webapp/example/Register.jsp
deleted file mode 100644
index a74bd2c..0000000
--- a/trunk/apps/blank/src/main/webapp/example/Register.jsp
+++ /dev/null
@@ -1,3 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<s:include value="Missing.jsp"/>
\ No newline at end of file
diff --git a/trunk/apps/blank/src/main/webapp/example/Welcome.jsp b/trunk/apps/blank/src/main/webapp/example/Welcome.jsp
deleted file mode 100644
index dbd3a22..0000000
--- a/trunk/apps/blank/src/main/webapp/example/Welcome.jsp
+++ /dev/null
@@ -1,18 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Welcome</title>
-    <link href="<s:url value="/css/examplecss"/>" rel="stylesheet"
-          type="text/css"/>
-</head>
-
-<body>
-<h3>Commands</h3>
-<ul>
-    <li><a href="<s:url action="Login!input"/>">Sign On</a></li>
-    <li><a href="<s:url action="Register"/>">Register</a></li>
-</ul>
-
-</body>
-</html>
diff --git a/trunk/apps/blank/src/main/webapp/index.html b/trunk/apps/blank/src/main/webapp/index.html
deleted file mode 100644
index 8747c24..0000000
--- a/trunk/apps/blank/src/main/webapp/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

-<html>

-<head>

-    <META HTTP-EQUIV="Refresh" CONTENT="0;URL=example/HelloWorld.action">

-</head>

-

-<body>

-<p>Loading ...</p>

-</body>

-</html>

diff --git a/trunk/apps/blank/src/test/java/example/ConfigTest.java b/trunk/apps/blank/src/test/java/example/ConfigTest.java
deleted file mode 100644
index 9b23765..0000000
--- a/trunk/apps/blank/src/test/java/example/ConfigTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package example;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.config.RuntimeConfiguration;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
-
-import java.util.Map;
-import java.util.List;
-
-import org.apache.struts2.StrutsTestCase;
-
-public class ConfigTest extends StrutsTestCase {
-
-    protected void assertSuccess(String result) throws Exception {
-        assertTrue("Expected a success result!",
-                ActionSupport.SUCCESS.equals(result));
-    }
-
-    protected void assertInput(String result) throws Exception {
-        assertTrue("Expected an input result!",
-                ActionSupport.INPUT.equals(result));
-    }
-
-    protected Map assertFieldErrors(ActionSupport action) throws Exception {
-        assertTrue(action.hasFieldErrors());
-        return action.getFieldErrors();
-    }
-
-    protected void assertFieldError(Map field_errors, String field_name, String error_message) {
-
-        List errors = (List) field_errors.get(field_name);
-        assertNotNull("Expected errors for " + field_name, errors);
-        assertTrue("Expected errors for " + field_name, errors.size()>0);
-        // TODO: Should be a loop
-        assertEquals(error_message,errors.get(0));
-
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        XmlConfigurationProvider c = new XmlConfigurationProvider("struts.xml");
-        configurationManager.addConfigurationProvider(c);
-        configurationManager.reload();
-    }
-
-    protected ActionConfig assertClass(String namespace, String action_name, String class_name) {
-        RuntimeConfiguration configuration = configurationManager.getConfiguration().getRuntimeConfiguration();
-        ActionConfig config = configuration.getActionConfig(namespace, action_name);
-        assertNotNull("Mssing action", config);
-        assertTrue("Wrong class name: [" + config.getClassName() + "]",
-                class_name.equals(config.getClassName()));
-        return config;
-    }
-
-    protected ActionConfig assertClass(String action_name, String class_name) {
-        return assertClass("", action_name, class_name);
-    }
-
-    protected void assertResult(ActionConfig config, String result_name, String result_value) {
-        Map results = config.getResults();
-        ResultConfig result = (ResultConfig) results.get(result_name);
-        Map params = result.getParams();
-        String value = (String) params.get("actionName");
-        if (value == null)
-            value = (String) params.get("location");
-        assertTrue("Wrong result value: [" + value + "]",
-                result_value.equals(value));
-    }
-
-    public void testConfig() throws Exception {
-        assertNotNull(configurationManager);
-    }
-
-}
diff --git a/trunk/apps/blank/src/test/java/example/HelloWorldTest.java b/trunk/apps/blank/src/test/java/example/HelloWorldTest.java
deleted file mode 100644
index 6933c32..0000000
--- a/trunk/apps/blank/src/test/java/example/HelloWorldTest.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package example;
-
-import com.opensymphony.xwork2.ActionSupport;
-import junit.framework.TestCase;
-
-public class HelloWorldTest extends TestCase {
-
-    public void testHelloWorld() throws Exception {
-        HelloWorld hello_world = new HelloWorld();
-        String result = hello_world.execute();
-        assertTrue("Expected a success result!",
-                ActionSupport.SUCCESS.equals(result));
-        assertTrue("Expected the default message!",
-                hello_world.getText(HelloWorld.MESSAGE).equals(hello_world.getMessage()));
-    }
-}
diff --git a/trunk/apps/blank/src/test/java/example/LoginTest.java b/trunk/apps/blank/src/test/java/example/LoginTest.java
deleted file mode 100644
index 1d4669d..0000000
--- a/trunk/apps/blank/src/test/java/example/LoginTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package example;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-
-import java.util.Map;
-import java.util.Collection;
-import java.util.List;
-
-public class LoginTest extends ConfigTest {
-
-    public void FIXME_testLoginConfig() throws Exception {
-        ActionConfig config = assertClass("example", "Login!input", "example.Login");
-        assertResult(config, ActionSupport.SUCCESS, "Menu");
-        assertResult(config, ActionSupport.INPUT, "/example/Login.jsp");
-    }
-
-    public void testLoginSubmit() throws Exception {
-        Login login = new Login();
-        login.setUsername("username");
-        login.setPassword("password");
-        String result = login.execute();
-        assertSuccess(result);
-    }
-
-    // Needs access to an envinronment that includes validators
-    public void FIXME_testLoginSubmitInput() throws Exception {
-        Login login = new Login();
-        String result = login.execute();
-        assertInput(result);
-        Map errors = assertFieldErrors(login);
-        assertFieldError(errors,"username","Username is required.");
-        assertFieldError(errors,"password","Password is required.");
-    }
-
-}
diff --git a/trunk/apps/mailreader/README.txt b/trunk/apps/mailreader/README.txt
deleted file mode 100644
index 802aea4..0000000
--- a/trunk/apps/mailreader/README.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-README.txt - mailreader 

-

-The MailReader demonstrates a localized application with a master/child 

-CRUD workflow. 

-

-This rendition also demonstrates using wildcards to "normalize" an 

-application. 

-

-See the Sandbox for other MailReader examples using other architectures. 

-

-* http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2/apps/

-

-For more about the MailReader applicaton genneraly, visit Struts University.

-

-* http://www.StrutsUniversity.org/

-

-

-----------------------------------------------------------------------------
\ No newline at end of file
diff --git a/trunk/apps/mailreader/pom.xml b/trunk/apps/mailreader/pom.xml
deleted file mode 100644
index f4ca03c..0000000
--- a/trunk/apps/mailreader/pom.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-      <groupId>org.apache.struts</groupId>
-      <artifactId>struts2-apps</artifactId>
-      <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-mailreader</artifactId>
-    <packaging>war</packaging>
-    <name>Starter Webapp</name>
-    <dependencies>
-    
-        <dependency>
-           <groupId>javax.servlet</groupId>
-           <artifactId>servlet-api</artifactId>
-           <version>2.4</version>
-           <scope>provided</scope>
-        </dependency>
-        <dependency>
-           <groupId>${pom.groupId}</groupId>
-           <artifactId>struts-mailreader-dao</artifactId>
-           <version>1.3.5</version>
-        </dependency>
- 
-    </dependencies>
-    
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <includes>
-                    <include>**/*.xml</include>
-                    <include>**/*.properties</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>maven-jetty6-plugin</artifactId>
-                <configuration>
-                    <scanIntervalSeconds>10</scanIntervalSeconds>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.apache.geronimo.specs</groupId>
-                        <artifactId>geronimo-j2ee_1.4_spec</artifactId>
-                        <version>1.0</version>
-                        <scope>provided</scope>
-                    </dependency>
-                </dependencies>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/trunk/apps/mailreader/src/main/java/alternate.properties b/trunk/apps/mailreader/src/main/java/alternate.properties
deleted file mode 100644
index 03dbf27..0000000
--- a/trunk/apps/mailreader/src/main/java/alternate.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-password=Enter your Password here ==>
-struts.logo.path=struts-power.gif
-struts.logo.alt=Powered by Struts
diff --git a/trunk/apps/mailreader/src/main/java/alternate_ja.properties b/trunk/apps/mailreader/src/main/java/alternate_ja.properties
deleted file mode 100644
index 981adc8..0000000
--- a/trunk/apps/mailreader/src/main/java/alternate_ja.properties
+++ /dev/null
@@ -1 +0,0 @@
-.password=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b==>
diff --git a/trunk/apps/mailreader/src/main/java/applicationContext.xml b/trunk/apps/mailreader/src/main/java/applicationContext.xml
deleted file mode 100644
index b98e1d8..0000000
--- a/trunk/apps/mailreader/src/main/java/applicationContext.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans default-autowire="autodetect">
-    <!-- add your spring beans here -->
-</beans>
\ No newline at end of file
diff --git a/trunk/apps/mailreader/src/main/java/mailreader-default.xml b/trunk/apps/mailreader/src/main/java/mailreader-default.xml
deleted file mode 100644
index 973551b..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader-default.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>

-<!DOCTYPE struts PUBLIC

-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

-    "http://struts.apache.org/dtds/struts-2.0.dtd">

-

-<struts>

-

-    <package name="mailreader-default" namespace="/" extends="struts-default">

-

-        <interceptors>

-

-            <interceptor name="authentication"

-                         class="mailreader2.AuthenticationInterceptor"/>

-

-            <interceptor-stack name="user" >

-                <interceptor-ref name="authentication" />

-                <interceptor-ref name="defaultStack"/>

-            </interceptor-stack>

-

-            <interceptor-stack name="user-submit" >

-                <interceptor-ref name="token-session" />

-                <interceptor-ref name="user"/>

-            </interceptor-stack>

-

-            <interceptor-stack name="guest" >

-                <interceptor-ref name="defaultStack"/>

-            </interceptor-stack>

-

-        </interceptors>

-

-        <default-interceptor-ref name="user"/>

-

-        <global-results>

-            <result name="error">/pages/Error.jsp</result>

-            <result name="invalid.token">/pages/Error.jsp</result>

-            <result name="login" type="redirect-action">Login!input</result>

-        </global-results>

-

-        <global-exception-mappings>

-            <exception-mapping

-                    result="error"

-                    exception="java.lang.Throwable"/>

-        </global-exception-mappings>

-

-    </package>

-

-</struts>

diff --git a/trunk/apps/mailreader/src/main/java/mailreader-support.xml b/trunk/apps/mailreader/src/main/java/mailreader-support.xml
deleted file mode 100644
index 05091ba..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader-support.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>

-<!DOCTYPE struts PUBLIC

-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

-    "http://struts.apache.org/dtds/struts-2.0.dtd">

-

-<struts>

-    <package name="mailreader-support" namespace="/" extends="mailreader-default">

-

-        <action name="Tour">

-            <result>/tour.html</result>

-            <interceptor-ref name="guest"/>

-        </action>

-

-        <action name="Welcome" class="mailreader2.Welcome">

-            <result>/Welcome.jsp</result>

-            <interceptor-ref name="guest"/>

-        </action>

-

-        <action name="Logout" class="mailreader2.Logout">

-            <result type="redirect-action">Welcome</result>

-        </action>

-

-        <action name="Login!*"  method="{1}" class="mailreader2.Login">

-            <result name="input">/Login.jsp</result>

-            <result name="cancel" type="redirect-action">Welcome</result>

-            <result type="redirect-action">MainMenu</result>

-            <result name="expired" type="chain">ChangePassword</result>

-            <exception-mapping

-                    exception="org.apache.struts.apps.mailreader.dao.ExpiredPasswordException"

-                    result="expired"/>

-            <interceptor-ref name="guest"/>

-        </action>

-

-        <action name="Registration!*" method="{1}" class="mailreader2.Registration">

-            <result name="input">/Registration.jsp</result>

-            <result type="redirect-action">MainMenu</result>

-            <interceptor-ref name="guest"/>

-        </action>

-    </package>

-

-    <package name="subscription" namespace="/" extends="mailreader-support">

-

-        <global-results>

-            <result name="input">/Subscription.jsp</result>

-            <result type="redirect-action">Registration!input</result>

-        </global-results>

-

-        <action name="Subscription!save" method="save" class="mailreader2.Subscription">

-            <interceptor-ref name="user-submit" />

-        </action>

-

-        <action name="Subscription!*" method="{1}" class="mailreader2.Subscription" />

-

-    </package>

-

-    <package name="wildcard" namespace="/" extends="mailreader-support">

-

-        <action name="*" class="mailreader2.MailreaderSupport">

-            <result>/{1}.jsp</result>

-        </action>

-        

-    </package>

-</struts>

diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/ApplicationListener.java b/trunk/apps/mailreader/src/main/java/mailreader2/ApplicationListener.java
deleted file mode 100644
index 4570cc4..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/ApplicationListener.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright 1999-2002,2004 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.
- *
- * $Id$
- */
-
-package mailreader2;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts.apps.mailreader.dao.impl.memory.MemoryUserDatabase;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import java.io.*;
-
-/**
- * <p><code>ServletContextListener</code> that initializes and finalizes the
- * persistent storage of User and Subscription information for the Struts
- * Demonstration Application, using an in-memory database backed by an XML
- * file.</p>
- * <p/>
- * <p><strong>IMPLEMENTATION WARNING</strong> - If this web application is run
- * from a WAR file, or in another environment where reading and writing of the
- * web application resource is impossible, the initial contents will be copied
- * to a file in the web application temporary directory provided by the
- * container.  This is for demonstration purposes only - you should
- * <strong>NOT</strong> assume that files written here will survive a restart
- * of your servlet container.</p>
- * <p/>
- * <p>This class was borrowed from the Shale Mailreader. Changes were:</p>
- * <p/>
- * <ul>
- * <p/>
- * <li>Path to database.xml (under classes here). </li>
- * <p/>
- * <li>Class to store protocol list (an array here). </li>
- * <p/>
- * </ul>
- * <p>
- * DEVELOPMENT NOTE - Another approach would be to instantiate the database via Spring.
- * </p>
- */
-
-public final class ApplicationListener implements ServletContextListener {
-
-    // ------------------------------------------------------ Manifest Constants
-
-
-    /**
-     * <p>Appication scope attribute key under which the in-memory version of
-     * our database is stored.</p>
-     */
-    public static final String DATABASE_KEY = "database";
-
-
-    /**
-     * <p>Application scope attribute key under which the valid selection
-     * items for the protocol property is stored.</p>
-     */
-    public static final String PROTOCOLS_KEY = "protocols";
-
-    // ------------------------------------------------------ Instance Variables
-
-
-    /**
-     * <p>The <code>ServletContext</code> for this web application.</p>
-     */
-    private ServletContext context = null;
-
-
-    /**
-     * The {@link MemoryUserDatabase} object we construct and make available.
-     */
-    private MemoryUserDatabase database = null;
-
-
-    /**
-     * <p>Logging output for this plug in instance.</p>
-     */
-    private Log log = LogFactory.getLog(this.getClass());
-
-    // ------------------------------------------------------------- Properties
-
-
-    /**
-     * <p>The web application resource path of our persistent database storage
-     * file.</p>
-     */
-    private String pathname = "/WEB-INF/database.xml";
-
-    /**
-     * <p>Return the application resource path to the database.</p>
-     *
-     * @return application resource path path to the database
-     */
-    public String getPathname() {
-        return (this.pathname);
-    }
-
-    /**
-     * <p>Set the application resource path to the database.</p>
-     *
-     * @param pathname to the database
-     */
-    public void setPathname(String pathname) {
-        this.pathname = pathname;
-    }
-
-    // ------------------------------------------ ServletContextListener Methods
-
-
-    /**
-     * <p>Gracefully shut down this database, releasing any resources that
-     * were allocated at initialization.</p>
-     *
-     * @param event ServletContextEvent to process
-     */
-    public void contextDestroyed(ServletContextEvent event) {
-
-        log.info("Finalizing memory database plug in");
-
-        if (database != null) {
-            try {
-                database.close();
-            } catch (Exception e) {
-                log.error("Closing memory database", e);
-            }
-        }
-
-        context.removeAttribute(DATABASE_KEY);
-        context.removeAttribute(PROTOCOLS_KEY);
-        database = null;
-        context = null;
-
-    }
-
-
-    /**
-     * <p>Initialize and load our initial database from persistent
-     * storage.</p>
-     *
-     * @param event The context initialization event
-     */
-    public void contextInitialized(ServletContextEvent event) {
-
-        log.info("Initializing memory database plug in from '" +
-                pathname + "'");
-
-        // Remember our associated ServletContext
-        this.context = event.getServletContext();
-
-        // Construct a new database and make it available
-        database = new MemoryUserDatabase();
-        try {
-            String path = calculatePath();
-            if (log.isDebugEnabled()) {
-                log.debug(" Loading database from '" + path + "'");
-            }
-            database.setPathname(path);
-            database.open();
-        } catch (Exception e) {
-            log.error("Opening memory database", e);
-            throw new IllegalStateException("Cannot load database from '" +
-                    pathname + "': " + e);
-        }
-        context.setAttribute(DATABASE_KEY, database);
-
-    }
-
-    // -------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Calculate and return an absolute pathname to the XML file to contain
-     * our persistent storage information.</p>
-     *
-     * @throws Exception if an input/output error occurs
-     */
-    private String calculatePath() throws Exception {
-
-        // Can we access the database via file I/O?
-        String path = context.getRealPath(pathname);
-        if (path != null) {
-            return (path);
-        }
-
-        // Does a copy of this file already exist in our temporary directory
-        File dir = (File)
-                context.getAttribute("javax.servlet.context.tempdir");
-        File file = new File(dir, "struts-example-database.xml");
-        if (file.exists()) {
-            return (file.getAbsolutePath());
-        }
-
-        // Copy the static resource to a temporary file and return its path
-        InputStream is =
-                context.getResourceAsStream(pathname);
-        BufferedInputStream bis = new BufferedInputStream(is, 1024);
-        FileOutputStream os =
-                new FileOutputStream(file);
-        BufferedOutputStream bos = new BufferedOutputStream(os, 1024);
-        byte buffer[] = new byte[1024];
-        while (true) {
-            int n = bis.read(buffer);
-            if (n <= 0) {
-                break;
-            }
-            bos.write(buffer, 0, n);
-        }
-        bos.close();
-        bis.close();
-        return (file.getAbsolutePath());
-
-    }
-
-
-}
diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/AuthenticationInterceptor.java b/trunk/apps/mailreader/src/main/java/mailreader2/AuthenticationInterceptor.java
deleted file mode 100644
index 10cc368..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/AuthenticationInterceptor.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package mailreader2;
-
-import com.opensymphony.xwork2.interceptor.Interceptor;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Action;
-import java.util.Map;
-import org.apache.struts.apps.mailreader.dao.User;
-
-public class AuthenticationInterceptor implements Interceptor  {
-
-    public void destroy () {}
-
-    public void init() {}
-
-    public String intercept(ActionInvocation actionInvocation) throws Exception {
-
-        Map session = actionInvocation.getInvocationContext().getSession();
-
-        User user = (User) session.get(Constants.USER_KEY);
-
-        boolean isAuthenticated = (null!=user) && (null!=user.getDatabase());
-
-        if (!isAuthenticated) {
-            return Action.LOGIN;            
-        }
-        else {
-            return actionInvocation.invoke();
-        }
-
-    }
-}
diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/Constants.java b/trunk/apps/mailreader/src/main/java/mailreader2/Constants.java
deleted file mode 100644
index 81733bd..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/Constants.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 1999-2004 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 mailreader2;
-
-/**
- * <p> Manifest constants for the MailReader application. </p>
- */
-public final class Constants {
-
-    // --- Tokens ----
-
-    /**
-     * <p> The token representing a "cancel" request. </p>
-     */
-    public static final String CANCEL = "cancel";
-
-    /**
-     * <p> The token representing a "create" task. </p>
-     */
-    public static final String CREATE = "Create";
-
-    /**
-     * <p> The application scope attribute under which our user database is
-     * stored. </p>
-     */
-    public static final String DATABASE_KEY = "database";
-
-    /**
-     * <p> The token representing a "edit" task. </p>
-     */
-    public static final String DELETE = "Delete";
-
-    /**
-     * <p> The token representing a "edit" task. </p>
-     */
-    public static final String EDIT = "Edit";
-
-    /**
-     * <p> The package name for this application. </p>
-     */
-    public static final String PACKAGE = "org.apache.struts.apps.mailreader";
-
-    /**
-     * <p> The session scope attribute under which the Subscription object
-     * currently selected by our logged-in User is stored. </p>
-     */
-    public static final String SUBSCRIPTION_KEY = "subscription";
-
-    /**
-     * <p> The session scope attribute under which the User object for the
-     * currently logged in user is stored. </p>
-     */
-    public static final String USER_KEY = "user";
-
-    /**
-     * <p>The token representing the "Host" property.
-     */
-    public static final String HOST = "host";
-
-    
-    // ---- Error Messages ----
-
-    /**
-     * <p>
-     * A static message in case message resource is not loaded.
-     * </p>
-     */
-    public static final String ERROR_MESSAGES_NOT_LOADED =
-            "ERROR:  Message resources not loaded -- check servlet container logs for error messages.";
-
-    /**
-     * <p>
-     * A static message in case database resource is not loaded.
-     * <p>
-     */
-    public static final String ERROR_DATABASE_NOT_LOADED =
-            "ERROR:  User database not loaded -- check servlet container logs for error messages.";
-
-    /**
-     * <p>
-     * A standard key from the message resources file, to test if it is available.
-     * <p>
-     */
-    public static final String ERROR_DATABASE_MISSING = "error.database.missing";
-
-    /**
-     * <P>
-     * A "magic" username to trigger an ExpiredPasswordException for testing.
-     *</p>
-     */
-    public static final String EXPIRED_PASSWORD_EXCEPTION = "ExpiredPasswordException";
-
-    /**
-     * <p>
-     * Name of field to associate with authentification errors.
-     * <p>
-     */
-    public static final String PASSWORD_MISMATCH_FIELD = "password";
-
-    // ---- Log Messages ----
-
-    /**
-     * <p> Message to log if saving a user fails. </p>
-     */
-    public static final String LOG_DATABASE_SAVE_ERROR =
-            " Unexpected error when saving User: ";
-
-
-}
diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/Login.java b/trunk/apps/mailreader/src/main/java/mailreader2/Login.java
deleted file mode 100644
index 7de3557..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/Login.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2000-2004 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 mailreader2;
-
-import org.apache.struts.apps.mailreader.dao.User;
-import org.apache.struts.apps.mailreader.dao.ExpiredPasswordException;
-
-/**
- * <p> Validate a user login. </p>
- */
-public final class Login extends MailreaderSupport {
-
-    public String execute() throws ExpiredPasswordException  {
-
-        User user = findUser(getUsername(), getPassword());
-
-        if (user != null) {
-            setUser(user);
-        }
-
-        if (hasErrors()) {
-            return INPUT;
-        }
-
-       return SUCCESS;
-
-    }
-
-}
diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/Logon-validation.xml b/trunk/apps/mailreader/src/main/java/mailreader2/Logon-validation.xml
deleted file mode 100644
index 4a04c76..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/Logon-validation.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

-

-<validators>

-    <field name="username">

-        <field-validator type="requiredstring">

-            <message key="error.username.required"/>

-        </field-validator>

-    </field>

-    <field name="password">

-        <field-validator type="requiredstring">

-            <message key="error.password.required"/>

-        </field-validator>

-    </field>

-</validators>

diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/Logout.java b/trunk/apps/mailreader/src/main/java/mailreader2/Logout.java
deleted file mode 100644
index 1d079ae..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/Logout.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2000-2004 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 mailreader2;
-
-/**
- * <p> Log user out of the current session. </p>
- */
-public class Logout extends MailreaderSupport {
-
-    public String execute() {
-
-        setUser(null);
-
-        return SUCCESS;
-    }
-}
diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport.java b/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport.java
deleted file mode 100644
index f93aeeb..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport.java
+++ /dev/null
@@ -1,559 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 1999-2004 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 mailreader2;
-
-import org.apache.struts2.interceptor.ApplicationAware;
-import org.apache.struts2.interceptor.SessionAware;
-import com.opensymphony.xwork2.ActionSupport;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts.apps.mailreader.dao.ExpiredPasswordException;
-import org.apache.struts.apps.mailreader.dao.Subscription;
-import org.apache.struts.apps.mailreader.dao.User;
-import org.apache.struts.apps.mailreader.dao.UserDatabase;
-import org.apache.struts.apps.mailreader.dao.impl.memory.MemorySubscription;
-import org.apache.struts.apps.mailreader.dao.impl.memory.MemoryUser;
-import org.springframework.beans.BeanUtils;
-
-import java.util.Map;
-
-/**
- * <p> Base Action for MailreaderSupport application. </p>
- * <p/>
- * <p> Note that this class does NOT implement model driven because of the way
- * the pre-existing model is designed. The MailReader DAO includes immutable
- * fields that can only be set on construction, and some objects do not have a
- * default construction. One approach would be to mirror all the DAO
- * properties on the Actions. As an alternative, this implementations uses the
- * DAO properties where possible, and uses local Action properties only as
- * needed. To create new objects, a blank temporary object is constructed, and
- * the page uses a mix of local Action properties and DAO properties. When the
- * new object is to be saved, the local Action properties are used to create
- * the object using the DAO factory methods, the input values are copied from
- * the temporary object, and the new object is saved. It's kludge, but it
- * avoids creating unnecessary local properties. Pick your poison.</p>
- */
-public class MailreaderSupport extends ActionSupport
-        implements SessionAware, ApplicationAware {
-
-    /**
-     * Return CANCEL so apropriate result can be selected.
-     * @return "cancel" so apropriate result can be selected.
-     */
-    public String cancel() {
-        return Constants.CANCEL;
-    }
-
-
-    // ---- ApplicationAware ----
-
-    /**
-     * <p>Field to store application context or its proxy.</p>
-     * <p/>
-     * <p>The application context lasts for the life of the application. A
-     * reference to the database is stored in the application context at
-     * startup.</p>
-     */
-    private Map application;
-
-    /**
-     * <p>Store a new application context.</p>
-     *
-     * @param value A Map representing application state
-     */
-    public void setApplication(Map value) {
-        application = value;
-    }
-
-    /**
-     * <p>Provide application context.</p>
-     */
-    public Map getApplication() {
-        return application;
-    }
-
-    // ---- SessionAware ----
-
-    /**
-     * <p>Field to store session context, or its proxy.</p>
-     */
-    private Map session;
-
-    /**
-     * <p>Store a new session context.</p>
-     *
-     * @param value A Map representing session state
-     */
-    public void setSession(Map value) {
-        session = value;
-    }
-
-    /**
-     * <p>Provide session context.</p>
-     *
-     * @return session context
-     */
-    public Map getSession() {
-        return session;
-    }
-
-    // ---- Task property (utilized by UI) ----
-
-    /**
-     * <p>Field to store workflow task.</p>
-     * <p/>
-     * <p>The Task is used to track the state of the CRUD workflows. It can be
-     * set to Constant.CREATE, Constant.EDIT, or Constant.DELETE as
-     * needed.</p>
-     */
-    private String task = null;
-
-
-    /**
-     * <p>Provide worklow task.</p>
-     *
-     * @return Returns the task.
-     */
-    public String getTask() {
-        return task;
-    }
-
-    /**
-     * <p>Store new workflow task.</p>
-     *
-     * @param value The task to set.
-     */
-    public void setTask(String value) {
-        task =  value;
-    }
-
-    // ---- Token property (utilized by UI) ----
-
-    /**
-     * <p>Field to store double-submit guard.</p>
-     */
-    private String token = null;
-
-
-    /**
-     * <p>Provide Token.</p>
-     *
-     * @return Returns the token.
-     */
-    public String getToken() {
-        return token;
-    }
-
-    /**
-     * <p>Store new Token.</p>
-     *
-     * @param value The token to set.
-     */
-    public void setToken(String value) {
-        token =  value;
-    }
-
-
-    // ---- Host property ----
-
-    /**
-     * <p>Field to store Subscription host.</p>
-     * <p/>
-     * <p> The host is an immutable property of the Subscrtion DAP object, so
-     * we need to store it locally until we are ready to create the
-     * Subscription. </p>
-     */
-    private String host;
-
-    /**
-     * <p>Provide tSubscription host.</p>
-     *
-     * @return host property
-     */
-    public String getHost() {
-        return host;
-    }
-
-    /**
-     * <p>Store new Subscription host.</p>
-     *
-     * @param value
-     */
-    public void setHost(String value) {
-        host = value;
-    }
-
-    // ---- Password property ----
-
-    /**
-     * <p>Field to store User password property.</p>
-     * <p/>
-     * <p>The User DAO object password proerty is immutable, so we store it
-     * locally until we are ready to create the object.</p>
-     */
-    private String password = null;
-
-
-    /**
-     * <p>Provide User password</p>
-     *
-     * @return Returns the password.
-     */
-    public String getPassword() {
-        return password;
-    }
-
-    /**
-     * <p>Store new User Password</p>
-     *
-     * @param value The password to set.
-     */
-    public void setPassword(String value) {
-        password = value;
-    }
-
-    // ---- Password2 property (confirmation) ----
-
-    /**
-     * <p>Field to store the User password confirmation.</p>
-     * <p/>
-     * <p>When a User object is created, we ask the client to enter the
-     * password twice, to help ensure the password is being typed
-     * correctly.</p>
-     */
-    private String password2 = null;
-
-
-    /**
-     * <p>Provide the User password confirmation.</p>
-     *
-     * @return Returns the confirmationpassword.
-     */
-    public String getPassword2() {
-        return password2;
-    }
-
-    /**
-     * <p>Store a new User password confirmation.</p>
-     *
-     * @param value The confirmation password to set.
-     */
-    public void setPassword2(String value) {
-        password2 = value;
-    }
-
-    // ---- Username property ----
-
-    /**
-     * <p>Field to store User username.</p>
-     * <p/>
-     * <p>The User DAO object password proerty is immutable, so we store it
-     * locally until we are ready to create the object.</p>
-     */
-    private String username = null;
-
-
-    /**
-     * <p>Provide User username.</p>
-     *
-     * @return Returns the User username.
-     */
-    public String getUsername() {
-        return username;
-    }
-
-    /**
-     * <p>Store new User username</p>
-     *
-     * @param value The username to set.
-     */
-    public void setUsername(String value) {
-        username = value;
-    }
-
-    // ---- Database property ----
-
-    /**
-     * <p>Provide reference to UserDatabase, or null if the database is not
-     * available. </p>
-     *
-     * @return a reference to the UserDatabase or null if the database is not
-     *         available
-     */
-    public UserDatabase getDatabase() {
-        Object db = getApplication().get(Constants.DATABASE_KEY);
-        if (db == null) {
-            this.addActionError(getText("error.database.missing"));
-        }
-        return (UserDatabase) db;
-    }
-
-    /**
-     * <p>Store a new reference to UserDatabase</p>
-     *
-     * @param database
-     */
-    public void setDatabase(UserDatabase database) {
-        getApplication().put(Constants.DATABASE_KEY, database);
-    }
-
-    // ---- User property ----
-
-    /**
-     * <p>Provide reference to User object for authenticated user.</p>
-     *
-     * @return User object for authenticated user.
-     */
-    public User getUser() {
-        return (User) getSession().get(Constants.USER_KEY);
-    }
-
-    /**
-     * <p>Store new reference to User Object.</p>
-     *
-     * @param user User object for authenticated user
-     */
-    public void setUser(User user) {
-        getSession().put(Constants.USER_KEY, user);
-    }
-
-    /**
-     * <p>Obtain User object from database, or return null if the credentials
-     * are not found or invalid.</p>
-     *
-     * @param username User username
-     * @param password User password
-     * @return User object or null if not found
-     * @throws ExpiredPasswordException
-     */
-    public User findUser(String username, String password)
-            throws ExpiredPasswordException {
-        // FIXME: Stupid testing hack to compensate for inadequate DAO layer
-        if (Constants.EXPIRED_PASSWORD_EXCEPTION.equals(username)) {
-            throw new ExpiredPasswordException(Constants.EXPIRED_PASSWORD_EXCEPTION);
-        }
-
-        User user = getDatabase().findUser(username);
-        if ((user != null) && !user.getPassword().equals(password)) {
-            user = null;
-        }
-        if (user == null) {
-            this.addFieldError(Constants.PASSWORD_MISMATCH_FIELD,
-                    getText("error.password.mismatch"));
-        }
-        return user;
-    }
-
-    /**
-     * <p><code>Log</code> instance for this application. </p>
-     */
-    protected Log log = LogFactory.getLog(Constants.PACKAGE);
-
-    /**
-     * <p> Persist the User object, including subscriptions, to the database.
-     * </p>
-     *
-     * @throws java.lang.Exception on database error
-     */
-    public void saveUser() throws Exception {
-        try {
-            getDatabase().save();
-        } catch (Exception e) {
-            String message = Constants.LOG_DATABASE_SAVE_ERROR + getUser()
-                    .getUsername();
-            log.error(message, e);
-            throw new Exception(message, e);
-        }
-    }
-
-    public void createInputUser() {
-        User user = new MemoryUser(null, null);
-        setUser(user);
-    }
-
-    /**
-     * <p> Verify input for creating a new user, create the user, and process
-     * the login. </p>
-     *
-     * @return A new User and empty Errors if create succeeds, or null and
-     *         Errors if create fails
-     */
-    public User createUser(String username, String password) {
-
-        UserDatabase database = getDatabase();
-        User user;
-
-        try {
-            user = database.findUser(username);
-         }
-
-        catch (ExpiredPasswordException e) {
-            user = getUser(); // Just so that it is not null
-        }
-
-        if (user != null) {
-            this.addFieldError("username", "error.username.unique");
-            return null;
-        }
-
-        return database.createUser(username);
-    }
-
-    // Since user.username is immutable, we have to use some local properties
-
-    /**
-     * <p>Use the current User object to create a new User object, and make
-     * the new User object the authenticated user.</p>
-     * <p/>
-     * <p>The "current" User object is usually a temporary object being used
-     * to capture input.</p>
-     *
-     * @param _username User username
-     * @param _password User password
-     */
-    public void copyUser(String _username, String _password) {
-        User input = getUser();
-        input.setPassword(_password);
-        User user = createUser(_username, _password);
-        if (null != user) {
-            BeanUtils.copyProperties(input,user);
-            setUser(user);
-        }
-    }
-
-    // ---- Subscription property ----
-
-    /**
-     * <p>Obtain the cached Subscription object, if any. </p>
-     *
-     * @return Cached Subscription object or null
-     */
-    public Subscription getSubscription() {
-        return (Subscription) getSession().get(Constants.SUBSCRIPTION_KEY);
-    }
-
-    /**
-     * <p>Store new User Subscription.</p>
-     *
-     * @param subscription
-     */
-    public void setSubscription(Subscription subscription) {
-        getSession().put(Constants.SUBSCRIPTION_KEY, subscription);
-    }
-
-    /**
-     * <p> Obtain User Subscription object for the given host, or return null
-     * if not found. </p>
-     *
-     * <p>It would be possible for this code to throw a NullPointerException,
-     * but the ExceptionHandler in the xwork.xml will catch that for us.</p>
-     *
-     * @return The matching Subscription or null
-     */
-    public Subscription findSubscription(String host) {
-        Subscription subscription;
-        subscription = getUser().findSubscription(host);
-        return subscription;
-    }
-
-    /**
-     * <p>Obtain uSER Subscription for the local Host property.</p>
-     * <p/>
-     * <p>Usually, the host property will be set from the client request,
-     * because it was embedded in a link to the Subcription action.
-     *
-     * @return Subscription or null if not found
-     */
-    public Subscription findSubscription() {
-        return findSubscription(getHost());
-    }
-
-    /**
-     * <p>Provide a "temporary" User Subscription object that can be used to
-     * capture input values.</p>
-     */
-    public void createInputSubscription() {
-        Subscription sub = new MemorySubscription(getUser(), null);
-        setSubscription(sub);
-        setHost(sub.getHost());
-    }
-
-    /**
-     * <p>Provide new User Subscription object for the given host, or null if
-     * the host is not unique.</p>
-     *
-     * @param host
-     * @return New User Subscription object or null
-     */
-    public Subscription createSubscription(String host) {
-
-        Subscription sub;
-
-        sub = findSubscription(host);
-
-        if (null != sub) {
-            // FIXME - localization - "error.host.unique")
-            addFieldError(Constants.HOST,"That hostname is already defined");
-            return null;
-        }
-
-        return getUser().createSubscription(host);
-    }
-
-    /**
-     * <p>Create a new Subscription from the current Subscription object,
-     * making the new Subscription the current Subscription. </p>
-     * <p/>
-     * <p>Usually, the "current" Subscription is a temporary object being used
-     * to capture input values.</p>
-     *
-     * @param host
-     */
-    public void copySubscription(String host) {
-        Subscription input = getSubscription();
-        Subscription sub = createSubscription(host);
-        if (null != sub) {
-            BeanUtils.copyProperties(input, sub);
-            setSubscription(sub);
-            setHost(sub.getHost());
-        }
-    }
-
-    /**
-     * <p>Delete the current Subscription object from the database.</p>
-     */
-    public void removeSubscription()  {
-        getUser().removeSubscription(getSubscription());
-        getSession().remove(Constants.SUBSCRIPTION_KEY);
-    }
-
-    /**
-     * <p>Provide MailServer Host for current User Subscription.</p>
-     *
-     * @return MailServer Host for current User Subscription
-     */
-    public String getSubscriptionHost() {
-        Subscription sub = getSubscription();
-        if (null == sub) {
-            return null;
-        }
-        return sub.getHost();
-    }
-
-}
diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport.properties b/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport.properties
deleted file mode 100644
index 6fd171b..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport.properties
+++ /dev/null
@@ -1,93 +0,0 @@
-button.cancel=Cancel

-button.confirm=Confirm

-button.doSubmit=DO_SUBMIT

-button.doReset=DO_RESULT

-button.doCancel=org.apache.struts.taglib.html.CANCEL

-button.reset=Reset

-button.save=Save

-change.message=Your password has expired.  Please ask the system administrator to change it.

-change.try=Try Again

-change.title=Password Has Expired

-database.load=Cannot load database from {0}

-error.database.missing=User database is missing, cannot validate login credentials

-error.fromAddress.format=Invalid format for From Address

-error.fromAddress.required=From Address is required

-error.fullName.required=Full Name is required

-error.host.required=Mail Server is required

-error.noSubscription=No Subscription bean in user session

-error.password.expired=Your password has expired for username {0}

-error.password.required=Password is required

-error.password2.required=Confirmation password is required

-error.password.match=Password and confirmation password must match

-error.password.mismatch=Invalid username and/or password, please try again

-error.replyToAddress.format=Invalid format for Reply To Address

-struts.messages.invalid.token=Cannot submit this form out of order

-error.type.invalid=Server Type must be 'imap' or 'pop3'

-error.type.required=Server Type is required

-error.username.required=Username is required

-error.username.unique=That username is already in use - please select another

-errors.footer=</ul><hr>

-errors.header=<h3><font color="red">Validation Error</font></h3><p>You must correct the following error(s) before proceeding:</p><ul>

-errors.prefix=<li>

-errors.suffix=</li>

-errors.ioException=I/O exception rendering error messages: {0}

-expired.password=User Password has expired for {0}

-heading.autoConnect=Auto

-heading.subscriptions=Current Subscriptions

-heading.host=Host Name

-heading.user=User Name

-heading.type=Server Type

-heading.action=Action

-index.heading=MailReader Demonstration Application Options

-index.login=Log on to the MailReader Demonstration Application

-index.registration=Register with the MailReader Demonstration Application

-index.title=MailReader Demonstration Application

-index.tour=A Walking Tour of the MailReader Demonstration Application

-linkSubscription.io=I/O Error: {0}

-linkSubscription.noSubscription=No subscription under attribute {0}

-linkUser.io=I/O Error: {0}

-linkUser.noUser=No user under attribute {0}

-login.title=MailReader Demonstration Application - Login

-mainMenu.heading=Main Menu Options for 

-mainMenu.logout=Log off MailReader Demonstration Application

-mainMenu.registration=Edit your user registration profile

-mainMenu.title=MailReader Demonstration Application - Main Menu

-option.imap=IMAP Protocol

-option.pop3=POP3 Protocol

-# prompt.

-autoConnect=Auto Connect

-fromAddress=From Address

-fullName=Full Name

-mailHostname=Mail Server

-mailPassword=Mail Password

-mailServerType=Server Type

-mailUsername=Mail Username

-password=Password

-password2=(Repeat) Password

-replyToAddress=Reply To Address

-username=Username

-registration.addSubscription=Add

-registration.deleteSubscription=Delete

-registration.editSubscription=Edit

-registration.title.create=Register for the MailReader Demonstration Application

-registration.title.edit=Edit Registration for the MailReader Demonstration Application

-subscription.title.create=Create New Mail Subscription

-subscription.title.delete=Delete Existing Mail Subscription

-subscription.title.edit=Edit Existing Mail Subscription

-

-# Standard error messages for validator framework checks

-errors.required=${getText(fieldName)} is required.

-errors.minlength=${getText(fieldName)} cannot be less than {1} characters.

-errors.maxlength=${getText(fieldName)} cannot be greater than {1} characters.

-errors.invalid=${getText(fieldName)} is invalid.

-errors.byte=${getText(fieldName)} must be an byte.

-errors.short=${getText(fieldName)} must be an short.

-errors.integer=${getText(fieldName)} must be an integer.

-errors.long=${getText(fieldName)} must be an long.

-errors.float=${getText(fieldName)} must be an float.

-errors.double=${getText(fieldName)} must be an double.

-errors.date=${getText(fieldName)} is not a date.

-errors.range=${getText(fieldName)} is not in the range ${minLength} through ${maxLength}.

-errors.creditcard=${getText(fieldName)} is not a valid credit card number.

-errors.email=${getText(fieldName)} is an invalid e-mail address.

-errors.literal=${getText(fieldName)}

diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport_ja.properties b/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport_ja.properties
deleted file mode 100644
index 6bb198a..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport_ja.properties
+++ /dev/null
@@ -1,89 +0,0 @@
-button.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb

-button.confirm=\u78ba\u8a8d

-button.reset=\u30ea\u30bb\u30c3\u30c8

-button.save=\u4fdd\u5b58

-change.message=\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u6709\u52B9\u671F\u9650\u304C\u904E\u304E\u307E\u3057\u305F\u3002\u30B7\u30B9\u30C6\u30E0\u7BA1\u7406\u8005\u306B\u304A\u554F\u3044\u5408\u308F\u305B\u4E0B\u3055\u3044

-change.try=\u518D\u8A66\u884C

-change.title=\u30d1\u30b9\u30ef\u30fc\u30c9\u671f\u9650\u5207\u308c

-database.load= {0} \u304B\u3089\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093

-error.database.missing=\u30E6\u30FC\u30B6\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u30ED\u30B0\u30AA\u30F3\u306E\u8A8D\u8A3C\u304C\u51FA\u6765\u307E\u305B\u3093

-error.fromAddress.format=From\u30A2\u30C9\u30EC\u30B9\u306E\u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093

-error.fromAddress.required=From\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044

-error.fullName.required=\u30D5\u30EB\u30CD\u30FC\u30E0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044

-error.host.required=\u30E1\u30FC\u30EB\u30B5\u30FC\u30D0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044

-error.noSubscription=Subscription bean \u304c\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u4e2d\u306b\u3042\u308a\u307e\u305b\u3093

-error.password.expired=\u30E6\u30FC\u30B6 {0} \u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u6709\u52B9\u671F\u9650\u304C\u904E\u304E\u307E\u3057\u305F

-error.password.required=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u5FC5\u8981\u3067\u3059

-error.password2.required=\u30D1\u30B9\u30EF\u30FC\u30C9(\u78BA\u8A8D\u7528)\u304C\u5FC5\u8981\u3067\u3059

-error.password.match=\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u78BA\u8A8D\u7528\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E00\u81F4\u3057\u3066\u3044\u307E\u305B\u3093

-error.password.mismatch=\u30E6\u30FC\u30B6\u540D\u307E\u305F\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E0D\u6B63\u3067\u3059\u3002\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044

-error.replyToAddress.format=\u8FD4\u4FE1\u30A2\u30C9\u30EC\u30B9\u306E\u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093

-struts.messages.invalid.token=\u3053\u306E\u30D5\u30A9\u30FC\u30E0\u306E\u5185\u5BB9\u304C\u6B63\u3057\u304F\u306A\u3044\u305F\u3081\u9001\u4FE1\u3059\u308B\u3053\u3068\u304C\u51FA\u6765\u307E\u305B\u3093

-error.type.invalid=\u30B5\u30FC\u30D0\u30BF\u30A4\u30D7\u306F 'imap' \u304B 'pop3'\u306E\u3069\u3061\u3089\u304B\u3067\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093

-error.type.required=\u30B5\u30FC\u30D0\u30BF\u30A4\u30D7\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044

-error.username.required=\u30E6\u30FC\u30B6\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044

-error.username.unique=\u305D\u306E\u30E6\u30FC\u30B6\u540D\u306F\u65E2\u306B\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059\u3002 \u5225\u306E\u30E6\u30FC\u30B6\u540D\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044

-errors.footer=</ul><hr>

-errors.header=<h3><font color="red">\u5165\u529b\u30c1\u30a7\u30c3\u30af\u30a8\u30e9\u30fc</font></h3><p>\u4ee5\u4e0b\u306e\u30a8\u30e9\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044:</p><ul>

-errors.prefix=<li>

-errors.suffix=</li>

-errors.ioException=I/O\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}

-expired.password=\u30E6\u30FC\u30B6 {0} \u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u6709\u52B9\u671F\u9650\u304C\u904E\u304E\u307E\u3057\u305F

-heading.autoConnect=\u81ea\u52d5\u63a5\u7d9a

-heading.subscriptions=\u73fe\u5728\u306e\u8cfc\u8aad\u60c5\u5831

-heading.host=\u30db\u30b9\u30c8\u540d

-heading.user=\u30e6\u30fc\u30b6\u540d

-heading.type=\u30b5\u30fc\u30d0\u30bf\u30a4\u30d7

-heading.action=\u64cd\u4f5c

-index.heading=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 \u30aa\u30d7\u30b7\u30e7\u30f3

-index.login=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30ed\u30b0\u30aa\u30f3

-index.registration=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30e6\u30fc\u30b6\u767b\u9332

-index.title=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3(Struts 1.1-dev)

-index.tour=\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6563\u7b56\u3059\u308b

-linkSubscription.io=I/O\u30a8\u30e9\u30fc: {0}

-linkSubscription.noSubscription=\u5c5e\u6027 {0} \u306b\u8cfc\u8aad\u60c5\u5831\u304c\u5b58\u5728\u3057\u307e\u305b\u3093  

-linkUser.io=I/O\u30a8\u30e9\u30fc: {0}

-linkUser.noUser=\u5c5e\u6027 {0} \u306b\u30e6\u30fc\u30b6\u60c5\u5831\u304c\u5b58\u5728\u3057\u307e\u305b\u3093

-login.title=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30ed\u30b0\u30aa\u30f3

-mainMenu.heading=\u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc

-mainMenu.logout=MailReader \u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30ed\u30b0\u30aa\u30d5

-mainMenu.registration=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u7de8\u96c6

-mainMenu.title=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc

-option.imap=IMAP \u30d7\u30ed\u30c8\u30b3\u30eb

-option.pop3=POP3 \u30d7\u30ed\u30c8\u30b3\u30eb

-# prompt.

-autoConnect=\u81ea\u52d5\u63a5\u7d9a

-fromAddress=From\u30a2\u30c9\u30ec\u30b9

-fullName=\u30d5\u30eb\u30cd\u30fc\u30e0

-mailHostname=\u30e1\u30fc\u30eb\u30b5\u30fc\u30d0

-mailPassword=\u30e1\u30fc\u30eb\u30d1\u30b9\u30ef\u30fc\u30c9

-mailServerType=\u30b5\u30fc\u30d0\u30bf\u30a4\u30d7

-mailUsername=\u30e1\u30fc\u30eb\u30e6\u30fc\u30b6\u540d

-.password=\u30d1\u30b9\u30ef\u30fc\u30c9

-password2=\u30d1\u30b9\u30ef\u30fc\u30c9(\u78ba\u8a8d\u7528)

-replyToAddress=\u8fd4\u4fe1\u30a2\u30c9\u30ec\u30b9

-username=\u30e6\u30fc\u30b6\u540d

-registration.addSubscription=\u65b0\u898f\u4f5c\u6210

-registration.deleteSubscription=\u524a\u9664

-registration.editSubscription=\u7de8\u96c6

-registration.title.create=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30e6\u30fc\u30b6\u767b\u9332

-registration.title.edit=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u7de8\u96c6

-subscription.title.create=\u30e1\u30fc\u30eb\u8cfc\u8aad\u60c5\u5831\u306e\u65b0\u898f\u4f5c\u6210

-subscription.title.delete=\u30e1\u30fc\u30eb\u8cfc\u8aad\u60c5\u5831\u306e\u524a\u9664

-subscription.title.edit=\u30e1\u30fc\u30eb\u8cfc\u8aad\u60c5\u5831\u306e\u7de8\u96c6

-

-# Standard error messages for validator framework checks

-errors.required=${getText(fieldName)} \u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002

-errors.minlength=${getText(fieldName)} \u306f {1} \u6587\u5b57\u4ee5\u4e0a\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002

-errors.maxlength=${getText(fieldName)} \u306f {2} \u6587\u5b57\u4ee5\u4e0b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002

-errors.invalid=${getText(fieldName)} \u306f\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002

-errors.byte=${getText(fieldName)} \u306fbyte\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002

-errors.short=${getText(fieldName)} \u306fshort\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002

-errors.integer=${getText(fieldName)} \u306finteger\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002

-errors.long=${getText(fieldName)} \u306flong\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002

-errors.float=${getText(fieldName)} \u306ffloat\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002

-errors.double=${getText(fieldName)} \u306fdouble\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002

-errors.date=${getText(fieldName)} \u306f\u65e5\u4ed8\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

-errors.range=${getText(fieldName)} \u306f {1} \u304b\u3089 {2} \u306e\u9593\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002

-errors.creditcard=${getText(fieldName)} \u306f\u6b63\u3057\u3044\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u756a\u53f7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

-errors.email=${getText(fieldName)} \u306f\u6b63\u3057\u3044\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport_ru.properties b/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport_ru.properties
deleted file mode 100644
index e7d1772..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/MailreaderSupport_ru.properties
+++ /dev/null
@@ -1,89 +0,0 @@
-button.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c

-button.confirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c

-button.reset=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c

-button.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c

-change.message=Your password has expired.  Please ask the system administrator to change it.

-change.try=Try Again

-change.title=Password Has Expired

-database.load=\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0438\u0437 {0}

-error.database.missing=\u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f - \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e.

-error.fromAddress.format=\u0412 \u043f\u043e\u043b\u0435 '\u0410\u0434\u0440\u0435\u0441 \u041e\u0442:' \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 \u0432 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.

-error.fromAddress.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432 \u043f\u043e\u043b\u0435 '\u0410\u0434\u0440\u0435\u0441 \u041e\u0442:'.

-error.fullName.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f.

-error.host.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440.

-error.noSubscription=\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0432 \u0441\u0435\u0441\u0441\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f

-error.password.expired=Your password has expired for username {0}

-error.password.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c.

-error.password2.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f.

-error.password.match=\u041f\u0430\u0440\u043e\u043b\u044c \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442.

-error.password.mismatch=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u044f \u0438/\u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c - \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0441\u043d\u043e\u0432\u0430.

-error.replyToAddress.format=\u0412 \u043f\u043e\u043b\u0435 '\u0410\u0434\u0440\u0435\u0441 \u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430:' \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 \u0432 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.

-struts.messages.invalid.token=\u042d\u0442\u0430 \u0444\u043e\u0440\u043c\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 - \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0437\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.

-error.type.invalid=\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0438\u043f\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043b\u0438\u0448\u044c 'imap' \u0438\u043b\u0438 'pop3'

-error.type.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430

-error.username.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f

-error.username.unique=\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f - \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f.

-errors.footer=</ul><hr>

-errors.header=<h3><font color="red">\u041e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0437\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445</font></h3><p>\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043e\u0448\u0438\u0431\u043a\u0438:</p><ul>

-errors.prefix=<li>

-errors.suffix=</li>

-errors.ioException=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0432\u043e\u0434\u0430/\u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445: {0}

-expired.password=User Password has expired for {0}

-heading.autoConnect=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438

-heading.subscriptions=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438

-heading.host=\u0421\u0435\u0440\u0432\u0435\u0440

-heading.user=\u0418\u043c\u044f

-heading.type=\u0422\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430

-heading.action=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435

-index.heading=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b'

-index.login=\u0412\u043e\u0439\u0442\u0438 \u043a\u0430\u043a \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c

-index.registration=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f

-index.title=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b' (Struts 1.1-dev)

-index.tour=\u041e\u0431\u0437\u043e\u0440 \u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b'

-linkSubscription.io=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0432\u043e\u0434\u0430/\u0432\u044b\u0432\u043e\u0434\u0430 (\u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438): {0}

-linkSubscription.noSubscription=\u0410\u0442\u0440\u0438\u0431\u0443\u0442 {0} \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.

-linkUser.io=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0432\u043e\u0434\u0430/\u0432\u044b\u0432\u043e\u0434\u0430 (\u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f): {0}

-linkUser.noUser=\u0410\u0442\u0440\u0438\u0431\u0443\u0442 {0} \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0438\u043b\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.

-login.title=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b - \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u043c\u0435\u043d\u0438 \u0438 \u043f\u0430\u0440\u043e\u043b\u044f.

-mainMenu.heading=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e \u0434\u043b\u044f

-mainMenu.logout=\u0412\u044b\u0439\u0442\u0438

-mainMenu.registration=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438

-mainMenu.title=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b' - \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e

-option.imap=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b IMAP 

-option.pop3=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b POP3 

-# prompt.

-autoConnect=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435:

-fromAddress=\u0410\u0434\u0440\u0435\u0441 \u041e\u0442:

-fullName=\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f:

-mailHostname=\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440:

-mailPassword=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430:

-mailServerType=\u0422\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430:

-mailUsername=\u0418\u043c\u044f \u0434\u043b\u044f \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430:

-password=\u041f\u0430\u0440\u043e\u043b\u044c:

-password2=(\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435) \u041f\u0430\u0440\u043e\u043b\u044c:

-replyToAddress=\u0410\u0434\u0440\u0435\u0441 \u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430:

-username=\u0418\u043c\u044f:

-registration.addSubscription=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c

-registration.deleteSubscription=\u0423\u0434\u0430\u043b\u0438\u0442\u044c

-registration.editSubscription=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c

-registration.title.create=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f

-registration.title.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u0432\u043e\u0435\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438

-subscription.title.create=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443

-subscription.title.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443

-subscription.title.edit=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443

-

-# Standard error messages for validator framework checks

-errors.required=${getText(fieldName)} is required.

-errors.minlength=${getText(fieldName)} cannot be less than {1} characters.

-errors.maxlength=${getText(fieldName)} cannot be greater than {2} characters.

-errors.invalid=${getText(fieldName)} is invalid.

-errors.byte=${getText(fieldName)} must be an byte.

-errors.short=${getText(fieldName)} must be an short.

-errors.integer=${getText(fieldName)} must be an integer.

-errors.long=${getText(fieldName)} must be an long.

-errors.float=${getText(fieldName)} must be an float.

-errors.double=${getText(fieldName)} must be an double.

-errors.date=${getText(fieldName)} is not a date.

-errors.range=${getText(fieldName)} is not in the range {1} through {2}.

-errors.creditcard=${getText(fieldName)} is not a valid credit card number.

-errors.email=${getText(fieldName)} is an invalid e-mail address.

diff --git "a/trunk/apps/mailreader/src/main/java/mailreader2/Registration-Registration\041save-validation.xml" "b/trunk/apps/mailreader/src/main/java/mailreader2/Registration-Registration\041save-validation.xml"
deleted file mode 100644
index 6896407..0000000
--- "a/trunk/apps/mailreader/src/main/java/mailreader2/Registration-Registration\041save-validation.xml"
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
-
-    <field name="password">
-        <field-validator type="requiredstring">
-            <message key="error.password.required"/>
-        </field-validator>
-        <field-validator type="stringlength">
-            <param name="trim">true</param>
-            <param name="minLength">4</param>
-            <param name="maxLength">10</param>
-            <message key="errors.range"/>
-        </field-validator>
-    </field>
-
-    <field name="password2">
-        <field-validator type="requiredstring">
-            <message key="error.password2.required"/>
-        </field-validator>
-    </field>
-
-    <validator type="expression">
-        <param name="expression">password eq password2</param>
-        <message key="error.password.match"/>
-    </validator>
-
-</validators>
diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/Registration-validation.xml b/trunk/apps/mailreader/src/main/java/mailreader2/Registration-validation.xml
deleted file mode 100644
index 44d66bc..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/Registration-validation.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

-

-<validators>

-

-    <field name="username">

-        <field-validator type="requiredstring">

-            <message key="error.username.required"/>

-        </field-validator>

-    </field>

-

-    <field name="user.fullName">

-        <field-validator type="requiredstring">

-            <message key="error.fullName.required"/>

-        </field-validator>

-    </field>

-

-    <field name="user.fromAddress">

-        <field-validator type="requiredstring">

-            <message key="error.fromAddress.required"/>

-        </field-validator>

-        <field-validator type="email">

-            <message key="errors.email"/>

-        </field-validator>

-    </field>

-

-    <field name="user.replyToAddress">

-        <field-validator type="email">

-            <message key="errors.email"/>

-        </field-validator>

-    </field>

-

-</validators>

diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/Registration.java b/trunk/apps/mailreader/src/main/java/mailreader2/Registration.java
deleted file mode 100644
index e87fdf2..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/Registration.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package mailreader2;
-
-import org.apache.struts.apps.mailreader.dao.User;
-
-
-/**
- * <p>Insert or update a User object to the persistent store. </p>
- */
-public class Registration extends MailreaderSupport {
-
-    /**
-     * <p>Double check that there is not a valid User login. </p>
-     *
-     * @return True if there is not a valid User login
-     */
-    private boolean isCreating() {
-        User user = getUser();
-        return (null == user) || (null == user.getDatabase());
-    }
-
-    /**
-     * <p> Retrieve User object to edit or null if User does not exist. </p>
-     *
-     * @return The "Success" result for this mapping
-     * @throws Exception on any error
-     */
-    public String input() throws Exception {
-
-        if (isCreating()) {
-            createInputUser();
-            setTask(Constants.CREATE);
-        } else {
-            setTask(Constants.EDIT);
-            setUsername(getUser().getUsername());
-            setPassword(getUser().getPassword());
-            setPassword2(getUser().getPassword());
-        }
-
-        return INPUT;
-    }
-
-    /**
-     * <p>Insert or update a Registration.</p>
-     *
-     * @return The "outcome" result code
-     * @throws Exception on any error
-     */
-    public String save() throws Exception {
-        return execute();
-    }
-
-    /**
-     * <p> Insert or update a User object to the persistent store. </p>
-     * <p/>
-     * <p> If a User is not logged in, then a new User is created and
-     * automatically logged in. Otherwise, the existing User is updated. </p>
-     *
-     * @return The "outcome" result code
-     * @throws Exception on any error
-     */
-    public String execute()
-            throws Exception {
-
-        boolean creating = Constants.CREATE.equals(getTask());
-        creating = creating && isCreating(); // trust but verify
-
-        if (creating) {
-
-            User user = findUser(getUsername(), getPassword());
-            boolean haveUser = (user != null);
-
-            if (haveUser) {
-                addActionError(getText("error.username.unique"));
-                return INPUT;
-            }
-
-            copyUser(getUsername(), getPassword());
-
-        } else {
-
-            // FIXME: Any way to call the RegisrationSave validators from here?
-            String newPassword = getPassword();
-            if (newPassword != null) {
-                String confirmPassword = getPassword2();
-                boolean matches = ((null != confirmPassword)
-                        && (confirmPassword.equals(newPassword)));
-                if (matches) {
-                    getUser().setPassword(newPassword);
-                } else {
-                    addActionError(getText("error.password.match"));
-                    return INPUT;
-                }
-            }
-        }
-
-        saveUser();
-
-        return SUCCESS;
-    }
-
-}
diff --git "a/trunk/apps/mailreader/src/main/java/mailreader2/Subscription-Subscription\041save-validation.xml" "b/trunk/apps/mailreader/src/main/java/mailreader2/Subscription-Subscription\041save-validation.xml"
deleted file mode 100644
index 9f2f6d7..0000000
--- "a/trunk/apps/mailreader/src/main/java/mailreader2/Subscription-Subscription\041save-validation.xml"
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

-

-<validators>

-

-    <field name="subscription.username">

-        <field-validator type="requiredstring">

-            <message key="error.username.required"/>

-        </field-validator>

-    </field>

-

-    <field name="subscription.password">

-        <field-validator type="requiredstring">

-            <message key="error.password.required"/>

-        </field-validator>

-    </field>

-

-    <field name="subscription.type">

-        <field-validator type="requiredstring">

-            <message key="error.type.invalid"/>

-        </field-validator>

-    </field>

-

-</validators>

diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/Subscription-validation.xml b/trunk/apps/mailreader/src/main/java/mailreader2/Subscription-validation.xml
deleted file mode 100644
index df903c2..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/Subscription-validation.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

-

-<validators>

-

-    <field name="host">

-        <field-validator type="requiredstring">

-            <message key="error.host.required"/>

-        </field-validator>

-    </field>

-

-</validators>

diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/Subscription.java b/trunk/apps/mailreader/src/main/java/mailreader2/Subscription.java
deleted file mode 100644
index a3f32ed..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/Subscription.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package mailreader2;
-
-import com.opensymphony.xwork2.Preparable;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * <p> Provide an Edit method for retrieving an existing subscription, and a
- * Save method for updating or inserting a subscription. </p>
- */
-public class Subscription extends MailreaderSupport
-        implements Preparable {
-
-    /**
-     * <p>Field to store list of MailServer types</p>
-     */
-    private Map types = null;
-
-    /**
-     * <p>Provide the list of MailServer types.</p>
-     *
-     * @return List of MailServer types
-     */
-    public Map getTypes() {
-        return types;
-    }
-
-    /**
-     * <p>Setup the MailerServer types and set the local Host property from
-     * the User Subscription (if any). </p>
-     */
-    public void prepare() {
-
-        Map m = new LinkedHashMap();
-        m.put("imap", "IMAP Protocol");
-        m.put("pop3", "POP3 Protocol");
-        types = m;
-
-        setHost(getSubscriptionHost());
-    }
-
-    /**
-     * <p>Setup a temporary User Subscription object to capture input
-     * values.</p>
-     *
-     * @return INPUT
-     */
-    public String input() {
-        createInputSubscription();
-        setTask(Constants.CREATE);
-        return INPUT;
-    }
-
-    /**
-     * <p>Load User Subscription for the local Host property.</p>
-     * <p/>
-     * <p>Usually, the Host is being set from the request by a link to an Edit
-     * or Delete task.</p>
-     *
-     * @return INPUT or Error, if Subscription is not found
-     */
-    public String find() {
-
-        org.apache.struts.apps.mailreader.dao.Subscription
-                sub = findSubscription();
-
-        if (sub == null) {
-            return ERROR;
-        }
-
-        setSubscription(sub);
-
-        return INPUT;
-
-    }
-
-    /**
-     * <p>Prepare to present a confirmation page before removing
-     * Subscription.</p>
-     *
-     * @return INPUT or Error, if Subscription is not found
-     */
-    public String delete() {
-
-        setTask(Constants.DELETE);
-        return find();
-    }
-
-    /**
-     * <p>Prepare to edit User Subscription.</p>
-     *
-     * @return INPUT or Error, if Subscription is not found
-     */
-    public String edit() {
-
-        setTask(Constants.EDIT);
-        return find();
-    }
-
-    /**
-     * <p> Examine the Task property and DELETE, CREATE, or save the User
-     * Subscription, as appropriate. </p>
-     *
-     * @return SUCCESS
-     * @throws Exception on a database error
-     */
-    public String save() throws Exception {
-
-        if (Constants.DELETE.equals(getTask())) {
-            removeSubscription();
-        }
-
-        if (Constants.CREATE.equals(getTask())) {
-            copySubscription(getHost());
-        }
-
-        if (hasErrors()) return INPUT;
-        
-        saveUser();
-        return SUCCESS;
-    }
-
-}
diff --git a/trunk/apps/mailreader/src/main/java/mailreader2/Welcome.java b/trunk/apps/mailreader/src/main/java/mailreader2/Welcome.java
deleted file mode 100644
index 08ec125..0000000
--- a/trunk/apps/mailreader/src/main/java/mailreader2/Welcome.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package mailreader2;
-
-/**
- * Verify that essential resources are available.
- */
-public class Welcome extends MailreaderSupport {
-
-    public String execute() {
-
-        // Confirm message resources loaded
-        String message = getText(Constants.ERROR_DATABASE_MISSING);
-        if (Constants.ERROR_DATABASE_MISSING.equals(message)) {
-            addActionError(Constants.ERROR_MESSAGES_NOT_LOADED);
-        }
-
-        // Confirm database loaded
-        if (null==getDatabase()) {
-             addActionError(Constants.ERROR_DATABASE_NOT_LOADED);
-        }
-
-        if (hasErrors()) {
-            return ERROR;
-        }
-        else {
-            return SUCCESS;
-        }
-    }
-}
diff --git a/trunk/apps/mailreader/src/main/java/struts.properties b/trunk/apps/mailreader/src/main/java/struts.properties
deleted file mode 100644
index 14f9252..0000000
--- a/trunk/apps/mailreader/src/main/java/struts.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-struts.objectFactory = spring

-struts.devMode = false

-struts.action.extension = do

-struts.enable.DynamicMethodInvocation = false

diff --git a/trunk/apps/mailreader/src/main/java/struts.xml b/trunk/apps/mailreader/src/main/java/struts.xml
deleted file mode 100644
index fa904e2..0000000
--- a/trunk/apps/mailreader/src/main/java/struts.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>

-<!DOCTYPE struts PUBLIC

-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

-    "http://struts.apache.org/dtds/struts-2.0.dtd">

-

-<struts>

-

-    <include file="mailreader-default.xml"/>

-

-    <include file="mailreader-support.xml"/>

-

-</struts>
\ No newline at end of file
diff --git a/trunk/apps/mailreader/src/main/webapp/ChangePassword.jsp b/trunk/apps/mailreader/src/main/webapp/ChangePassword.jsp
deleted file mode 100644
index 7743bf1..0000000
--- a/trunk/apps/mailreader/src/main/webapp/ChangePassword.jsp
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title><s:text name="change.title"/></title>
-    <link href="<s:url value="/css/mailreader.css"/>" rel="stylesheet"
-          type="text/css"/>
-</head>
-
-<body>
-
-<p>
-    <s:text name="change.message"/>
-</p>
-
-<p>
-    <a href="<s:url action="Login!input"/>">
-        <s:text name="change.try"/>
-    </a>
-</p>
-
-</body>
-</html>
diff --git a/trunk/apps/mailreader/src/main/webapp/Error.jsp b/trunk/apps/mailreader/src/main/webapp/Error.jsp
deleted file mode 100644
index 05ab5e0..0000000
--- a/trunk/apps/mailreader/src/main/webapp/Error.jsp
+++ /dev/null
@@ -1,40 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title>Unexpected Error</title>
-</head>
-
-<body>
-<h2>An unexpected error has occured</h2>
-
-<p>
-    Please report this error to your system administrator
-    or appropriate technical support personnel.
-    Thank you for your cooperation.
-</p>
-
-<hr/>
-
-<h3>Error Message</h3>
-
-<s:actionerror />
-
-<p>
-    <s:property value="%{exception.message}"/>
-</p>
-
-<hr/>
-
-<h3>Technical Details</h3>
-
-<p>
-    <s:property value="%{exceptionStack}"/>
-</p>
-
-<jsp:include page="Footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/mailreader/src/main/webapp/Footer.jsp b/trunk/apps/mailreader/src/main/webapp/Footer.jsp
deleted file mode 100644
index 2b3b86c..0000000
--- a/trunk/apps/mailreader/src/main/webapp/Footer.jsp
+++ /dev/null
@@ -1,6 +0,0 @@
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<hr/>
-
-<p>
-    <a href="<s:url action="Welcome" />"><s:text name="index.title"/></a>
-</p>
diff --git a/trunk/apps/mailreader/src/main/webapp/Login.jsp b/trunk/apps/mailreader/src/main/webapp/Login.jsp
deleted file mode 100644
index 39ca9e0..0000000
--- a/trunk/apps/mailreader/src/main/webapp/Login.jsp
+++ /dev/null
@@ -1,30 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title><s:text name="login.title"/></title>
-    <link href="<s:url value="/css/mailreader.css"/>" rel="stylesheet"
-          type="text/css"/>
-</head>
-
-<body onLoad="self.focus();document.Login.username.focus()">
-
-<s:actionerror />
-<s:form action="Login" validate="true">
-    <s:textfield label="%{getText('username')}" name="username"/>
-
-    <s:password label="%{getText('password')}" name="password" showPassword="true"/>
-
-    <s:submit value="%{getText('button.save')}"/>
-
-    <s:reset value="%{getText('button.reset')}"/>
-
-    <s:submit action="Login!cancel" value="%{getText('button.cancel')}"
-                onclick="form.onsubmit=null"/>
-</s:form>
-
-<jsp:include page="Footer.jsp"/>
-</body>
-</html>
diff --git a/trunk/apps/mailreader/src/main/webapp/META-INF/context.xml b/trunk/apps/mailreader/src/main/webapp/META-INF/context.xml
deleted file mode 100644
index 9b0b5d0..0000000
--- a/trunk/apps/mailreader/src/main/webapp/META-INF/context.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Context path="/">
-</Context>
diff --git a/trunk/apps/mailreader/src/main/webapp/MainMenu.jsp b/trunk/apps/mailreader/src/main/webapp/MainMenu.jsp
deleted file mode 100644
index 4b96feb..0000000
--- a/trunk/apps/mailreader/src/main/webapp/MainMenu.jsp
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title><s:text name="mainMenu.title"/></title>
-    <link href="<s:url value="/css/mailreader.css"/>" rel="stylesheet"
-          type="text/css"/>
-</head>
-
-<body>
-<h3><s:text name="mainMenu.heading"/> <s:property
-        value="user.fullName"/></h3>
-<ul>
-    <li><a href="<s:url action="Registration!input" />">
-        <s:text name="mainMenu.registration"/>
-    </a>
-    </li>
-    <li><a href="<s:url action="Logout"/>">
-        <s:text name="mainMenu.logout"/>
-    </a>
-</ul>
-</body>
-</html>
diff --git a/trunk/apps/mailreader/src/main/webapp/Registration.jsp b/trunk/apps/mailreader/src/main/webapp/Registration.jsp
deleted file mode 100644
index 5b3ad5a..0000000
--- a/trunk/apps/mailreader/src/main/webapp/Registration.jsp
+++ /dev/null
@@ -1,126 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <s:if test="task=='Create'">
-        <title><s:text name="registration.title.create"/></title>
-    </s:if>
-    <s:if test="task=='Edit'">
-        <title><s:text name="registration.title.edit"/></title>
-    </s:if>
-    <link href="<s:url value="/css/mailreader.css"/>" rel="stylesheet"
-          type="text/css"/>
-</head>
-
-<body onLoad="self.focus();document.Registration.username.focus()">
-
-<s:actionerror/>
-<s:form action="Registration!save" validate="false">
-    <s:token />
-    <s:hidden name="task"/>
-    <s:if test="task == 'Create'">
-        <s:textfield label="%{getText('username')}" name="username"/>
-    </s:if>
-    <s:else>
-        <s:label label="%{getText('username')}" name="username"/>
-        <s:hidden name="username"/>
-    </s:else>
-
-    <s:password label="%{getText('password')}" name="password"/>
-
-    <s:password label="%{getText('password2')}" name="password2"/>
-
-    <s:textfield label="%{getText('fullName')}"
-                   name="user.fullName"/>
-
-    <s:textfield label="%{getText('fromAddress')}"
-                   name="user.fromAddress"/>
-
-    <s:textfield label="%{getText('replyToAddress')}"
-                   name="user.replyToAddress"/>
-
-    <s:if test="task == 'Create'">
-        <s:submit value="%{getText('button.save')}" action="Registration!save"/>
-
-        <s:reset value="%{getText('button.reset')}"/>
-
-        <s:submit action="Welcome" value="%{getText('button.cancel')}"
-                    onclick="form.onsubmit=null"/>
-    </s:if>
-    <s:else>
-        <s:submit value="%{getText('button.save')}" action="Registration"/>
-
-        <s:reset value="%{getText('button.reset')}"/>
-
-        <s:submit action="MainMenu" value="%{getText('button.cancel')}"
-                    onclick="form.onsubmit=null"/>
-    </s:else>
-
-</s:form>
-
-<s:if test="task == 'Edit'">
-    <div align="center">
-        <h3><s:text name="heading.subscriptions"/></h3>
-    </div>
-
-    <table border="1" width="100%">
-
-        <tr>
-            <th align="center" width="30%">
-                <s:text name="heading.host"/>
-            </th>
-            <th align="center" width="25%">
-                <s:text name="heading.user"/>
-            </th>
-            <th align="center" width="10%">
-                <s:text name="heading.type"/>
-            </th>
-            <th align="center" width="10%">
-                <s:text name="heading.autoConnect"/>
-            </th>
-            <th align="center" width="15%">
-                <s:text name="heading.action"/>
-            </th>
-        </tr>
-
-        <s:iterator value="user.subscriptions">
-            <tr>
-                <td align="left">
-                    <s:property value="host"/>
-                </td>
-                <td align="left">
-                    <s:property value="username"/>
-                </td>
-                <td align="center">
-                    <s:property value="type"/>
-                </td>
-                <td align="center">
-                    <s:property value="autoConnect"/>
-                </td>
-                <td align="center">
-
-                    <a href="<s:url action="Subscription!delete"><s:param name="host" value="host"/></s:url>">
-                        <s:text name="registration.deleteSubscription"/>
-                    </a>
-                    &nbsp;
-                    <a href="<s:url action="Subscription!edit"><s:param name="host" value="host"/></s:url>">
-                        <s:text name="registration.editSubscription"/>
-                    </a>
-
-                </td>
-            </tr>
-        </s:iterator>
-
-    </table>
-
-    <a href="<s:url action="Subscription!input"/>"><s:text
-            name="registration.addSubscription"/></a>
-
-</s:if>
-
-<jsp:include page="Footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/mailreader/src/main/webapp/Subscription.jsp b/trunk/apps/mailreader/src/main/webapp/Subscription.jsp
deleted file mode 100644
index eb08f8d..0000000
--- a/trunk/apps/mailreader/src/main/webapp/Subscription.jsp
+++ /dev/null
@@ -1,68 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <s:if test="task=='Create'">
-        <title><s:text name="subscription.title.create"/></title>
-    </s:if>
-    <s:if test="task=='Edit'">
-        <title><s:text name="subscription.title.edit"/></title>
-    </s:if>
-    <s:if test="task=='Delete'">
-        <title><s:text name="subscription.title.delete"/></title>
-    </s:if>
-    <link href="<s:url value="/css/mailreader.css"/>" rel="stylesheet"
-          type="text/css"/>
-</head>
-
-<body onLoad="self.focus();document.Subscription.username.focus()">
-
-<s:actionerror/>
-<s:form action="Subscription!save" validate="true">
-    <s:token />
-    <s:hidden name="task"/>
-    <s:label label="%{getText('username')}" name="user.username"/>
-
-    <s:if test="task == 'Create'">
-        <s:textfield label="%{getText('mailHostname')}" name="host"/>
-    </s:if>
-    <s:else>
-        <s:label label="%{getText('mailHostname')}" name="host"/>
-        <s:hidden name="host"/>
-    </s:else>
-
-    <s:if test="task == 'Delete'">
-        <s:label label="%{getText('mailUsername')}"
-                   name="subscription.username"/>
-        <s:label label="%{getText('mailPassword')}"
-                   name="subscription.password"/>
-        <s:label label="%{getText('mailServerType')}"
-                   name="subscription.type"/>
-        <s:label label="%{getText('autoConnect')}"
-                   name="subscription.autoConnect"/>
-        <s:submit value="%{getText('button.confirm')}"/>
-    </s:if>
-    <s:else>
-        <s:textfield label="%{getText('mailUsername')}"
-                       name="subscription.username"/>
-        <s:textfield label="%{getText('mailPassword')}"
-                       name="subscription.password"/>
-        <s:select label="%{getText('mailServerType')}"
-                    name="subscription.type" list="types"/>
-        <s:checkbox label="%{getText('autoConnect')}"
-                      name="subscription.autoConnect"/>
-        <s:submit value="%{getText('button.save')}"/>
-        <s:reset value="%{getText('button.reset')}"/>
-    </s:else>
-
-    <s:submit action="Registration!input"
-                value="%{getText('button.cancel')}"
-                onclick="form.onsubmit=null"/>
-</s:form>
-
-<jsp:include page="Footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/mailreader/src/main/webapp/WEB-INF/database.xml b/trunk/apps/mailreader/src/main/webapp/WEB-INF/database.xml
deleted file mode 100644
index 5710477..0000000
--- a/trunk/apps/mailreader/src/main/webapp/WEB-INF/database.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version='1.0'?>

-<database>

-    <user username="user" fromAddress="John.User@somewhere.com"

-          fullName="John Q. User" password="pass">

-        <subscription host="mail.hotmail.com" autoConnect="false"

-                      password="bar" type="pop3" username="user1234">

-        </subscription>

-        <subscription host="mail.yahoo.com" autoConnect="false" password="foo"

-                      type="imap" username="jquser">

-        </subscription>

-    </user>

-</database>

-        
\ No newline at end of file
diff --git a/trunk/apps/mailreader/src/main/webapp/WEB-INF/web.xml b/trunk/apps/mailreader/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 7257132..0000000
--- a/trunk/apps/mailreader/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-
-    <display-name>Struts 2 Mailreader</display-name>
-
-    <context-param>
-        <param-name>contextConfigLocation</param-name>
-        <param-value>classpath*:applicationContext*.xml</param-value>
-    </context-param>
-
-    <filter>
-        <filter-name>Struts2</filter-name>
-        <filter-class>
-            org.apache.struts2.dispatcher.FilterDispatcher
-        </filter-class>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>Struts2</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-
-    <listener>
-        <listener-class>
-            org.springframework.web.context.ContextLoaderListener
-        </listener-class>
-    </listener>
-
-    <!-- Application Listener for Mailreader database -->
-    <listener>
-        <listener-class>
-            mailreader2.ApplicationListener
-        </listener-class>
-    </listener>
-       
-    <welcome-file-list>
-        <welcome-file>index.html</welcome-file>
-    </welcome-file-list>
-
-</web-app>
diff --git a/trunk/apps/mailreader/src/main/webapp/Welcome.jsp b/trunk/apps/mailreader/src/main/webapp/Welcome.jsp
deleted file mode 100644
index a707fba..0000000
--- a/trunk/apps/mailreader/src/main/webapp/Welcome.jsp
+++ /dev/null
@@ -1,56 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-    <title><s:text name="index.title"/></title>
-    <link href="<s:url value="/css/mailreader.css"/>" rel="stylesheet"
-          type="text/css"/>
-</head>
-
-<body>
-<h3><s:text name="index.heading"/></h3>
-
-<ul>
-    <li><a href="<s:url action="Registration!input"/>"><s:text
-            name="index.registration"/></a></li>
-    <li><a href="<s:url action="Login!input"/>"><s:text
-            name="index.login"/></a></li>
-</ul>
-
-<h3>Language Options</h3>
-<ul>
-    <li>
-        <s:url id="en" action="Welcome">
-            <s:param name="request_locale">en</s:param>
-        </s:url>
-        <s:a href="%{en}">English</s:a>
-    </li>
-    <li>
-        <s:url id="ja" action="Welcome">
-            <s:param name="request_locale">ja</s:param>
-        </s:url>
-        <s:a href="%{ja}">Japanese</s:a>
-    </li>
-    <li>
-        <s:url id="ru" action="Welcome">
-            <s:param name="request_locale">ru</s:param>
-        </s:url>
-        <s:a href="%{ru}">Russian</s:a>
-    </li>
-</ul>
-
-<hr/>
-
-<p><s:i18n name="alternate">
-    <img src="<s:text name="struts.logo.path"/>"
-         alt="<s:text name="struts.logo.alt"/>"/>
-</s:i18n></p>
-
-<p><a href="<s:url action="Tour" />"><s:text name="index.tour"/></a></p>
-
-</body>
-</html>
-
diff --git a/trunk/apps/mailreader/src/main/webapp/css/mailreader.css b/trunk/apps/mailreader/src/main/webapp/css/mailreader.css
deleted file mode 100644
index bfc7648..0000000
--- a/trunk/apps/mailreader/src/main/webapp/css/mailreader.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
-* Mailreader stylesheet
-*/
-
-body {
-    background-color: #FFFFFF;
-    color: #000000;
-    link: 000066;
-    visited: #660066;
-    active: #33CCCC;
-}
-
-A:hover {
-    color: #FF0000;
-}
-
-h1 {
-    font-family: Arial, Helvetica, sans-serif;
-}
-
-h2 {
-    font-family: Arial, Helvetica, sans-serif;
-}
-
-h3 {
-    font-family: Arial, Helvetica, sans-serif;
-}
-
-h4 {
-    font-family: Arial, Helvetica, sans-serif;
-}
-
-h5 {
-    font-family: Arial, Helvetica, sans-serif;
-}
-
-h6 {
-    font-family: Arial, Helvetica, sans-serif;
-}
-
-font.hint {
-    font-style: italic;
-    font-size: 80%;
-    font-family: Arial, Helvetica, sans-serif;
-    text-align: left;
-}
\ No newline at end of file
diff --git a/trunk/apps/mailreader/src/main/webapp/index.html b/trunk/apps/mailreader/src/main/webapp/index.html
deleted file mode 100644
index 1b01b3f..0000000
--- a/trunk/apps/mailreader/src/main/webapp/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-    <META HTTP-EQUIV="Refresh" CONTENT="0;URL=Welcome.do">
-</head>
-
-<body>
-<p>Loading ...</p>
-</body>
-</html>
diff --git a/trunk/apps/mailreader/src/main/webapp/struts-power.gif b/trunk/apps/mailreader/src/main/webapp/struts-power.gif
deleted file mode 100644
index 5f4e9d4..0000000
--- a/trunk/apps/mailreader/src/main/webapp/struts-power.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/mailreader/src/main/webapp/tour.html b/trunk/apps/mailreader/src/main/webapp/tour.html
deleted file mode 100644
index 851ec08..0000000
--- a/trunk/apps/mailreader/src/main/webapp/tour.html
+++ /dev/null
@@ -1,2479 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"/>
-    <link rel="stylesheet" type="text/css" href="../css/mailreader.css"/>
-
-    <title>A Walking Tour of the Struts 2 MailReader Application</title>
-</head>
-
-<body>
-<blockquote>
-<h2>A Walking Tour of the Struts 2 MailReader Application</h2>
-
-<p>
-    <i>
-        This article is meant to introduce a new user to Apache Struts 2 by 
-        "walking through" a simple, but functional, application.
-        The article includes code snippets, but for the best result, you might 
-        want to install the MailReader application on your own development 
-        workstation and follow along.
-        Of course, the full source code to the MailReader is included in the 
-        distribution.
-    </i>
-</p>
-
-<p>
-    <i>
-        The tour assumes the reader has a basic understanding of the Java
-        language, JavaBeans, web applications, and JavaServer Pages. For 
-        background on these technologies, see the
-        <a href="http://struts.apache.org/primer.html">
-            Key Technologies Primer</a>.
-    </i>
-</p>
-
-<hr/>
-
-<ul>
-    <li>
-        <a href="#Welcome">Welcome</a>
-
-        <ul>
-            <li><a href="#web.xml">web.xml and resources.properties</a></li>
-
-            <li><a href="#Welcome.do">Welcome.do</a></li>
-
-            <li><a href="#Welcome.java">Welcome Action</a></li>
-
-            <li><a href="#global-results">Global Results</a></li>
-
-            <li><a href="#ApplicationListener.java">ApplicationListener.java</a></li>
-
-            <li><a href="#resources.properties">Message Resources</a></li>
-
-            <li><a href="#Welcome.jsp">Welcome Page</a></li>
-
-        </ul>
-    </li>
-</ul>
-
-<ul>
-    <li>
-        <a href="#Login">Login</a>
-        <ul>
-
-            <li><a href="#Login.jsp">Login Page</a></li>
-
-            <li><a href="#Login-validation.xml">Login-validation.xml</a></li>
-
-            <li><a href="#Login.java">Login.java</a></li>
-
-            <li><a href="#MailreaderSupport.java">MailreaderSupport.java</a></li>
-
-            <li><a href="#Login.xml">Login Configuration</a></li>
-
-        </ul>
-    </li>
-</ul>
-
-<ul>
-    <li>
-        <a href="#MainMenu">MainMenu</a>
-    </li>
-</ul>
-
-<ul>
-    <li>
-        <a href="#Registration.jsp">Registration page</a>
-        <ul>
-            <li><a href="#iterator">iterator</a></li>
-        </ul>
-    </li>
-</ul>
-
-<ul>
-    <li>
-        <a href="#Subscription">Subscription</a>
-
-        <ul>
-            <li><a href="#Subscription.java">Subscription.java</a>
-            </li>
-        </ul>
-    </li>
-</ul>
-<hr/>
-
-<p>
-    The premise of the MailReader is that it is the first iteration of a
-    portal application.
-    This version allows users to register and maintain a set of
-    accounts with various mail servers.
-    If completed, the application would let users read mail from their
-    accounts.
-</p>
-
-<p>
-    The MailReader application demonstrates registering with an application,
-    logging into an application, maintaining a master record, and maintaining
-    child records.
-    This article overviews the constructs needed to do these things,
-    including the server pages, Java classes, and configuration elements.
-</p>
-
-<p>
-    For more about the MailReader, including alternate implementations and a
-    set of formal Use Cases,
-    please visit the <a href="http://www.StrutsUniversity.org/MailReader">
-    Struts University MailReader site</a>.
-</p>
-
-<hr/>
-<blockquote>
-    <p><font class="hint">
-        <strong>JAAS</strong> -
-        Note that for compatibility and ease of deployment, the MailReader
-        uses "application-based" authorization.
-        However, use of the standard Java Authentication and Authorization
-        Service (JAAS) is recommended for most applications.
-        (See the <a
-            href="http://struts.apache.org/primer.html">
-        Key Technologies Primer</a> for more about
-        authentication technologies.)
-    </font></p>
-</blockquote>
-<hr/>
-
-<p>
-    The tour starts with how the initial welcome page is displayed, and
-    then steps through logging into the application and editing a subscription.
-    Please note that this not a quick peek at a "Hello World" application.
-    The tour is a rich trek into a realistic, best practices application.
-    You may need to adjust your chair and get a fresh cup of coffee.
-    Printed, the article is 29 pages long (US).
-</p>
-
-<h3><a name="Welcome" id="Welcome">Welcome Page</a></h3>
-
-<p>
-    A web application, like any other web site, can specify a list of welcome pages.
-    When you open a web application without specifying a particular page, a
-    default "welcome page" is served as the response.
-</p>
-
-<h4><a name="web.xml" id="web.xml">web.xml</a></h4>
-
-<p>
-    When a web application loads,
-    the container reads and parses the "Web Application Deployment
-    Descriptor", or "web.xml" file.
-    The framework plugs into a web application via a servlet filter.
-    Like any filter, the "struts2" filter is deployed via the "web.xml".
-</p>
-
-<hr/>
-<h5>web.xml - The Web Application Deployment Descriptor</h5>
-<pre><code>&lt;?xml version="1.0" encoding="ISO-8859-1"?>
-&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-  "http://java.sun.com/dtd/web-app_2_3.dtd">
-&lt;web-app>
-
-  &lt;display-name>Struts 2 MailReader&lt;/display-name>
-
-  <strong>&lt;filter>
-    &lt;filter-name>struts2&lt;/filter-name>
-    &lt;filter-class>
-      org.apache.struts2.dispatcher.FilterDispatcher
-    &lt;/filter-class>
-   &lt;/filter></strong>
-
-  &lt;filter-mapping>
-    &lt;filter-name><strong>struts2</strong>&lt;/filter-name>
-    &lt;url-pattern>/*&lt;/url-pattern>
-  &lt;/filter-mapping>
-
-  &lt;listener>
-    &lt;listener-class>
-      org.springframework.web.context.ContextLoaderListener
-    &lt;/listener-class>
-  &lt;/listener>
-
-  &lt;!-- Application Listener for MailReader database -->
-  &lt;listener>
-    &lt;listener-class>
-      mailreader2.ApplicationListener
-    &lt;/listener-class>
-  &lt;/listener>
-
-  &lt;welcome-file-list>
-    &lt;welcome-file>index.html&lt;/welcome-file>
-  &lt;/welcome-file-list>
-
-  &lt;/web-app></code></pre>
-<hr/>
-
-<p>
-    You might note taht the web.xml configuration does not specify which file extension
-    to use with actions.
-    The default extension for Struts 2 is ".action",
-    but the extension can be changed in the struts.properties file.
-    For compatability with prior releases, the MailReader uses a .do extension for actions.
-</p>
-
-<hr/>
-<h5>struts.properties</h5>
-<pre><code>struts.action.extension = <strong>do</strong></code></pre>
-<hr/>
-
-<p>
-    The web.xml does specify a "Welcome File List" for the application.
-    When a web address refers to a directory rather than an individual file,
-    the container consults the Welcome File List for the name of a page to
-    open by default.
-</p>
-
-<p>
-    However, most Struts applications do not refer to physical pages,
-    but to "virtual resources" called <i>actions</i>.
-    Actions specify code that we want to be run before a page
-    or other resource renders the response.
-    An accepted practice is to never link directly to server pages,
-    but only to logical action mappings.
-    By linking to actions, developers can often "rewire" an application
-    without editing the server pages.
-</p>
-
-<hr/>
-<h5>Best Practice:</h5>
-<blockquote>
-    <p><font class="hint">"Link actions not pages."</font></p>
-</blockquote>
-<hr/>
-
-<p>
-    The actions are listed in one or more XML configuration files,
-    the default configuration file being named "struts.xml".
-    When the application loads, the struts.xml, and any other files 
-    it includes, are parsed, and the framework creates a set of 
-    configuration objects. 
-    Among other things, the configuration maps a request for a certain 
-    page to a certain action mapping.
-</p>
-
-
-<p>
-    Sites can list zero or more "Welcome" pages in the web.xml.
-    <a href="http://forum.java.sun.com/thread.jspa?threadID=721445">
-        Unless you are using Java 1.5,</a>
-    actions cannot be specified as a Welcome page.
-    So, in the case of a Welcome page,
-    how do we follow the best practice of navigating through actions
-    rather than pages?
-</p>
-
-<p>
-    One solution is to use a page to "bootstrap" one of our actions.
-    We can register the usual "index.html" as the Welcome page and have it
-    redirect to a "Welcome" action.
-</p>
-
-<hr/>
-<h5>MailReader's index.html</h5>
-<pre><code>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-&lt;html>&lt;head>
-  &lt;META HTTP-EQUIV="Refresh" CONTENT="0;<strong>URL=Welcome.do</strong>">
-  &lt;/head>
-  &lt;body>
-    &lt;p>Loading ...&lt;/p>
-&lt;/body>&lt;/html></code></pre>
-<hr/>
-
-<p>
-    As an alternative,
-    we could also have used a JSP page that issued the redirect with a Struts tag,
-    but a plain HTML solution works as well.
-</p>
-
-<h4><a name="Welcome.do" id="Welcome.do">Welcome.do</a></h4>
-
-<p>
-    When the client requests "Welcome.do", the request is passed to the "struts2"
-    FilterDispatcher (that we registered in the web.xml file).
-    The FilterDispatcher retrieves the appropriate action mapping from the 
-    configuration.
-    If we just wanted to forward to the Welcome page, we could use a simple
-    configuration element.
-</p>
-<hr/>
-<h5>A simple "forward thru" action element</h5>
-<pre><code>&lt;action name="<strong>Welcome</strong>">
-  &lt;result><strong>/pages/Welcome.jsp</strong>&lt;/result>
-&lt;/action></code></pre>
-<hr/>
-
-<p>
-    If a client asks for the Welcome action ("Welcome.do"), the "/page/Welcome.jsp"
-    page would be returned in response.
-    The client does not know, or need to know, that the physical resource is located at
-    "/pages/Welcome.jsp".
-    All the client knows is that it requested the resource "Welcome.do".
-</p>
-
-<p>
-    But if we peek at the configuration file for the MailReader,
-    we find a slightly more complicated XML element for the Welcome action.
-</p>
-
-<hr/>
-<h5>The Welcome action element</h5>
-<pre><code>&lt;action name="Welcome" <b>class="mailreader2.Welcome"</b>>
-    &lt;result>/pages/Welcome.jsp&lt;/result>
-    <strong>&lt;interceptor-ref name="guest"/></strong>
-    &lt;/action></code></pre>
-<hr/>
-
-<p>
-    Here, the <strong>Welcome</strong> Java class executes whenever
-    someone asks for the Welcome action.
-    As it completes, the Action class can select which "result" is displayed.
-    The default result name is "success".
-    Another available result, defined at a global scope, is "error".
-</p>
-
-<hr/>
-<h5>Key concept:</h5>
-<blockquote>
-    <p>
-        The Action class doesn't need to know what result type is needed
-        for "success" or "error".
-        The Action can just return the logical name for a result,
-        without knowing how the result is implemented.
-    </p>
-</blockquote>
-<hr/>
-
-<p>
-    The net effect is that all of the result details,
-    including the paths to server pages,
-    all can be declared <em>once</em> in the configuration.
-    Tightly coupled implementation details are not scattered all over
-    the application.
-</p>
-
-<hr/>
-<h5>Key concept:</h5>
-<blockquote>
-    <p>
-        The Struts configuration lets us separate concerns and "say it once".
-        The configuration helps us "normalize" an application, 
-        in much the same way we normalize a database schema. 
-    </p>
-</blockquote>
-<hr/>
-
-
-<p>
-    OK ... but why would a Welcome Action want to choose between "success" and
-    "error"?
-</p>
-
-<h4><a name="Welcome.java" id="Welcome.java">Welcome Action</a></h4>
-
-<p>
-    The MailReader application retains a list of users along with their email
-    accounts.
-    The application stores this information in a database.
-    If the application can't connect to the database, the application can't do
-    its job.
-    So before displaying the Welcome <strong>page</strong>, the Welcome
-    <strong>class</strong> checks to see if the database is available.
-</p>
-
-<p>
-    The MailReader is also an internationalized application.
-    So, the Welcome Action class checks to see if the message resources are
-    available too.
-    If both resources are available, the class passes back the "success" token.
-    Otherwise, the class passes back the "error" token,
-    so that the appropriate messages can be displayed.
-</p>
-
-<hr/>
-<h5>The Welcome Action class</h5>
-<pre><code>package mailreader2;
-public class Welcome extends MailreaderSupport {
-
-  public String execute() {
-
-    // Confirm message resources loaded
-    String message = getText(Constants.ERROR_DATABASE_MISSING);
-    if (Constants.ERROR_DATABASE_MISSING.equals(message)) {
-      <strong>addActionError(Constants.ERROR_MESSAGES_NOT_LOADED);</strong>
-    }
-
-    // Confirm database loaded
-    if (null==getDatabase()) {
-      <strong>addActionError(Constants.ERROR_DATABASE_NOT_LOADED);</strong>
-    }
-
-    if (hasErrors()) {
-      <strong>return ERROR;</strong>
-    }
-    else {
-      <strong>return SUCCESS;</strong>
-    }
-  }
-}</code></pre>
-<hr/>
-
-<p>
-    Several common result names are predefined, 
-    including ERROR, SUCCESS, LOGIN, NONE, and INPUT,
-    so that these tokens can be used consistently across Struts 2 applications.
-</p>
-
-
-<h4><a name="global-results" id="global-results">Global Results</a></h4>
-
-<p>
-    As mentioned, "error" is defined in a global scope.
-    Other actions may have trouble connecting to the database later,
-    or other unexpected errors may occur.
-    The MailReader defines the "error" result as a Global Result,
-    so that any action can use it.
-</p>
-
-<hr/>
-<h5>MailReader's global-result element</h5>
-<pre><code> &lt;global-results>
-  &lt;result name=<strong>"error"</strong>><strong>/pages/Error.jsp</strong>&lt;/result>
-  &lt;result name="invalid.token">/pages/Error.jsp&lt;/result>
-  &lt;result name="login" type="redirect-action">Login!input&lt;/result>
-&lt;/global-results></code></pre>
-<hr/>
-
-<p>
-    Of course, if an individual action mapping defines its own "error" result type,
-    the local result would be used instead.
-</p>
-
-<h4><a name="ApplicationListener.java" id="ApplicationListener.java">ApplicationListener.java</a>
-</h4>
-
-<p>
-    The database is exposed as an object stored in application scope.
-    The database object is based on an interface.
-    Different implementations of the database could be loaded without changing
-    the rest of the application.
-    But how is the database object loaded in the first place?
-</p>
-
-<p>
-    The database is created by a custom Listener that we configured in the "web.xml".
-</p>
-
-<hr/>
-<h5>mailreader2.ApplicationListener</h5>
-<pre><code> &lt;listener>
-  &lt;listener-class>
-    <strong>mailreader2.ApplicationListener</strong>
-  &lt;/listener-class>
-&lt;/listener></code></pre>
-<hr/>
-
-<p>
-    By default, our ApplicationListener loads a <strong>MemoryDatabase</strong>
-    implementation of the UserDatabase.
-    MemoryDatabase stores the database content as a XML document,
-    which is parsed and loaded as a set of nested hashtables.
-    The outer table is the list of user objects, each of which has its own
-    inner hashtable of subscriptions.
-    When you register, a user object is stored in this hashtable.
-    When you login, the user object is stored within the session context.
-</p>
-
-<p>
-    The database comes seeded with a sample user.
-    If you check the "database.xml" file under "/src/main/resources",
-    you'll see the sample user described in XML.
-</p>
-
-<hr/>
-<h5>The "seed" user element from the MailReader database.xml</h5>
-<pre><code>&lt;user username="<strong>user</strong>" fromAddress="John.User@somewhere.com"
-  fullName="<strong>John Q. User</strong>" password="<strong>pass</strong>">
-    &lt;subscription host="<strong>mail.hotmail.com"</strong> autoConnect="false"
-      password="bar" type="pop3" username="user1234">
-    &lt;/subscription>
-    &lt;subscription host="<strong>mail.yahoo.com</strong>" autoConnect="false" password="foo"
-      type="imap" username="jquser">
-    &lt;/subscription>
-&lt;/user></code></pre>
-<hr/>
-
-<p>
-    The "seed" user element creates a registration record for "John Q. User",
-    with the subscription detail for his hotmail and yahoo accounts.
-</p>
-
-<h4><a name="resources.properties" id="resources.properties">Message Resources</a>
-</h4>
-
-<p>
-    As mentioned, MailReader is an internationalized application.
-    In Struts 2, message resources are associated with the Action class being processed.
-    If we check the source, we find a language resource bundle named
-    <em>MailreaderSupport.</em>
-    MailreaderSupport is our base class for all the MailReader Actions.
-    Since all of our Actions extend MailreaderSupport,
-    all of our Actions can use the same resource bundle.
-</p>
-
-<hr/>
-<h5>Message Resource entries used by the Welcome page</h5>
-<pre><code><strong>index.heading=</strong>MailReader Application Options
-<strong>index.login=</strong>Log on to the MailReader Application
-<strong>index.registration=</strong>Register with the MailReader Application
-<strong>index.title=</strong>MailReader Demonstration Application
-<strong>index.tour=</strong>A Walking Tour of the MailReader Demonstration Application</code></pre>
-<hr/>
-
-<p>
-    If you change a message in the resource, and then rebuild and reload the 
-    application, the change will appear throughout the application.
-    If you provide message resources for additional locales, you can
-    localize your application.
-    The MailReader provides resources for English, Russian, and Japanese.
-</p>
-
-<h4><a name="Welcome.jsp" id="Welcome.jsp">Welcome Page</a></h4>
-
-<p>
-    After confirming that the necessary resources exist, the Welcome action
-    forwards to the Welcome page.
-</p>
-<hr/>
-<h5>Welcome.jsp</h5>
-<pre><code>&lt;%@ page contentType="text/html; charset=UTF-8" %>
-<strong>&lt;%@ taglib prefix="s" uri="http://struts.apache.org/tags" %></strong>
-  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-  &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-    &lt;head>
-      &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-      &lt;title><strong>&lt;s:text name="index.title"/></strong>&lt;/title>
-      &lt;link href="<strong>&lt;s:url value="/css/mailreader.css"/></strong>" rel="stylesheet"
-      type="text/css"/>
-    &lt;/head>
-
-    &lt;body>
-      &lt;h3>&lt;s:text name="index.heading"/>&lt;/h3>
-
-      &lt;ul>
-        &lt;li>&lt;a href="&lt;s:url action="Registration!input"/>">&lt;s:text
-          name="index.registration"/>&lt;/a>&lt;/li>
-        &lt;li>&lt;a href="&lt;s:url action="Login!input"/>">&lt;s:text
-          name="index.login"/>&lt;/a>&lt;/li>
-      &lt;/ul>
-
-      &lt;h3>Language Options&lt;/h3>
-      &lt;ul>
-          &lt;li>
-              &lt;s:url id="en" action="Welcome">
-                  &lt;s:param name="request_locale">en&lt;/s:param>
-              &lt;/s:url>
-               &lt;s:a href="%{en}">English&lt;/s:a>
-           &lt;/li>
-          &lt;li>
-              &lt;s:url id="ja" action="Welcome">
-                &lt;s:param name="request_locale">ja&lt;/s:param>
-              &lt;/s:url>
-              &lt;s:a href="%{ja}">Japanese&lt;/s:a>
-          &lt;/li>
-          &lt;li>
-              &lt;s:url id="ru" action="Welcome">
-              &lt;s:param name="request_locale">ru&lt;/s:param>
-              &lt;/s:url>
-              &lt;s:a href="%{ru}">Russian&lt;/s:a>
-          &lt;/li>
-      &lt;/ul>
-
-    &lt;hr />
-
-    &lt;p><strong>&lt;s:i18n name="alternate"></strong>
-    &lt;img src="&lt;s:text name="struts.logo.path"/>"
-      alt="&lt;s:text name="struts.logo.alt"/>"/>
-    <strong>&lt;/s:i18n></strong>&lt;/p>
-
-    &lt;p>&lt;a href="&lt;s:url action="Tour" />">&lt;s:text name="index.tour"/>&lt;/a>&lt;/p>
-
-  &lt;/body>
-&lt;/html></code></pre>
-<hr/>
-
-<p>
-    At the top of the Welcome page, there are several directives that load the
-    Struts 2 tag libraries.
-    These are just the usual red tape that goes with any JSP file.
-    The rest of the page utilizes three Struts JSP tags:
-    "text", "url", and "i18n".
-</p>
-
-<p>
-    (We use the tag prefix "s:" in the Struts 2 MailReader application,
-    but you can use whatever prefix you like in your applications.)
-</p>
-
-<p>
-    The <strong>text</strong> tag inserts a message from an
-    application's default resource bundle.
-    If the framework's locale setting is changed for a user,
-    the text tag will render messages from the new locale's resource
-    bundle instead.
-</p>
-
-<p>
-    The <strong>url</strong> tag can render a reference to an
-    action or any other web resource,
-    applying "URL encoding" to the hyperlinks as needed.
-    Java's URL encoding feature lets your application maintain client state
-    without requiring cookies.
-</p>
-
-<hr/>
-<h5>Tip:</h5>
-<blockquote>
-    <p><font class="hint">
-        <strong>Cookies</strong> -
-        If you turn cookies off in your browser, and then reload your browser
-        and this page,
-        you will see the links with the Java session id information attached.
-        (If you are using Internet Explorer and try this,
-        be sure you reset cookies for the appropriate security zone,
-        and that you disallow "per-session" cookies.)
-    </font></p>
-</blockquote>
-<hr/>
-
-<p>
-    The <strong>i18n</strong> tag provides access to multiple resource bundles.
-    The MailReader application uses a second set of message resources for
-    non-text elements.
-    When these are needed, we use the "i18n" tag to specify a different bundle.
-</p>
-
-<p>
-    The <strong>alternate</strong> bundle is stored in the {{/src/main/resources}} folder,
-    so that it ends up under "classes", which is on the application's class path.
-</p>
-
-<p>
-    In the span of a single request for the Welcome page, the framework has done
-    quite a bit already:
-</p>
-
-<ul>
-    <li>
-        Confirmed that required resources were loaded during initialization.
-    </li>
-
-    <li>
-        Written all the page headings and labels from internationalized
-        message resources.
-    </li>
-
-    <li>
-        Automatically URL-encoded paths as needed.
-    </li>
-</ul>
-
-<p>
-    When rendered, the Welcome page lists two menu options:
-    one to register with the application and one to log on (if you have
-    already registered).
-    Let's follow the Login link first.
-</p>
-
-<h3><a name="Login" id="Login">Login</a></h3>
-
-<p>
-    If you choose the Login link, and all goes well, the Login action forwards
-    control to the Login page.
-</p>
-
-<h4><a name="Login.jsp" id="Login.jsp">Login Page</a></h4>
-
-<p>
-    The Login page displays a form that accepts a username and password.
-    You can use the default username and password to login
-    (<strong>user</strong> and <strong>pass</strong>), if
-    you like. Try omitting or misspelling the username and password in
-    various combinations to see how the application reacts.
-    Note that both the username and password are case sensitive.
-</p>
-
-<hr/>
-<h5>Login.jsp</h5>
-<pre><code>&lt;%@ page contentType="text/html; charset=UTF-8" %>
-  &lt;%@ taglib prefix="s" uri="http://struts.apache.org/tags"  %>
-  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-  &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  &lt;head>
-    &lt;title>&lt;s:text name="login.title"/>&lt;/title>
-      &lt;link href="&lt;s:url value="/css/mailreader.css"/>" rel="stylesheet"
-        type="text/css"/>
-  &lt;/head>
-  &lt;body onLoad="self.focus();document.Login.username.focus()">
-    <strong>&lt;s:actionerror/></strong>
-    <strong>&lt;s:form action="Login" validate="true"></strong>
-      <strong>&lt;s:textfield label="%{getText('username')}" name="username"/></strong>
-      <strong>&lt;s:password label="%{getText('password')}" name="password"/></strong>
-      <strong>&lt;s:submit value="%{getText('button.save')}"/></strong>
-      <strong>&lt;s:reset value="%{getText('button.reset')}"/></strong>
-      &lt;s:submit <strong>action="Login!cancel" onclick="form.onsubmit=null"</strong>
-        value="%{getText('button.cancel')}"/>
-    &lt;/s:form>
-    &lt;jsp:include page="Footer.jsp"/>
-  &lt;/body>
-&lt;/html></code></pre>
-<hr/>
-
-<p>
-    We already saw some of the tags used by the Login page on the Welcome page.
-    Let's focus on the new tags.
-</p>
-
-<p>
-    The first new tag on the Login page is <strong>actionerrors</strong>.
-    Most of the possible validation errors are related to a single field.
-    If you don't enter a username,
-    the framework can place an error message near the tag prompting you to
-    enter a username.
-    But some messages are not related to a single field.
-    For example, the database might be down.
-    If the action returns an "Action Error", as opposed to a "Field Error",
-    the messages are rendered in place of the "actionerror" tag.
-    The text for the validation errors, whether they are Action Errors or
-    Field Errors, can be specified in the resource bundle,
-    making the messages easy to manage and localize.
-</p>
-
-<p>
-    The second new tag is <strong>form</strong>.
-    This tag renders a HTML form tag.
-    The "validate=true" setting enables client-side validation,
-    so that the form can be validated with JavaScript before being sent
-    back to the server.
-    The framework will still validate the form again, just to be sure, but the
-    client-side validation can save a few round-trips to the server.
-</p>
-
-<p>
-    Within the form tag,
-    we see four more new tags: "textfield", "password", "submit",
-    and "reset". We also see a second usage of "submit" that utilizes an
-    "action" attribute.
-</p>
-
-<p>
-    When we place a control on a form, we usually need to code a set of
-    HTML tags to do everything we want to do.
-    Most often, we do not just want a plain "input type=text" tag.
-    We want the input field to have a label too, and maybe even
-    a tooltip. And, of course, a place to print a message
-    should invalid data be entered.
-</p>
-
-<p>
-    The Struts Tags support templates and themes so that a set of HTML tags can be
-    rendered from a single Struts Tag. For example, the single tag
-</p>
-
-<pre><code>
-    &lt;s:<strong>textfield</strong> label="%{getText('username')}" name="username"/>
-</code></pre>
-
-<p>
-    generates a wad of HTML markup.
-</p>
-
-<hr/>
-<pre><code>&lt;tr>
-  &lt;td class="tdLabel">
-    &lt;label for="Login_username" class="label">Username:&lt;/label>
-  &lt;/td>
-  &lt;td>
-    &lt;input type="text" name="username" value="" id="Login_username"/>
-  &lt;/td>
-&lt;/tr></code></pre>
-<hr/>
-
-<p>
-    If for some reason you don't like the markup generated by a Struts Tag,
-    it's each to change.
-    Each tag is driven by a template that can be updated on a tag-by-tag basis.
-    For example,
-    here is the default template that generates the markup for the ActionErrors tag:
-</p>
-
-<hr/>
-<pre><code>&lt;#if (actionErrors?exists && actionErrors?size > 0)>
-  &lt;ul>
-    &lt;#list actionErrors as error>
-      &lt;li>&lt;span class="errorMessage">${error}&lt;/span>&lt;/li>
-    &lt;/#list>
-  &lt;/ul>
-&lt;/#if></code></pre>
-<hr/>
-
-<p>
-    If you wanted ActionErrors displayed in a table instead of a list,
-    you could edit a copy of this file, save it as a file named
-    "template/simple/actionerror.ftl",
-    and place this one file at the base of your application's classpath.
-</p>
-
-<hr/>
-<pre><code>&lt;#if (actionErrors?exists && actionErrors?size > 0)>
-  <strong>&lt;table></strong>
-    &lt;#list actionErrors as error>
-      <strong>&lt;tr>&lt;td></strong>&lt;span class="errorMessage">${error}&lt;/span><strong>&lt;/td>&lt;/tr></strong>
-    &lt;/#list>
-  <strong>&lt;/table></strong>
-&lt;/#if></code></pre>
-<hr/>
-
-<p>
-    Under the covers, the framework uses
-    <a href="http://freemarker.sourceforge.net/">Freemarker</a>
-    for its standard templating language.
-    FreeMarker is similar to
-    <a href="http://jakarta.apache.org/velocity/">Velocity</a>,
-    but it offers better error reporting and some additional features.
-    If you prefer, Velocity and JSP templates can also be used to create your own tags.
-</p>
-
-<p>
-    The <strong>password</strong> tag renders a "input type=password"
-    tag, along with the usual template/theme markup.
-    By default, the password tag will not retain input if the submit fails.
-    If the username is wrong,
-    the client will have to enter the password again too.
-    (If you did want to retain the password when validation fails,
-    you can set the tag's "showPassword" property to true.)
-</p>
-
-<p>
-    Unsurprisingly, the <strong>submit</strong> and <strong>reset</strong> tags
-    render buttons of the corresponding types.
-</p>
-
-<p>
-    The second submit button is more interesting.
-</p>
-
-<pre><code>  &lt;s:submit <strong>action="Login!cancel" onclick="form.onsubmit=null"</strong>
-    value="%{getText('button.cancel')}"/>
-</code></pre>
-
-<p>
-    Here we are creating the Cancel button for the form.
-    The button's attribute <em>action="Login<strong>!</strong>cancel"</em>
-    tells the framework to submit to the Login's "cancel" method
-    instead of the usual "execute" method.
-    The <em>onclick="form.onsubmit=null"</em> script defeats client-side validation.
-    On the server side, "cancel" is on a special list of methods that bypass validation,
-    so the request will go directly to the Action's <strong>cancel</strong> method.
-    Another entry on the special-case list is the "input" method.
-</p>
-
-<hr/>
-<h5>Tip:</h5>
-<blockquote>
-    <p><font class="hint">
-        The Struts Tags have options and capabilities beyond what we have shown here.
-        For more see, the <a href="http://cwiki.apache.org/WW/tag-developers-guide.html">
-            Struts Tag documentation.</a>
-    </font></p>
-</blockquote>
-<hr/>
-
-<p>
-    OK, but how do the tags know that both of these fields are required?
-    How do they know what message to display when the fields are empty?
-</p>
-
-<p>
-    For the answers, we need to look at another flavor of configuration file:
-    the "validation" file.
-</p>
-
-<h4><a name="Login-validation.xml" id="Login-validation.xml">Login-validation.xml</a>
-</h4>
-
-<p>
-    While it is not hard to code data-entry validation into an Action class,
-    the framework provides an even easier way to validate input.
-</p>
-
-<p>
-    The validation framework is configured through another XML document, the <strong>
-    Login-validation.xml</strong>.
-</p>
-
-<hr/>
-<h5>Validation file for Login Action</h5>
-<pre><code>&lt;!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
-  "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-&lt;validators>
-  &lt;field name="<strong>username</strong>">
-    &lt;field-validator type="<strong>requiredstring</strong>">
-    &lt;message key="<strong>error.username.required</strong>"/>
-  &lt;/field-validator>
-  &lt;/field>
-  &lt;field name="<strong>password</strong>">
-    &lt;field-validator type="<strong>requiredstring</strong>">
-    &lt;message key="<strong>error.password.required</strong>"/>
-    &lt;/field-validator>
-  &lt;/field>
-&lt;/validators>
-</code></pre>
-<hr/>
-
-<p>
-   You may note that the DTD refers to "XWork". 
-   <a href="http://www.opensymphony.com/xwork/">
-     Open Symphony XWork
-   </a> is a generic command-pattern framework that can be used outside of a 
-   web environment. In practice, Struts 2 is a web-based extension of the 
-   XWork framework. 
-</p>
-
-<p>
-    The field elements correspond to the ActionForm properties.
-    The <strong>username</strong> and <strong>password</strong> field elements
-    say that each field depends on the "requiredstring" validator.
-    If the username is blank or absent, validation will fail and an error
-    message is generated.
-    The messages would be based on the "error.username.required" or
-    "error.password.required" message templates, from the resource bundle.
-</p>
-
-<!--
-<p>
-    The <strong>password</strong> field (or property) is also required.
-    In addition, it must also pass the "maxlength" and "minlength"
-    validations.
-    Here, the minimum length is three characters and the maximum length is
-    sixteen.
-    If the length of the password doesn't meet these criteria, a corresponding
-    error message is generated.
-    Of course, the messages are generated from the MessageResource bundles and
-    are easy to localize.
-</p>
--->
-
-<h4><a name="Login.java" id="Login.java">Login Action</a></h4>
-
-<p>
-    If validation passes, the framework invokes the "execute" method of the Login Action.
-    The actual Login Action is brief, since most of the functionality derives
-    from the base class, <strong>MailreaderSupport</strong>.
-</p>
-
-<hr/>
-<h5>Login.java</h5>
-<pre><code>package mailreader2;
-import org.apache.struts.apps.mailreader.dao.User;
-public final class <strong>Login</strong> extends MailreaderSupport {
-public String <strong>execute()</strong> throws ExpiredPasswordException {
-  User user = <strong>findUser(getUsername(), getPassword());</strong>
-  if (user != null) {
-    <strong>setUser(user);</strong>
-  }
-  if (<strong>hasErrors()</strong>) {
-    return INPUT;
-  }
-    return SUCCESS;
-  }
-}</code></pre>
-<hr/>
-
-<p>
-    Login lays out what we do to authenticate a user.
-    We try to find the user using the credentials provided.
-    If the user is found, we cache a reference.
-    If the user is not found, we return "input" so the client can try again.
-    Otherwise, we return "success", so that the client can access the rest of the application.
-</p>
-
-<h4><a name="MailreaderSupport.java" id="MailreaderSupport.java">MailreaderSupport.java</a></h4>
-
-<p>
-    Let's look at the relevant properties and methods from MailreaderSupport
-    and another base class, <strong>ActionSupport</strong>, namely 
-    "getUsername", "getPassword", "findUser", "setUser", and "hasErrors".
-</p>
-
-<p>
-    The framework lets you define
-    <a href="http://struts.apache.org/primer.html#javabeans">JavaBean properties</a>
-    directly on the Action.
-    Any JavaBean property can be used, including rich objects.
-    When a request comes in,
-    any public properties on the Action class are matched with the request parameters.
-    When the names match, the request parameter value is set to the JavaBean property.
-    The framework will make its best effort to convert the data,
-    and, if necessary, it will report any conversion errors.
-</p>
-
-<p>
-    The <strong>Username</strong> and <strong>Password</strong> properties are nothing fancy,
-    just standard JavaBean properties.
-</p>
-
-<hr/>
-<h5>MailreaderSupport.getUsername() and getPassword()</h5>
-<pre><code>private String username = null;
-public String <strong>getUsername()</strong> {
-  return this.username;
-}
-public void setUsername(String username) {
-  this.username = username;
-}
-
-private String password = null;
-public String <strong>getPassword()</strong> {
-  return this.password;
-}
-public void setPassword(String password) {
-  this.password = password;
-}</code></pre>
-<hr/>
-
-<p>
-    We use these properties to capture the client's credentials,
-    and pass them to the more interesting <strong>findUser</strong> method.
-</p>
-
-<hr/>
-<h5>MailreaderSupport.findUser</h5>
-<pre><code>public User <strong>findUser</strong>(String username, String password)
-  throws <strong>ExpiredPasswordException</strong> {
-  User user = <strong>getDatabase().findUser(username)</strong>;
-  if ((user != null) && !user.getPassword().equals(password)) {
-    user = null;
-  }
-  if (user == null) {
-    this.<strong>addFieldError</strong>("password", getText("error.password.mismatch"));
-  }
-  return user;
-}</code></pre>
-<hr/>
-
-<p>
-    The "findUser" method dips into the MailReader Data Access Object layer,
-    which is represented by the <strong>Database</strong> property.
-    The code for the DAO layer is maintained as a separate component.
-    The MailReader application imports the DAO JAR,
-    but it is not responsible for maintaining any of the DAO source.
-    Keeping the data access layer at "arms-length" is a very good habit.
-    It encourages a style of development where the data access layer
-    can be tested and developed independently of a specific end-user application.
-    In fact, there are several renditions of the MailReader application,
-    all which share the same MailReader DAO JAR!
-</p>
-
-<hr/>
-<h5>Best Practice:</h5>
-<blockquote>
-    <p>
-        <font class="hint">"Strongly separate data access and business logic from the rest of
-            the application."</font>
-    </p>
-</blockquote>
-<hr/>
-
-<p>
-    When "findUser" returns,
-    the Login Action looks to see if a valid (non-null) User object is returned.
-    A valid User is passed to the <strong>User property</strong>.
-    Although it is still a JavaBean property, 
-    the User property is not implemented in quite the same way as Username and Password.
-</p>
-
-<hr/>
-<h5>MailreaderSupport.setUser</h5>
-<pre><code>public User getUser() {
-  return (User) <strong>getSession().get(Constants.USER_KEY)</strong>;
-}
-public void setUser(User user) {
-  getSession().put(Constants.USER_KEY, user);
-}</code></pre>
-<hr/>
-
-<p>
-    Instead of using a field to store the property value,
-    "setUser" passes it to a <strong>Session</strong> property.
-</p>
-
-<hr />
-<h5>MailreaderSupport.getSession() and setSession()</h5>
-<pre><code>private Map session;
-public Map <strong>getSession()</strong> {
-  return session;
-
-public void <strong>setSession(Map value)</strong> {
-  session = value;
-}</code></pre>
-<hr />
-
-<p>
-    To look at the MailreaderSupport class,
-    you would think the Session property is a plain-old Map.
-    In fact,
-    the Session property is an adapter that is backed by the servlet session object at runtime.
-    The MailreaderSupport class doesn't need to know that though.
-    It can treat Session like any other Map.
-    We can also test the MailreaderSupport class by passing it some other implementation of
-    Map, running the test,
-    and then looking to see what changes MailreaderSupport made to our "mock" Session object.
-</p>
-
-<p>
-    But, when MailreaderSupport is running inside a web application,
-    how does it acquire a reference to the servlet session?
-</p>
-
-<p>
-    Good question. If you were to look at just the MailreaderSupport class,
-    you would not see a single line of code that sets the session property.
-    But, yet, when we run the class, the session property is not null.
-    Hmmm.
-</p>
-
-<p>
-    The magic that provides the Session property a runtime value is called
-    "dependency injection".
-    The MailreaderSupport class implements a interface called <strong>SessionAware</strong>.
-    SessionAware is bundled with the framework,
-    and it defines a setter for the Session property.
-</p>
-
-<p>
-    <code>public void <strong>setSession</strong>(Map session);</code>
-</p>
-
-<p>
-    Also bundled with the framework is an object called the
-    <strong>ServletConfigInterceptor</strong>.
-    If the ServletConfigInterceptor sees that an Action implements the SessionAware interface,
-    it automatically set the session property.
-</p>
-
-<pre><code>if (action instanceof <code>SessionAware</code>) {
-  ((SessionAware) action).<code>setSession</code>(context.getSession());
-}</code></pre>
-
-<p>
-    The framework uses these "Interceptor" classes to create a <strong>front controller</strong>
-    for each action an application defines.
-    Each Interceptor can peek at the request before an Action class is invoked,
-    and then again after the Action class is invoked.
-    (If you have worked with Servlet
-    <a href="http://struts.apache.org/primer.html#filters">Filters</a>,
-    you will recognize this pattern.
-    But, unlike Filters, Interceptors are not tied to HTTP.
-    Interceptors can be tested and developed outside of a web application.)
-</p>
-
-<p>
-    You can use the same set of Interceptors for all your actions,
-    or define a special set of Interceptors for any given action,
-    or define different sets of Interceptors to use with different types of actions.
-    The framework comes with a default set of Interceptors,
-    that it will use when another set is not specified,
-    but you can designate your own default Interceptor set (or "stack")
-    in the Struts configuration.
-</p>
-
-<p>
-    Many Interceptors provide a utility or helper functions,
-    like setting the session property.
-    Others, like the <strong>ValidationInterceptor</strong>,
-    can change the workflow of an action.
-    Interceptors are key feature of the framework,
-    and we will see a few more on the tour.
-</p>
-
-<p>
-    If a valid User is not found, or the password doesn't match,
-    the "findUser" method invokes the <strong>addFieldError</strong> method to note the
-    problem.
-    When "findUser" returns, the Login Action checks for errors,
-    and then it returns either INPUT or SUCCESS.
-</p>
-
-<p>
-    The "addFieldError" method is provided by the ActionSupport class,
-    which is bundled with the framework.
-    The constants for INPUT and SUCCESS are also provided by ActionSupport.
-    While the ActionSupport class provides many useful utilities,
-    you are not required to use it as a base class.
-    Any Java class can be used as an Action, if you like.
-</p>
-
-<p>
-    It is a good practice to provide a base class with utilities
-    that can be shared by an application's Action classes.
-    The framework does this with ActionSupport,
-    and the MailReader application does the same with the MailreaderSupport class.
-</p>
-
-<hr/>
-<h5>Best Practice:</h5>
-<blockquote>
-  <p><font class="hint">"Use a base class to define common functionality."</font></p>
-</blockquote>
-<hr/>
-
-<p>
-    But, what happens if Login returns INPUT instead of SUCCESS.
-    How does the framework know what to do next?
-</p>
-
-<p>
-    To answer that question,
-    we need to turn back to the Struts configuration
-    and look at how Login is declared.
-</p>
-
-
-<h4><a name="Login.xml" id="Login.xml">Login Configuration</a></h4>
-
-<p>
-    The Login action element outlines how the Login workflow operates,
-    including what to do when the Action returns "input",
-    or the default result name "success".
-</p>
-
-<hr/>
-<h5>mailreader-support.xml Login</h5>
-<pre><code>&lt;action name="<strong>Login!*</strong>" method="{1}" class="mailreader2.Login">
-  &lt;result name="<strong>input</strong>">/pages/Login.jsp&lt;/result>
-  &lt;result name="<strong>cancel</strong>" type="redirect-action">Welcome&lt;/result>
-  &lt;result type="redirect-action">MainMenu&lt;/result>
-  &lt;result name="<strong>expired</strong>" type="chain">ChangePassword&lt;/result>
-  &lt;<strong>exception-mapping</strong>
-    exception="org.apache.struts.apps.mailreader.dao.ExpiredPasswordException"
-  result="<strong>expired</strong>"/>
-  &lt;interceptor-ref name="<strong>guest</strong>"/>
-&lt;/action></code></pre>
-<hr/>
-
-<p>
-    You might notice that the name of the Login action element is not "Login"
-    but "Login<strong>!*</strong>".
-    The asterisk is a special "wildcard" notation that tells the framework to match any series
-    of character at this point.
-    In the method attribute,
-    the "{1}" notation indicates that framework should substitute whatever characters match
-    the asterisk at runtime.
-    When we cite actions like "Login!cancel" or "Login!input",
-    the framework matches "cancel" or "input" with the wildcard and fills in the blanks.
-</p>
-
-<p>
-    The "trailing bang" notation was hardwired into WebWork 2.
-    To provide backward compatibility,
-    the notation is supported by Struts 2.0.
-    If you prefer to use wildcards to emulate the same notation,
-    as the Mailreader does,
-    you should disable the old notation in the Struts properties file.
-</p>
-
-<hr/>
-<h5>struts.properties</h5>
-<pre><code>struts.enable.DynamicMethodInvocation = false</code></pre>
-<hr/>
-
-<p>
-    Using wildcards with a exclamation point (or "bang") is not the only way we can use
-    wilcards to invoke methods.
-    If we wanted to use actions like "inputLogin",
-    we could move the asterisk and use an action name like "*Login".
-</p>
-
-<p>
-    Within the Login action element, the first result element is named "input".
-    If validation or authentification fail,
-    the Action class will return "input" and the framework will transfer control to the 
-    "Login.jsp" page.
-</p>
-
-<p>
-    The second result element is named <strong>cancel</strong>.
-    If someone presses the cancel button on the Login page,
-    the Action class will return "cancel", this result will be selected,
-    and the framework will issue a redirect to the Welcome action.
-</p>
-
-<p>
-    The third result has no name,
-    so it will be called if the default <strong>success</strong> token is returned.
-    So, if the Login succeeds,
-    control will transfer to the MainMenu action.
-</p>
-
-<p>
-    The MailReader DAO exposes a "ExpiredPasswordException".
-    If the DAO throws this exception when the User logs in,
-    the framework will process the exception-mapping
-    and transfer control to the "ChangePassword" action.
-</p>
-
-<p>
-    Just in case any other Exceptions are thrown,
-    the MailReader application also defines a global handler.
-</p>
-
-<hr/>
-<h5>mailreader-default.xml exception-mapping</h5>
-<pre><code>&lt;global-exception-mappings>
-  &lt;exception-mapping
-    result="error"
-    exception="java.lang.Exception"/>
-&lt;/global-exception-mappings></code></pre>
-<hr/>
-
-<p>
-    If an unexpected Exception is thrown,
-    the exception-mapping will transfer control to the action's "error" result,
-    or to a global "error" result.
-    The MailReader defines a global "error" result
-    which transfers control to an "Error.jsp" page
-    that can display the error message.
-</p>
-
-<hr/>
-<h5>Error.jsp</h5>
-<pre><code>&lt;%@ page contentType="text/html; charset=UTF-8" %>
-&lt;%@ taglib prefix="s" uri="http://struts.apache.org/tags" %>
-  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-  &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  &lt;head>
-    &lt;title>Unexpected Error&lt;/title>
-  &lt;/head>
-  &lt;body>
-    &lt;h2>An unexpected error has occured&lt;/h2>
-    &lt;p>
-      Please report this error to your system administrator
-      or appropriate technical support personnel.
-      Thank you for your cooperation.
-    &lt;/p>
-    &lt;hr />
-    &lt;h3>Error Message&lt;/h3>
-    <strong>&lt;s:actionerror /></strong>
-    &lt;p>
-      <strong>&lt;s:property value="%{exception.message}"/></strong>
-    &lt;/p>
-    &lt;hr />
-    &lt;h3>Technical Details&lt;/h3>
-    &lt;p>
-      <strong>&lt;s:property value="%{exceptionStack}"/></strong>
-    &lt;/p>
-    &lt;jsp:include page="Footer.jsp"/>
-  &lt;/body>
-&lt;/html></code></pre>
-<hr/>
-
-<p>
-    The Error page uses <strong>property</strong> tags to expose
-    the Exception message and the Exception stack.
-</p>
-
-<p>
-    Finally, the Login action specifies an <strong>InterceptorStack</strong>
-    named <strong>defaultStack.</strong>
-    If you've worked with Struts 2 or WebWork 2 before, that might seem strange,
-    since "defaultStack" is the factory default.
-</p>
-
-<p>
-    In the MailReader application, most of the actions are only available
-    to authenticated users.
-    The exceptions are the Welcome, Login, and Register actions
-    which are available to everyone.
-    To authenticate clients,
-    the MailReader uses a custom Interceptor and a custom Interceptor stack.
-</p>
-
-<hr/>
-<h5>mailreader2.AuthenticationInterceptor</h5>
-<pre><code>package mailreader2;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Action;
-import java.util.Map;
-import org.apache.struts.apps.mailreader.dao.User;
-
-public class <strong>AuthenticationInterceptor</strong> implements Interceptor {
-  public void destroy () {}
-  public void init() {}
-  public String <strong>intercept</strong>(ActionInvocation actionInvocation) throws Exception {
-    Map session = actionInvocation.getInvocationContext().getSession();
-    User user = (User) session.get(Constants.USER_KEY);
-    boolean isAuthenticated = (null!=user) && (null!=user.getDatabase());
-    if (<strong>isAuthenticated</strong>) {
-      return actionInvocation.invoke();
-    }
-    else {
-      return Action.LOGIN;
-    }
-  }
-}</code></pre>
-<hr/>
-
-<p>
-    The <strong>AuthenticationInterceptor</strong> looks to see if a User object
-    has been stored in the client's session state.
-    If so, it returns normally, and the next Interceptor in the set would be invoked.
-    If the User object is missing, the Interceptors returns "login".
-    The framework would match "login" to the global result,
-    and transfer control to the Login action.
-</p>
-
-<p>
-    The MailReader defines three custom Interceptor stacks: "user", "user-submit",
-    and "guest".
-</p>
-
-<hr/>
-<h5>mailreader-default.xml interceptors</h5>
-<pre><code>&lt;interceptors>
-  &lt;interceptor name="<strong>authentication</strong>"
-               class="mailreader2.AuthenticationInterceptor"/>
-  &lt;interceptor-stack name="<strong>user</strong>" >
-      &lt;interceptor-ref name="authentication" />
-      &lt;interceptor-ref name="defaultStack"/>
-  &lt;/interceptor-stack>
-  &lt;interceptor-stack name="<strong>user-submit</strong>" >
-      &lt;interceptor-ref name="token-session" />
-      &lt;interceptor-ref name="user"/>
-  &lt;/interceptor-stack>
-  &lt;interceptor-stack name="<strong>guest</strong>" >
-      &lt;interceptor-ref name="defaultStack"/>
-  &lt;/interceptor-stack>
-&lt;/interceptors>
-&lt;<strong>default-interceptor-ref</strong> name="user"/></code></pre>
-<hr/>
-
-<p>
-    The <strong>user</strong> stacks require that the client be authenticated. 
-    In other words, that a User object is present in the session.
-    The actions using a <strong>guest</strong> stack can be accessed by any client.
-    The <strong>-submit</strong> versions of each can be used with actions
-    with forms, to guard against double submits.
-</p>
-
-<h5>Double Submits</h5>
-
-<p>
-    A common problem with designing web applications is that users are impatient 
-    and response times can vary.
-    Sometimes, people will press a submit button a second time.
-    When this happens, the browser submits the request again,
-    so that we now have two requests for the same thing.
-    In the case of registering a user, if someone does press the submit button
-    again, and their timing is bad,
-    it could result in the system reporting that the username has already been
-    used.
-    (The first time the button was pressed.)
-    In practice, this would probably never happen, but for a longer running
-    process, like checking out a shopping cart,
-    it's easier for a double submit to occur.
-</p>
-
-<p>
-    To forestall double submits, and "back button" resubmits,
-    the framework can generate a token that is embedded in the form
-    and also kept in the session.
-    If the value of the tokens do not compare,
-    then we know that there has been a problem,
-    and that a form has been submitted twice or out of sequence.
-</p>
-
-<p>
-    The Token Session Interceptor will also attempt to provide intelligent
-    fail-over in the event of multiple requests using the same session.
-    That is, it will block subsequent requests until the first request is complete,
-    and then instead of returning the "invalid.token" code,
-    it will attempt to display the same response that the
-    original, valid action invocation would have displayed
-</p>
-
-<p>
-    Because the default interceptor stack will now authenticate the client,
-    we need to specify the standard "defaultStack" for the three 
-    "guest actions", Welcome, Login, and Register.
-    Requiring authentification by default is the better practice, since it 
-    means that we won't forget to enable it when creating new actions. 
-    Meanwhile, those pesky users will ensure that we don't forget to disable 
-    authentification for "guest" services.
-</p>
-
-<h3><a name="MainMenu" id="MainMenu">MainMenu</a></h3>
-
-<p>
-    On a successful login, the Main Menu page displays.
-    If you logged in using the demo account,
-    the page title should be "Main Menu Options for John Q. User".
-    Below this legend should be two links:
-</p>
-
-<ul>
-    <li>
-        Edit your user registration profile
-    </li>
-    <li>
-        Log off MailReader Demonstration Application
-    </li>
-</ul>
-
-<p>
-    Let's review the source for the "MainMenu" action mapping,
-    and the "MainMenu.jsp".
-</p>
-
-<hr/>
-<h5>Action mapping element for MainMenu</h5>
-<pre><code>&lt;action name="MainMenu" class="mailreader2.MailreaderSupport">
-    &lt;result>/pages/MainMenu.jsp&lt;/result>
-    &lt;/action></code></pre>
-
-<h5>MainMenu.jsp</h5>
-<pre><code>&lt;%@ page contentType="text/html; charset=UTF-8" %>
-&lt;%@ taglib prefix="s" uri="http://struts.apache.org/tags"  %>
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-  &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  &lt;head>
-    &lt;title>&lt;s:text name="mainMenu.title"/>&lt;/title>
-      &lt;link href="&lt;s:url value="/css/mailreader.css"/>" rel="stylesheet"
-      type="text/css"/>
-  &lt;/head>
-
-  &lt;body>
-  &lt;h3>&lt;s:text name="mainMenu.heading"/> <strong>&lt;s:property
-    value="user.fullName"/></strong>&lt;/h3>
-  &lt;ul>
-    &lt;li>&lt;a href="&lt;s:url <strong>action="Registration!input"</strong> />">
-        &lt;s:text name="mainMenu.registration"/>
-      &lt;/a>
-    &lt;/li>
-    &lt;li>&lt;a href="&lt;s:url <strong>action="Logout"</strong> />">
-      &lt;s:text name="mainMenu.logout"/>
-      &lt;/a>
-    &lt;/ul>
-  &lt;/body>
-&lt;/html></code></pre>
-<hr/>
-
-<p>
-    The source for "MainMenu.jsp" also contains a new tag, <strong>
-    property</strong>, which we use to customize the page with the
-    "fullName" property of the authenticated user.
-</p>
-
-<p>
-    Displaying the user's full name is the reason the MainMenu action
-    references the MailreaderSupport class.
-    The MailreaderSupport class has a User property that the text tag
-    can access.
-    If we did not utilize MailreaderSupport,
-    the property tag would not be able to find the User object to print
-    the full name.
-</p>
-
-<p>
-    The customized MainMenu page offers two standard links.
-    One is to "Edit your user registration profile".
-    The other is to "Logout the MailReader Demonstration Application".
-</p>
-
-<h3><a name="Registration.jsp" id="Registration.jsp">Registration page</a>
-</h3>
-
-<p>
-    If you follow the "Edit your user registration profile" link from the Main
-    Menu page,
-    we will finally reach the heart of the MailReader application: the
-    Registration, or "Profile", page.
-    This page displays everything MailReader knows about you
-    (or at least your login),
-    while utilizing several interesting techniques.
-</p>
-
-<p>
-    To do double duty as the "Create" Registration page and the "Edit"
-    Registration page,
-    the "Registration.jsp" makes extensive use of the test tags,
-    to make it appears as though there are two distinct pages.
-</p>
-
-<hr />
-<h5>Registration.jsp - head element</h5>
-<pre><code>&lt;head>
-  &lt;s:if test="<strong>task=='Create'</strong>">
-    &lt;title>&lt;s:text name="registration.title.create"/>&lt;/title>
-  &lt;/s:if>
-  &lt;s:if test="<strong>task=='Edit'</strong>">
-    &lt;title>&lt;s:text name="registration.title.edit"/>&lt;/title>
-  &lt;/s:if>
-  &lt;link href="&lt;s:url value="/css/mailreader.css"/>" rel="stylesheet"
-    type="text/css"/>
-&lt;/head></code></pre>
-<hr />
-
-<p>
-    For example, if client is editing the form (task == 'Edit'),
-    the page inserts the username from the User object.
-    For a new Registration (task == 'Create'),
-    the page creates an empty data-entry field.
-</p>
-
-<hr/>
-<h5>Note:</h5>
-<blockquote>
-    <p><font class="hint">
-        <strong>Presention Logic</strong> -
-        The "test" tag is a convenient way to express presentation
-        logic within your pages.
-        Customized pages help to prevent user error,
-        and dynamic customization reduces the number of server pages your 
-        application needs to maintain, among other benefits.
-    </font></p>
-</blockquote>
-<hr/>
-
-<p>
-    The page also uses logic tags to display a list of subscriptions
-    for the given user.
-    If the RegistrationForm has task set to "Edit",
-    the lower part of the page that lists the subscriptions is exposed.
-</p>
-
-<hr/>
-<h5></h5>
-<pre><code>&lt;s:if test=<strong>"task == 'Edit'"</strong>>
-  &lt;div align="center">
-    &lt;h3>&lt;s:text name="heading.subscriptions"/>&lt;/h3>
-  &lt;/div>
-    &lt;!-- ... -->
-  &lt;/s:if>
-&lt;jsp:include page="Footer.jsp"/>
-&lt;/body>&lt;/html></code></pre>
-<hr/>
-
-<p>
-    Otherwise, the page contains just the top portion --
-    a data-entry form for managing the user's registration.
-</p>
-
-<h4><a name="iterator" id="iterator">iterator</a></h4>
-
-<p>
-    Besides "if" there are several other control tags that you can use
-    to sort, filter, or iterate over data.
-    The Registration page includes a good example of using the <strong>iterator</strong>
-    tag to display the User's Subscriptions.
-</p>
-
-<p>
-    The subscriptions are stored in a hashtable object, which is in turn
-    stored in the user object.
-    So to display each subscription, we have to reach into the user object,
-    and loop through the members of the subscription collection.
-    Using the iterator tag, you can code it the way it sounds.
- </p>
-
-<hr/>
-<h5>Using iterator to list the Subscriptions</h5>
-<pre><code>&lt;s:iterator value="<strong>user.subscriptions</strong>">
-  &lt;tr>
-    &lt;td align="left">
-      &lt;s:property value="<strong>host</strong>"/>
-    &lt;/td>
-    &lt;td align="left">
-       &lt;s:property value="<strong>username</strong>"/>
-   &lt;/td>
-  &lt;td align="center">
-      &lt;s:property value="<strong>type</strong>"/>
-  &lt;/td>
-  &lt;td align="center">
-     &lt;s:property value="<strong>autoConnect</strong>"/>
-  &lt;/td>
-  &lt;td align="center">
-    &lt;a href="&lt;s:url action="<strong>Subscription!delete</strong>">&lt;s:param name="<strong>host</strong>" value="host"/>&lt;/s:url>">
-      &lt;s:text name="registration.deleteSubscription"/>
-    &lt;/a>&nbsp;
-    &lt;a href="&lt;s:url action="<strong>Subscription!edit</strong>">&lt;s:param name="<strong>host</strong>" value="host"/>&lt;/s:url>">
-      &lt;s:text name="registration.editSubscription"/>
-     &lt;/a>
-   &lt;/td>
- &lt;/tr>
-&lt;/s:iterator></code></pre>
-<hr/>
-
-<p>
-    When the iterator renders, it generates a list of Subscriptions for the current User.
-</p>
-
-<hr />
-
-    <div align="center">
-        <h3>Current Subscriptions</h3>
-    </div>
-
-    <table border="1" width="100%">
-        <tr>
-            <th align="center" width="30%">
-                Host Name
-            </th>
-            <th align="center" width="25%">
-                User Name
-            </th>
-
-            <th align="center" width="10%">
-                Server Type
-            </th>
-            <th align="center" width="10%">
-                Auto
-            </th>
-            <th align="center" width="15%">
-                Action
-            </th>
-        </tr>
-            <tr>
-                <td align="left">
-                    mail.hotmail.com
-                </td>
-                <td align="left">
-                    user1234
-                </td>
-                <td align="center">
-                    pop3
-                </td>
-
-                <td align="center">
-                    false
-                </td>
-                <td align="center">
-                    <a href="/struts2-mailreader/Subscription!delete.do?host=mail.hotmail.com">
-                        Delete
-                    </a>
-                    &nbsp;
-                    <a href="/struts2-mailreader/Subscription!edit.do?host=mail.hotmail.com">
-                        Edit
-                    </a>
-                </td>
-            </tr>
-            <tr>
-                <td align="left">
-                    mail.yahoo.com
-                </td>
-                <td align="left">
-                    jquser
-                </td>
-                <td align="center">
-                    imap
-                </td>
-                <td align="center">
-                    false
-                </td>
-                <td align="center">
-                    <a href="/struts2-mailreader/Subscription!delete.do?host=mail.yahoo.com">
-                        Delete
-                    </a>
-                    &nbsp;
-                    <a href="/struts2-mailreader/Subscription!edit.do?host=mail.yahoo.com">
-                        Edit
-                    </a>
-                </td>
-            </tr>
-    </table>
-    <a href="/struts2-mailreader/Subscription!input.do">Add</a>
-
-<hr />
-
-    <p>
-        Now look back at the code used to generate this block.
-    </p>
-    <p>
-        Notice anything nifty?
-    </p>
-    <p>
-        How about that the markup between the iterator tag is
-        actually <em>simpler</em> than the markup that we would use to render one row of the
-        table?
-    </p>
-    <p>
-        Instead of using a qualified reference  like "value=user.subscription[0].host",
-        we use the simplest possible reference: "value=host".
-        We didn't have to define a local variable, and reference that local in the loop code.
-        The reference to each item in the list is automatically resolved, no fuss, no muss.
-    </p>
-    <p>
-        Nice trick!
-    </p>
-
-<p>
-    The secret to this magic is the <strong>value stack</strong>.
-    Next to Interceptors, the value stack is probably the coolest thing there is about the
-    framework.
-    To explain the value stack, let's step back and start from the beginning.
-</p>
-
-<p>
-    Merging dynamic data into static web pages is a primary reason
-    we create web applications.
-    The Java API has a mechanism that allows you to
-    place objects in a servlet scope (page, request, session, or
-    application), and then retrieve them using a JSP scriplet.
-    If the object is placed directly in one of the scopes,
-    a JSP tag or scriptlet can find that object by searching page scope and
-    then request scope, and session scope, and finally application scope.
-</p>
-
-<p>
-    The value stack works much the same way, only better.
-    When you push an object on the value stack,
-    the public properties of that object become first-class properties of the stack.
-    The object's properties become the stack's properties.
-    If another object on the stack has properties of the same name,
-    the last object pushed onto the stack wins. (Last-In, First-Out.)
-</p>
-
-<p>
-    When the iterator tag loops through a collection,
-    it pushes each item in the collection onto the stack.
-    The item's properties become the stack's property.
-    In the case of the Subscriptions,
-    if the Subscription has a public Host property,
-    then during that iteration,
-    the stack can access the same property.
-</p>
-
-<p>
-    Of course, at the end of each iteration, the tag "pops" the item off the stack.
-    If we were to try and access the Host property later in the page,
-    it won't be there.
-</p>
-
-<p>
-    When an Action is invoked, the Action class is pushed onto the value stack.
-    Since the Action is on the value stack,
-    our tags can access any property of the Action
-    as if it were an implicit property of the page.
-    The tags don't access the Action directly.
-    If a textfield tag is told to render the "Username" property,
-    the tag asks the value stack for the value of "Username",
-    and the value stack returns the first property it finds by that name,
-    on any object on the stack.
-</p>
-
-<p>
-    The Validators also use the stack.
-    When validation fails on a field,
-    the value for the field is pushed onto the value stack.
-    As a result, if the client enters text into an Integer field,
-    the framework can still redisplay whatever was entered.
-    An invalid input value is not stored in the field (even if it could be). 
-    The invalid input is pushed onto the stack for the scope of the request.
-</p>
-
-<p>
-    The Subscription list uses another new tag: the <strong>param</strong> tag.
-    As tags go, "param" takes very few parameters of its own: just "name" and "value",
-    and neither is required.
-    Although simple, "param" is one of the most powerful tags the framework provides.
-    Not so much because of what it does,
-    but because of what "param" allows the other tags to do.
-</p>
-
-<p>
-    Essentially, the "param" tag provides parameters to other tags.
-    A tag like "text" might be retrieving a message template with several replaceable
-    parameters.
-    No matter how many parameters are in the template, and no matter what they are named,
-    you can use the "param" tag to pass in whatever you need.
-</p>
-
-<pre><code>pager.legend = Displaying {current} of {count} items matching {criteria}.
-...
-&lt;s:text name="pager.legend">
-    &lt;s:<strong>param</strong> name="current" value="42" />
-    &lt;s:<strong>param</strong> name="count" value="314" />
-    &lt;s:<strong>param</strong> name="criteria" value="Life, the Universe, and Everything" />
-&lt;/s:text></code></pre>
-
-<p>
-    In the case of an "url" tag,
-    we can use "param" to create the query string.
-    A statement like this:
-</p>
-
-<pre><code>
-  &lt;s:url action="Subscription!edit">&lt;s:param name="<strong>host" value="host</strong>"/>&lt;/s:url>">
-</code></pre>
-
-<p>
-  can render a hyperlink like this:
-</p>
-
-<pre><code>
-  &lt;a href="/struts2-mailreader/Subscription!edit.do?<strong>host=mail.yahoo.com</strong>">Edit&lt;/a>
-</code></pre>
-
-<!--
-<p>
-    At the foot of the Register page is a link for adding a subscription.
-    Let's wind up the tour by following the Add link and then logging off.
-    Like the link for creating a Registration, Add points to an "Edit" action,
-    namely "EditSubscription".
-</p>
--->
-
-<p>
-    If a hyperlink needs more parameters,
-    you can use "param" to add as many parameters as needed.
-</p>
-
-<h3>
-    <a name="Subscription" id="Subscription">Subscription</a>
-</h3>
-
-<p>
-    If we follow one of the "Edit" subscription links on the Registration page,
-    we come to the Subscriptions page,
-    which displays the details of our description in a data-entry form.
-    Let's have a look at the Subscription configuration
-    and follow the bouncing ball from page to action to page.
-</p>
-
-<hr />
-<h5>mailreader-support.xml Subscription element</h5>
-<pre><code>&lt;action name="Subscription!*" method="{1}" class="mailreader2.Subscription">
-  &lt;result name="input">/pages/Subscription.jsp&lt;/result>
-  &lt;result type="redirect-action">Registration!input&lt;/result>
-&lt;/action></code></pre>
-<hr />
-
-<p>
-    The Edit link specified the Subscription action,
-    but also includes the qualifier <strong>!edit</strong>.
-    The wildcard notation tells the framework to use any characters given after "Subscription!"
-    as the name of a method to invoke on the Action class,
-    instead of the default execute method.
-    The "alternate" execute methods are called <strong>alias</strong> methods.
-</p>
-
-<hr />
-<h5>Subscription edit alias</h5>
-<pre><code>public String <strong>edit()</strong> {
-  <strong>setTask(Constants.EDIT);</strong>>
-  return find();
-}
-
-public String find() {
-  org.apache.struts.apps.mailreader.dao.Subscription
-    sub = findSubscription();
-   if (sub == null) {
-       return ERROR;
-   }
-   <strong>setSubscription(sub);</strong>
-   return INPUT;
-}</code></pre>
-<hr />
-
-<p>
-    The "edit" alias has two responsibilities.
-    First, it must set the Task property to "Edit".
-    The Subscription page will render itself differently
-    depending on the value of the Task property.
-    Second, "edit" must locate the relevant Subscription
-    and set it to the Subscription property.
-    If all goes well, "edit" returns the INPUT token,
-    so that the "input" result will be invoked.
-</p>
-
-<p>
-    In the normal course, the Subscription should always be found,
-    since we selected the entry from a system-generated list.
-    If the Subscription is not found,
-    it would be because the database disappeared
-    or the request is being spoofed.
-    If the Subscription is not found,
-    edit returns the token for the global "error" result,
-    because this condition is unexpected.
-</p>
-
-<p>
-    The business logic for the "edit" alias is a simple wrapper
-    around the MailReader DAO classes.
-</p>
-
-<hr />
-<h5>MailreaderSupport findSubscription()</h5>
-<pre><code>public Subscription <strong>findSubscription()</strong> {
-    return findSubscription(getHost());
-}
-
-public Subscription findSubscription(String host) {
-    Subscription subscription;
-    subscription = <strong>getUser().findSubscription(host);</strong>
-    return subscription;
-}</code></pre>
-<hr />
-
-<p>
-    This code is very simple
-    and doesn't seem to provide much in the way of error handling.
-    But, that's OK.
-    Since the page is suppose to be entered from a link that we created,
-    we do expect everything to go right here.
-    But, if it doesn't, the global exception handler we defined in the
-    MailReader configuration will trap the exception for us.
-</p>
-
-<p>
-    Likewise, the AuthentificationInterceptor will ensure that only clients
-    with a valid User object can try to edit a Subscription.
-    If the session expired, or someone bookmarked the page,
-    the client will be redirected to the Login page automatically.
-</p>
-
-<p>
-    As a final layer of defense, we also configured a validator for Subscription,
-    to ensure that we are passed a Host parameter.
-</p>
-
-<hr />
-<h5>Subscription-validation.xml</h5>
-<pre><code>&lt;!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-&lt;validators>
-  &lt;field name="<strong>host</strong>">
-    &lt;field-validator type="<strong>requiredstring</strong>">
-        &lt;message key="error.host.required"/>
-    &lt;/field-validator>
-  &lt;/field>
-&lt;/validators></code></pre>
-<hr />
-
-<p>
-    By keeping routine safety precautions out of the Action class,
-    the all-important Actions becomes smaller and easier to maintain.
-</p>
-
-<p>
-    After setting the relevent Subscription object to the Subscription property,
-    the framework transfers control to the (you guessed it) Subscription page.
-</p>
-
-<hr />
-<h5>Subscription.jsp</h5>
-<pre><code>&lt;%@ page contentType="text/html; charset=UTF-8" %>
-&lt;%@ taglib prefix="s" uri="http://struts.apache.org/tags" %>
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  &lt;head>
-    &lt;s:if test="task=='Create'">
-        &lt;title>&lt;s:text name="subscription.title.create"/>&lt;/title>
-    &lt;/s:if>
-    &lt;s:if test="task=='Edit'">
-        &lt;title>&lt;s:text name="subscription.title.edit"/>&lt;/title>
-    &lt;/s:if>
-    &lt;s:if test="task=='Delete'">
-        &lt;title>&lt;s:text name="subscription.title.delete"/>&lt;/title>
-    &lt;/s:if>
-    &lt;link href="&lt;s:url value="/css/mailreader.css"/>" rel="stylesheet"
-          type="text/css"/>
-  &lt;/head>
-  &lt;body onLoad="self.focus();document.Subscription.username.focus()">
-
-    &lt;s:actionerror/>
-    &lt;s:form <strong>action="Subscription!save"</strong> validate="true">
-      <strong>&lt;s:token /></strong>
-      <strong>&lt;s:hidden name="task"/></strong>
-      <strong>&lt;s:label label="%{getText('username')}" name="user.username"/></strong>
-
-      &lt;s:if test="task == 'Create'">
-        &lt;s:textfield label="%{getText('mailHostname')}" name="host"/>
-      &lt;/s:if>
-      &lt;s:else>
-        &lt;s:label label="%{getText('mailHostname')}" name="host"/>
-        &lt;s:hidden name="host"/>
-      &lt;/s:else>
-
-      &lt;s:if test="task == 'Delete'">
-        &lt;s:label label="%{getText('mailUsername')}"
-                   name="subscription.username"/>
-        &lt;s:label label="%{getText('mailPassword')}"
-                   name="subscription.password"/>
-        &lt;s:label label="%{getText('mailServerType')}"
-                   name="subscription.type"/>
-        &lt;s:label label="%{getText('autoConnect')}"
-                   name="subscription.autoConnect"/>
-        &lt;s:submit value="%{getText('button.confirm')}"/>
-      &lt;/s:if>
-      &lt;s:else>
-        &lt;s:textfield label="%{getText('mailUsername')}"
-                       name="subscription.username"/>
-        &lt;s:textfield label="%{getText('mailPassword')}"
-                       name="subscription.password"/>
-        <strong>&lt;s:select label="%{getText('mailServerType')}"
-                    name="subscription.type" list="types"/></strong>
-        <strong>&lt;s:checkbox label="%{getText('autoConnect')}"
-                      name="subscription.autoConnect"/></strong>
-        &lt;s:submit value="%{getText('button.save')}"/>
-        &lt;s:reset value="%{getText('button.reset')}"/>
-      &lt;/s:else>
-
-      &lt;s:submit action="Registration!input"
-                value="%{getText('button.cancel')}"
-                onclick="form.onsubmit=null"/>
-  &lt;/s:form>
-
-  &lt;jsp:include page="Footer.jsp"/>
-  &lt;/body>
-&lt;/html></code></pre>
-<hr />
-
-<p>
-    As before, we'll discuss the tags and attributes that are new to this page:
-    "token", "hidden", "label", "select", and "checkbox".
-</p>
-
-<p>
-    The <strong>token</strong> tag works with the Token Session Interceptor to foil double
-    submits.
-    The tag generates a key that is embedded in the form and cached in the session.
-    Without this tag, the Interceptor can't work it's magic.
-</p>
-
-<p>
-    The <strong>hidden</strong> tag embeds the Task property into the form.
-    When the form is submitted,
-    the Subscription!save action will use the Task property to decide
-    whether to insert or update the form.
-</p>
-
-<p>
-    The <strong>label</strong> renders a "read only" version of a property,
-    suitable for placement in the form.
-    In Edit or Delete mode, we want the Host property to be immutable,
-    since it is used as a key. (As unwise as that might sound.)
-    In Delete mode, all of the properties are immutable,
-    since we are simply confirming the delete operation.
-</p>
-
-<p>
-    Saving the best for last, the Subscription form utilizes two more interesting
-    tags, "select" and "checkbox".
-</p>
-
-<p>
-    Unsurprisingly, the <strong>select</strong> tag renders a select control,
-    but the tag does so without requiring a lot of markup or redtape.
-</p>
-
-<pre><code>&lt;s:select label="%{getText('mailServerType')}"
-  name="subscription.type" <strong>list="types"</strong> />
-</code></pre>
-
-<p>
-    The interesting attribute of the "select" tag is "list",
-    which, in our case, specifies a value of "types".
-    If we take another look at the Subscription action,
-    we can see that it implements an interface named Preparable
-    and populates a Types property in a method named "prepare".
-</p>
-
-<hr />
-<h5>Subscription-validation.xml</h5>
-<pre><code>public class <strong>Subscription</strong> extends MailreaderSupport
-  <strong>implements Preparable</strong> {
-
-  private Map types = null;
-  public Map <strong>getTypes()</strong> {
-    return types;
-   }
-
-   public void <strong>prepare()</strong> {
-     Map m = new LinkedHashMap();
-       m.put("imap", "IMAP Protocol");
-       m.put("pop3", "POP3 Protocol");
-       types = m;
-       setHost(getSubscriptionHost());
-    }
-
-    // ... </code></pre>
-<hr />
-
-<p>
-    The default Interceptor stack includes the <strong>PrepareInterceptor</strong>,
-    which observes the Preparable interface.
-</p>
-
-<hr />
-<h5>PrepareInterceptor</h5>
-<pre><code>public class <strong>PrepareInterceptor</strong> extends AroundInterceptor {
-
-  protected void after(ActionInvocation dispatcher, String result) throws Exception {
-  }
-
-  protected void before(ActionInvocation invocation) throws Exception {
-    Object action = invocation.getAction();
-     <strong>if (action instanceof Preparable) {
-        ((Preparable) action).prepare();</strong>
-    }
-  }
-}</code></pre>
-
-<p>
-    The PrepareInterceptor ensures that the "prepare" method will always be called
-    before "execute" or an alias method is invoked.
-    We use "prepare" to setup the list of items for the select list to display.
-    We also transfer the Host property from our Subscription object
-    to a local property, where it is easier to manage.
-</p>
-
-<h4>
-    <a name="Subscription.java" id="Subscription.java">Subscription.java</a>
-</h4>
-
-<p>
-    Like many applications, the MailReader uses mainly String properties.
-    One exception is the AutoConnect property of the Subscription object.
-    On the HTML form, the AutoConnect property is represented by a checkbox.
-</p>
-
-<p>
-    When writing web applications, the checkbox can be a tricky control.
-    The Subscription object has a boolean AutoConnect property,
-    and the checkbox simply has to represent its state.
-    The problem is, if you clear a checkbox, the browser client will not submit <em>anything</em>.
-    Nada. Zip.
-    It is as if the checkbox control never existed.
-    The HTTP protocol has no way to affirm "false".
-    If the control is missing, we need to figure out it's been unclicked.
-</p>
-
-<p>
-    In Struts 1,
-    we use the <code>reset</code> method to work around checkbox issues.
-    In Struts 2, checkbox state is handled automatically.
-    The framework can detect when a checkbox tag has not been sent  back,
-    and when that happens,
-    a default "false" value is used for the checkbox value.
-    No worries, mate.
-</p>
-
-<p>
-    If we press the SAVE button,
-    the form will be submitted to the Subscription!save action.
-    Since the save method needs some additional validation,
-    we can add a validation file.
-</p>
-
-<hr />
-<h5>Subscription-Subscription!save-validation.xml</h5>
-<pre><code>&lt;!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
-    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-&lt;validators>
-  &lt;field name="<strong>host</strong>">
-    &lt;field-validator type="<strong>requiredstring</strong>">
-        &lt;message key="error.host.required"/>
-    &lt;/field-validator>
-  &lt;/field>
-&lt;/validators></code></pre>
-<hr />
-
-<p>
-    The validators follow the same type of inheritance path as the classes.
-    SubscriptionSave extends Subscription,
-    so when Subscription!save is validated,
-    the Host property specified by "Subscription-validation.xml" will also be required.
-</p>
-
-<p>
-    If validation succeeds, the <code>save</code> method of Subscription will fire.
-</p>
-
-<hr />
-<h5>Subscription</h5>
-
-<pre><code>public String <strong>save</strong>() throws Exception {
-
-  if (Constants.DELETE.equals(getTask())) {
-   <strong>removeSubscription</strong>();
-  }
-
-  if (Constants.CREATE.equals(getTask())) {
-    <strong>copySubscription(</strong>getHost());
-  }
-
-  saveUser();
-  return SUCCESS;
-}</code></pre>
-<hr />
-
-<p>
-    The <strong>save</strong> method uses the Task property to handle
-    the special cases of deleting and creating,
-    and then updates the state of the User object.
-</p>
-
-<p>
-    The <strong>removeSubscription</strong> method calls the DAO facade,
-    and then updates the application state.
-</p>
-
-<hr />
-<h5>removeSubscription</h5>
-<pre><code>public void <strong>removeSubscription</strong>() throws Exception {
-  getUser().removeSubscription(getSubscription());
-  getSession().remove(Constants.SUBSCRIPTION_KEY);
-}</code></pre>
-<hr />
-
-<p>
-    The <strong>copySubscription</strong> method is a bit more interesting.
-    The MailReader DAO layer API includes some immutable fields
-    that can't be set once the object is created.
-    Because key fields are immutable,
-    we can't just create a Subscription, let the framework populate all the fields,
-    and then save it when we are done -- because some fields can't be populated,
-    except at construction.
-</p>
-
-<p>
-    One workaround would be to declare properties on the Action
-    for all the properties we need to pass to the Subscription or User objects.
-    When we are ready to create the object,
-    we could pass the new object values from the Action properties.
-</p>
-
-<p>
-    Another workaround is to declare only the immutable properties on the Action,
-    and then use what we can from the domain object.
-</p>
-
-<p>
-    This implementation of the MailReader utilizes the second alternative.
-    We define User and Subscription objects on our base Action,
-    and add other properties only as needed.
-</p>
-
-<p>
-    To add a new Subscription or User,
-    we create a blank object to capture whatever fields we can.
-    When this "input" object returns, we create a new object,
-    setting the immutable fields to appropriate values,
-    and copy over the rest of the properties.
-</p>
-
-<hr />
-<h5>copySubscription</h5>
-<pre><code>public void <strong>copySubscription</strong>(String host) {
-  Subscription input = getSubscription();
-  Subscription sub = createSubscription(host);
-  if (null != sub) {
-    <strong>BeanUtils.setValues</strong>(sub, input, null);
-    setSubscription(sub);
-    setHost(sub.getHost());
-  }
-}</code></pre>
-<hr />
-
-<p>
-    Of course, this is not a preferred solution,
-    but merely a way to work around an issue in the MailReader DAO API
-    that would not be easy for us change.
-</p>
-
-<h4>Subscription Submit</h4>
-
-<p>
-    When we pressed the SAVE button, there was one step that we overlooked.
-    The Mailreader application uses a "double submit" guard to keep people
-    from clicking the SAVE button multiple times and submitting the form again.
-</p>
-
-<p>
-    To add the double-submit guard, we can change the actions default processing
-    stack to <code>user-submit</code>.
-    But, we don't want to just copy and paste the other action settings from
-    the main Subscription action.
-    What we can do is put the subscription actions in their own package,
-    so that they can share result types.
-</p>
-
-<hr />
-<h5>mailreader-support.xml</h5>
-<pre><code><!-- ... -->
-&lt;/package>
-
-&lt;package name="subscription" namespace="/" extends="mailreader-support">
-
-    &lt;global-results>
-        &lt;result name="input">/Subscription.jsp&lt;/result>
-        &lt;result type="redirect-action">Registration!input&lt;/result>
-    &lt;/global-results>
-
-    &lt;action name="Subscription!save" method="save" class="mailreader2.Subscription">
-        &lt;interceptor-ref name="user-submit" />
-    &lt;/action>
-
-    &lt;action name="Subscription!*" method="{1}" class="mailreader2.Subscription" />
-
-&lt;/package>
-
-&lt;package name="wildcard" namespace="/" extends="mailreader-support">
-
-    &lt;action name="*" class="mailreader2.MailreaderSupport">
-        &lt;result>/{1}.jsp&lt;/result>
-    &lt;/action>
-
-&lt;/package>
-}</code></pre>
-<hr />
-
-<p>
-    Aftering a successful save,
-    the Subscription Action will return "success",
-    and the framework will redirect us back to Registration input.
-</p>
-
-<h3>Summary</h3>
-<p>
-    At this point, we've booted the application, logged on,
-    reviewed a Registration record, and edited a Subscription.
-    Of course, there's more, but from here on, it is mostly more of the same.
-    The full source code for MailReader is
-    <a href="http://svn.apache.org/viewvc/struts/struts2/trunk/apps/mailreader/">
-        available online</a>
-    and in the distribution.
-</p>
-
-<p>
-    Enjoy!
-</p>
-
-</body>
-</html>
diff --git a/trunk/apps/pom.xml b/trunk/apps/pom.xml
deleted file mode 100644
index eb115cc..0000000
--- a/trunk/apps/pom.xml
+++ /dev/null
@@ -1,216 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/* 
- * Copyright 2005-2006 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.
- *
- * $Id$
- */
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-parent</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-apps</artifactId>
-    <packaging>pom</packaging>
-    <name>Webapps</name>
-    <modules>
-        <module>blank</module>
-        <module>mailreader</module>
-        <module>portlet</module>
-        <module>showcase</module>
-    </modules>
-    
-     <distributionManagement>
-        <site>
-            <id>apache-site</id>
-            <url>scp://people.apache.org/www/struts.apache.org/struts2/apps</url>
-        </site>
-    </distributionManagement>
-    
-    <profiles>
-        <profile>
-            <id>hostedqa</id>
-            <dependencies>
-                <dependency>
-                    <groupId>com.hostedqa</groupId>
-                    <artifactId>hostedqa-remote-ant</artifactId>
-                    <version>1.0-SNAPSHOT</version>
-                    <scope>test</scope>
-                </dependency>
-            </dependencies>
-            <repositories>
-                <repository>
-                    <id>codehaus</id>
-                    <name>codehaus</name>
-                    <url>http://repository.codehaus.org</url>
-                </repository>
-                <repository>
-                    <id>maven-hostedqa</id>
-                    <name>maven-hostedqa</name>
-                    <snapshots>
-                        <enabled>true</enabled>
-                        <updatePolicy>always</updatePolicy>
-                        <checksumPolicy>ignore</checksumPolicy>
-                    </snapshots>
-                    <releases>
-                        <enabled>true</enabled>
-                    </releases>
-                    <url>http://maven.hostedqa.com</url>
-                </repository>
-            </repositories>
-            <build>
-                <resources>
-                    <!-- Include resources under src/main/java in WEB-INF/classes -->
-                    <resource>
-                        <directory>src/main/java</directory>
-                            <includes>
-                                <include>**/*.properties</include>
-                                <include>**/*.xml</include>
-                             </includes>
-                     </resource>
-                </resources>
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-antrun-plugin</artifactId>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <executions>
-                            <execution>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>run</goal>
-                                </goals>
-                                <configuration>
-                                    <tasks>
-                                        <taskdef resource="hostedqatasks" classpathref="maven.plugin.classpath"/>
-                                        <upload file="${project.build.directory}/${project.build.finalName}.war"
-                                                account="struts" email="${email}"
-                                                password="${password}" resourceId="${resourceId}"/>
-
-                                        <playsuite suiteId="${suiteId}" clientConfigs="${clientConfigs}" appConfigs="${appConfigs}" account="struts"
-                                                   email="${email}"
-                                                   password="${password}"/>
-                                    </tasks>
-                                </configuration>
-                            </execution>
-                        </executions>
-                        <dependencies>
-                            <dependency>
-                                <groupId>com.hostedqa</groupId>
-                                <artifactId>hostedqa-remote-ant</artifactId>
-                                <version>1.0-SNAPSHOT</version>
-                            </dependency>
-                        </dependencies>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.cargo</groupId>
-                <artifactId>cargo-maven2-plugin</artifactId>
-                <configuration>
-                    <container>
-                        <containerId>tomcat5x</containerId>
-                        <home>${cargo.tomcat5x.home}</home>
-                        <log>${project.build.directory}/tomcat5x.log</log>
-                        <output>${project.build.directory}/tomcat5x.out</output>
-                    </container>
-                    <configuration>
-                        <home>${project.build.directory}/tomcat5x</home>
-                    </configuration>
-                </configuration>
-            </plugin>
-            <!-- Include source code under WEB-INF/src/java -->
-            <plugin>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-sources</id>
-                        <phase>process-sources</phase>
-                        <configuration>
-                            <tasks>
-                                <copy todir="${project.build.directory}/${pom.artifactId}/WEB-INF/src/java"
-                                      failonerror="false">
-                                    <fileset dir="${basedir}/src/main/java"/>
-                                </copy>
-                                <copy todir="${project.build.directory}/${pom.artifactId}/WEB-INF/src/java"
-                                      failonerror="false">
-                                    <fileset dir="${basedir}/src/main/resources"/>
-                                </copy>
-                            </tasks>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-        
-        <finalName>${pom.artifactId}</finalName>
-              
-    </build>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-core</artifactId>
-            <version>${pom.version}</version>
-        </dependency>
-
-      <!-- Spring -->
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-            <version>1.2.8</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>1.2.8</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>1.2.8</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-            <version>1.2.8</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-mock</artifactId>
-            <version>1.2.8</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-    
-</project>
diff --git a/trunk/apps/portlet/README.txt b/trunk/apps/portlet/README.txt
deleted file mode 100644
index efcb67b..0000000
--- a/trunk/apps/portlet/README.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-README.txt - portlet

-

-This is a simple example of using the portlet API with Struts applications. 

-

-For more on getting started with Struts, see 

-

-* http://cwiki.apache.org/WW/home.html

-

-WARNING - Additional configuration required for deployment

-

-Due to difference in portlet contrainer implementations, the porlet

-WAR is not ready-to-run. Extract the porlet WAR, and then copy the

-contents of apps/portlet/src/main/etc/<your_portal_server>/ into the

-WAR's WEB-INF directory.

-

-

-----------------------------------------------------------------------------
\ No newline at end of file
diff --git a/trunk/apps/portlet/pom.xml b/trunk/apps/portlet/pom.xml
deleted file mode 100644
index 64a1f11..0000000
--- a/trunk/apps/portlet/pom.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-      <groupId>org.apache.struts</groupId>
-      <artifactId>struts2-apps</artifactId>
-      <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-portlet</artifactId>
-    <packaging>war</packaging>
-    <name>Portlet Webapp</name>
-    <dependencies>
-        <dependency>
-            <groupId>portlet-api</groupId>
-            <artifactId>portlet-api</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-        
-        <!--
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-portlet-plugin</artifactId>
-            <version>${pom.version}</version>
-        </dependency>
-        -->
-
-        <dependency>
-           <groupId>javax.servlet</groupId>
-           <artifactId>servlet-api</artifactId>
-           <version>2.4</version>
-           <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.0</version>
-        </dependency>
-
-
-    </dependencies>
-</project>
diff --git a/trunk/apps/portlet/src/main/etc/exo/web.xml b/trunk/apps/portlet/src/main/etc/exo/web.xml
deleted file mode 100644
index 675c913..0000000
--- a/trunk/apps/portlet/src/main/etc/exo/web.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-	<display-name>struts-portlet</display-name>
-	<!-- Uncomment/comment this if you need/don't need Spring support -->
-	<context-param>
-		<param-name>contextConfigLocation</param-name>
-		<param-value>/WEB-INF/applicationContext*.xml</param-value>
-	</context-param>
-	<filter>
-		<filter-name>action2</filter-name>
-		<filter-class>
-			org.apache.struts2.dispatcher.FilterDispatcher
-		</filter-class>
-	</filter>
-
-	<filter-mapping>
-		<filter-name>action2</filter-name>
-		<url-pattern>/*</url-pattern>
-	</filter-mapping>
-	<listener>
-		<listener-class>
-			org.springframework.web.context.ContextLoaderListener
-		</listener-class>
-	</listener>
-	<listener>
-		<listener-class>
-			org.apache.struts2.portlet.context.ServletContextHolderListener
-		</listener-class>
-	</listener>
-	<listener>
-		<listener-class>
-			org.exoplatform.services.portletcontainer.impl.servlet.PortletApplicationListener
-		</listener-class>
-	</listener>
-
-	<servlet>
-		<servlet-name>preparator</servlet-name>
-		<servlet-class>
-			org.apache.struts2.portlet.context.PreparatorServlet
-		</servlet-class>
-	</servlet>
-	<servlet>
-		<servlet-name>dwr</servlet-name>
-		<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
-	</servlet>
-	<servlet>
-		<servlet-name>PortletWrapper</servlet-name>
-		<servlet-class>
-			org.exoplatform.services.portletcontainer.impl.servlet.ServletWrapper
-		</servlet-class>
-	</servlet>
-
-	<servlet-mapping>
-		<servlet-name>dwr</servlet-name>
-		<url-pattern>/dwr/*</url-pattern>
-	</servlet-mapping>
-	<servlet-mapping>
-		<servlet-name>PortletWrapper</servlet-name>
-		<url-pattern>/PortletWrapper</url-pattern>
-	</servlet-mapping>
-
-</web-app>
diff --git a/trunk/apps/portlet/src/main/etc/gridsphere/README-gridsphere.txt b/trunk/apps/portlet/src/main/etc/gridsphere/README-gridsphere.txt
deleted file mode 100644
index e502e06..0000000
--- a/trunk/apps/portlet/src/main/etc/gridsphere/README-gridsphere.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Put the empty 'struts-portlet' file in the $CATALINA_HOME/webapps/gridsphere/WEB-INF/CustomPortal/portlets
-folder of your Gridsphere installation.  You will need to add the gridsphere-ui-tags-2.1.2.jar to your project.
diff --git a/trunk/apps/portlet/src/main/etc/gridsphere/gridsphere-portlet.xml b/trunk/apps/portlet/src/main/etc/gridsphere/gridsphere-portlet.xml
deleted file mode 100644
index ed15d11..0000000
--- a/trunk/apps/portlet/src/main/etc/gridsphere/gridsphere-portlet.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<portlet-app-collection>
-
-<portlet-app-def>
-
-<portlet-app id="org.gridlab.gridsphere.provider.portlet.jsr.PortletServlet">
-    <portlet-name>JSR Portlet Servlet</portlet-name>
-    <servlet-name>PortletServlet</servlet-name>
-</portlet-app>
-
-<concrete-portlet-app id="org.gridlab.gridsphere.provider.portlet.jsr.PortletServlet.1">
-    <concrete-portlet>
-        <portlet-name>Portlet Servlet</portlet-name>
-        <default-locale>en</default-locale>
-        <language locale="en">
-            <title>Portlet Servlet</title>
-            <title-short>Portlet Servlet</title-short>
-            <description>A JSR Portlet Loader</description>
-            <keywords>portlet servlet</keywords>
-        </language>
-    </concrete-portlet>
-</concrete-portlet-app>
-</portlet-app-def>
-</portlet-app-collection>
diff --git a/trunk/apps/portlet/src/main/etc/gridsphere/group.xml b/trunk/apps/portlet/src/main/etc/gridsphere/group.xml
deleted file mode 100644
index d04e4e7..0000000
--- a/trunk/apps/portlet/src/main/etc/gridsphere/group.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<portlet-group>
-	<group-name>StrutsPortlet</group-name>
-	<group-description>StrutsPortlet Example Application</group-description>
-	<group-visibility>PUBLIC</group-visibility>
-	<portlet-role-info>
-		<portlet-class>struts-portlet#StrutsPortlet</portlet-class>
-		<required-role>USER</required-role>
-	</portlet-role-info>
-</portlet-group>
diff --git a/trunk/apps/portlet/src/main/etc/gridsphere/layout.xml b/trunk/apps/portlet/src/main/etc/gridsphere/layout.xml
deleted file mode 100644
index 14a160b..0000000
--- a/trunk/apps/portlet/src/main/etc/gridsphere/layout.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<portlet-tabbed-pane>
-    <portlet-tab label="StrutsPortlet">
-        <title lang="en">StrutsPortlet Example</title>
-        <portlet-tabbed-pane style="sub-menu">
-            <portlet-tab label="strutsportlettab">
-                <title lang="en">StrutsPortlet Example Application</title>
-                <table-layout>
-                    <row-layout>
-                        <column-layout>
-                            <portlet-frame label="strutsportlet">
-                                <portlet-class>struts-portlet#StrutsPortlet</portlet-class>
-                            </portlet-frame>
-                        </column-layout>
-                    </row-layout>
-                </table-layout>
-            </portlet-tab>
-        </portlet-tabbed-pane>
-    </portlet-tab>
-</portlet-tabbed-pane>
diff --git a/trunk/apps/portlet/src/main/etc/gridsphere/struts-portlet b/trunk/apps/portlet/src/main/etc/gridsphere/struts-portlet
deleted file mode 100644
index e69de29..0000000
--- a/trunk/apps/portlet/src/main/etc/gridsphere/struts-portlet
+++ /dev/null
diff --git a/trunk/apps/portlet/src/main/etc/gridsphere/web.xml b/trunk/apps/portlet/src/main/etc/gridsphere/web.xml
deleted file mode 100644
index e453c96..0000000
--- a/trunk/apps/portlet/src/main/etc/gridsphere/web.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-	<display-name>struts-portlet</display-name>
-	<!-- Uncomment/comment this if you need/don't need Spring support -->
-	<context-param>
-		<param-name>contextConfigLocation</param-name>
-		<param-value>/WEB-INF/applicationContext*.xml</param-value>
-	</context-param>
-	<filter>
-		<filter-name>action2</filter-name>
-		<filter-class>
-			org.apache.struts2.dispatcher.FilterDispatcher
-		</filter-class>
-	</filter>
-
-	<filter-mapping>
-		<filter-name>action2</filter-name>
-		<url-pattern>/*</url-pattern>
-	</filter-mapping>
-	<listener>
-		<listener-class>
-			org.springframework.web.context.ContextLoaderListener
-		</listener-class>
-	</listener>
-	<listener>
-		<listener-class>
-			org.apache.struts2.portlet.context.ServletContextHolderListener
-		</listener-class>
-	</listener>
-	<listener>
-		<listener-class>
-			org.gridlab.gridsphere.provider.portlet.jsr.PortletServlet
-		</listener-class>
-	</listener>
-
-	<servlet>
-		<servlet-name>preparator</servlet-name>
-		<servlet-class>
-			org.apache.struts2.portlet.context.PreparatorServlet
-		</servlet-class>
-	</servlet>
-	<servlet>
-		<servlet-name>dwr</servlet-name>
-		<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
-	</servlet>
-	<servlet>
-		<servlet-name>PortletServlet</servlet-name>
-		<servlet-class>
-			org.gridlab.gridsphere.provider.portlet.jsr.PortletServlet
-		</servlet-class>
-	</servlet>
-
-	<servlet-mapping>
-		<servlet-name>dwr</servlet-name>
-		<url-pattern>/dwr/*</url-pattern>
-	</servlet-mapping>
-	<servlet-mapping>
-		<servlet-name>PortletServlet</servlet-name>
-		<url-pattern>/jsr/struts-portlet</url-pattern>
-	</servlet-mapping>
-
-</web-app>
diff --git a/trunk/apps/portlet/src/main/etc/jbossportal2.0/jboss-app.xml b/trunk/apps/portlet/src/main/etc/jbossportal2.0/jboss-app.xml
deleted file mode 100644
index 02e09d5..0000000
--- a/trunk/apps/portlet/src/main/etc/jbossportal2.0/jboss-app.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<jboss-app>
-   <app-name>struts-portlet</app-name>
-</jboss-app>
diff --git a/trunk/apps/portlet/src/main/etc/jbossportal2.0/jboss-portlet.xml b/trunk/apps/portlet/src/main/etc/jbossportal2.0/jboss-portlet.xml
deleted file mode 100644
index 663eaf3..0000000
--- a/trunk/apps/portlet/src/main/etc/jbossportal2.0/jboss-portlet.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<portlet-app>
-   <portlet>
-      <portlet-name>StrutsPortlet</portlet-name>
-      <security>
-      </security>
-   </portlet>
-   <portlet>
-      <portlet-name>StrutsPortlet2</portlet-name>
-      <security>
-      </security>
-   </portlet>
-</portlet-app>
diff --git a/trunk/apps/portlet/src/main/etc/jbossportal2.0/jboss-web.xml b/trunk/apps/portlet/src/main/etc/jbossportal2.0/jboss-web.xml
deleted file mode 100644
index 9d9c645..0000000
--- a/trunk/apps/portlet/src/main/etc/jbossportal2.0/jboss-web.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<jboss-web>
-</jboss-web>
diff --git a/trunk/apps/portlet/src/main/etc/jbossportal2.0/portlet-instances.xml b/trunk/apps/portlet/src/main/etc/jbossportal2.0/portlet-instances.xml
deleted file mode 100644
index c22073d..0000000
--- a/trunk/apps/portlet/src/main/etc/jbossportal2.0/portlet-instances.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-<instances>
-   <instance>
-      <instance-name>StrutsPortletInstance</instance-name>
-      <component-ref>StrutsPortlet</component-ref>
-   </instance>
-   <instance>
-      <instance-name>StrutsPortlet2Instance</instance-name>
-      <component-ref>StrutsPortlet2</component-ref>
-   </instance>
-</instances>
diff --git a/trunk/apps/portlet/src/main/etc/jbossportal2.0/struts-portlet-pages.xml b/trunk/apps/portlet/src/main/etc/jbossportal2.0/struts-portlet-pages.xml
deleted file mode 100644
index 255c453..0000000
--- a/trunk/apps/portlet/src/main/etc/jbossportal2.0/struts-portlet-pages.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<pages>
-   <portal-name>default</portal-name>
-   <page>
-      <page-name>struts-portlet</page-name>
-      <window>
-         <window-name>StrutsPortletWindow</window-name>
-         <instance-ref>struts-portlet.StrutsPortlet.StrutsPortletInstance</instance-ref>
-         <region>left</region>
-         <height>0</height>
-      </window>
-      <window>
-         <window-name>StrutsPortletWindow2</window-name>
-         <instance-ref>struts-portlet.StrutsPortlet2.StrutsPortlet2Instance</instance-ref>
-         <region>right</region>
-         <height>0</height>
-      </window>
-   </page>
-</pages>
diff --git a/trunk/apps/portlet/src/main/etc/jbossportal2.2/jboss-app.xml b/trunk/apps/portlet/src/main/etc/jbossportal2.2/jboss-app.xml
deleted file mode 100644
index 02e09d5..0000000
--- a/trunk/apps/portlet/src/main/etc/jbossportal2.2/jboss-app.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<jboss-app>
-   <app-name>struts-portlet</app-name>
-</jboss-app>
diff --git a/trunk/apps/portlet/src/main/etc/jbossportal2.2/jboss-portlet.xml b/trunk/apps/portlet/src/main/etc/jbossportal2.2/jboss-portlet.xml
deleted file mode 100644
index 663eaf3..0000000
--- a/trunk/apps/portlet/src/main/etc/jbossportal2.2/jboss-portlet.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<portlet-app>
-   <portlet>
-      <portlet-name>StrutsPortlet</portlet-name>
-      <security>
-      </security>
-   </portlet>
-   <portlet>
-      <portlet-name>StrutsPortlet2</portlet-name>
-      <security>
-      </security>
-   </portlet>
-</portlet-app>
diff --git a/trunk/apps/portlet/src/main/etc/jbossportal2.2/jboss-web.xml b/trunk/apps/portlet/src/main/etc/jbossportal2.2/jboss-web.xml
deleted file mode 100644
index 9d9c645..0000000
--- a/trunk/apps/portlet/src/main/etc/jbossportal2.2/jboss-web.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<jboss-web>
-</jboss-web>
diff --git a/trunk/apps/portlet/src/main/etc/jbossportal2.2/struts-portlet-object.xml b/trunk/apps/portlet/src/main/etc/jbossportal2.2/struts-portlet-object.xml
deleted file mode 100644
index 2e062ad..0000000
--- a/trunk/apps/portlet/src/main/etc/jbossportal2.2/struts-portlet-object.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<deployments>
-	<deployment>
-		<if-exists>overwrite</if-exists>
-		<parent-ref>default</parent-ref>
-		<properties />
-		<page>
-			<page-name>StrutsPortlet Example</page-name>
-			<properties />
-			<window>
-				<window-name>StrutsWindow</window-name>
-				<instance-ref>StrutsPortletInstance</instance-ref>
-				<region>center</region>
-				<height>0</height>
-			</window>
-		</page>
-	</deployment>
-	<deployment>
-		<if-exists>overwrite</if-exists>
-		<instance>
-			<instance-name>StrutsPortletInstance</instance-name>
-			<component-ref>struts-portlet.StrutsPortlet</component-ref>
-		</instance>
-	</deployment>
-</deployments>
diff --git a/trunk/apps/portlet/src/main/etc/jetspeed2/README-jetspeed2.txt b/trunk/apps/portlet/src/main/etc/jetspeed2/README-jetspeed2.txt
deleted file mode 100644
index acde566..0000000
--- a/trunk/apps/portlet/src/main/etc/jetspeed2/README-jetspeed2.txt
+++ /dev/null
@@ -1 +0,0 @@
-Copy the struts-portlet.psml file to the JETSPEED2_INSTALL_DIR/webapps/jetspeed/WEB-INF/pages directory.
diff --git a/trunk/apps/portlet/src/main/etc/jetspeed2/struts-portlet.psml b/trunk/apps/portlet/src/main/etc/jetspeed2/struts-portlet.psml
deleted file mode 100644
index d6c7954..0000000
--- a/trunk/apps/portlet/src/main/etc/jetspeed2/struts-portlet.psml
+++ /dev/null
@@ -1,20 +0,0 @@
-<page>

-  <defaults

-     skin="orange"

-     layout-decorator="tigris"

-     portlet-decorator="tigris"

-  />

-  <title>Struts Portlet Example Application</title>

-  <metadata name="title" xml:lang="en">Struts Portlet Example Application</metadata>

-

-  <fragment id="simplest" type="layout" name="jetspeed-layouts::VelocityTwoColumns">

-    <fragment id="struts-portlet-1" type="portlet" name="struts-portlet::StrutsPortlet">

-      <property layout="TwoColumns" name="row" value="0" />

-      <property layout="TwoColumns" name="column" value="0" />

-    </fragment>

-  </fragment>

-

-  <security-constraints>

-    <security-constraints-ref>public-view</security-constraints-ref>

-  </security-constraints>

-</page>
\ No newline at end of file
diff --git a/trunk/apps/portlet/src/main/etc/liferay3.6.1/web.xml b/trunk/apps/portlet/src/main/etc/liferay3.6.1/web.xml
deleted file mode 100644
index b5fedfb..0000000
--- a/trunk/apps/portlet/src/main/etc/liferay3.6.1/web.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-	<display-name>struts-portlet</display-name>
-	<context-param>
-		<param-name>contextConfigLocation</param-name>
-		<param-value>/WEB-INF/applicationContext*.xml</param-value>
-	</context-param>
-	<context-param>
-		<param-name>company_id</param-name>
-		<param-value>struts.apache.org</param-value>
-	</context-param>
-	<filter>
-		<filter-name>action2</filter-name>
-		<filter-class>
-			org.apache.struts2.dispatcher.FilterDispatcher
-		</filter-class>
-	</filter>
-
-	<filter-mapping>
-		<filter-name>action2</filter-name>
-		<url-pattern>/*</url-pattern>
-	</filter-mapping>
-	<listener>
-		<listener-class>
-			com.liferay.portal.servlet.PortletContextListener
-		</listener-class>
-	</listener>
-	<listener>
-		<listener-class>
-			org.springframework.web.context.ContextLoaderListener
-		</listener-class>
-	</listener>
-	<listener>
-		<listener-class>
-			org.apache.struts2.portlet.context.ServletContextHolderListener
-		</listener-class>
-	</listener>
-
-
-	<servlet>
-		<servlet-name>StrutsPortlet</servlet-name>
-		<servlet-class>
-			com.liferay.portal.servlet.PortletServlet
-		</servlet-class>
-		<init-param>
-			<param-name>portlet-class</param-name>
-			<param-value>
-				org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher
-			</param-value>
-		</init-param>
-		<load-on-startup>0</load-on-startup>
-	</servlet>
-
-	<servlet>
-		<servlet-name>preparator</servlet-name>
-		<servlet-class>
-			org.apache.struts2.portlet.context.PreparatorServlet
-		</servlet-class>
-	</servlet>
-	<servlet>
-		<servlet-name>dwr</servlet-name>
-		<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
-	</servlet>
-
-	<servlet-mapping>
-		<servlet-name>dwr</servlet-name>
-		<url-pattern>/dwr/*</url-pattern>
-	</servlet-mapping>
-	<servlet-mapping>
-		<servlet-name>StrutsPortlet</servlet-name>
-		<url-pattern>/StrutsPortlet/*</url-pattern>
-	</servlet-mapping>
-
-</web-app>
diff --git a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/ExampleAction.java b/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/ExampleAction.java
deleted file mode 100644
index 93bf68c..0000000
--- a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/ExampleAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.example;
-
-import java.util.Map;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionSupport;
-
-public class ExampleAction extends ActionSupport {
-    
-    private String name = "PortletWork Example";
-    
-    public String getName() {
-        return name;
-    }
-    
-    public Map getRenderParameters() {
-        return ActionContext.getContext().getParameters();
-    }
-}
diff --git a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExample.java b/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExample.java
deleted file mode 100644
index 694eb12..0000000
--- a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExample.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.example;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class FormExample extends ActionSupport {
-    
-    String firstName = null;
-    String lastName = null;
-    public String execute() throws Exception {
-        // TODO Auto-generated method stub
-        return super.execute();
-    }
-    public String getFirstName() {
-        return firstName;
-    }
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-    public String getLastName() {
-        return lastName;
-    }
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-}
diff --git a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExampleWithValidation.java b/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExampleWithValidation.java
deleted file mode 100644
index ec14710..0000000
--- a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExampleWithValidation.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.example;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class FormExampleWithValidation extends ActionSupport {
-    private String firstName = null;
-    private String lastName = null;
-    
-    public String input() {
-        return SUCCESS;
-    }
-    
-    public String getFirstName() {
-        return firstName;
-    }
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-    public String getLastName() {
-        return lastName;
-    }
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-}
diff --git a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormResultAction.java b/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormResultAction.java
deleted file mode 100644
index 4dc2271..0000000
--- a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormResultAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.example;
-
-import java.util.Collection;
-import java.util.Map;
-
-import javax.portlet.RenderRequest;
-
-import org.apache.struts2.portlet.context.PortletActionContext;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class FormResultAction extends ActionSupport {
-
-    private String result = null;
-    
-    public String getResult() {
-        return result;
-    }
-    public void setResult(String result) {
-        this.result = result;
-    }
-    
-    public Collection getRenderParams() {
-        RenderRequest req = PortletActionContext.getRenderRequest();
-        Map params = req.getParameterMap();
-        return params.entrySet();
-    }
-}
diff --git a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormTestAction.java b/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormTestAction.java
deleted file mode 100644
index b2dacde..0000000
--- a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormTestAction.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.example;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class FormTestAction extends ActionSupport {
-
-    private String name = null;
-    public String getName() {
-        return name;
-    }
-    public void setName(String name) {
-        this.name = name;
-    }
-}
diff --git a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/SavePrefsAction.java b/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/SavePrefsAction.java
deleted file mode 100644
index f9a5efa..0000000
--- a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/SavePrefsAction.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.example;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.PortletPreferences;
-
-import org.apache.struts2.portlet.context.PortletActionContext;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class SavePrefsAction extends ActionSupport {
-    private String preferenceOne = null;
-    private String preferenceTwo = null;
-    public String getPreferenceOne() {
-        return preferenceOne;
-    }
-    public void setPreferenceOne(String preferenceOne) {
-        this.preferenceOne = preferenceOne;
-    }
-    public String getPreferenceTwo() {
-        return preferenceTwo;
-    }
-    public void setPreferenceTwo(String preferenceTwo) {
-        this.preferenceTwo = preferenceTwo;
-    }
-    
-    public String execute() throws Exception {
-        ActionRequest req = PortletActionContext.getActionRequest();
-        PortletPreferences prefs = req.getPreferences();
-        prefs.setValue("preferenceOne", preferenceOne);
-        prefs.setValue("preferenceTwo", preferenceTwo);
-        prefs.store();
-        return SUCCESS;
-    }
-    
-    public String showForm() throws Exception {
-        PortletPreferences prefs = PortletActionContext.getRequest().getPreferences();
-        preferenceOne = prefs.getValue("preferenceOne", "not set");
-        preferenceTwo = prefs.getValue("preferenceTwo", "not set");
-        return SUCCESS;
-    }
-}
diff --git a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/spring/SpringAction.java b/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/spring/SpringAction.java
deleted file mode 100644
index 78704a2..0000000
--- a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/spring/SpringAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.example.spring;
-
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class SpringAction extends ActionSupport {
-    
-    private ThingManager thingManager = null;
-    private String thing = null;
-    
-    public void setThingManager(ThingManager thingManager) {
-        this.thingManager = thingManager;
-    }
-    
-    public List getThings() {
-        return thingManager.getThings();
-    }
-    
-    public String getThing() {
-        return thing;
-    }
-    
-    public void setThing(String thing) {
-        this.thing = thing;
-    }
-    
-    public String execute() {
-        if(StringUtils.isNotEmpty(thing)) {
-            thingManager.addThing(thing);
-        }
-        return SUCCESS;
-    }
-}
diff --git a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/spring/ThingManager.java b/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/spring/ThingManager.java
deleted file mode 100644
index cbbb3b9..0000000
--- a/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/spring/ThingManager.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.example.spring;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- */
-public class ThingManager {
-    private List things = new ArrayList();
-    
-    public void addThing(String thing) {
-        things.add(thing);
-    }
-    
-    public List getThings() {
-        return things;
-    }
-}
diff --git a/trunk/apps/portlet/src/main/resources/commons-logging.properties b/trunk/apps/portlet/src/main/resources/commons-logging.properties
deleted file mode 100644
index a9eceaf..0000000
--- a/trunk/apps/portlet/src/main/resources/commons-logging.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
-org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog
diff --git a/trunk/apps/portlet/src/main/resources/log4j.xml b/trunk/apps/portlet/src/main/resources/log4j.xml
deleted file mode 100644
index c6803da..0000000
--- a/trunk/apps/portlet/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
-    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
-        <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] %m%n"/>
-        </layout>
-    </appender>
-
-    <root>
-        <priority value="ERROR"/>
-        <appender-ref ref="CONSOLE"/>
-    </root>
-</log4j:configuration>
diff --git a/trunk/apps/portlet/src/main/resources/org/apache/struts2/portlet/example/FormExample-processValidationExample-validation.xml b/trunk/apps/portlet/src/main/resources/org/apache/struts2/portlet/example/FormExample-processValidationExample-validation.xml
deleted file mode 100644
index 4effe04..0000000
--- a/trunk/apps/portlet/src/main/resources/org/apache/struts2/portlet/example/FormExample-processValidationExample-validation.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-<validators>
-    <field name="firstName">
-        <field-validator type="requiredstring">
-            <message>You must enter a first name</message>
-        </field-validator>
-    </field>
-    <field name="lastName">
-        <field-validator type="requiredstring">
-            <message>You must enter a last name</message>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/apps/portlet/src/main/resources/struts.properties b/trunk/apps/portlet/src/main/resources/struts.properties
deleted file mode 100644
index cb40069..0000000
--- a/trunk/apps/portlet/src/main/resources/struts.properties
+++ /dev/null
@@ -1 +0,0 @@
-struts.objectFactory = spring
diff --git a/trunk/apps/portlet/src/main/resources/template/xhtml/components/checkbox.vm b/trunk/apps/portlet/src/main/resources/template/xhtml/components/checkbox.vm
deleted file mode 100644
index 6d952f9..0000000
--- a/trunk/apps/portlet/src/main/resources/template/xhtml/components/checkbox.vm
+++ /dev/null
@@ -1,12 +0,0 @@
-<div align="center"> 
-       <input type="checkbox" 
-              name="$!struts.htmlEncode($parameters.name)"
-              value="$!struts.htmlEncode($parameters.fieldValue)"
-       #if ($parameters.nameValue) checked="checked" #end 
-       #if ($parameters.disabled == true) disabled="disabled" #end 
-       #if ($parameters.tabindex) tabindex="$!struts.htmlEncode($parameters.tabindex)" #end
-       #if ($parameters.onchange) onchange="$!struts.htmlEncode($parameters.onchange)" #end
-       #if ($parameters.id) id="$!struts.htmlEncode($parameters.id)" #end
-       /><br /> 
-       $!struts.htmlEncode($parameters.label) 
-</div>
diff --git a/trunk/apps/portlet/src/main/resources/template/xhtml/components/datefield.vm b/trunk/apps/portlet/src/main/resources/template/xhtml/components/datefield.vm
deleted file mode 100644
index 7b3f44b..0000000
--- a/trunk/apps/portlet/src/main/resources/template/xhtml/components/datefield.vm
+++ /dev/null
@@ -1,8 +0,0 @@
-#set ($name = $parameters.name)
-#set ($label = $parameters.label)
-#set ($size = $parameters.mysize)
-#set ($yearsize = $parameters.yearsize)
-$label:
-<input type="text" name="${name}.day" size="$size" /> /
-<input type="text" name="${name}.month" size="$size" /> /
-<input type="text" name="${name}.year" size="$yearsize" /> (dd/mm/yyyy)
diff --git a/trunk/apps/portlet/src/main/resources/template/xhtml/components/mytextfield.vm b/trunk/apps/portlet/src/main/resources/template/xhtml/components/mytextfield.vm
deleted file mode 100644
index 21c75be..0000000
--- a/trunk/apps/portlet/src/main/resources/template/xhtml/components/mytextfield.vm
+++ /dev/null
@@ -1,15 +0,0 @@
-<div align="center"> 
-       <input type="text" 
-              name="$!struts.htmlEncode($parameters.name)"
-       #if ($parameters.size) size="$!struts.htmlEncode($parameters.size)" #end
-       #if ($parameters.maxlength) maxlength="$!struts.htmlEncode($parameters.maxlength)" #end
-       #if ($parameters.nameValue) value="$!struts.htmlEncode($parameters.nameValue)" #end
-       #if ($parameters.disabled == true) disabled="disabled" #end 
-       #if ($parameters.readonly) readonly="readonly" #end 
-       #if ($parameters.onkeyup) onkeyup="$!struts.htmlEncode($parameters.onkeyup)" #end
-       #if ($parameters.tabindex) tabindex="$!struts.htmlEncode($parameters.tabindex)" #end
-       #if ($parameters.onchange) onchange="$!struts.htmlEncode($parameters.onchange)" #end
-       #if ($parameters.id) id="$!struts.htmlEncode($parameters.id)" #end
-       /><br /> 
-       $!struts.htmlEncode($parameters.label)
-</div>
diff --git a/trunk/apps/portlet/src/main/resources/validators.xml b/trunk/apps/portlet/src/main/resources/validators.xml
deleted file mode 100644
index 4c06d8b..0000000
--- a/trunk/apps/portlet/src/main/resources/validators.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<validators>
-    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
-    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
-    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
-    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
-    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
-    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
-    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
-    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
-    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
-    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
-    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
-</validators>
diff --git a/trunk/apps/portlet/src/main/resources/xwork.xml b/trunk/apps/portlet/src/main/resources/xwork.xml
deleted file mode 100644
index 001f60a..0000000
--- a/trunk/apps/portlet/src/main/resources/xwork.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE xwork PUBLIC
-    "-//OpenSymphony Group//XWork 1.1.1//EN"
-    "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
-<xwork>
-	<include file="struts-portlet-default.xml" />
-
-	<package name="view" extends="struts-portlet-default"
-		namespace="/view">
-		<action name="index"
-			class="com.opensymphony.xwork2.ActionSupport">
-			<result name="success">/WEB-INF/view/index.jsp</result>
-		</action>
-
-		<action name="formExample"
-			class="org.apache.struts2.portlet.example.FormExample" method="input">
-			<result name="input">
-				/WEB-INF/view/formExampleInput.jsp
-			</result>
-		</action>
-
-		<action name="processFormExample"
-			class="org.apache.struts2.portlet.example.FormExample">
-			<result name="input">
-				/WEB-INF/view/formExampleInput.jsp
-			</result>
-			<result name="success">
-				/WEB-INF/view/formExample.jsp
-			</result>
-		</action>
-
-		<action name="validationExample"
-			class="org.apache.struts2.portlet.example.FormExample" method="input">
-			<result name="input">
-				/WEB-INF/view/formExampleInputValidation.jsp
-			</result>
-		</action>
-
-		<action name="processValidationExample"
-			class="org.apache.struts2.portlet.example.FormExample">
-			<result name="success">
-				/WEB-INF/view/formExample.jsp
-			</result>
-			<result name="input">
-				/WEB-INF/view/formExampleInputValidation.jsp
-			</result>
-			<interceptor-ref name="validationWorkflowStack" />
-		</action>
-
-		<action name="tokenExample"
-			class="com.opensymphony.xwork2.ActionSupport" method="input">
-			<result name="input">
-				/WEB-INF/view/tokenExampleInput.jsp
-			</result>
-		</action>
-
-		<action name="processTokenExample"
-			class="com.opensymphony.xwork2.ActionSupport">
-			<result name="input">
-				/WEB-INF/view/tokenExampleInput.jsp
-			</result>
-			<result name="invalid.token">
-				/WEB-INF/view/tokenExampleInput.jsp
-			</result>
-			<result name="success">
-				/WEB-INF/view/tokenExample.jsp
-			</result>
-			<interceptor-ref name="token" />
-			<interceptor-ref name="defaultStack" />
-		</action>
-
-		<action name="springExample" class="springAction">
-			<result name="success">
-				/WEB-INF/view/springExample.jsp
-			</result>
-		</action>
-
-		<action name="ajaxExample"
-			class="com.opensymphony.xwork2.ActionSupport">
-			<result name="success">
-				/WEB-INF/view/ajaxExample.jsp
-			</result>
-		</action>
-
-		<action name="ajaxData"
-			class="com.opensymphony.xwork2.ActionSupport">
-			<result name="success">/WEB-INF/view/ajaxData.jsp</result>
-		</action>
-
-		<action name="freeMarkerExample"
-			class="com.opensymphony.xwork2.ActionSupport" method="input">
-			<result type="freemarker" name="input">
-				/WEB-INF/view/freeMarkerExampleInput.ftl
-			</result>
-		</action>
-
-		<action name="processFreeMarkerExample"
-			class="org.apache.struts2.portlet.example.FormExample">
-			<result name="success">/view/processFreeMarkerView.action?firstName=${firstName}&amp;lastName=${lastName}</result>
-		</action>
-		
-		<action name="processFreeMarkerView" class="org.apache.struts2.portlet.example.FormExample">
-			<result type="freemarker" name="success">/WEB-INF/view/freeMarkerExample.ftl</result>
-		</action>
-		
-		<action name="velocityHelloWorld" class="com.opensymphony.xwork2.ActionSupport">
-			<result type="velocity" name="success">/WEB-INF/view/helloWorld.vm</result>
-		</action>
-
-	</package>
-
-	<package name="edit" extends="struts-portlet-default"
-		namespace="/edit">
-		<action name="index"
-			class="com.opensymphony.xwork2.ActionSupport">
-			<result name="success">/WEB-INF/edit/index.jsp</result>
-		</action>
-		<action name="test"
-			class="com.opensymphony.xwork2.ActionSupport">
-			<result name="success">/WEB-INF/edit/test.jsp</result>
-		</action>
-		<action name="formExampleEdit"
-			class="org.apache.struts2.portlet.example.FormExample" method="input">
-			<result name="input">
-				/WEB-INF/edit/formExampleInput.jsp
-			</result>
-		</action>
-
-		<action name="processFormExampleEdit"
-			class="org.apache.struts2.portlet.example.FormExample">
-			<result name="input">
-				/WEB-INF/edtt/formExampleInput.jsp
-			</result>
-			<result name="success">
-				/edit/processFormExampleForward.action?firstName=${firstName}&amp;lastName=${lastName}
-			</result>
-		</action>
-
-		<action name="processFormExampleForward"
-			class="org.apache.struts2.portlet.example.FormExample">
-			<result name="success">
-				/WEB-INF/edit/formExample.jsp
-			</result>
-		</action>
-	</package>
-
-	<package name="editTest" extends="edit" namespace="/edit/dummy/test">
-		<action name="testAction"
-			class="com.opensymphony.xwork2.ActionSupport">
-			<result name="success">/WEB-INF/edit/namespaceTest.jsp</result>
-		</action>
-	</package>
-
-	<package name="help" extends="struts-portlet-default"
-		namespace="/help">
-		<action name="index"
-			class="com.opensymphony.xwork2.ActionSupport">
-			<result name="success">/WEB-INF/help/index.jsp</result>
-		</action>
-	</package>
-</xwork>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/applicationContext.xml b/trunk/apps/portlet/src/main/webapp/WEB-INF/applicationContext.xml
deleted file mode 100644
index 6bd3e54..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/applicationContext.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<!--
-	- Application context definition for "springapp" DispatcherServlet.
--->
-
-<beans default-autowire="autodetect">
-	<bean id="thingManager"
-		class="org.apache.struts2.portlet.example.spring.ThingManager">
-	</bean>
-	<bean id="springAction"
-		class="org.apache.struts2.portlet.example.spring.SpringAction" singleton="false">
-		<property name="thingManager">
-			<ref bean="thingManager" />
-		</property>
-	</bean>
-</beans>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/dwr.xml b/trunk/apps/portlet/src/main/webapp/WEB-INF/dwr.xml
deleted file mode 100644
index 4ede300..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/dwr.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE dwr PUBLIC
-    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
-    "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
-<dwr>
-    <allow>
-        <create creator="new" javascript="validator">
-            <param name="class" value="org.apache.struts2.validators.DWRValidator"/>
-        </create>
-        <convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
-    </allow>
-
-    <signatures>
-        <![CDATA[
-        import java.util.Map;
-        import org.apache.struts2.validators.DWRValidator;
-
-        DWRValidator.doPost(String, String, Map<String, String>);
-        ]]>
-    </signatures>
-</dwr>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/defaultEdit.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/defaultEdit.jsp
deleted file mode 100644
index 61b05c6..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/defaultEdit.jsp
+++ /dev/null
@@ -1,5 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<H1>StrutsPortlet</H1>
-This is the default edit page!
-<p>
-<a href="<s:url value="prefsForm.action"/>">Set some prefs</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/formExample.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/formExample.jsp
deleted file mode 100644
index 7d62563..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/formExample.jsp
+++ /dev/null
@@ -1,5 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<H2>Hello <s:property value="firstName"/> <s:property value="lastName"/></H2>
-<p/>
-<a href="<s:url action="index"/>">Back to front page</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/formExampleInput.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/formExampleInput.jsp
deleted file mode 100644
index 43c981d..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/formExampleInput.jsp
+++ /dev/null
@@ -1,8 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<H2>Input your name</H2>
-<s:form action="processFormExampleEdit" method="POST">
-    <s:textfield label="First name" name="firstName" value="%{firstName}"/>
-    <s:textfield label="Last name" name="lastName" value="%{lastName}"/>
-    <s:submit value="Submit the form"/>
-</s:form>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/index.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/index.jsp
deleted file mode 100644
index 6b03c99..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/index.jsp
+++ /dev/null
@@ -1,11 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-There are no examples in edit mode yet
-
-<p/>
-<a href="<s:url action="test"/>">Test</a>
-<p/>
-<a href="<s:url action="formExampleEdit"/>">Form test</a>
-<p/>
-<a href="<s:url action="/test/testAction" namespace="dummy"/>">Dummy test</a>
-<p/>
-<a href="<s:url action="index" portletMode="view"/>">Back to view mode</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/namespaceTest.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/namespaceTest.jsp
deleted file mode 100644
index 7e373a1..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/namespaceTest.jsp
+++ /dev/null
@@ -1,4 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<a href="<s:url action="test"/>">Test page for namespace /edit/test</a>
-<p/>
-<a href="<s:url action="index"/>">Back to edit index</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/prefsForm.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/prefsForm.jsp
deleted file mode 100644
index af8b02c..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/prefsForm.jsp
+++ /dev/null
@@ -1,6 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<s:form action="prefsFormSave.action" method="POST">
-    <s:textfield label="Preference one" name="preferenceOne" value="%{preferenceOne}"/>
-    <s:textfield label="Preference two" name="preferenceTwo" value="%{preferenceTwo}"/>
-    <s:submit value="Save prefs"/>
-</s:form>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/prefsSaved.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/prefsSaved.jsp
deleted file mode 100644
index 6aca664..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/prefsSaved.jsp
+++ /dev/null
@@ -1,5 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-The preferences has been saved.
-
-<a href="<s:url value="index.action"/>">Back</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/test.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/test.jsp
deleted file mode 100644
index 615860c..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/edit/test.jsp
+++ /dev/null
@@ -1,4 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<a href="<s:url action="test"/>">Test page</a>
-<p/>
-<a href="<s:url action="index"/>">Back to edit index</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/help/defaultHelp.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/help/defaultHelp.jsp
deleted file mode 100644
index c8fb774..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/help/defaultHelp.jsp
+++ /dev/null
@@ -1 +0,0 @@
-This is the default help page!
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/help/index.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/help/index.jsp
deleted file mode 100644
index ea58ff8..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/help/index.jsp
+++ /dev/null
@@ -1 +0,0 @@
-There are no examples in help mode yet
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/portlet.xml b/trunk/apps/portlet/src/main/webapp/WEB-INF/portlet.xml
deleted file mode 100644
index 1d18966..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/portlet.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<portlet-app version="1.0" xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" id="struts-portlet">
-  <portlet id="StrutsPortlet">
-    <description xml:lang="EN">Struts Test Portlet</description>
-    <portlet-name>StrutsPortlet</portlet-name>
-    <display-name xml:lang="EN">Struts Test Portlet</display-name>
-    
-    <portlet-class>org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher</portlet-class>
-
-    <init-param>
-		<!-- The view mode namespace. Maps to a namespace in the xwork config file -->
-		<name>viewNamespace</name>
-		<value>/view</value>
-	</init-param>
-    <init-param>
-		<!-- The default action to invoke in view mode -->
-		<name>defaultViewAction</name>
-		<value>index</value>
-	</init-param>
-	<init-param>
-		<!-- The view mode namespace. Maps to a namespace in the xwork config file -->
-		<name>editNamespace</name>
-		<value>/edit</value>
-	</init-param>
-    <init-param>
-		<!-- The default action to invoke in view mode -->
-		<name>defaultEditAction</name>
-		<value>index</value>
-	</init-param>
-	<init-param>
-		<!-- The view mode namespace. Maps to a namespace in the xwork config file -->
-		<name>helpNamespace</name>
-		<value>/help</value>
-	</init-param>
-    <init-param>
-		<!-- The default action to invoke in view mode -->
-		<name>defaultHelpAction</name>
-		<value>index</value>
-	</init-param>
-    
-
-    
-    <expiration-cache>0</expiration-cache>
-
-    <supports>
-      <mime-type>text/html</mime-type>
-      <portlet-mode>edit</portlet-mode>
-      <portlet-mode>help</portlet-mode>
-    </supports>
-
-    <supported-locale>en</supported-locale>
-
-    <portlet-info>
-      <title>My StrutsPortlet portlet</title>
-      <short-title>SP</short-title>
-      <keywords>struts,portlet</keywords>
-    </portlet-info>
-  </portlet>
-  
-  <portlet id="StrutsPortlet2">
-    <description xml:lang="EN">Struts Test Portlet2</description>
-    <portlet-name>StrutsPortlet2</portlet-name>
-    <display-name xml:lang="EN">Struts Test Portlet2</display-name>
-    
-    <portlet-class>org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher</portlet-class>
-
-    <init-param>
-		<!-- The view mode namespace. Maps to a namespace in the xwork config file -->
-		<name>viewNamespace</name>
-		<value>/view</value>
-	</init-param>
-    <init-param>
-		<!-- The default action to invoke in view mode -->
-		<name>defaultViewAction</name>
-		<value>index</value>
-	</init-param>
-	<init-param>
-		<!-- The view mode namespace. Maps to a namespace in the xwork config file -->
-		<name>editNamespace</name>
-		<value>/edit</value>
-	</init-param>
-    <init-param>
-		<!-- The default action to invoke in view mode -->
-		<name>defaultEditAction</name>
-		<value>index</value>
-	</init-param>
-	<init-param>
-		<!-- The view mode namespace. Maps to a namespace in the xwork config file -->
-		<name>helpNamespace</name>
-		<value>/help</value>
-	</init-param>
-    <init-param>
-		<!-- The default action to invoke in view mode -->
-		<name>defaultHelpAction</name>
-		<value>index</value>
-	</init-param>
-    
-
-    
-    <expiration-cache>0</expiration-cache>
-
-    <supports>
-      <mime-type>text/html</mime-type>
-      <portlet-mode>edit</portlet-mode>
-      <portlet-mode>help</portlet-mode>
-    </supports>
-
-    <supported-locale>en</supported-locale>
-
-    <portlet-info>
-      <title>My StrutsPortlet portlet2</title>
-      <short-title>SP2</short-title>
-      <keywords>struts,portlet</keywords>
-    </portlet-info>
-  </portlet>
-
-</portlet-app>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/readme.txt b/trunk/apps/portlet/src/main/webapp/WEB-INF/readme.txt
deleted file mode 100644
index 5363314..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/readme.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Configurations:
-
-JBoss Portal specific configuration files
------------------------------------------
-jboss-app.xml
-jboss-portlet.xml
-jboss-web.xml
-portlet-instances.xml
-struts-example-object.xml
-struts-example-pages.xml
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/ajax.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/ajax.jsp
deleted file mode 100644
index e24ec7c..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/ajax.jsp
+++ /dev/null
@@ -1 +0,0 @@
-<H2>Hello from Ajax!</H2>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/ajaxData.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/ajaxData.jsp
deleted file mode 100644
index 796b0d7..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/ajaxData.jsp
+++ /dev/null
@@ -1 +0,0 @@
-This data is fetched via Ajax! The server time is <%= new java.util.Date() %>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/ajaxExample.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/ajaxExample.jsp
deleted file mode 100644
index d0b55af..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/ajaxExample.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<s:head theme="ajax"/>
-<link rel="stylesheet" type="text/css" href="<s:url value="/struts/tabs.css"/>">
-<b>This is a tabbed pane with two panels that fetches data from a remote action via ajax</b>
-
-<s:tabbedPanel id="test2" theme="simple" >
-      <s:panel id="left" tabName="left" theme="ajax" href="/">
-          This is the left pane<br/>
-          <s:form >
-              <s:textfield name="tt" label="Test Text" />  <br/>
-              <s:textfield name="tt2" label="Test Text2" />
-          </s:form>
-      </s:panel>
-      <s:panel remote="true" href="/view/ajaxData.action" id="ryh1" theme="ajax" tabName="remote one" />
-      <s:panel id="middle" tabName="middle" theme="ajax" href="/">
-          middle tab<br/>
-          <s:form >
-              <s:textfield name="tt" label="Test Text44" />  <br/>
-              <s:textfield name="tt2" label="Test Text442" />
-          </s:form>
-      </s:panel>
-      <s:panel remote="true" href="/view/ajaxData.action"  id="ryh21" theme="ajax" tabName="remote right" />
-  </s:tabbedPanel>
-  
-<p/>
-A DIV that waits for 5 seconds before loading the contents
-<s:div
-        id="once"
-        theme="ajax"
-        cssStyle="border: 1px solid yellow;"
-        href="/view/ajaxData.action"
-        delay="5000"
-        loadingText="loading...">
-    Waiting for data</s:div>
-<p/>
-A DIV that is updated every 2 seconds
-<s:div
-            id="twoseconds"
-            cssStyle="border: 1px solid yellow;"
-            href="/view/ajaxData.action"
-            theme="ajax"
-            delay="2000"
-            updateFreq="2000"
-            errorText="There was an error"
-            loadingText="loading...">Initial Content
-    </s:div>
-<p/>
-<a href="<s:url action="index"/>">Back to front page</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExample.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExample.jsp
deleted file mode 100644
index 7d62563..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExample.jsp
+++ /dev/null
@@ -1,5 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<H2>Hello <s:property value="firstName"/> <s:property value="lastName"/></H2>
-<p/>
-<a href="<s:url action="index"/>">Back to front page</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInput.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInput.jsp
deleted file mode 100644
index 468d0eb..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInput.jsp
+++ /dev/null
@@ -1,8 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<H2>Input your name</H2>
-<s:form action="processFormExample" method="POST">
-    <s:textfield label="First name" name="firstName" value="%{firstName}"/>
-    <s:textfield label="Last name" name="lastName" value="%{lastName}"/>
-    <s:submit value="Submit the form"/>
-</s:form>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInputValidation.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInputValidation.jsp
deleted file mode 100644
index f647457..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInputValidation.jsp
+++ /dev/null
@@ -1,8 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<link rel="stylesheet" type="text/css" href="<s:url value="/styles/styles.css"/>">
-<H2>Input your name</H2>
-<s:form action="processValidationExample" method="POST">
-    <s:textfield label="First name" name="firstName" value="%{firstName}"/>
-    <s:textfield label="Last name" name="lastName" value="%{lastName}"/>
-    <s:submit value="Submit the form"/>
-</s:form>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/freeMarkerExample.ftl b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/freeMarkerExample.ftl
deleted file mode 100644
index cb70dc7..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/freeMarkerExample.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<b>Hello from FreeMarker, ${firstName} ${lastName}!</b>
-<p/>
-<a href="<@s.url action="index"/>">Back to front page</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/freeMarkerExampleInput.ftl b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/freeMarkerExampleInput.ftl
deleted file mode 100644
index 86ebbfb..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/freeMarkerExampleInput.ftl
+++ /dev/null
@@ -1,5 +0,0 @@
-<@s.form action="processFreeMarkerExample" method="POST">
-    <@s.textfield label="First name" name="firstName"/>
-    <@s.textfield label="Last name" name="lastName"/>
-    <@s.submit value="Say hello!"/>
-</@s.form>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/helloWorld.vm b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/helloWorld.vm
deleted file mode 100644
index b2933c4..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/helloWorld.vm
+++ /dev/null
@@ -1 +0,0 @@
-Hello World from velocity!
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/index.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/index.jsp
deleted file mode 100644
index 5686c2e..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/index.jsp
+++ /dev/null
@@ -1,15 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<H2>Welcome to the Struts example portlet</H2>
-<p/>
-Here you'll find examples of what is possible with the Struts Portlet integration framework.
-<ul>
-<li><a href="<s:url action="formExample"/>">A simple form</a></li>
-<li><a href="<s:url action="validationExample"/>">Validation</a></li>
-<li><a href="<s:url action="tokenExample"/>">Token</a></li>
-<li><a href="<s:url action="springExample"/>">Spring integration</a></li>
-<li><a href="<s:url action="ajaxExample"/>">Ajax</a></li>
-<li><a href="<s:url action="freeMarkerExample"/>">FreeMarker</a></li>
-<li><a href="<s:url action="velocityHelloWorld"/>">Velocity</a></li>
-<li><a href="<s:url action="index" portletMode="edit"/>">Go to edit mode and see what's there</a></li>
-<li><a href="<s:url action="index" portletMode="help"/>">Go to help mode and see what's there</a></li>
-</ul>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/notImplemented.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/notImplemented.jsp
deleted file mode 100644
index a3af7eb..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/notImplemented.jsp
+++ /dev/null
@@ -1 +0,0 @@
-<H2>This example has not yet been implemented</H2>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/springExample.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/springExample.jsp
deleted file mode 100644
index 8a0da42..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/springExample.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<h3>Example of Spring managed singleton. All the 'things' are contained in a Spring defined ThingManager</h3>
-
-<b>Things in the list:</b>
-<p/>
-<s:iterator value="things">
-    <s:property /><br/>
-</s:iterator>
-<p/>
-<s:form action="springExample" method="POST">
-    <s:textfield label="Thing to add?" name="thing" value=""/>
-    <s:submit value="Add the thing"/>
-</s:form>
-<p/>
-<a href="<s:url action="index"/>">Back to front page</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/tokenExample.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/tokenExample.jsp
deleted file mode 100644
index e41c9e9..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/tokenExample.jsp
+++ /dev/null
@@ -1,5 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<H2>The form was successfully submitted with a valid token</H2>
-
-<a href="<s:url action="index"/>"/>Back to front page</a>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/tokenExampleInput.jsp b/trunk/apps/portlet/src/main/webapp/WEB-INF/view/tokenExampleInput.jsp
deleted file mode 100644
index 7aa2e31..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/view/tokenExampleInput.jsp
+++ /dev/null
@@ -1,20 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<s:if test="hasErrors()">
-  ERROR:<br />
-  <font color="red">
-    <s:iterator value="actionErrors">
-      <s:property/><br />
-    </s:iterator>
-  </font>
-</s:if>
-<H2>Form with invalid token</H2>
-<s:form action="processTokenExample" method="POST">
-    <s:textfield label="The value to submit" name="theValue" value=""/>
-    <s:submit value="Submit the form"/>
-</s:form>
-<H2>Form with valid token</H2>
-<s:form action="processTokenExample" method="POST">
-    <s:token/>
-    <s:textfield label="The value to submit" name="theValue" value=""/>
-    <s:submit value="Submit the form"/>
-</s:form>
diff --git a/trunk/apps/portlet/src/main/webapp/WEB-INF/web.xml b/trunk/apps/portlet/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 62ba4e4..0000000
--- a/trunk/apps/portlet/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app id="StrutsPortlet">
-	<!-- Uncomment/comment this if you need/don't need Spring support -->
-	<context-param>
-		<param-name>contextConfigLocation</param-name>
-		<param-value>/WEB-INF/applicationContext*.xml</param-value>
-	</context-param>
-	<filter id="filterdispatcher">
-		<filter-name>action2</filter-name>
-		<filter-class>
-			org.apache.struts2.dispatcher.FilterDispatcher
-		</filter-class>
-	</filter>
-
-	<filter-mapping>
-		<filter-name>action2</filter-name>
-		<url-pattern>/*</url-pattern>
-	</filter-mapping>
-    
-    <listener>
-		<listener-class>
-			org.springframework.web.context.ContextLoaderListener
-		</listener-class>
-	</listener>
-	<listener>
-		<listener-class>
-			org.apache.struts2.portlet.context.ServletContextHolderListener
-		</listener-class>
-	</listener>
-
-
-	<servlet id="preparator">
-		<servlet-name>preparator</servlet-name>
-		<servlet-class>
-			org.apache.struts2.portlet.context.PreparatorServlet
-		</servlet-class>
-	</servlet>
-	<servlet id="dwr">
-		<servlet-name>dwr</servlet-name>
-		<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
-	</servlet>
-
-	<servlet-mapping>
-		<servlet-name>dwr</servlet-name>
-		<url-pattern>/dwr/*</url-pattern>
-	</servlet-mapping>
-
-</web-app>
diff --git a/trunk/apps/portlet/src/main/webapp/styles/styles.css b/trunk/apps/portlet/src/main/webapp/styles/styles.css
deleted file mode 100644
index 3dafc08..0000000
--- a/trunk/apps/portlet/src/main/webapp/styles/styles.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.wwFormTable {}
-.label {font-style:italic; }
-.errorLabel {font-style:italic; color:red; }
-.errorMessage {font-weight:bold; text-align: center; color:red; }
-.checkboxLabel {}
-.checkboxErrorLabel {color:red; }
-.required {color:red;}
diff --git a/trunk/apps/showcase/README.txt b/trunk/apps/showcase/README.txt
deleted file mode 100644
index 4d483c7..0000000
--- a/trunk/apps/showcase/README.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-README.txt - showcase

-

-Showcase is a collection of examples with code that you might be adopt and 

-adapt in your own applications. 

-

-For more on getting started with Struts, see 

-

-* http://cwiki.apache.org/WW/home.html

-

-----------------------------------------------------------------------------
\ No newline at end of file
diff --git a/trunk/apps/showcase/pom.xml b/trunk/apps/showcase/pom.xml
deleted file mode 100644
index b01f55e..0000000
--- a/trunk/apps/showcase/pom.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-apps</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-showcase</artifactId>
-    <packaging>war</packaging>
-    <name>Showcase Webapp</name>
-    <profiles>
-        <profile>
-            <id>hostedqa</id>
-            <properties>
-                <resourceId>12</resourceId>
-                <suiteId>9</suiteId>
-                <clientConfigs>8</clientConfigs>
-                <appConfigs>7</appConfigs>
-            </properties>
-        </profile>
-    </profiles>
-    <dependencies>
-        
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-struts1-plugin</artifactId>
-            <version>${pom.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-jsf-plugin</artifactId>
-            <version>${pom.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-config-browser-plugin</artifactId>
-            <version>${pom.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-sitemesh-plugin</artifactId>
-            <version>${pom.version}</version>
-        </dependency>
-        
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-tiles-plugin</artifactId>
-            <version>${pom.version}</version>
-        </dependency>
- 
-        <dependency>
-           <groupId>javax.servlet</groupId>
-           <artifactId>servlet-api</artifactId>
-           <version>2.4</version>
-           <scope>provided</scope>
-        </dependency>
-        
-        <!-- Velocity -->
-        <dependency>
-            <groupId>velocity</groupId>
-            <artifactId>velocity</artifactId>
-            <version>1.4</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>velocity-tools</groupId>
-            <artifactId>velocity-tools</artifactId>
-            <version>1.1</version>
-            <optional>true</optional>
-        </dependency>
-
-
-        <dependency>
-            <groupId>opensymphony</groupId>
-            <artifactId>sitemesh</artifactId>
-            <version>2.2.1</version>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.9</version>
-        </dependency>
-        <dependency>
-            <groupId>uk.ltd.getahead</groupId>
-            <artifactId>dwr</artifactId>
-            <version>1.1-beta-3</version>
-        </dependency>
-        <dependency>
-         <groupId>org.apache.myfaces.core</groupId>
-         <artifactId>myfaces-impl</artifactId>
-         <version>1.1.2</version>
-      </dependency>
-      <dependency>
-         <groupId>org.apache.myfaces.core</groupId>
-         <artifactId>myfaces-api</artifactId>
-         <version>1.1.2</version>
-      </dependency>
-      <dependency>
-         <groupId>org.rifers</groupId>
-         <artifactId>rife-continuations</artifactId>
-         <version>0.0.2</version>
-     </dependency>
-     <dependency>
-         <groupId>commons-fileupload</groupId>
-         <artifactId>commons-fileupload</artifactId>
-         <version>1.1.1</version>
-     </dependency>
-
- 
-    </dependencies>
-    
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>maven-jetty-plugin</artifactId>
-                <version>6.0.1</version>
-                <configuration>
-                    <scanIntervalSeconds>10</scanIntervalSeconds>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                     <groupId>org.apache.myfaces.core</groupId>
-                     <artifactId>myfaces-impl</artifactId>
-                     <version>1.1.2</version>
-                    </dependency>
-                    <dependency>
-                     <groupId>org.apache.myfaces.core</groupId>
-                     <artifactId>myfaces-api</artifactId>
-                     <version>1.1.2</version>
-                   </dependency>
-                   <dependency>
-                        <groupId>log4j</groupId>
-                        <artifactId>log4j</artifactId>
-                        <version>1.2.9</version>
-                   </dependency>
-                </dependencies>
-            </plugin>
-        </plugins>
-                <resources>
-                    <!-- Include resources under src/main/java in WEB-INF/classes -->
-                    <resource>
-                        <directory>src/main/resources</directory>
-                    </resource>
-                    <resource>
-                        <directory>src/main/java</directory>
-                            <includes>
-                                <include>**/*.java</include>
-                             </includes>
-                     </resource>
-                </resources>
-
-    </build>
-</project>
diff --git a/trunk/apps/showcase/quickstart.xml b/trunk/apps/showcase/quickstart.xml
deleted file mode 100644
index 6bb5a90..0000000
--- a/trunk/apps/showcase/quickstart.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<configuration>
-    <!--
-    QuickStart can be used to extend other QuickStart configurations.
-    This is great for applications that have multiple "editions" and
-    extend upon a base webapp or evven just a base set of classes.
-    -->
-    <!--<extendsConfig>../path/to/quickstart.xml</extendsConfig>-->
-
-    <!--
-    QuickStart supports reading your IDEA module configuration and
-    using the libraries there. This is especially useful for maven
-    users who don't have a single directory in their project that
-    contains all the libraries they need.
-    -->
-    <ideaConfig>../../../xwork/xwork.iml,../../core/struts2-core.iml,struts2-showcase.iml</ideaConfig>
-
-    <!-- The context in which to deploy the web application -->
-    <context>/showcase</context>
-
-    <!-- The port in which to deploy the web application -->
-    <port>8080</port>
-
-    <!--
-    The libs directories can be a jar, a directory of jars, or even
-    a directory of directories (searched recursively)
-    <libs>
-        <dir>../../lib</dir>
-    </libs>
-    -->
-
-    <!--
-    Optional: the location where your source files are. If this is
-    not included, the auto-recompiling feature of QuickStart will
-    not be enabled. You may wish to do this anyway, as this feature
-    has been known to cause strange side effects. If you don't
-    specify your sources, you must specify where your classes are by
-    using the classDirs and libs elements
-    <sources>
-        <dir>src/main/java</dir>
-    </sources>
-    -->
-
-    <!--
-    The classDirs directories can be a jar or a directory of classes.
-    The WEB-INF/classes directory for each webDir (below) will automatically
-    be added if it exists.
-    -->
-    <classDirs>
-        <dir>src/main/resources</dir>
-        <dir>target/classes</dir>
-        <dir>../../core/target/classes</dir>
-    </classDirs>
-
-    <!--
-    You can specify one or more directories where your webapp files
-    are located. This is useful if you have your project split up in
-    unique ways. You can also specify the path that the directory is
-    mapped to, relative to the context.
-    -->
-    <webDirs>
-        <webDir>
-            <path>/</path>
-            <dir>src/main/webapp</dir>
-        </webDir>
-    </webDirs>
-</configuration>
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/DateAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/DateAction.java
deleted file mode 100644
index 242c9d7..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/DateAction.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-
-/**
- * <code>DateAction</code>
- *
- */
-public class DateAction extends ActionSupport {
-
-    private static DateFormat DF = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
-
-    private Date now;
-    private Date past;
-    private Date future;
-    private Date after;
-    private Date before;
-
-
-    public String getDate() {
-        return DF.format(new Date());
-    }
-
-
-    /**
-     * @return Returns the future.
-     */
-    public Date getFuture() {
-        return future;
-    }
-
-    /**
-     * @return Returns the now.
-     */
-    public Date getNow() {
-        return now;
-    }
-
-    /**
-     * @return Returns the past.
-     */
-    public Date getPast() {
-        return past;
-    }
-
-    /**
-     *
-     * @return Returns the before date.
-     */
-    public Date getBefore() {
-        return before;
-    }
-
-    /**
-     *
-     * @return Returns the after date.
-     */
-    public Date getAfter() {
-        return after;
-    }
-
-    /**
-     * @see com.opensymphony.xwork2.ActionSupport#execute()
-     */
-    public String execute() throws Exception {
-        Calendar cal = GregorianCalendar.getInstance();
-        now = cal.getTime();
-        cal.roll(Calendar.DATE, -1);
-        cal.roll(Calendar.HOUR, -3);
-        past = cal.getTime();
-        cal.roll(Calendar.DATE, 2);
-        future = cal.getTime();
-
-        cal.roll(Calendar.YEAR, -1);
-        before = cal.getTime();
-
-        cal.roll(Calendar.YEAR, 2);
-        after = cal.getTime();
-        return SUCCESS;
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/DateAction.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/DateAction.properties
deleted file mode 100644
index d49c743..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/DateAction.properties
+++ /dev/null
@@ -1 +0,0 @@
-struts.date.format=yyyy/MM/dd hh:mm:ss
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/DynamicTreeSelectAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/DynamicTreeSelectAction.java
deleted file mode 100644
index 3fd80af..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/DynamicTreeSelectAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.apache.struts2.showcase;
-
-import org.apache.struts2.showcase.ajax.tree.Category;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-//START SNIPPET: treeExampleDynamicJavaSelected
-
-public class DynamicTreeSelectAction extends ActionSupport {
-
-	private long nodeId;
-	private Category currentCategory;
-	
-	
-	public void setNodeId(long nodeId) {
-		this.nodeId = nodeId;
-	}
-	public long getNodeId() {
-		return nodeId;
-	}
-	
-	
-	public String execute() throws Exception {
-		currentCategory = Category.getById(nodeId);
-		return SUCCESS;
-	}
-	
-	
-	public String getNodeName() {
-		return currentCategory.getName();
-	}
-}
-
-//START SNIPPET: treeExampleDynamicJavaSelected
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/Guess.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/Guess.java
deleted file mode 100644
index b74d2f3..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/Guess.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.Preparable;
-import com.uwyn.rife.continuations.ContinuableObject;
-
-import java.util.Random;
-
-// START SNIPPET: example
-public class Guess extends ActionSupport implements Preparable, ContinuableObject {
-    int guess;
-
-    public void prepare() throws Exception {
-        // We clear the error message state before the action.
-        // That is because with continuations, the original (or cloned) action is being
-        //  executed, which will still have the old errors and potentially cause problems,
-        //  such as with the workflow interceptor
-        clearErrorsAndMessages();
-    }
-
-    public String execute() throws Exception {
-        int answer = new Random().nextInt(100) + 1;
-        int tries = 5;
-
-        while (answer != guess && tries > 0) {
-            pause(Action.SUCCESS);
-
-            if (guess > answer) {
-                addFieldError("guess", "Too high!");
-            } else if (guess < answer) {
-                addFieldError("guess", "Too low!");
-            }
-
-            tries--;
-        }
-
-        if (answer == guess) {
-            addActionMessage("You got it!");
-        } else {
-            addActionMessage("You ran out of tries, the answer was " + answer);
-        }
-
-        return Action.SUCCESS;
-    }
-
-    public void setGuess(int guess) {
-        this.guess = guess;
-    }
-}
-// END SNIPPET: example
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/LotsOfOptiontransferselectAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/LotsOfOptiontransferselectAction.java
deleted file mode 100644
index ddc2360..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/LotsOfOptiontransferselectAction.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class LotsOfOptiontransferselectAction extends ActionSupport {
-	
-	private List _favouriteCartoonCharactersKeys;
-	private List _notFavouriteCartoonCharactersKeys;
-	
-	private List _favouriteCarsKeys;
-	private List _notFavouriteCarsKeys;
-	
-	private List _favouriteMotorcyclesKeys;
-	private List _notFavouriteMotorcyclesKeys;
-	
-	private List _favouriteCountriesKeys;
-	private List _notFavouriteCountriesKeys;
-	
-	private List _prioritisedFavouriteCartoonCharacters;
-	private List _prioritisedFavouriteCars;
-	private List _prioritisedFavouriteCountries;
-	
-	
-	
-	// Cartoon Characters
-	public Map getDefaultFavouriteCartoonCharacters() {
-		Map m = new LinkedHashMap();
-		m.put("heMan", "He-Man");
-		m.put("popeye", "Popeye");
-		m.put("mockeyMouse", "Mickey Mouse");
-		return m;
-	}
-	
-	public Map getDefaultNotFavouriteCartoonCharacters() {
-		Map m = new LinkedHashMap();
-		m.put("donaldDuck", "Donald Duck");
-		m.put("atomicAnt", "Atomic Ant");
-		m.put("pinkPainter", "Pink Painter");
-		return m;
-	}
-	
-	public List getFavouriteCartoonCharacters() {
-		return _favouriteCartoonCharactersKeys;
-	}
-	
-	public void setFavouriteCartoonCharacters(List favouriteCartoonCharacters) {
-		_favouriteCartoonCharactersKeys = favouriteCartoonCharacters;
-	}
-	
-	public List getNotFavouriteCartoonCharacters() {
-		return _notFavouriteCartoonCharactersKeys;
-	}
-	
-	public void setNotFavouriteCartoonCharacters(List notFavouriteCartoonCharacters) {
-		_notFavouriteCartoonCharactersKeys = notFavouriteCartoonCharacters;
-	}
-	
-	
-	
-	
-	
-	// Cars
-	public Map getDefaultFavouriteCars() {
-		Map m = new LinkedHashMap();
-		m.put("alfaRomeo", "Alfa Romeo");
-		m.put("Toyota", "Toyota");
-		m.put("Mitsubitshi", "Mitsubitshi");
-		return m;
-	}
-	
-	public Map getDefaultNotFavouriteCars() {
-		Map m = new LinkedHashMap();
-		m.put("ford", "Ford");
-		m.put("landRover", "Land Rover");
-		m.put("mercedes", "Mercedes");
-		return m;
-	}
-	
-	public List getFavouriteCars() {
-		return _favouriteCarsKeys;
-	}
-	
-	public void setFavouriteCars(List favouriteCars) {
-		_favouriteCarsKeys = favouriteCars;
-	}
-	
-	public List getNotFavouriteCars() {
-		return _notFavouriteCarsKeys;
-	}
-	
-	public void setNotFavouriteCars(List notFavouriteCars) {
-		_notFavouriteCarsKeys = notFavouriteCars;
-	}
-	
-	
-	
-	// Motorcycles
-	public Map getDefaultFavouriteMotorcycles() {
-		Map m = new LinkedHashMap();
-		m.put("honda", "Honda");
-		m.put("yamaha", "Yamaha");
-		m.put("Aprillia", "Aprillia");
-		return m;
-	}
-	
-	public Map getDefaultNotFavouriteMotorcycles() {
-		Map m = new LinkedHashMap();
-		m.put("cagiva", "Cagiva");
-		m.put("harleyDavidson", "Harley Davidson");
-		m.put("suzuki", "Suzuki");
-		return m;
-	}
-	
-	public List getFavouriteMotorcycles() {
-		return _favouriteMotorcyclesKeys;
-	}
-	
-	public void setFavouriteMotorcycles(List favouriteMotorcycles) {
-		_favouriteMotorcyclesKeys = favouriteMotorcycles;
-	}
-	
-	public List getNotFavouriteMotorcycles() {
-		return _notFavouriteMotorcyclesKeys;
-	}
-	
-	public void setNotFavouriteMotorcycles(List notFavouriteMotorcycles) {
-		_notFavouriteMotorcyclesKeys = notFavouriteMotorcycles;
-	}
-	
-	
-	
-	// Countries
-	public Map getDefaultFavouriteCountries() {
-		Map m = new LinkedHashMap();
-		m.put("england", "England");
-		m.put("america", "America");
-		m.put("brazil", "Brazil");
-		return m;
-	}
-	
-	public Map getDefaultNotFavouriteCountries() {
-		Map m = new LinkedHashMap();
-		m.put("germany", "Germany");
-		m.put("china", "China");
-		m.put("russia", "Russia");
-		return m;
-	}
-	
-	public List getFavouriteCountries() {
-		return _favouriteCountriesKeys;
-	}
-	
-	public void setFavouriteCountries(List favouriteCountries) {
-		_favouriteCountriesKeys = favouriteCountries;
-	}
-	
-	public List getNotFavouriteCountries() {
-		return _notFavouriteCountriesKeys;
-	}
-	
-	public void setNotFavouriteCountries(List notFavouriteCountries) {
-		_notFavouriteCountriesKeys = notFavouriteCountries;
-	}
-	
-	
-	public List getPrioritisedFavouriteCartoonCharacters() {
-		return _prioritisedFavouriteCartoonCharacters;
-	}
-	public void setPrioritisedFavouriteCartoonCharacters(List prioritisedFavouriteCartoonCharacters) {
-		_prioritisedFavouriteCartoonCharacters = prioritisedFavouriteCartoonCharacters;
-	}
-	
-	public List getPrioritisedFavouriteCars() {
-		return _prioritisedFavouriteCars;
-	}
-	public void setPrioritisedFavouriteCars(List prioritisedFavouriteCars) {
-		_prioritisedFavouriteCars = prioritisedFavouriteCars;
-	}
-	
-	
-	public List getPrioritisedFavouriteCountries() {
-		return _prioritisedFavouriteCountries;
-	}
-	public void setPrioritisedFavouriteCountries(List prioritisedFavouriteCountries) {
-		_prioritisedFavouriteCountries = prioritisedFavouriteCountries;
-	}
-	
-	
-	
-	
-	// actions
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String submit() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/LotsOfRichtexteditorAction-lotsOfRichtexteditorSubmit-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/LotsOfRichtexteditorAction-lotsOfRichtexteditorSubmit-validation.xml
deleted file mode 100644
index 8bf17c7..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/LotsOfRichtexteditorAction-lotsOfRichtexteditorSubmit-validation.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<validators>
-	<field name="description1">
-		<field-validator type="requiredstring">
-			<message>Description1 Is Required !!!</message>
-		</field-validator>
-	</field>
-	
-	<field name="description2">
-		<field-validator type="requiredstring">
-			<message>Description2 Is Required !!!</message>
-		</field-validator>
-	</field>
-	
-	<field name="description3">
-		<field-validator type="requiredstring">
-			<message>Description3 Is Required !!!</message>
-		</field-validator>
-	</field>
-	
-	<field name="description4">
-		<field-validator type="requiredstring">
-			<message>Description4 Is Required !!!</message>
-		</field-validator>
-	</field>
-</validators>  		
- 
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/LotsOfRichtexteditorAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/LotsOfRichtexteditorAction.java
deleted file mode 100644
index 952fda9..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/LotsOfRichtexteditorAction.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * 
- */
-public class LotsOfRichtexteditorAction extends ActionSupport {
-
-	public String description1;
-	public String description2 = "This is Description 2";
-	public String description3;
-	public String description4 = "This is Description 4";
-	
-	public String getDescription1() {
-		return this.description1;
-	}
-	public void setDescription1(String description1) {
-		this.description1 = description1;
-	}
-	
-	
-	public String getDescription2() {
-		return this.description2;
-	}
-	public void setDescription2(String description2) {
-		this.description2 = description2;
-	}
-	
-	
-	public String getDescription3() {
-		return this.description3;
-	}
-	public void setDescription3(String description3) {
-		this.description3 = description3;
-	}
-	
-	
-	
-	
-	public String getDescription4() {
-		return this.description4;
-	}
-	public void setDescription4(String description4) {
-		this.description4 = description4;
-	}
-	
-	
-	
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String submit() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ShowDynamicTreeAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ShowDynamicTreeAction.java
deleted file mode 100644
index 838d76b..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ShowDynamicTreeAction.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.apache.struts2.showcase;
-
-import org.apache.struts2.showcase.ajax.tree.Category;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-// START SNIPPET: treeExampleDynamicJavaShow 
-
-public class ShowDynamicTreeAction extends ActionSupport {
-	
-	public Category getTreeRootNode() {
-		return Category.getById(1);
-	}
-}
-
-// END SNIPPET: treeExampleDynamicJavaShow
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/UITagExample-conversion.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/UITagExample-conversion.properties
deleted file mode 100644
index 2415dcf..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/UITagExample-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-Element_friends = java.lang.String
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/UITagExample.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/UITagExample.java
deleted file mode 100644
index 3a2729c..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/UITagExample.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase;
-
-import org.apache.struts2.ServletActionContext;
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.Validateable;
-import com.opensymphony.xwork2.util.ValueStack;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.io.File;
-
-/**
- */
-public class UITagExample extends ActionSupport implements Validateable {
-	
-	private static final long serialVersionUID = -94044809860988047L;
-	
-	
-	String name;
-    Date birthday;
-    String bio;
-    String favoriteColor;
-    List friends;
-    boolean legalAge;
-    String state;
-    String region;
-    File picture;
-    String pictureContentType;
-    String pictureFileName;
-    String favouriteLanguage;
-    String favouriteVehicalType = "MotorcycleKey";
-    String favouriteVehicalSpecific = "YamahaKey";
-    
-    List leftSideCartoonCharacters;
-    List rightSideCartoonCharacters;
-    
-    List favouriteLanguages = new ArrayList();
-    List vehicalTypeList = new ArrayList();
-    Map vehicalSpecificMap = new HashMap();
-    
-    String thoughts;
-    
-    public UITagExample() {
-    	favouriteLanguages.add(new Language("EnglishKey", "English Language"));
-    	favouriteLanguages.add(new Language("FrenchKey", "French Language"));
-    	favouriteLanguages.add(new Language("SpanishKey", "Spanish Language"));
-    	
-    	VehicalType car = new VehicalType("CarKey", "Car");
-    	VehicalType motorcycle = new VehicalType("MotorcycleKey", "Motorcycle");
-    	vehicalTypeList.add(car);
-    	vehicalTypeList.add(motorcycle);
-    	
-    	List cars = new ArrayList();
-    	cars.add(new VehicalSpecific("MercedesKey", "Mercedes"));
-    	cars.add(new VehicalSpecific("HondaKey", "Honda"));
-    	cars.add(new VehicalSpecific("FordKey", "Ford"));
-    	
-    	List motorcycles = new ArrayList();
-    	motorcycles.add(new VehicalSpecific("SuzukiKey", "Suzuki"));
-    	motorcycles.add(new VehicalSpecific("YamahaKey", "Yamaha"));
-    	
-    	vehicalSpecificMap.put(car, cars);
-    	vehicalSpecificMap.put(motorcycle, motorcycles);
-    }
-    
-    
-    
-    public List getLeftSideCartoonCharacters() {
-    	return leftSideCartoonCharacters;
-    }
-    public void setLeftSideCartoonCharacters(List leftSideCartoonCharacters) {
-    	this.leftSideCartoonCharacters = leftSideCartoonCharacters;
-    }
-    
-    
-    public List getRightSideCartoonCharacters() {
-    	return rightSideCartoonCharacters;
-    }
-    public void setRightSideCartoonCharacters(List rightSideCartoonCharacters) {
-    	this.rightSideCartoonCharacters = rightSideCartoonCharacters;
-    }
-    
-    
-    public String getFavouriteVehicalType() {
-    	return favouriteVehicalType;
-    }
-    
-    public void setFavouriteVehicalType(String favouriteVehicalType) {
-    	this.favouriteVehicalType = favouriteVehicalType;
-    }
-    
-    public String getFavouriteVehicalSpecific() {
-    	return favouriteVehicalSpecific;
-    }
-    
-    public void setFavouriteVehicalSpecific(String favouriteVehicalSpecific) {
-    	this.favouriteVehicalSpecific = favouriteVehicalSpecific;
-    }
-    
-    public List getVehicalTypeList() {
-    	return vehicalTypeList;
-    }
-    
-    public List getVehicalSpecificList() {
-    	ValueStack stack = ServletActionContext.getValueStack(ServletActionContext.getRequest());
-    	Object vehicalType = stack.findValue("top");
-    	if (vehicalType != null && vehicalType instanceof VehicalType) {
-    		List l = (List) vehicalSpecificMap.get(vehicalType);
-    		return l;
-    	}
-    	return Collections.EMPTY_LIST;
-    }
-    
-    public List getFavouriteLanguages() {
-    	return favouriteLanguages;
-    }
-
-    public String execute() throws Exception {
-        return SUCCESS;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Date getBirthday() {
-        return birthday;
-    }
-
-    public void setBirthday(Date birthday) {
-        this.birthday = birthday;
-    }
-
-    public String getBio() {
-        return bio;
-    }
-
-    public void setBio(String bio) {
-        this.bio = bio;
-    }
-
-    public String getFavoriteColor() {
-        return favoriteColor;
-    }
-
-    public void setFavoriteColor(String favoriteColor) {
-        this.favoriteColor = favoriteColor;
-    }
-
-    public List getFriends() {
-        return friends;
-    }
-
-    public void setFriends(List friends) {
-        this.friends = friends;
-    }
-
-    public boolean isLegalAge() {
-        return legalAge;
-    }
-
-    public void setLegalAge(boolean legalAge) {
-        this.legalAge = legalAge;
-    }
-
-    public String getState() {
-        return state;
-    }
-
-    public void setState(String state) {
-        this.state = state;
-    }
-
-    public String getRegion() {
-        return region;
-    }
-
-    public void setRegion(String region) {
-        this.region = region;
-    }
-
-    public void setPicture(File picture) {
-        this.picture = picture;
-    }
-
-    public void setPictureContentType(String pictureContentType) {
-        this.pictureContentType = pictureContentType;
-    }
-
-    public void setPictureFileName(String pictureFileName) {
-        this.pictureFileName = pictureFileName;
-    }
-    
-    public void setFavouriteLanguage(String favouriteLanguage) {
-    	this.favouriteLanguage = favouriteLanguage;
-    }
-    
-    public String getFavouriteLanguage() {
-    	return favouriteLanguage;
-    }
-    
-    
-    public void setThoughts(String thoughts) {
-    	this.thoughts = thoughts;
-    }
-    
-    public String getThoughts() {
-    	return this.thoughts;
-    }
-    
-    
-    
-    public String doSubmit() {
-    	return SUCCESS;
-    }
-    
-    
-    
-    // === inner class 
-    public static class Language {
-    	String description;
-    	String key;
-    	
-    	public Language(String key, String description) {
-    		this.key = key;
-    		this.description = description;
-    	}
-    	
-    	public String getKey() { 
-    		return key; 
-    	}
-    	public String getDescription() { 
-    		return description; 
-    	}
-    	
-    }
-    
-    
-    public static class VehicalType {
-    	String key;
-    	String description;
-    	public VehicalType(String key, String description) {
-    		this.key = key;
-    		this.description = description;
-    	}
-    	
-    	public String getKey() { return this.key; }
-    	public String getDescription() { return this.description; }
-    	
-    	public boolean equals(Object obj) {
-    		if (! (obj instanceof VehicalType)) { 
-    			return false;
-    		}
-    		else {
-    			return key.equals(((VehicalType)obj).getKey());
-    		}
-    	}
-    	
-    	public int hashCode() {
-    		return key.hashCode();
-    	}
-    }
-    
-    
-    public static class VehicalSpecific {
-    	String key; 
-    	String description;
-    	public VehicalSpecific(String key, String description) {
-    		this.key = key;
-    		this.description = description;
-    	}
-    	
-    	public String getKey() { return this.key; }
-    	public String getDescription() { return this.description; }
-    	
-    	public boolean equals(Object obj) {
-    		if (! (obj instanceof VehicalSpecific)) {
-    			return false;
-    		}
-    		else {
-    			return key.equals(((VehicalSpecific)obj).getKey());
-    		}
-    	}
-    	
-    	public int hashCode() {
-    		return key.hashCode();
-    	}
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/AbstractCRUDAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/AbstractCRUDAction.java
deleted file mode 100644
index d57b30f..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/AbstractCRUDAction.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.action;
-
-import org.apache.log4j.Logger;
-import com.opensymphony.xwork2.ActionSupport;
-import org.apache.struts2.showcase.dao.Dao;
-import org.apache.struts2.showcase.model.IdEntity;
-
-import java.util.Collection;
-import java.io.Serializable;
-
-/**
- * AbstractCRUDAction.
- *
- */
-
-public abstract class AbstractCRUDAction extends ActionSupport {
-
-    private static final Logger log = Logger.getLogger(AbstractCRUDAction.class);
-
-    private Collection availableItems;
-    private String[] toDelete;
-
-    protected abstract Dao getDao();
-
-
-    public Collection getAvailableItems() {
-        return availableItems;
-    }
-
-    public String[] getToDelete() {
-        return toDelete;
-    }
-
-    public void setToDelete(String[] toDelete) {
-        this.toDelete = toDelete;
-    }
-
-    public String list() throws Exception {
-        this.availableItems = getDao().findAll();
-        if (log.isDebugEnabled()) {
-            log.debug("AbstractCRUDAction - [list]: " + (availableItems !=null?""+availableItems.size():"no") + " items found");
-        }
-        return execute();
-    }
-
-    public String delete() throws Exception {
-        if (toDelete != null) {
-            int count=0;
-            for (int i = 0, j=toDelete.length; i < j; i++) {
-                count = count + getDao().delete(toDelete[i]);
-            }
-            if (log.isDebugEnabled()) {
-                log.debug("AbstractCRUDAction - [delete]: " + count + " items deleted.");
-            }
-        }
-        return SUCCESS;
-    }
-
-    /**
-     * Utility method for fetching already persistent object from storage for usage in params-prepare-params cycle.
-     *
-     * @param tryId     The id to try to get persistent object for
-     * @param tryObject The object, induced by first params invocation, possibly containing id to try to get persistent
-     *                  object for
-     * @return The persistent object, if found. <tt>null</tt> otherwise.
-     */
-    protected IdEntity fetch(Serializable tryId, IdEntity tryObject) {
-        IdEntity result = null;
-        if (tryId != null) {
-            result = getDao().get(tryId);
-        } else if (tryObject != null) {
-            result = getDao().get(tryObject.getId());
-        }
-        return result;
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction-conversion.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction-conversion.properties
deleted file mode 100644
index 21d3eda..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-Element_selectedSkills=java.lang.String
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction-validation.xml
deleted file mode 100644
index c499598..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction-validation.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
-<validators>
-    <!-- Field-Validator Syntax -->
-    <field name="currentEmployee.empId">
-        <field-validator type="required">
-            <message key="employee.id.required"/>
-        </field-validator>
-    </field>
-    <field name="currentEmployee.lastName">
-        <field-validator type="requiredstring">
-            <param name="trim">true</param>
-            <message key="employee.lastName.required"/>
-        </field-validator>
-    </field>
-    <field name="currentEmployee.birthDate">
-        <field-validator type="required">
-            <message key="employee.birthDate.required"/>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction.java
deleted file mode 100644
index b434d03..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.action;
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.log4j.Logger;
-import org.apache.struts2.showcase.application.TestDataProvider;
-import org.apache.struts2.showcase.dao.Dao;
-import org.apache.struts2.showcase.dao.EmployeeDao;
-import org.apache.struts2.showcase.model.Employee;
-import org.apache.struts2.showcase.model.Skill;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * JsfEmployeeAction.
- */
-
-public class EmployeeAction extends AbstractCRUDAction implements Preparable {
-
-    private static final long serialVersionUID = 7047317819789938957L;
-
-    private static final Logger log = Logger.getLogger(EmployeeAction.class);
-
-    private Long empId;
-    protected EmployeeDao employeeDao;
-    private Employee currentEmployee;
-    private List selectedSkills;
-
-    public Long getEmpId() {
-        return empId;
-    }
-
-    public void setEmpId(Long empId) {
-        this.empId = empId;
-    }
-
-    public Employee getCurrentEmployee() {
-        return currentEmployee;
-    }
-
-    public void setCurrentEmployee(Employee currentEmployee) {
-        this.currentEmployee = currentEmployee;
-    }
-
-    public String[] getAvailablePositions() {
-        return TestDataProvider.POSITIONS;
-    }
-
-    public List getAvailableLevels() {
-        return Arrays.asList(TestDataProvider.LEVELS);
-    }
-
-    public List getSelectedSkills() {
-        return selectedSkills;
-    }
-
-    public void setSelectedSkills(List selectedSkills) {
-        this.selectedSkills = selectedSkills;
-    }
-
-    protected Dao getDao() {
-        return employeeDao;
-    }
-
-    public void setEmployeeDao(EmployeeDao employeeDao) {
-        if (log.isDebugEnabled()) {
-            log.debug("JsfEmployeeAction - [setEmployeeDao]: employeeDao injected.");
-        }
-        this.employeeDao = employeeDao;
-    }
-
-    /**
-     * This method is called to allow the action to prepare itself.
-     *
-     * @throws Exception thrown if a system level exception occurs.
-     */
-    public void prepare() throws Exception {
-        Employee preFetched = (Employee) fetch(getEmpId(), getCurrentEmployee());
-        if (preFetched != null) {
-            setCurrentEmployee(preFetched);
-        }
-    }
-
-    public String execute() throws Exception {
-        if (getCurrentEmployee() != null && getCurrentEmployee().getOtherSkills() != null) {
-            setSelectedSkills(new ArrayList());
-            Iterator it = getCurrentEmployee().getOtherSkills().iterator();
-            while (it.hasNext()) {
-                getSelectedSkills().add(((Skill) it.next()).getName());
-            }
-        }
-        return super.execute();
-    }
-
-    public String save() throws Exception {
-        if (getCurrentEmployee() != null) {
-            setEmpId((Long) employeeDao.merge(getCurrentEmployee()));
-            employeeDao.setSkills(getEmpId(), getSelectedSkills());
-        }
-        return SUCCESS;
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction.properties
deleted file mode 100644
index e2e548b..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-employee=Employee
-employee.firstName=First Name
-employee.lastName=Last Name
-employee.description=Description
-
-employee.id.required=Id is required
-employee.lastName.required=Last Name is required
-employee.birthDate.required=Birthdate is required
-employee.backtolist=Back to Employee List
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction_de.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction_de.properties
deleted file mode 100644
index ca594de..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/EmployeeAction_de.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-employee=Mitarbeiter    
-employee.firstName=Vorname
-employee.lastName=Nachname
-employee.description=Beschreibung
-
-employee.id.required=ID muß angegeben werden
-employee.lastName.required=Nachname wird benötigt
-employee.birthDate.required=Geburtsdatum wird benötigt
-employee.backtolist=Zurück zur Mitarbeiterliste
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction-validation.xml
deleted file mode 100644
index 486e79f..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction-validation.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
-<validators>
-    <!-- Field-Validator Syntax -->
-    <field name="currentSkill.name">
-        <field-validator type="requiredstring">
-            <param name="trim">true</param>
-            <message key="skill.name.required"/>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction.java
deleted file mode 100644
index dfcb5df..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.action;
-
-import org.apache.struts2.showcase.dao.Dao;
-import org.apache.struts2.showcase.dao.SkillDao;
-import org.apache.struts2.showcase.model.Skill;
-import com.opensymphony.xwork2.Preparable;
-import org.apache.log4j.Logger;
-
-/**
- * SkillAction.
- *
- */
-
-public class SkillAction extends AbstractCRUDAction implements Preparable {
-
-    private static final Logger log = Logger.getLogger(SkillAction.class);
-
-    private String skillName;
-    protected SkillDao skillDao;
-    private Skill currentSkill;
-
-    public String getSkillName() {
-        return skillName;
-    }
-
-    public void setSkillName(String skillName) {
-        this.skillName = skillName;
-    }
-
-    protected Dao getDao() {
-        return skillDao;
-    }
-
-    public void setSkillDao(SkillDao skillDao) {
-        if (log.isDebugEnabled()) {
-            log.debug("SkillAction - [setSkillDao]: skillDao injected.");
-        }
-        this.skillDao = skillDao;
-    }
-
-    public Skill getCurrentSkill() {
-        return currentSkill;
-    }
-
-    public void setCurrentSkill(Skill currentSkill) {
-        this.currentSkill = currentSkill;
-    }
-
-    /**
-     * This method is called to allow the action to prepare itself.
-     *
-     * @throws Exception thrown if a system level exception occurs.
-     */
-    public void prepare() throws Exception {
-        Skill preFetched = (Skill) fetch(getSkillName(), getCurrentSkill());
-        if (preFetched != null) {
-            setCurrentSkill(preFetched);
-        }
-    }
-
-    public String save() throws Exception {
-        if (getCurrentSkill() != null) {
-            setSkillName((String) skillDao.merge(getCurrentSkill()));
-        }
-        return SUCCESS;
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction.properties
deleted file mode 100644
index 27b7c81..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-skill=Skill
-skill.name=Name
-skill.description=Description
-
-skill.name.required=Name is required
-skill.backtolist=Back to Skill List
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction_de.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction_de.properties
deleted file mode 100644
index 7c7156f..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/action/SkillAction_de.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-skill=Kenntnis
-skill.name=Name
-skill.description=Beschreibung
-
-skill.name.required=Name muss angegeben werden
-skill.backtolist=Zurück zur Kenntnis Liste
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/actionchaining/ActionChain1.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/actionchaining/ActionChain1.java
deleted file mode 100644
index c9dfed9..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/actionchaining/ActionChain1.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.actionchaining;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * 
- */
-public class ActionChain1 extends ActionSupport {
-
-	private static final long serialVersionUID = -6811701750042275153L;
-	
-	private String actionChain1Property1 = "Property Set In Action Chain 1";
-
-	public String getActionChain1Property1() { 
-		return actionChain1Property1;
-	}
-	public void setActionChain1Property1(String actionChain1Property1) {
-		this.actionChain1Property1 = actionChain1Property1;
-	}
-	
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/actionchaining/ActionChain2.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/actionchaining/ActionChain2.java
deleted file mode 100644
index e4b30f9..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/actionchaining/ActionChain2.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.actionchaining;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * 
- */
-public class ActionChain2 extends ActionSupport {
-
-	private static final long serialVersionUID = 3951745956044674809L;
-	
-	private String actionChain1Property1;
-	private String actionChain2Property1 = "Property Set in Action Chain 2";
-	
-	
-	public String getActionChain1Property1() { 
-		return actionChain1Property1;
-	}
-	public void setActionChain1Property1(String actionChain1Property1) {
-		this.actionChain1Property1 = actionChain1Property1;
-	}
-	
-	
-	
-	public String getActionChain2Property1() { 
-		return actionChain2Property1;
-	}
-	public void setActionChain2Property1(String actionChain2Property1) {
-		this.actionChain2Property1 = actionChain2Property1;
-	}
-	
-	
-	
-	
-	public String execute() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/actionchaining/ActionChain3.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/actionchaining/ActionChain3.java
deleted file mode 100644
index 53e7587..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/actionchaining/ActionChain3.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.actionchaining;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * 
- */
-public class ActionChain3 extends ActionSupport {
-
-	private static final long serialVersionUID = -1456568865075250621L;
-	
-	private String actionChain1Property1;
-	private String actionChain2Property1;
-	private String actionChain3Property1 = "Property set in Action Chain 3";
-	
-	
-	public String getActionChain1Property1() { 
-		return actionChain1Property1;
-	}
-	public void setActionChain1Property1(String actionChain1Property1) {
-		this.actionChain1Property1 = actionChain1Property1;
-	}
-	
-	
-	
-	public String getActionChain2Property1() { 
-		return actionChain2Property1;
-	}
-	public void setActionChain2Property1(String actionChain2Property1) {
-		this.actionChain2Property1 = actionChain2Property1;
-	}
-	
-	
-	
-	public String getActionChain3Property1() {
-		return actionChain3Property1;
-	}
-	public void setActionChain3Property1(String actionChain3Property1) {
-		this.actionChain3Property1 = actionChain3Property1;
-	}
-	
-	
-	
-	
-	public String execute() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/AjaxTestAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/AjaxTestAction.java
deleted file mode 100644
index 89e7efc..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/AjaxTestAction.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.ajax;
-
-import com.opensymphony.xwork2.Action;
-
-
-/**
- */
-public class AjaxTestAction implements Action {
-
-    private static int counter = 0;
-    private String data;
-
-    public long getServerTime() {
-        return System.currentTimeMillis();
-    }
-
-    public int getCount() {
-        return ++counter;
-    }
-
-    public String getData() {
-        return data;
-    }
-
-    public void setData(String data) {
-        this.data = data;
-    }
-
-    public String execute() throws Exception {
-        return SUCCESS;
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/Example4ShowPanelAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/Example4ShowPanelAction.java
deleted file mode 100644
index 8935bea..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/Example4ShowPanelAction.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.ajax;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * @version $Date$ $Id$
- */
-public class Example4ShowPanelAction extends ActionSupport {
-
-	private String name;
-	private String gender;
-	
-	private static final long serialVersionUID = 7751976335066456596L;
-
-	public String panel1() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String panel2() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String panel3() throws Exception {
-		return SUCCESS;
-	}
-
-	public String getGender() {
-		return gender;
-	}
-
-	public void setGender(String gender) {
-		this.gender = gender;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-	
-	public String getTodayDate() {
-		SimpleDateFormat sdf = new SimpleDateFormat("dd-MMMM-yyyy");
-		return sdf.format(new Date());
-	}
-	
-	public String getTodayTime() {
-		SimpleDateFormat sdf = new SimpleDateFormat("kk:mm:ss");
-		return sdf.format(new Date());
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/Example5Action.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/Example5Action.java
deleted file mode 100644
index da3c470..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/Example5Action.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.apache.struts2.showcase.ajax;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class Example5Action extends ActionSupport {
-
-	private static final long serialVersionUID = 2111967621952300611L;
-	
-	private String name;
-	private Integer age;
-	
-	
-	public String getName() { return name; }
-	public void setName(String name) { this.name = name; }
-	
-	public Integer getAge() { return age; }
-	public void setAge(Integer age) { this.age = age; }
-	
-	@Override
-	public String execute() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/tree/Category.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/tree/Category.java
deleted file mode 100644
index a66cadb..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/tree/Category.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.ajax.tree;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-
-/**
- */
-public class Category {
-    private static Map<Long, Category> catMap = new HashMap<Long, Category>();
-
-    static {
-        new Category(1, "Root",
-                new Category(2, "Java",
-                        new Category(3, "Web Frameworks",
-                                new Category(4, "Struts"),
-                                new Category(7, "Stripes"),
-                                new Category(8, "Rife")),
-                        new Category(9, "Persistence",
-                                new Category(10, "iBatis"),
-                                new Category(11, "Hibernate"),
-                                new Category(12, "JDO"),
-                                new Category(13, "JDBC"))),
-                new Category(14, "JavaScript",
-                        new Category(15, "Dojo"),
-                        new Category(16, "Prototype"),
-                        new Category(17, "Scriptaculous"),
-                        new Category(18, "OpenRico"),
-                        new Category(19, "DWR")));
-    }
-
-    public static Category getById(long id) {
-        return catMap.get(id);
-    }
-
-    private long id;
-    private String name;
-    private List<Category> children;
-    private boolean toggle;
-
-    public Category(long id, String name, Category... children) {
-        this.id = id;
-        this.name = name;
-        this.children = new ArrayList<Category>();
-        for (Category child : children) {
-            this.children.add(child);
-        }
-
-        catMap.put(id, this);
-    }
-
-    public long getId() {
-        return id;
-    }
-
-    public void setId(long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public List<Category> getChildren() {
-        return children;
-    }
-
-    public void setChildren(List<Category> children) {
-        this.children = children;
-    }
-
-    public void toggle() {
-        toggle = !toggle;
-    }
-
-    public boolean isToggle() {
-        return toggle;
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/tree/GetCategory.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/tree/GetCategory.java
deleted file mode 100644
index 329c653..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/tree/GetCategory.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.ajax.tree;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class GetCategory extends ActionSupport {
-    private long catId;
-    private Category category;
-
-    public String execute() throws Exception {
-        if (catId < 1) {
-            // force the root
-            catId = 1;
-        }
-
-        category = Category.getById(catId);
-
-        return SUCCESS;
-    }
-
-    public void setCatId(long catId) {
-        this.catId = catId;
-    }
-
-    public Category getCategory() {
-        return category;
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/tree/Toggle.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/tree/Toggle.java
deleted file mode 100644
index 80a50a2..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/ajax/tree/Toggle.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.ajax.tree;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class Toggle extends GetCategory {
-    public String execute() throws Exception {
-        super.execute();
-
-        getCategory().toggle();
-
-        return SUCCESS;
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/application/MemoryStorage.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/application/MemoryStorage.java
deleted file mode 100644
index 2c09afc..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/application/MemoryStorage.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.application;
-
-import org.apache.struts2.showcase.exception.CreateException;
-import org.apache.struts2.showcase.exception.DuplicateKeyException;
-import org.apache.struts2.showcase.exception.StorageException;
-import org.apache.struts2.showcase.exception.UpdateException;
-import org.apache.struts2.showcase.model.IdEntity;
-import org.apache.struts2.showcase.application.Storage;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * MemoryStorage.
- * Very simple in-memory persistence emulation.
- *
- */
-
-public class MemoryStorage implements Storage {
-
-	private static final long serialVersionUID = 8611213748834904125L;
-
-
-    private Map memory = new HashMap();
-
-    private Map getEntityMap ( Class entityClass ) {
-        if (entityClass != null) {
-            Map tryMap = (Map) memory.get(entityClass);
-            if (tryMap == null) {
-                synchronized(memory) {
-                    tryMap = new HashMap();
-                    memory.put(entityClass, tryMap);
-                }
-            }
-            return tryMap;
-        } else {
-            return null;
-        }
-    }
-
-    private IdEntity intStore( Class entityClass, IdEntity object ) {
-        getEntityMap(entityClass).put(object.getId(), object);
-        return object;
-    }
-
-    public IdEntity get( Class entityClass, Serializable id ) {
-        if (entityClass != null && id != null) {
-            return (IdEntity) getEntityMap(entityClass).get(id);
-        } else {
-            return null;
-        }
-    }
-
-    public Serializable create ( IdEntity object ) throws CreateException {
-        if (object == null) {
-            throw new CreateException("Either given class or object was null");
-        }
-        if (object.getId() == null) {
-            throw new CreateException("Cannot store object with null id");
-        }
-        if (get(object.getClass(), object.getId()) != null) {
-            throw new DuplicateKeyException("Object with this id already exists.");
-        }
-        return intStore(object.getClass(), object).getId();
-    }
-
-    public IdEntity update ( IdEntity object ) throws UpdateException {
-        if (object == null) {
-            throw new UpdateException("Cannot update null object.");
-        }
-        if ( get(object.getClass(), object.getId())==null ) {
-            throw new UpdateException("Object to update not found.");
-        }
-        return intStore(object.getClass(), object);
-    }
-
-    public Serializable merge ( IdEntity object ) throws StorageException {
-        if (object == null) {
-            throw new StorageException("Cannot merge null object");
-        }
-        if (object.getId() == null || get(object.getClass(), object.getId())==null) {
-            return create(object);
-        } else {
-            return update(object).getId();
-        }
-    }
-
-    public int delete( Class entityClass, Serializable id ) throws CreateException {
-        try {
-            if (get(entityClass, id) != null) {
-                getEntityMap(entityClass).remove(id);
-                return 1;
-            } else {
-                return 0;
-            }
-        } catch (Exception e) {
-            throw new CreateException(e);
-        }
-    }
-
-    public int delete( IdEntity object ) throws CreateException {
-        if (object == null) {
-            throw new CreateException("Cannot delete null object");
-        }
-        return delete(object.getClass(), object.getId());
-    }
-
-    public Collection findAll( Class entityClass ) {
-        if (entityClass != null) {
-        	return getEntityMap(entityClass).values();
-        } else {
-            return new ArrayList();
-        }
-    }
-
-    public void reset() {
-        this.memory = new HashMap();
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/application/Storage.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/application/Storage.java
deleted file mode 100644
index ceba183..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/application/Storage.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.application;
-
-import org.apache.struts2.showcase.model.IdEntity;
-import org.apache.struts2.showcase.exception.CreateException;
-import org.apache.struts2.showcase.exception.UpdateException;
-import org.apache.struts2.showcase.exception.StorageException;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-/**
- * Storage. Interface.
- *
- */
-
-public interface Storage extends Serializable {
-    IdEntity get( Class entityClass, Serializable id );
-
-    Serializable create ( IdEntity object ) throws CreateException;
-
-    IdEntity update ( IdEntity object ) throws UpdateException;
-
-    Serializable merge ( IdEntity object ) throws StorageException;
-
-    int delete( Class entityClass, Serializable id ) throws CreateException;
-
-    int delete( IdEntity object ) throws CreateException;
-
-    Collection findAll( Class entityClass );
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/application/TestDataProvider.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/application/TestDataProvider.java
deleted file mode 100644
index 6378a00..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/application/TestDataProvider.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.application;
-
-import org.apache.struts2.showcase.dao.EmployeeDao;
-import org.apache.struts2.showcase.dao.SkillDao;
-import org.apache.struts2.showcase.exception.StorageException;
-import org.apache.struts2.showcase.model.Employee;
-import org.apache.struts2.showcase.model.Skill;
-import org.apache.log4j.Logger;
-import org.springframework.beans.factory.InitializingBean;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Arrays;
-
-/**
- * TestDataProvider.
- *
- */
-
-public class TestDataProvider implements Serializable, InitializingBean {
-
-	private static final long serialVersionUID = 1L;
-
-	private static final Logger log = Logger.getLogger(TestDataProvider.class);
-
-    public static final String[] POSITIONS = {
-            "Developer",
-            "System Architect",
-            "Sales Manager",
-            "CEO"
-    };
-
-    public static final String[] LEVELS = {
-            "Junior",
-            "Senior",
-            "Master"
-    };
-
-    private static final Skill[] TEST_SKILLS = {
-            new Skill("WW-SEN", "Struts Senior Developer"),
-            new Skill("WW-JUN", "Struts Junior Developer"),
-            new Skill("SPRING-DEV", "Spring Developer")
-    };
-
-    public static final Employee[] TEST_EMPLOYEES = {
-            new Employee(new Long(1), "Alan", "Smithee", new Date(), new Float(2000f), true, POSITIONS[0],
-                    TEST_SKILLS[0], null, "alan", LEVELS[0], "Nice guy"),
-            new Employee(new Long(2), "Robert", "Robson", new Date(), new Float(10000f), false, POSITIONS[1],
-                    TEST_SKILLS[1], Arrays.asList(TEST_SKILLS).subList(1,TEST_SKILLS.length), "rob", LEVELS[1], "Smart guy")
-    };
-
-    private SkillDao skillDao;
-    private EmployeeDao employeeDao;
-
-    public void setSkillDao(SkillDao skillDao) {
-        this.skillDao = skillDao;
-    }
-
-    public void setEmployeeDao(EmployeeDao employeeDao) {
-        this.employeeDao = employeeDao;
-    }
-
-    protected void addTestSkills() {
-        try {
-            for (int i = 0, j = TEST_SKILLS.length; i < j; i++) {
-                skillDao.merge(TEST_SKILLS[i]);
-            }
-            if (log.isInfoEnabled()) {
-                log.info("TestDataProvider - [addTestSkills]: Added test skill data.");
-            }
-        } catch (StorageException e) {
-            log.error("TestDataProvider - [addTestSkills]: Exception catched: " + e.getMessage());
-        }
-    }
-
-    protected void addTestEmployees() {
-        try {
-            for (int i = 0, j = TEST_EMPLOYEES.length; i < j; i++) {
-                employeeDao.merge(TEST_EMPLOYEES[i]);
-            }
-            if (log.isInfoEnabled()) {
-                log.info("TestDataProvider - [addTestEmployees]: Added test employee data.");
-            }
-        } catch (StorageException e) {
-            log.error("TestDataProvider - [addTestEmployees]: Exception catched: " + e.getMessage());
-        }
-    }
-
-    protected void addTestData() {
-        addTestSkills();
-        addTestEmployees();
-    }
-
-    public void afterPropertiesSet() throws Exception {
-        addTestData();
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatAuthenticationInterceptor.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatAuthenticationInterceptor.java
deleted file mode 100644
index 8c934df..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatAuthenticationInterceptor.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.dispatcher.SessionMap;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-
-public class ChatAuthenticationInterceptor implements Interceptor {
-
-	private static final long serialVersionUID = 1L;
-	
-	private static final Log _log = LogFactory.getLog(ChatAuthenticationInterceptor.class);
-	
-	public static final String USER_SESSION_KEY = "chatUserSessionKey";
-
-	public void destroy() {
-	}
-
-	public void init() {
-	}
-
-	public String intercept(ActionInvocation invocation) throws Exception {
-		
-		_log.debug("Authenticating chat user");
-		
-		SessionMap session = (SessionMap) ActionContext.getContext().get(ActionContext.SESSION);
-		User user = (User) session.get(USER_SESSION_KEY);
-		
-		if (user == null) {
-			return Action.LOGIN;
-		}
-		return invocation.invoke();
-	}
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatException.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatException.java
deleted file mode 100644
index 0207d61..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-public class ChatException extends RuntimeException {
-	
-	private static final long serialVersionUID = 1L;
-
-	public enum ErrorType {
-		ROOM_ALREADY_EXISTS, 
-		USER_ALREADY_EXISTS,
-		NO_SUCH_ROOM_EXISTS
-	}
-	
-	public ChatException(String description, ErrorType type) {
-		super(description);
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatInterceptor.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatInterceptor.java
deleted file mode 100644
index 791aeed..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatInterceptor.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-
-/**
- * Authenticate showcase chat example, make sure everyone have a username.
- */
-public class ChatInterceptor implements Interceptor {
-	
-	private static final Log _log = LogFactory.getLog(ChatInterceptor.class);
-
-	private static final long serialVersionUID = 1L;
-	
-	public static final String CHAT_USER_SESSION_KEY = "ChatUserSessionKey";
-
-	public void destroy() {
-	}
-
-	public void init() {
-	}
-
-	public String intercept(ActionInvocation invocation) throws Exception {
-		HttpSession session = (HttpSession) ActionContext.getContext().get(ActionContext.SESSION);
-		User chatUser = (User) session.getAttribute(CHAT_USER_SESSION_KEY);
-		if (chatUser == null) {
-			_log.debug("Chat user not logged in");
-			return Action.LOGIN;
-		}
-		return invocation.invoke();
-	}
-}
-
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatLoginAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatLoginAction.java
deleted file mode 100644
index 28450a7..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatLoginAction.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.Map;
-
-import org.apache.struts2.interceptor.SessionAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class ChatLoginAction extends ActionSupport implements SessionAware {
-
-	private static final long serialVersionUID = 1L;
-	
-	private ChatService chatService;
-	private Map session;
-	
-	private String name;
-	
-	public ChatLoginAction(ChatService chatService) {
-		this.chatService = chatService;
-	}
-	
-	public String getName() {
-		return this.name;
-	}
-	public void setName(String name) {
-		this.name = name;
-	}
-	
-	
-	public String execute() throws Exception {
-		try {
-			chatService.login(new User(name));
-			session.put(ChatAuthenticationInterceptor.USER_SESSION_KEY, new User(name));
-		}
-		catch(ChatException e) {
-			e.printStackTrace();
-			addActionError(e.getMessage());
-			return INPUT;
-		}
-		return SUCCESS;
-	}
-
-	
-	// === SessionAware ===
-	public void setSession(Map session) {
-		this.session = session;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatLogoutAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatLogoutAction.java
deleted file mode 100644
index 7f2d326..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatLogoutAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.Map;
-
-import org.apache.struts2.interceptor.SessionAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class ChatLogoutAction extends ActionSupport implements SessionAware {
-
-	private static final long serialVersionUID = 1L;
-
-	private ChatService chatService;
-	
-	private Map session;
-	
-	
-	public ChatLogoutAction(ChatService chatService) {
-		this.chatService = chatService;
-	}
-	
-	public String execute() throws Exception {
-		
-		User user = (User) session.get(ChatAuthenticationInterceptor.USER_SESSION_KEY);
-		if (user != null) {
-			chatService.logout(user.getName());
-			session.remove(ChatAuthenticationInterceptor.USER_SESSION_KEY);
-		}
-		
-		return SUCCESS;
-	}
-
-	
-	// === SessionAware ===
-	public void setSession(Map session) {	
-		this.session = session;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatMessage.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatMessage.java
deleted file mode 100644
index f2828b8..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatMessage.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.Date;
-
-public class ChatMessage {
-	
-	private Date creationDate;
-	private String message;
-	private User creator;
-	
-	public ChatMessage(String message, User creator) {
-		assert(message != null);
-		assert(creator != null);
-		
-		this.creationDate = new Date(System.currentTimeMillis());
-		this.message = message;
-		this.creator = creator;
-	}
-	
-	public Date getCreationDate() {
-		return creationDate;
-	}
-	public User getCreator() {
-		return creator;
-	}
-	public String getMessage() {
-		return message;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatService.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatService.java
deleted file mode 100644
index 91e31ab..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatService.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.List;
-
-public interface ChatService {
-	List<User> getAvailableUsers();
-	void login(User user);
-	void logout(String name);
-	
-	List<Room> getAvailableRooms();
-	void addRoom(Room room);
-	void enterRoom(User user, String roomName);
-	void exitRoom(String userName, String roomName);
-	List<ChatMessage> getMessagesInRoom(String roomName);
-	void sendMessageToRoom(String roomName, User user, String message);
-	List<User> getUsersAvailableInRoom(String roomName);
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatServiceImpl.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatServiceImpl.java
deleted file mode 100644
index 3f90971..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatServiceImpl.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-public class ChatServiceImpl implements ChatService {
-	
-	private Map<String, User> availableUsers = new LinkedHashMap<String, User>();
-	private Map<String, Room> availableRooms = new LinkedHashMap<String, Room>();
-	
-	
-	public List<User> getAvailableUsers() {
-		return new ArrayList<User>(availableUsers.values());
-	}
-
-	public List<Room> getAvailableRooms() {
-		return new ArrayList<Room>(availableRooms.values());
-	}
-
-	public void addRoom(Room room) {
-		if (availableRooms.containsKey(room.getName())) {
-			throw new ChatException("room ["+room.getName()+"] is already available", ChatException.ErrorType.valueOf("ROOM_ALREADY_EXISTS"));
-		}
-		availableRooms.put(room.getName(), room);
-	}
-	
-	public void login(User user) {
-		assert(user != null);
-		if (availableUsers.containsKey(user.getName())) {
-			throw new ChatException("User ["+user.getName()+"] already exists", ChatException.ErrorType.valueOf("USER_ALREADY_EXISTS"));
-		}
-		availableUsers.put(user.getName(), user);
-	}
-
-	public void logout(String name) {
-		assert(name != null);
-		assert(name.trim().length() > 0);
-		availableUsers.remove(name);
-		for (Room room : availableRooms.values()) {
-			if (room.hasMember(name)) {
-				room.memberExit(name);
-			}
-		}
-	}
-
-	public void exitRoom(String userName, String roomName) {
-		assert(roomName != null);
-		assert(roomName.trim().length()> 0);
-		
-		if (availableRooms.containsKey(roomName)) {
-			Room room = availableRooms.get(roomName);
-			room.memberExit(userName);
-		}
-	}
-	
-	public void enterRoom(User user, String roomName) {
-		assert(roomName != null);
-		assert(roomName.trim().length() > 0);
-		if (! availableRooms.containsKey(roomName)) {
-			throw new ChatException("No such room exists ["+roomName+"]", ChatException.ErrorType.NO_SUCH_ROOM_EXISTS);
-		}
-		Room room = availableRooms.get(roomName);
-		room.memberEnter(user);
-	}
-
-	public List<ChatMessage> getMessagesInRoom(String roomName) {
-		assert(roomName != null);
-		assert(roomName.trim().length() > 0);
-		if (! availableRooms.containsKey(roomName)) {
-			throw new ChatException("No such room exists ["+roomName+"]", ChatException.ErrorType.NO_SUCH_ROOM_EXISTS);
-		}
-		Room room = availableRooms.get(roomName);
-		return room.getChatMessages();
-	}
-
-	public void sendMessageToRoom(String roomName, User user, String message) {
-		assert(roomName != null);
-		if (! availableRooms.containsKey(roomName)) {
-			throw new ChatException("No such room exists ["+roomName+"]", ChatException.ErrorType.NO_SUCH_ROOM_EXISTS);
-		}
-		Room room = availableRooms.get(roomName);
-		room.addMessage(new ChatMessage(message, user));
-	}
-
-	public List<User> getUsersAvailableInRoom(String roomName) {
-		assert(roomName != null);
-		if (! availableRooms.containsKey(roomName)) {
-			throw new ChatException("No such room exists ["+roomName+"]", ChatException.ErrorType.NO_SUCH_ROOM_EXISTS);
-		}
-		Room room = availableRooms.get(roomName);
-		return room.getMembers();
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatSessionListener.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatSessionListener.java
deleted file mode 100644
index 57acc14..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ChatSessionListener.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
-
-public class ChatSessionListener implements HttpSessionListener {
-
-	private static final Log _log = LogFactory.getLog(ChatSessionListener.class);
-	
-	public void sessionCreated(HttpSessionEvent event) {
-	}
-
-	public void sessionDestroyed(HttpSessionEvent event) {
-		HttpSession session = event.getSession();
-		WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());
-		if (context != null) {
-			User user = (User) session.getAttribute(ChatInterceptor.CHAT_USER_SESSION_KEY);
-			if (user != null) {
-				ChatService service = (ChatService) context.getBean("chatService");
-				service.logout(user.getName());
-				
-				_log.info("session expired, logged user ["+user.getName()+"] out");
-			}
-		}
-	}
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/Constants.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/Constants.java
deleted file mode 100644
index 5943524..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/Constants.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-public class Constants {
-	public static String UPDATE_FREQ = "30000";
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/CrudRoomAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/CrudRoomAction.java
deleted file mode 100644
index 3077427..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/CrudRoomAction.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class CrudRoomAction extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-
-	private ChatService chatService;
-	
-	private String name;
-	private String description;
-	
-	
-	public String getDescription() {
-		return description;
-	}
-
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public CrudRoomAction(ChatService chatService) {
-		this.chatService = chatService;
-	}
-	
-	public String create() throws Exception {
-		try {
-			chatService.addRoom(new Room(name, description));
-		}
-		catch(ChatException e) {
-			addActionError(e.getMessage());
-		}
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/DateConverter.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/DateConverter.java
deleted file mode 100644
index d2c89ae..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/DateConverter.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.util.StrutsTypeConverter;
-
-public class DateConverter extends StrutsTypeConverter {
-	
-	private static final Log _log = LogFactory.getLog(DateConverter.class);
-
-	public Object convertFromString(Map context, String[] values, Class toClass) {
-		
-		if (values.length > 0 && values[0] != null && values[0].trim().length() > 0) {
-			SimpleDateFormat sdf = new SimpleDateFormat();
-			try {
-				return sdf.parse(values[0]);
-			}
-			catch(ParseException e) {
-				_log.error("error converting value ["+values[0]+"] to Date ", e);
-			}
-		}
-		return null;
-	}
-
-	public String convertToString(Map context, Object o) {
-		
-		if (o instanceof Date) {
-			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
-			return sdf.format((Date) o);
-		}
-		return "";
-	}
-}
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/EnterRoomAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/EnterRoomAction.java
deleted file mode 100644
index 707e3b5..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/EnterRoomAction.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.Map;
-
-import org.apache.struts2.interceptor.SessionAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class EnterRoomAction extends ActionSupport implements SessionAware {
-
-	private static final long serialVersionUID = 1L;
-	
-	private ChatService chatService;
-	private Map session;
-	private String roomName;
-	
-	public String getRoomName() { return this.roomName; }
-	public void setRoomName(String roomName) { this.roomName = roomName; }
-	
-	public EnterRoomAction(ChatService chatService) {
-		this.chatService = chatService;
-	}
-	
-	public String execute() throws Exception {
-		
-		User user = (User) session.get(ChatAuthenticationInterceptor.USER_SESSION_KEY);
-		try {
-			chatService.enterRoom(user, roomName);
-		}
-		catch(Exception e) {
-			addActionError(e.getMessage());
-		}	
-		return SUCCESS;
-	}
-
-	
-	// === SessionAware ===
-	public void setSession(Map session) {
-		this.session = session;
-	}
-	
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ExitRoomAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ExitRoomAction.java
deleted file mode 100644
index 2ff90a5..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/ExitRoomAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.Map;
-
-import org.apache.struts2.interceptor.SessionAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class ExitRoomAction extends ActionSupport implements SessionAware {
-
-	private static final long serialVersionUID = 1L;
-
-	private String roomName;
-	
-	private Map session;
-	
-	public String getRoomName() { return roomName; }
-	public void setRoomName(String roomName) { this.roomName = roomName; }
-	
-	private ChatService chatService; 
-	
-	public ExitRoomAction(ChatService chatService) {
-		this.chatService = chatService;
-	}
-	
-	public String execute() throws Exception {
-		User user = (User) session.get(ChatAuthenticationInterceptor.USER_SESSION_KEY);
-		chatService.exitRoom(user.getName(), roomName);
-		
-		return SUCCESS;
-	}
-	
-	// === SessionAware ===
-	public void setSession(Map session) {
-		this.session = session;
-	}
-	
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/MessagesAvailableInRoomAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/MessagesAvailableInRoomAction.java
deleted file mode 100644
index 427a2b9..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/MessagesAvailableInRoomAction.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class MessagesAvailableInRoomAction extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-
-	private String roomName;
-	private ChatService chatService;
-	private List<ChatMessage> messagesAvailableInRoom = new ArrayList<ChatMessage>();
-	
-	public String getRoomName() { return this.roomName; }
-	public void setRoomName(String roomName) {
-		this.roomName = roomName;
-	}
-	
-	public List<ChatMessage> getMessagesAvailableInRoom() {
-		return messagesAvailableInRoom;
-	}
-	
-	public MessagesAvailableInRoomAction(ChatService chatService) {
-		this.chatService = chatService;
-	}
-	
-	public String execute() throws Exception {
-		try {
-			messagesAvailableInRoom = chatService.getMessagesInRoom(roomName);
-		}
-		catch(ChatException e) {
-			addActionError(e.getMessage());
-		}
-		return SUCCESS;
-	}
-	
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/Room.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/Room.java
deleted file mode 100644
index 9ab85da..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/Room.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-public class Room {
-	
-	private static final int MAX_CHAT_MESSAGES = 10;
-	
-	private String name;
-	private String description;
-	private Date creationDate;
-	
-	private List<ChatMessage> messages = new ArrayList<ChatMessage>();
-	
-	private Map<String, User> members = new LinkedHashMap<String, User>();
-	
-	public Room(String name, String description) {
-		this.name = name;
-		this.description = description;
-		this.creationDate = new Date(System.currentTimeMillis());
-	}
-	
-	
-	// properties
-	public Date getCreationDate() {
-		return creationDate;
-	}
-
-	public String getDescription() {
-		return description;
-	}
-
-	public String getName() {
-		return name;
-	}
-	
-	
-	// (behaviour) members
-	public List<User> getMembers() {
-		return new ArrayList<User>(members.values());
-	}
-	public User findMember(String name) {
-		assert(name != null);
-		return members.get(name);
-	}
-	public boolean hasMember(String name) {
-		assert(name != null);
-		return members.containsKey(name);
-	}
-	public void memberEnter(User member) {
-		assert(member != null);
-		if (! hasMember(member.getName())) {
-			members.put(member.getName(), member);
-		}
-	}
-	
-	public void memberExit(String memberName) {
-		assert(memberName != null);
-		assert(memberName.trim().length() > 0);
-		members.remove(memberName);
-	}
-
-	
-	// (behaviour) chat messags
-	public void addMessage(ChatMessage chatMessage) {
-		if (messages.size() > MAX_CHAT_MESSAGES) {
-			// messages.remove(messages.size() - 1);
-			messages.remove(0);
-		}
-		messages.add(chatMessage);
-	}
-	
-	public List<ChatMessage> getChatMessages() {
-		return new ArrayList<ChatMessage>(messages);
-	}
-	
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/RoomsAvailableAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/RoomsAvailableAction.java
deleted file mode 100644
index 111420b..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/RoomsAvailableAction.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class RoomsAvailableAction extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-
-	private List<Room> availableRooms = new ArrayList<Room>();
-	
-	private ChatService chatService;
-	
-	public RoomsAvailableAction(ChatService chatService) {
-		this.chatService = chatService;
-	}
-	
-	public String execute() throws Exception {
-		availableRooms = chatService.getAvailableRooms();
-		return SUCCESS;
-	}
-	
-	public List<Room> getAvailableRooms() {
-		return availableRooms;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/SendMessageToRoomAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/SendMessageToRoomAction.java
deleted file mode 100644
index 42875d7..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/SendMessageToRoomAction.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.Map;
-
-import org.apache.struts2.interceptor.SessionAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class SendMessageToRoomAction extends ActionSupport implements SessionAware {
-
-	private static final long serialVersionUID = 1L;
-	
-	private ChatService chatService;
-	
-	private String roomName;
-	private String message;
-	private Map session;
-	
-	
-	public SendMessageToRoomAction(ChatService chatService) {
-		this.chatService = chatService;
-	}
-	
-	public String getRoomName() { return this.roomName; }
-	public void setRoomName(String roomName) {
-		this.roomName = roomName;
-	}
-	
-	public String getMessage() { return this.message; }
-	public void setMessage(String message) {
-		this.message = message;
-	}
-	
-	
-	public String execute() throws Exception {
-		User user = (User) session.get(ChatAuthenticationInterceptor.USER_SESSION_KEY);
-		try {
-			chatService.sendMessageToRoom(roomName, user, message);
-		}catch(ChatException e) {
-			addActionError(e.getMessage());
-		}
-		return SUCCESS;
-	}
-
-	public void setSession(Map session) {
-		this.session = session;
-	}
-
-	
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/User.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/User.java
deleted file mode 100644
index 8ca098d..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/User.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * Represends a user in the Chat example.
- */
-public class User implements Serializable  {
-	
-	private static final long serialVersionUID = -1434958919516089297L;
-	
-	private String name;
-	private Date creationDate;
-	
-	
-	public User(String name) {
-		this.name = name;
-		this.creationDate = new Date(System.currentTimeMillis());
-	}
-	
-	public Date getCreationDate() {
-		return creationDate;
-	}
-	public String getName() {
-		return name;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/UsersAvailableAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/UsersAvailableAction.java
deleted file mode 100644
index 82886fe..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/UsersAvailableAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class UsersAvailableAction extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-	
-	private List<User> availableUsers = new ArrayList<User>();
-	private ChatService chatService;
-	
-	public UsersAvailableAction(ChatService chatService) {
-		this.chatService = chatService;
-	}
-	
-	public String execute() throws Exception {
-		
-		availableUsers = chatService.getAvailableUsers();
-		
-		return SUCCESS;
-	}
-	
-	public List<User> getAvailableUsers() {
-		return availableUsers;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/UsersAvailableInRoomAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/UsersAvailableInRoomAction.java
deleted file mode 100644
index 96db8aa..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/UsersAvailableInRoomAction.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.chat;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class UsersAvailableInRoomAction extends ActionSupport {
-
-	private static final long serialVersionUID = 1L;
-	
-	private ChatService chatService;
-	private List<User> usersAvailableInRoom = new ArrayList<User>();
-	
-	private String roomName;
-	
-	public UsersAvailableInRoomAction(ChatService chatService) {
-		this.chatService = chatService;
-	}
-	
-	
-	public String getRoomName() { return this.roomName; }
-	public void setRoomName(String roomName) {
-		this.roomName = roomName;
-	}
-	
-	public List<User> getUsersAvailableInRoom() {
-		return usersAvailableInRoom;
-	}
-	
-	public String execute() throws Exception {
-		try {
-			usersAvailableInRoom = chatService.getUsersAvailableInRoom(roomName);
-		}
-		catch(ChatException e) {
-			addActionError(e.getMessage());
-		}
-		return SUCCESS;
-	}
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/Address.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/Address.java
deleted file mode 100644
index bf50183..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/Address.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * $Id: Person.java 440597 2006-09-06 03:34:39Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-
-/**
- * @version $Date$ $Id$
- */
-public class Address {
-	
-	private String id;
-	private String address;
-	
-	public String getId() { return id; }
-	public void setId(String id) { this.id = id; }
-	
-	public String getAddress() { return address; }
-	public void setAddress(String address) { this.address = address; }
-	
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/AddressAction-conversion.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/AddressAction-conversion.properties
deleted file mode 100644
index 1a6d700..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/AddressAction-conversion.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-
-KeyProperty_addresses=id
-Element_addresses=org.apache.struts2.showcase.conversion.Address
-CreateIfNull_addresses=true
-
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/AddressAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/AddressAction.java
deleted file mode 100644
index 35f17f5..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/AddressAction.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * $Id: Person.java 440597 2006-09-06 03:34:39Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * @version $Date$ $Id$
- */
-public class AddressAction extends ActionSupport {
-
-	private Set addresses = new LinkedHashSet();
-	
-	public Set getAddresses() { return addresses; }
-	public void setAddresses(Set addresses) { this.addresses = addresses; }
-	
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String submit() throws Exception {
-		System.out.println(addresses);
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/EnumTypeConverter.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/EnumTypeConverter.java
deleted file mode 100644
index 0a1b1aa..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/EnumTypeConverter.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id: Person.java 440597 2006-09-06 03:34:39Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.util.StrutsTypeConverter;
-
-/**
- * @version $Date$ $Id$
- */
-public class EnumTypeConverter extends StrutsTypeConverter {
-
-	@Override
-	public Object convertFromString(Map context, String[] values, Class toClass) {
-		List<Enum> result = new ArrayList<Enum>();
-		for (int a=0; a< values.length; a++) {
-			Enum e = Enum.valueOf(OperationsEnum.class, values[a]);
-			if (e != null)
-				result.add(e);
-		}
-		return result;
-	}
-
-	@Override
-	public String convertToString(Map context, Object o) {
-		List l = (List) o;
-		String result ="<";
-		for (Iterator i = l.iterator(); i.hasNext(); ) {
-			result = result + "["+ i.next() +"]";
-		}
-		result = result+">";
-		return result;
-	}
-
-	
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/OperationsEnum.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/OperationsEnum.java
deleted file mode 100644
index 2db1194..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/OperationsEnum.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * $Id: Person.java 440597 2006-09-06 03:34:39Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-/**
- * 
- * @version $Date$ $Id$
- */
-public enum OperationsEnum {
-	ADD, 
-	MINUS, 
-	DIVIDE, 
-	MULTIPLY, 
-	REMAINDER;
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/OperationsEnumAction-conversion.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/OperationsEnumAction-conversion.properties
deleted file mode 100644
index 621beaf..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/OperationsEnumAction-conversion.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-
-selectedOperations=org.apache.struts2.showcase.conversion.EnumTypeConverter
-Element_selectedOperations=org.apache.struts2.showcase.conversion.OperationsEnum
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/OperationsEnumAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/OperationsEnumAction.java
deleted file mode 100644
index ee2327f..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/OperationsEnumAction.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * $Id: Person.java 440597 2006-09-06 03:34:39Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * 
- * @version $Date$ $Id$
- */
-public class OperationsEnumAction extends ActionSupport {
-
-	private static final long serialVersionUID = -2229489704988870318L;
-	
-	private List<OperationsEnum> selectedOperations = new LinkedList<OperationsEnum>();
-	
-	public List<OperationsEnum> getSelectedOperations() { return this.selectedOperations; }
-	public void setSelectedOperations(List<OperationsEnum> selectedOperations) {
-		this.selectedOperations = selectedOperations;
-	}
-	
-	
-	public List<OperationsEnum> getAvailableOperations() {
-		return Arrays.asList(OperationsEnum.values());
-	}
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	public String submit() throws Exception {
-		return SUCCESS;
-	}
-}
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/Person.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/Person.java
deleted file mode 100644
index f87072c..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/Person.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-import java.io.Serializable;
-
-/**
- *
- */
-public class Person implements Serializable {
-	private String name;
-	private Integer age;
-	
-	public void setName(String name) { this.name = name; }
-	public String getName() { return this.name; }
-	
-	public void setAge(Integer age) { this.age = age; }
-	public Integer getAge() { return this.age; }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/PersonAction-conversion.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/PersonAction-conversion.properties
deleted file mode 100644
index 12f602f..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/PersonAction-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-Element_persons=org.apache.struts2.showcase.conversion.Person
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/PersonAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/PersonAction.java
deleted file mode 100644
index 1e0bd55..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/conversion/PersonAction.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-import java.util.List;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * 
- */
-public class PersonAction extends ActionSupport {
-	
-	private List persons;
-	
-	public List getPersons() { return persons; }
-	public void setPersons(List persons) { this.persons = persons; }
-	
-	
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String submit() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/AbstractDao.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/AbstractDao.java
deleted file mode 100644
index 3c61468..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/AbstractDao.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.dao;
-
-import org.apache.struts2.showcase.model.IdEntity;
-import org.apache.struts2.showcase.exception.CreateException;
-import org.apache.struts2.showcase.exception.UpdateException;
-import org.apache.struts2.showcase.exception.StorageException;
-import org.apache.struts2.showcase.application.Storage;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-/**
- * AbstractDao.
- *
- */
-
-public abstract class AbstractDao implements Serializable, Dao {
-
-    private Storage storage;
-
-    public Storage getStorage() {
-        return storage;
-    }
-
-    public void setStorage(Storage storage) {
-        this.storage = storage;
-    }
-
-    public IdEntity get(Serializable id) {
-        return getStorage().get(getFeaturedClass(), id);
-    }
-
-    public Serializable create(IdEntity object) throws CreateException {
-        return getStorage().create(object);
-    }
-
-    public IdEntity update(IdEntity object) throws UpdateException {
-        return getStorage().update(object);
-    }
-
-    public Serializable merge(IdEntity object) throws StorageException {
-        return getStorage().merge(object);
-    }
-
-    public int delete(Serializable id) throws CreateException {
-        return getStorage().delete(getFeaturedClass(), id);
-    }
-
-    public int delete(IdEntity object) throws CreateException {
-        return getStorage().delete(object);
-    }
-
-    public Collection findAll() {
-        return getStorage().findAll(getFeaturedClass());
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/Dao.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/Dao.java
deleted file mode 100644
index c27eb7a..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/Dao.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.dao;
-
-import org.apache.struts2.showcase.model.IdEntity;
-import org.apache.struts2.showcase.exception.CreateException;
-import org.apache.struts2.showcase.exception.UpdateException;
-import org.apache.struts2.showcase.exception.StorageException;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-/**
- * Dao. Interface.
- *
- */
-
-public interface Dao {
-
-    Class getFeaturedClass();
-
-    IdEntity get(Serializable id);
-
-    Serializable create(IdEntity object) throws CreateException;
-
-    IdEntity update(IdEntity object) throws UpdateException;
-
-    Serializable merge(IdEntity object) throws StorageException;
-
-    int delete(Serializable id) throws CreateException;
-
-    int delete(IdEntity object) throws CreateException;
-
-    Collection findAll();
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/EmployeeDao.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/EmployeeDao.java
deleted file mode 100644
index 392dcc8..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/EmployeeDao.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.dao;
-
-import org.apache.struts2.showcase.model.Employee;
-import org.apache.struts2.showcase.model.Skill;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * EmployeeDao.
- *
- */
-
-public class EmployeeDao extends AbstractDao {
-
-	private static final long serialVersionUID = -6615310540042830594L;
-
-    protected SkillDao skillDao;
-
-    public void setSkillDao(SkillDao skillDao) {
-        this.skillDao = skillDao;
-    }
-
-    public Class getFeaturedClass() {
-        return Employee.class;
-    }
-
-    public Employee getEmployee( Long id ) {
-        return (Employee) get(id);
-    }
-
-    public Employee setSkills(Employee employee, List skillNames) {
-        if (employee!= null && skillNames != null) {
-            employee.setOtherSkills(new ArrayList());
-            for (int i = 0, j = skillNames.size(); i < j; i++) {
-                Skill skill = (Skill) skillDao.get((String) skillNames.get(i));
-                employee.getOtherSkills().add(skill);
-            }
-        }
-        return employee;
-    }
-
-    public Employee setSkills(Long empId, List skillNames) {
-        return setSkills((Employee) get(empId), skillNames);
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/SkillDao.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/SkillDao.java
deleted file mode 100644
index d21a3b4..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/dao/SkillDao.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.dao;
-
-import org.apache.struts2.showcase.model.Skill;
-
-/**
- * SkillDao.
- *
- */
-
-public class SkillDao extends AbstractDao {
-
-	private static final long serialVersionUID = -8160406514074630866L;
-
-    public Class getFeaturedClass() {
-        return Skill.class;
-    }
-
-    public Skill getSkill( String name ) {
-        return (Skill) get(name);
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/CreateException.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/CreateException.java
deleted file mode 100644
index fbf8b93..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/CreateException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.exception;
-
-/**
- * CreateException.
- *
- */
-
-public class CreateException extends StorageException {
-
-	private static final long serialVersionUID = 6734349565111633783L;
-	
-    public CreateException(String message) {
-        super(message);
-    }
-
-    public CreateException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    public CreateException(Throwable cause) {
-        super(cause);
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/DeleteException.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/DeleteException.java
deleted file mode 100644
index 86022d1..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/DeleteException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.exception;
-
-/**
- * DeleteException.
- *
- */
-
-public class DeleteException extends StorageException {
-
-	private static final long serialVersionUID = -5286362812955627352L;
-
-	public DeleteException(String message) {
-        super(message);
-    }
-
-    public DeleteException(Throwable cause) {
-        super(cause);
-    }
-
-    public DeleteException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/DuplicateKeyException.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/DuplicateKeyException.java
deleted file mode 100644
index 4085de5..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/DuplicateKeyException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.exception;
-
-/**
- * DuplicateKeyException.
- *
- */
-
-public class DuplicateKeyException extends CreateException {
-
-	private static final long serialVersionUID = 989620752592415898L;
-
-    public DuplicateKeyException(String message) {
-        super(message);
-    }
-
-    public DuplicateKeyException(Throwable cause) {
-        super(cause);
-    }
-
-    public DuplicateKeyException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/StorageException.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/StorageException.java
deleted file mode 100644
index d40397c..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/StorageException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.exception;
-
-/**
- * StorageException.
- *
- */
-
-public class StorageException extends Exception {
-
-	private static final long serialVersionUID = -2528721270540362905L;
-	
-    public StorageException(String message) {
-        super(message);
-    }
-
-    public StorageException(Throwable cause) {
-        super(cause);
-    }
-
-    public StorageException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/UpdateException.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/UpdateException.java
deleted file mode 100644
index bb9304b..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/exception/UpdateException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.exception;
-
-
-/**
- * UpdateException.
- *
- */
-
-public class UpdateException extends StorageException {
-
-	private static final long serialVersionUID = -4728238600375630452L;
-	
-
-    public UpdateException(String message) {
-        super(message);
-    }
-
-    public UpdateException(Throwable cause) {
-        super(cause);
-    }
-
-    public UpdateException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/filedownload/FileDownloadAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/filedownload/FileDownloadAction.java
deleted file mode 100644
index 5104015..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/filedownload/FileDownloadAction.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.filedownload;
-
-import org.apache.struts2.ServletActionContext;
-import com.opensymphony.xwork2.Action;
-
-import java.io.InputStream;
-
-/**
- * Action to demonstrate how to use file download.
- * <p/>
- * This action is used to download a jpeg file from the image folder.
- *
- */
-public class FileDownloadAction implements Action {
-
-    public InputStream getImageStream() throws Exception {
-        return ServletActionContext.getServletContext().getResourceAsStream("/images/struts.gif");
-    }
-
-    public String execute() throws Exception {
-        return SUCCESS;
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/FileUploadAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/FileUploadAction.java
deleted file mode 100644
index 3d2906a..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/FileUploadAction.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.fileupload;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-import java.io.File;
-
-/**
- * Show case File Upload example's action. <code>FileUploadAction</code>
- *
- */
-public class FileUploadAction extends ActionSupport {
-
-	private static final long serialVersionUID = 5156288255337069381L;
-	
-	private String contentType;
-    private File upload;
-    private String fileName;
-    private String caption;
-    
-    // since we are using <s:file name="upload" .../> the file name will be
-    // obtained through getter/setter of <file-tag-name>FileName
-    public String getUploadFileName() {
-    	return fileName;
-    }
-    public void setUploadFileName(String fileName) {
-    	this.fileName = fileName;
-    }
-
-    
-    // since we are using <s:file name="upload" ... /> the content type will be
-    // obtained through getter/setter of <file-tag-name>ContentType
-    public String getUploadContentType() {
-        return contentType;
-    }
-    public void setUploadContentType(String contentType) {
-        this.contentType = contentType;
-    }
-
-    
-    // since we are using <s:file name="upload" ... /> the File itself will be
-    // obtained through getter/setter of <file-tag-name>
-    public File getUpload() {
-        return upload;
-    }
-    public void setUpload(File upload) {
-        this.upload = upload;
-    }
-
-    
-    public String getCaption() {
-        return caption;
-    }
-    public void setCaption(String caption) {
-        this.caption = caption;
-    }
-
-    public String input() throws Exception {
-        return SUCCESS;
-    }
-
-    public String upload() throws Exception  {
-        return SUCCESS;
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManager.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManager.java
deleted file mode 100644
index 40b6853..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManager.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.freemarker;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.views.freemarker.FreemarkerManager;
-import org.apache.struts2.views.freemarker.ScopesHashModel;
-
-import com.opensymphony.xwork2.util.OgnlValueStack;
-
-/**
- * This is an example of a custom FreemarkerManager, mean to be 
- * instantiated through Spring. 
- * <p/>
- * 
- * It will add into Freemarker's model
- * an utility class called {@link CustomFreemarkerManagerUtil} as a simple 
- * example demonstrating how to extends FreemarkerManager.
- * <p/>
- * 
- * The {@link CustomFreemarkerManagerUtil} will be created by Spring and 
- * injected through constructor injection.
- * <p/>
- */
-public class CustomFreemarkerManager extends FreemarkerManager {
-	
-	private CustomFreemarkerManagerUtil util;
-	
-	public CustomFreemarkerManager(CustomFreemarkerManagerUtil util) {
-		this.util = util;
-	}
-	
-	public void populateContext(ScopesHashModel model, OgnlValueStack stack, Object action, HttpServletRequest request, HttpServletResponse response) {
-		super.populateContext(model, stack, action, request, response);
-		model.put("customFreemarkerManagerUtil", util);
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManagerUtil.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManagerUtil.java
deleted file mode 100644
index f27079e..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManagerUtil.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.freemarker;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * This class is just a simple util that gets injected into 
- * {@link CustomFreemarkerManager} through Spring's constructor
- * injection, serving as a simple example in Struts' Showcase. 
- */
-public class CustomFreemarkerManagerUtil {
-
-	public String getTodayDate() {
-		SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
-		return sdf.format(new Date());
-	}
-	
-	public String getTimeNow() {
-		SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
-		return sdf.format(new Date());
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/GetUpdatedHangmanAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/GetUpdatedHangmanAction.java
deleted file mode 100644
index 9e5ec70..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/GetUpdatedHangmanAction.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.apache.struts2.showcase.hangman;
-
-import java.util.Map;
-
-import org.apache.struts2.interceptor.SessionAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class GetUpdatedHangmanAction extends ActionSupport implements SessionAware {
-	
-	private static final long serialVersionUID = 5506025785406043027L;
-	
-	private Map session;
-	private Hangman hangman;
-	
-	
-	public String execute() throws Exception {
-		hangman = (Hangman) session.get(HangmanConstants.HANGMAN_SESSION_KEY);
-		
-		System.out.println("\n\n\n");
-		System.out.println("hangman="+hangman);
-		System.out.println("available = "+hangman.getCharactersAvailable().size());
-		System.out.println("guess left="+hangman.guessLeft());
-		System.out.println("\n\n\n");
-		
-		return SUCCESS;
-	}
-
-	public void setSession(Map session) {
-		this.session = session;
-	}
-	
-	public Hangman getHangman() {
-		return hangman;
-	}
-	public void setHangman(Hangman hangman) {
-		this.hangman = hangman;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/GuessCharacterAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/GuessCharacterAction.java
deleted file mode 100644
index aa18511..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/GuessCharacterAction.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.apache.struts2.showcase.hangman;
-
-import java.util.Map;
-
-import org.apache.struts2.interceptor.SessionAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class GuessCharacterAction extends ActionSupport implements SessionAware {
-	
-	private static final long serialVersionUID = 9050915577007590674L;
-	
-	private Map session;
-	private Character character;
-	private Hangman hangman;
-	
-	public String execute() throws Exception {
-		hangman = (Hangman) session.get(HangmanConstants.HANGMAN_SESSION_KEY);
-		hangman.guess(character);
-		
-		return SUCCESS;
-	}
-	
-	public Hangman getHangman() {
-		return hangman;
-	}
-
-	public void setSession(Map session) {
-		this.session = session;
-	}
-	
-	public void setCharacter(Character character) {
-		this.character = character;
-	}
-	
-	public Character getCharacter() {
-		return this.character;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/Hangman.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/Hangman.java
deleted file mode 100644
index cfbf7a5..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/Hangman.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.hangman;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class Hangman implements Serializable {
-	
-	private static final long serialVersionUID = 8566954355839652509L;
-
-	private Vocab vocab;
-	
-	private Boolean win = false;
-	
-	private int guessLeft = 5;
-	public List<Character> charactersAvailable;
-	public List<Character> charactersGuessed;
-	
-	public Hangman(Vocab vocab) {
-		// Arrays.asList(...) returns List that doesn't support remove(), hence 
-		// we wrap it with an ArrayList to avoid UnsupportedOperationException 
-		// when doing a remove()
-		charactersAvailable = new ArrayList<Character>(Arrays.asList(
-			new Character[] {
-				Character.valueOf('A'), Character.valueOf('B'), Character.valueOf('C'), 
-				Character.valueOf('D'), Character.valueOf('E'), Character.valueOf('F'), 
-				Character.valueOf('G'), Character.valueOf('H'), Character.valueOf('I'), 
-				Character.valueOf('J'), Character.valueOf('K'), Character.valueOf('L'), 
-				Character.valueOf('M'), Character.valueOf('N'), Character.valueOf('O'), 
-				Character.valueOf('P'), Character.valueOf('Q'), Character.valueOf('R'), 
-				Character.valueOf('S'), Character.valueOf('T'), Character.valueOf('U'), 
-				Character.valueOf('V'), Character.valueOf('W'), Character.valueOf('X'), 
-				Character.valueOf('Y'), Character.valueOf('Z')
-			}));
-		charactersGuessed = new ArrayList<Character>();
-		this.vocab = vocab;
-	}
-	
-	public void guess(Character character) {
-		assert(character != null);
-		
-		synchronized(charactersAvailable) {
-			if (guessLeft < 0) {
-				throw new HangmanException(
-					HangmanException.Type.valueOf("GAME_ENDED"), "Game already eneded");
-			}
-			Character characterInUpperCase = Character.toUpperCase(character);
-			boolean ok = charactersAvailable.remove(characterInUpperCase);
-			if (ok) {
-				charactersGuessed.add(characterInUpperCase);
-				if (! vocab.containCharacter(characterInUpperCase)) {
-					guessLeft = guessLeft - 1;
-				}
-			}
-			if (vocab.containsAllCharacter(charactersGuessed)) {
-				win = true;
-			}
-			System.out.println(" *********************************** "+win);
-		}
-	}
-	
-	public Boolean isWin() {
-		return this.win;
-	}
-	
-	public Vocab getVocab() {
-		return vocab;
-	}
-	
-	public Boolean gameEnded() {
-		return ((guessLeft < 0) || win);
-	}
-	
-	public Integer guessLeft() {
-		return guessLeft;
-	}
-	
-	public List<Character> getCharactersAvailable() {
-		synchronized(charactersAvailable) {
-			 return new ArrayList<Character>(charactersAvailable);
-			//return charactersAvailable;
-		}
-	}
-	
-	public boolean characterGuessedBefore(Character character) {
-		return charactersGuessed.contains(character);
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/HangmanConstants.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/HangmanConstants.java
deleted file mode 100644
index 2c5fd14..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/HangmanConstants.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.apache.struts2.showcase.hangman;
-
-public class HangmanConstants {
-	// keeps a Hangman object in HttpSession
-	public static final String HANGMAN_SESSION_KEY = "Hangman_Session_Key";
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/HangmanException.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/HangmanException.java
deleted file mode 100644
index 95ac17e..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/HangmanException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.hangman;
-
-public class HangmanException extends RuntimeException {
-	
-	private static final long serialVersionUID = -8500292863595941335L;
-
-	enum Type {
-		GAME_ENDED, 
-		NO_VOCAB, 
-		NO_VOCAB_SOURCE;
-	}
-	
-	
-	private Type type;
-	
-	public HangmanException (Type type, String reason) {
-		super(reason);
-		this.type = type;
-	}
-	
-	public Type getType() {
-		return type;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/HangmanService.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/HangmanService.java
deleted file mode 100644
index 0219bfe..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/HangmanService.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.hangman;
-
-public class HangmanService {
-	
-	public VocabSource vocabSource;
-	
-	public HangmanService(VocabSource vocabSource) {
-		this.vocabSource = vocabSource;
-	}
-	
-	public Hangman startNewGame() {
-		return new Hangman(vocabSource.getRandomVocab());
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/PropertiesVocabSource.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/PropertiesVocabSource.java
deleted file mode 100644
index ec3e1a8..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/PropertiesVocabSource.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.hangman;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-public class PropertiesVocabSource implements VocabSource {
-
-	private Properties prop;
-	private List<Vocab> vocabs;
-	
-	public PropertiesVocabSource() {
-	}
-	
-	public PropertiesVocabSource(Properties prop) {
-		assert(prop != null);
-		this.prop = prop;
-		vocabs = readVocab(prop);
-	}
-	
-	public void setVocabProperties(Properties prop) {
-		assert(prop != null);
-		this.prop = prop;
-		vocabs = readVocab(prop);
-	}
-	
-	public Vocab getRandomVocab() {
-		if (vocabs == null) {
-			throw new HangmanException(HangmanException.Type.valueOf("NO_VOCAB_SOURCE"), "No vocab source");
-		}
-		if (vocabs.size() <= 0) {
-			throw new HangmanException(HangmanException.Type.valueOf("NO_VOCAB"), "No vocab");
-		}
-		long vocabIndex = Math.round((Math.random() * (double)prop.size()));
-		vocabIndex = vocabIndex == vocabs.size() ? vocabs.size() - 1 : vocabIndex;
-		return vocabs.get((int)vocabIndex);
-	} 
-	
-	protected List<Vocab> readVocab(Properties prop) {
-		List<Vocab> vocabList = new ArrayList<Vocab>();
-		
-		for (Map.Entry e : prop.entrySet()) {
-			String vocab = (String) e.getKey();
-			String hint = (String) e.getValue();
-			
-			vocabList.add(new Vocab(vocab, hint));
-		}
-		return vocabList;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/StartHangmanAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/StartHangmanAction.java
deleted file mode 100644
index 5088748..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/StartHangmanAction.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.hangman;
-
-import static org.apache.struts2.showcase.hangman.HangmanConstants.*;
-
-import java.util.Map;
-
-import org.apache.struts2.interceptor.SessionAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class StartHangmanAction extends ActionSupport implements SessionAware {
-	
-	private static final long serialVersionUID = 2333463075324892521L;
-	
-	private HangmanService service;
-	private Hangman hangman;
-	private Map session;
-	
-	
-	public StartHangmanAction(HangmanService service) {
-		this.service = service;
-	}
-	
-	public String execute() throws Exception {
-		
-		hangman = service.startNewGame();
-		session.put(HANGMAN_SESSION_KEY, hangman);
-		
-		return SUCCESS;
-	}
-
-	public Hangman getHangman() {
-		return hangman;
-	}
-	
-	
-	// === SessionAware ===
-	public void setSession(Map session) {
-		this.session = session;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/Vocab.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/Vocab.java
deleted file mode 100644
index b01b431..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/Vocab.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.hangman;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class Vocab implements Serializable {
-	
-	private static final long serialVersionUID = 1L;
-	
-	private String vocab;
-	private String hint;
-	private Character[] characters; // character this vocab is made up of
-	
-	public Vocab(String vocab, String hint) {
-		assert(vocab != null);
-		assert(hint != null);
-		
-		this.vocab = vocab.toUpperCase();
-		this.hint = hint;
-	}
-	
-	public String getVocab() { return this.vocab; }
-	public String getHint() { return this.hint; }
-	
-	public Boolean containCharacter(Character character) {
-		assert(character != null);
-		
-		return (vocab.contains(character.toString())) ? true : false;
-	}
-	
-	public Character[] inCharacters() {
-		if (characters == null) {
-			char[] c = vocab.toCharArray();
-			characters = new Character[c.length];
-			for (int a=0; a< c.length; a++) {
-				characters[a] = Character.valueOf(c[a]);
-			}
-		}
-		return characters;
-	}
-
-	public boolean containsAllCharacter(List<Character> charactersGuessed) {
-		Character[] chars = inCharacters();
-		List<Character> tmpChars = Arrays.asList(chars);
-		return charactersGuessed.containsAll(tmpChars);
-	}
-	
-	public static void main(String args[]) throws Exception {
-		Vocab v = new Vocab("JAVA", "a java word");
-		
-		List<Character> list1= new ArrayList<Character>();
-		list1.add(new Character('J'));
-		list1.add(new Character('V'));
-		
-		List<Character> list2 = new ArrayList<Character>();
-		list2.add(new Character('J'));
-		list2.add(new Character('V'));
-		list2.add(new Character('A'));
-		
-		System.out.println(v.containsAllCharacter(list1));
-		System.out.println(v.containsAllCharacter(list2));
-		
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/VocabSource.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/VocabSource.java
deleted file mode 100644
index 4682d81..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/hangman/VocabSource.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.hangman;
-
-public interface VocabSource {
-	Vocab getRandomVocab();
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/EditGangsterAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/EditGangsterAction.java
deleted file mode 100644
index 49e8d37..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/EditGangsterAction.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id: Gangster.java 418530 2006-07-01 23:58:13Z mrdon $
- *
- * Copyright 2006 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.struts2.showcase.integration;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.Action;
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-
-public class EditGangsterAction extends Action {
-
-    /* (non-Javadoc)
-     * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
-     */
-    @Override
-    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
-        // Some code to load the gangster from the db as necessary
-        
-        return mapping.findForward("success");
-    }
-
-    
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/GangsterForm.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/GangsterForm.java
deleted file mode 100644
index 477135f..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/GangsterForm.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.apache.struts2.showcase.integration;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts.action.ActionErrors;
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionMessage;
-import org.apache.struts.validator.ValidatorForm;
-
-public class GangsterForm extends ValidatorForm {
-    
-    private String name;
-    private String age;
-    private String description;
-    private boolean bustedBefore;
-    
-    /* (non-Javadoc)
-     * @see org.apache.struts.action.ActionForm#reset(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
-     */
-    @Override
-    public void reset(ActionMapping arg0, HttpServletRequest arg1) {
-        bustedBefore = false;
-    }
-    
-    /* (non-Javadoc)
-     * @see org.apache.struts.action.ActionForm#validate(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
-     */
-    @Override
-    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
-        ActionErrors errors = super.validate(mapping, request);
-        if (name == null || name.length() == 0) {
-            errors.add("name", new ActionMessage("The name must not be blank"));
-        }
-        
-        return errors;
-    }
-    
-    /**
-     * @return the age
-     */
-    public String getAge() {
-        return age;
-    }
-    /**
-     * @param age the age to set
-     */
-    public void setAge(String age) {
-        this.age = age;
-    }
-    /**
-     * @return the bustedBefore
-     */
-    public boolean isBustedBefore() {
-        return bustedBefore;
-    }
-    /**
-     * @param bustedBefore the bustedBefore to set
-     */
-    public void setBustedBefore(boolean bustedBefore) {
-        this.bustedBefore = bustedBefore;
-    }
-    /**
-     * @return the description
-     */
-    public String getDescription() {
-        return description;
-    }
-    /**
-     * @param description the description to set
-     */
-    public void setDescription(String description) {
-        this.description = description;
-    }
-    /**
-     * @return the name
-     */
-    public String getName() {
-        return name;
-    }
-    /**
-     * @param name the name to set
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-    
-    
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/SaveGangsterAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/SaveGangsterAction.java
deleted file mode 100644
index 8620485..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/integration/SaveGangsterAction.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * $Id: Gangster.java 418530 2006-07-01 23:58:13Z mrdon $
- *
- * Copyright 2006 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.struts2.showcase.integration;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.Action;
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionMessage;
-import org.apache.struts.action.ActionMessages;
-
-public class SaveGangsterAction extends Action {
-
-    /* (non-Javadoc)
-     * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
-     */
-    @Override
-    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
-        
-        // Some code to save the gangster to the db as necessary
-        GangsterForm gform = (GangsterForm) form;
-        ActionMessages messages = new ActionMessages();
-        messages.add("msg", new ActionMessage("Gangster "+gform.getName()+" added successfully"));
-        addMessages(request, messages);
-        
-        return mapping.findForward("success");
-    }
-
-    
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/jsf/JsfEmployeeAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/jsf/JsfEmployeeAction.java
deleted file mode 100644
index 89f2db5..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/jsf/JsfEmployeeAction.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.jsf;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.showcase.action.EmployeeAction;
-import org.apache.struts2.showcase.dao.SkillDao;
-import org.apache.struts2.showcase.model.Employee;
-import org.apache.struts2.showcase.model.Skill;
-
-/**
- * Overriding the EmployeeAction to main provide getters returning the data in
- * the form required by the JSF components
- */
-public class JsfEmployeeAction extends EmployeeAction {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Creating a default employee and main skill, since the JSF EL can't handle
-     * creating new objects as necessary
-     * 
-     */
-    public JsfEmployeeAction() {
-        Employee e = new Employee();
-        e.setMainSkill(new Skill());
-        setCurrentEmployee(e);
-    }
-
-    private SkillDao skillDao;
-
-    public void setSkillDao(SkillDao skillDao) {
-        this.skillDao = skillDao;
-    }
-
-    /**
-     * Returning a List because the JSF dataGrid can't handle a Set for some
-     * reason
-     */
-    @Override
-    public Collection getAvailableItems() {
-        return new ArrayList(super.getAvailableItems());
-    }
-
-    /**
-     * Changing the String array into a Map
-     */
-    public Map<String, String> getAvailablePositionsAsMap() {
-        Map<String, String> map = new LinkedHashMap<String, String>();
-        for (String val : super.getAvailablePositions()) {
-            map.put(val, val);
-        }
-        return map;
-    }
-
-    /**
-     * Converting the list into a map
-     */
-    public Map getAvailableLevelsAsMap() {
-        Map map = new LinkedHashMap();
-        for (Object val : super.getAvailableLevels()) {
-            map.put(val, val);
-        }
-        return map;
-    }
-
-    /**
-     * Converting the Skill object list into a map
-     */
-    public Map<String, String> getAvailableSkills() {
-        Map<String, String> map = new HashMap<String, String>();
-        for (Object val : skillDao.findAll()) {
-            Skill skill = (Skill) val;
-            map.put(skill.getDescription(), skill.getName());
-        }
-        return map;
-    }
-
-    /**
-     * Gets the selected Skill objects as a list
-     */
-    public List<String> getSelectedSkillsAsList() {
-        System.out.println("asked for skills");
-        List<String> list = new ArrayList<String>();
-        List skills = super.getSelectedSkills();
-        if (skills != null) {
-            for (Object val : skills) {
-                if (val instanceof Skill) {
-                    list.add(((Skill) val).getDescription());
-                } else {
-                    Skill skill = skillDao.getSkill((String) val);
-                    list.add(skill.getDescription());
-                }
-            }
-        }
-        return list;
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/model/Employee.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/model/Employee.java
deleted file mode 100644
index 9d8ff62..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/model/Employee.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.model;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
-/**
- * Employee.
- *
- */
-
-public class Employee implements IdEntity {
-
-	private static final long serialVersionUID = -6226845151026823748L;
-	
-	private Long empId; //textfield w/ conversion
-    private String firstName;
-    private String lastName;
-    private Date birthDate; //datepicker
-    private Float salary; //textfield w/ conversion
-    private boolean married; //checkbox
-    private String position; //combobox
-    private Skill mainSkill; //select
-    private List otherSkills; //doubleSelect
-    private String password; //password
-    private String level; //radio
-    private String comment; //textarea
-
-    public Employee() {
-    }
-
-    public Employee(Long empId, String firstName, String lastName) {
-        this.empId = empId;
-        this.firstName = firstName;
-        this.lastName = lastName;
-    }
-
-    public Employee(Long empId, String firstName, String lastName, Date birthDate, Float salary, boolean married, String position, Skill mainSkill, List otherSkills, String password, String level, String comment) {
-        this.empId = empId;
-        this.firstName = firstName;
-        this.lastName = lastName;
-        this.birthDate = birthDate;
-        this.salary = salary;
-        this.married = married;
-        this.position = position;
-        this.mainSkill = mainSkill;
-        this.otherSkills = otherSkills;
-        this.password = password;
-        this.level = level;
-        this.comment = comment;
-    }
-
-    public Long getEmpId() {
-        return empId;
-    }
-
-    public void setEmpId(Long empId) {
-        this.empId = empId;
-    }
-
-    public Serializable getId() {
-        return getEmpId();
-    }
-
-    public void setId(Serializable id) {
-        setEmpId((Long) id);
-    }
-
-    public String getFirstName() {
-        return firstName;
-    }
-
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-
-    public String getLastName() {
-        return lastName;
-    }
-
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-
-    public Date getBirthDate() {
-        return birthDate;
-    }
-
-    public void setBirthDate(Date birthDate) {
-        this.birthDate = birthDate;
-    }
-
-    public Float getSalary() {
-        return salary;
-    }
-
-    public void setSalary(Float salary) {
-        this.salary = salary;
-    }
-
-    public boolean isMarried() {
-        return married;
-    }
-
-    public void setMarried(boolean married) {
-        this.married = married;
-    }
-
-    public String getPosition() {
-        return position;
-    }
-
-    public void setPosition(String position) {
-        this.position = position;
-    }
-
-    public Skill getMainSkill() {
-        return mainSkill;
-    }
-
-    public void setMainSkill(Skill mainSkill) {
-        this.mainSkill = mainSkill;
-    }
-
-    public List getOtherSkills() {
-        return otherSkills;
-    }
-
-    public void setOtherSkills(List otherSkills) {
-        this.otherSkills = otherSkills;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getLevel() {
-        return level;
-    }
-
-    public void setLevel(String level) {
-        this.level = level;
-    }
-
-    public String getComment() {
-        return comment;
-    }
-
-    public void setComment(String comment) {
-        this.comment = comment;
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/model/IdEntity.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/model/IdEntity.java
deleted file mode 100644
index 6f43eb8..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/model/IdEntity.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.model;
-
-import java.io.Serializable;
-
-/**
- * IdEntity. Interface.
- *
- */
-
-public interface IdEntity extends Serializable {
-
-    Serializable getId ();
-
-    void setId ( Serializable id );
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/model/Skill.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/model/Skill.java
deleted file mode 100644
index ab2122c..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/model/Skill.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.model;
-
-import java.io.Serializable;
-
-/**
- * Skill.
- *
- */
-
-public class Skill implements IdEntity {
-
-	private static final long serialVersionUID = -4150317722693212439L;
-	
-	private String name;
-    private String description;
-
-    public Skill() {
-    }
-
-    public Skill(String name, String description) {
-        this.name = name;
-        this.description = description;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public Serializable getId() {
-        return getName();
-    }
-
-    public void setId(Serializable id) {
-        setName((String) id);
-    }
-
-    public String toString() {
-        return getName();
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/modelDriven/Gangster.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/modelDriven/Gangster.java
deleted file mode 100644
index 90f0d05..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/modelDriven/Gangster.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.modelDriven;
-
-import java.io.Serializable;
-
-/**
- * A model class to be used by the simple Model-Driven example. 
- * 
- */
-public class Gangster implements Serializable {
-
-	private static final long serialVersionUID = 3688389475320294992L;
-	
-	private String name;
-	private int age;
-	private String description;
-	private boolean bustedBefore;
-	
-	public int getAge() {
-		return age;
-	}
-	public void setAge(int age) {
-		this.age = age;
-	}
-	public boolean isBustedBefore() {
-		return bustedBefore;
-	}
-	public void setBustedBefore(boolean bustedBefore) {
-		this.bustedBefore = bustedBefore;
-	}
-	public String getDescription() {
-		return description;
-	}
-	public void setDescription(String description) {
-		this.description = description;
-	}
-	public String getName() {
-		return name;
-	}
-	public void setName(String name) {
-		this.name = name;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/modelDriven/ModelDrivenAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/modelDriven/ModelDrivenAction.java
deleted file mode 100644
index 1484dc5..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/modelDriven/ModelDrivenAction.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.modelDriven;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.ModelDriven;
-
-/**
- * Action to demonstrate simple model-driven feature of the framework.
- * 
- */
-public class ModelDrivenAction extends ActionSupport implements ModelDriven {
-
-	private static final long serialVersionUID = 1271130427666936592L;
-
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String execute() throws Exception {
-		return SUCCESS;
-	}
-
-	public Object getModel() {
-		return new Gangster();
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/CreatePerson-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/CreatePerson-validation.xml
deleted file mode 100644
index 6d19ebd..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/CreatePerson-validation.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
-<validators>
-    <field name="person">
-        <field-validator type="visitor">
-            <message></message>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/CreatePerson.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/CreatePerson.java
deleted file mode 100644
index 7e6c63e..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/CreatePerson.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.person;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class CreatePerson extends ActionSupport {
-	
-	private static final long serialVersionUID = 200410824352645515L;
-	
-	PersonManager personManager;
-    Person person;
-
-    public void setPersonManager(PersonManager personManager) {
-        this.personManager = personManager;
-    }
-
-    public String execute() {
-        personManager.createPerson(person);
-
-        return SUCCESS;
-    }
-
-    public Person getPerson() {
-        return person;
-    }
-
-    public void setPerson(Person person) {
-        this.person = person;
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/EditPerson-conversion.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/EditPerson-conversion.properties
deleted file mode 100644
index 00b2a03..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/EditPerson-conversion.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-KeyProperty_persons=id
-Element_persons=org.apache.struts2.showcase.person.Person
-CreateIfNull_persons=true
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/EditPerson.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/EditPerson.java
deleted file mode 100644
index 43db285..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/EditPerson.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.person;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
-
-/**
- * <code>EditPerson</code>
- *
- */
-public class EditPerson extends ActionSupport {
-
-	private static final long serialVersionUID = 7699491775215130850L;
-	
-	PersonManager personManager;
-    List persons = new ArrayList();
-
-    public void setPersonManager(PersonManager personManager) {
-        this.personManager = personManager;
-    }
-
-    public List getPersons() {
-        return persons;
-    }
-
-    public void setPersons(List persons) {
-        this.persons = persons;
-    }
-
-    /**
-     * A default implementation that does nothing an returns "success".
-     *
-     * @return {@link #SUCCESS}
-     */
-    public String execute() throws Exception {
-        persons.addAll(personManager.getPeople());
-        return SUCCESS;
-    }
-
-    /**
-     * A default implementation that does nothing an returns "success".
-     *
-     * @return {@link #SUCCESS}
-     */
-    public String save() throws Exception {
-
-        // Set people = personManager.getPeople();
-
-        for ( Iterator iter = persons.iterator(); iter.hasNext();) {
-            Person p = (Person) iter.next();
-            personManager.getPeople().remove(p);
-            personManager.getPeople().add(p);
-        }
-        return SUCCESS;
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/ListPeople.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/ListPeople.java
deleted file mode 100644
index ca605a7..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/ListPeople.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.person;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- */
-public class ListPeople extends ActionSupport {
-	
-	private static final long serialVersionUID = 3608017189783645371L;
-	
-	PersonManager personManager;
-    List people = new ArrayList();
-
-    public void setPersonManager(PersonManager personManager) {
-        this.personManager = personManager;
-    }
-
-    public String execute() {
-        people.addAll(personManager.getPeople());
-
-        return SUCCESS;
-    }
-
-    public List getPeople() {
-        return people;
-    }
-
-    public int getPeopleCount() {
-        return people.size();
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/Person-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/Person-validation.xml
deleted file mode 100644
index da2c81f..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/Person-validation.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
-<validators>
-    <field name="name">
-        <field-validator type="requiredstring">
-            <message>You must enter a first name.</message>
-        </field-validator>
-    </field>
-    <field name="lastName">
-        <field-validator type="requiredstring">
-            <message>You must enter a last name</message>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/Person.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/Person.java
deleted file mode 100644
index 20cb4d5..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/Person.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.person;
-
-/**
- */
-public class Person {
-    Long id;
-    String name;
-    String lastName;
-
-    public Person() {
-    }
-
-    public Person(Long id, String name, String lastName) {
-        this.id = id;
-        this.name = name;
-        this.lastName = lastName;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getLastName() {
-        return lastName;
-    }
-
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final Person person = (Person) o;
-
-        if (id != null ? !id.equals(person.id) : person.id != null) return false;
-
-        return true;
-    }
-
-    public int hashCode() {
-        return (id != null ? id.hashCode() : 0);
-    }
-
-
-    public String toString() {
-        return "Person{" +
-                "id=" + id +
-                ", name='" + name + '\'' +
-                ", lastName='" + lastName + '\'' +
-                '}';
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/PersonManager.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/PersonManager.java
deleted file mode 100644
index 1a984b1..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/person/PersonManager.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.person;
-
-import java.util.Set;
-import java.util.HashSet;
-
-/**
- */
-public class PersonManager {
-    private static Set people = new HashSet(5);
-    private static long COUNT = 5;
-
-    static {
-        // create some imaginary persons
-        Person p1 = new Person(new Long(1), "Patrick", "Lightbuddie");
-        Person p2 = new Person(new Long(2), "Jason", "Carrora");
-        Person p3 = new Person(new Long(3), "Alexandru", "Papesco");
-        Person p4 = new Person(new Long(4), "Jay", "Boss");
-        Person p5 = new Person(new Long(5), "Rainer", "Hermanos");
-        people.add(p1);
-        people.add(p2);
-        people.add(p3);
-        people.add(p4);
-        people.add(p5);
-    }
-
-    public void createPerson(Person person) {
-        person.setId(new Long(++COUNT));
-        people.add(person);
-    }
-
-    public void updatePerson(Person person) {
-        people.add(person);
-    }
-
-    public Set getPeople() {
-        return people;
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/sitemesh/NoneDecoratorMapper.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/sitemesh/NoneDecoratorMapper.java
deleted file mode 100644
index ad701c3..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/sitemesh/NoneDecoratorMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.apache.struts2.showcase.sitemesh;
-
-import com.opensymphony.module.sitemesh.Decorator;
-import com.opensymphony.module.sitemesh.Page;
-import com.opensymphony.module.sitemesh.mapper.AbstractDecoratorMapper;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * @author Patrick Lightbody (plightbo at gmail dot com)
- */
-public class NoneDecoratorMapper extends AbstractDecoratorMapper {
-    public Decorator getDecorator(HttpServletRequest req, Page page) {
-        if ("none".equals(req.getAttribute("decorator"))) {
-            return null;
-        }
-
-        return super.getDecorator(req, page);
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java
deleted file mode 100644
index 327bfe4..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/source/ViewSourceAction.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * $Id: CreatePerson.java 420385 2006-07-10 00:57:05Z mrdon $
- *
- * Copyright 2006 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.struts2.showcase.source;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.ServletContext;
-
-import org.apache.struts2.util.ServletContextAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-
-/**
- * Processes configuration, page, and action class paths to create snippets
- * of the files for display.
- */
-public class ViewSourceAction extends ActionSupport implements ServletContextAware {
-
-    private String page;
-    private String className;
-    private String config;
-    
-    private List pageLines;
-    private List classLines;
-    private List configLines;
-    
-    private int configLine;
-    private int padding = 10;
-    
-    private ServletContext servletContext;
-    
-    public String execute() throws MalformedURLException, IOException {
-        
-        if (page != null) {
-            
-            InputStream in = ClassLoaderUtil.getResourceAsStream(page.substring(page.indexOf("//")+1), getClass());
-            page = page.replace("//", "/");
-            
-            if (in == null) {
-                in = servletContext.getResourceAsStream(page);
-                while (in == null && page.indexOf('/', 1) > 0) {
-                    page = page.substring(page.indexOf('/', 1));
-                    in = servletContext.getResourceAsStream(page);
-                }
-            }
-            pageLines = read(in, -1);
-        }
-        
-        if (className != null) {
-            className = "/"+className.replace('.', '/') + ".java";
-            InputStream in = getClass().getResourceAsStream(className);
-            if (in == null) {
-                in = servletContext.getResourceAsStream("/WEB-INF/src"+className);
-            }
-            classLines = read(in, -1);
-        }
-        
-        if (config != null) {
-            int pos = config.lastIndexOf(':');
-            configLine = Integer.parseInt(config.substring(pos+1));
-            config = config.substring(0, pos).replace("//", "/");
-            configLines = read(new URL(config).openStream(), configLine);
-        }
-        return SUCCESS;
-    }
-
-    /**
-     * @param className the className to set
-     */
-    public void setClassName(String className) {
-        this.className = className;
-    }
-
-    /**
-     * @param config the config to set
-     */
-    public void setConfig(String config) {
-        this.config = config;
-    }
-
-    /**
-     * @param page the page to set
-     */
-    public void setPage(String page) {
-        this.page = page;
-    }
-    
-    /**
-     * @param padding the padding to set
-     */
-    public void setPadding(int padding) {
-        this.padding = padding;
-    }
-    
-    
-
-    /**
-     * @return the classLines
-     */
-    public List getClassLines() {
-        return classLines;
-    }
-
-    /**
-     * @return the configLines
-     */
-    public List getConfigLines() {
-        return configLines;
-    }
-
-    /**
-     * @return the pageLines
-     */
-    public List getPageLines() {
-        return pageLines;
-    }
-    
-    /**
-     * @return the className
-     */
-    public String getClassName() {
-        return className;
-    }
-
-    /**
-     * @return the config
-     */
-    public String getConfig() {
-        return config;
-    }
-
-    /**
-     * @return the page
-     */
-    public String getPage() {
-        return page;
-    }
-    
-    /**
-     * @return the configLine
-     */
-    public int getConfigLine() {
-        return configLine;
-    }
-    
-    /**
-     * @return the padding
-     */
-    public int getPadding() {
-        return padding;
-    }
-
-    /**
-     * Reads in a strea, optionally only including the target line number
-     * and its padding
-     * 
-     * @param in The input stream
-     * @param targetLineNumber The target line number, negative to read all
-     * @return A list of lines
-     */
-    private List read(InputStream in, int targetLineNumber) {
-        List snippet = null;
-        if (in != null) {
-            snippet = new ArrayList();
-            int startLine = 0;
-            int endLine = Integer.MAX_VALUE;
-            if (targetLineNumber > 0) {
-                startLine = targetLineNumber - padding;
-                endLine = targetLineNumber + padding;
-            }
-            try {
-                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
-                
-                int lineno = 0;
-                String line;
-                while ((line = reader.readLine()) != null) {
-                    lineno++;
-                    if (lineno >= startLine && lineno <= endLine) {
-                        snippet.add(line);
-                    }
-                }
-            } catch (Exception ex) {
-                // ignoring as snippet not available isn't a big deal
-            }
-        }
-        return snippet;
-    }
-
-    public void setServletContext(ServletContext arg0) {
-        this.servletContext = arg0;
-    }
-    
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/actionPrefix/SubmitAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/actionPrefix/SubmitAction.java
deleted file mode 100644
index fb20f27..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/actionPrefix/SubmitAction.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.apache.struts2.showcase.tag.nonui.actionPrefix;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class SubmitAction extends ActionSupport {
-
-	private static final long serialVersionUID = -7832803019378213087L;
-	
-	private String text;
-	
-	public String getText() { return text; }
-	public void setText(String text) { this.text = text; }
-	
-	public String execute() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String alternateMethod() {
-		return "methodPrefixResult";
-	}
-	
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/actiontag/ActionTagDemo.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/actiontag/ActionTagDemo.java
deleted file mode 100644
index 1874adf..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/actiontag/ActionTagDemo.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.tag.nonui.actiontag;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class ActionTagDemo extends ActionSupport {
-	
-	private static final long serialVersionUID = -2749145880590245184L;
-
-	public String show() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String doInclude() throws Exception {
-		return SUCCESS;
-	}
-}	
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/AppendIteratorTagDemo.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/AppendIteratorTagDemo.java
deleted file mode 100644
index b4cc3d0..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/AppendIteratorTagDemo.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.tag.nonui.iteratortag;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.Validateable;
-
-/**
- * 
- */
-public class AppendIteratorTagDemo extends ActionSupport implements Validateable {
-
-	private static final long serialVersionUID = -6525059998526094664L;
-	
-	private String iteratorValue1;
-	private String iteratorValue2;
-	
-	
-	public void validate() {
-		if (iteratorValue1 == null || iteratorValue1.trim().length() <= 0 ) {
-			addFieldError("iteratorValue1", "iterator value 1 cannot be empty");
-		}
-		else if (iteratorValue1.trim().indexOf(",") <= 0) {
-			addFieldError("iteratorValue1", "iterator value 1 needs to be comma separated");
-		}
-		if (iteratorValue2 == null || iteratorValue2.trim().length() <= 0) {
-			addFieldError("iteratorValue2", "iterator value 2 cannot be empty");
-		}
-		else if (iteratorValue2.trim().indexOf(",") <= 0) {
-			addFieldError("iteratorValue2", "iterator value 2 needs to be comma separated");
-		}
-	}
-	
-	
-	
-	
-	public String getIteratorValue1() { 
-		return iteratorValue1;
-	}
-	public void setIteratorValue1(String iteratorValue1) {
-		this.iteratorValue1 = iteratorValue1;
-	}
-	
-	
-	
-	public String getIteratorValue2() {
-		return iteratorValue2;
-	}
-	public void setIteratorValue2(String iteratorValue2) {
-		this.iteratorValue2 = iteratorValue2;
-	}
-	
-	
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String submit() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/IteratorGeneratorTagDemo-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/IteratorGeneratorTagDemo-validation.xml
deleted file mode 100644
index 55f9577..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/IteratorGeneratorTagDemo-validation.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC 
-	"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
-	"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-	
-<validators>
-	<field name="value">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-			<message>Value must not be empty</message>
-		</field-validator>
-	</field>
-	
-	
-	<field name="count">
-		<field-validator type="int">
-			<message>Count must be an integer</message>
-		</field-validator>	
-	</field>
-</validators>	
-
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/IteratorGeneratorTagDemo.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/IteratorGeneratorTagDemo.java
deleted file mode 100644
index bbd214a..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/IteratorGeneratorTagDemo.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.tag.nonui.iteratortag;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public class IteratorGeneratorTagDemo extends ActionSupport {
-
-	private static final long serialVersionUID = 6893616642389337039L;
-	
-	private String value;
-	private Integer count;
-	private String separator;
-	
-	
-	public String getValue() {
-		return value;
-	}
-	public void setValue(String value) {
-		this.value = value;
-	}
-	
-	
-	public Integer getCount() { 
-		return count;
-	}
-	public void setCount(Integer count) {
-		this.count = count;
-	}
-	
-	
-	
-	public String getSeparator() {
-		return this.separator;
-	}
-	public void setSeparator(String separator) {
-		this.separator = separator;
-	}
-	
-	
-	public String submit() throws Exception {
-		return SUCCESS;
-	}
-	
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/MergeIteratorTagDemo.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/MergeIteratorTagDemo.java
deleted file mode 100644
index 9bd13c4..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/MergeIteratorTagDemo.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.tag.nonui.iteratortag;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.Validateable;
-
-
-/**
- */
-public class MergeIteratorTagDemo extends ActionSupport implements Validateable {
-
-	private static final long serialVersionUID = 4401107963952961695L;
-	
-	private String iteratorValue1;
-	private String iteratorValue2;
-	
-	
-	public void validate() {
-		if (iteratorValue1 == null || iteratorValue1.trim().length() <= 0 ) {
-			addFieldError("iteratorValue1", "iterator value 1 cannot be empty");
-		}
-		else if (iteratorValue1.trim().indexOf(",") <= 0) {
-			addFieldError("iteratorValue1", "iterator value 1 needs to be comma separated");
-		}
-		if (iteratorValue2 == null || iteratorValue2.trim().length() <= 0) {
-			addFieldError("iteratorValue2", "iterator value 2 cannot be empty");
-		}
-		else if (iteratorValue2.trim().indexOf(",") <= 0) {
-			addFieldError("iteratorValue2", "iterator value 2 needs to be comma separated");
-		}
-	}
-	
-	
-	
-	public String getIteratorValue1() {
-		return this.iteratorValue1;
-	}
-	public void setIteratorValue1(String iteratorValue1) {
-		this.iteratorValue1 = iteratorValue1;
-	}
-	
-	
-	
-	public String getIteratorValue2() {
-		return this.iteratorValue2;
-	}
-	public void setIteratorValue2(String iteratorValue2) {
-		this.iteratorValue2 = iteratorValue2;
-	}
-	
-	
-	
-	
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String submit() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/SubsetIteratorTagDemo.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/SubsetIteratorTagDemo.java
deleted file mode 100644
index c313eb7..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tag/nonui/iteratortag/SubsetIteratorTagDemo.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.tag.nonui.iteratortag;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.Validateable;
-
-/**
- * 
- */
-public class SubsetIteratorTagDemo extends ActionSupport implements Validateable {
-
-	private static final long serialVersionUID = -8151855954644052650L;
-	
-	private String iteratorValue;
-	private Integer count;
-	private Integer start;
-	
-	
-	public void validate() {
-		if (iteratorValue == null || iteratorValue.trim().length() <= 0 ) {
-			addFieldError("iteratorValue1", "iterator value 1 cannot be empty");
-		}
-		else if (iteratorValue.trim().indexOf(",") <= 0) {
-			addFieldError("iteratorValue1", "iterator value 1 needs to be comma separated");
-		}
-	}
-	
-	
-	
-	public String getIteratorValue() {
-		return this.iteratorValue;
-	}
-	public void setIteratorValue(String iteratorValue) {
-		this.iteratorValue = iteratorValue;
-	}
-	
-	
-	
-	public Integer getCount() {
-		return this.count;
-	}
-	public void setCount(Integer count) {
-		this.count = count;
-	}
-	
-	
-	
-	public Integer getStart() {
-		return this.start;
-	}
-	public void setStart(Integer start) {
-		this.start = start;
-	}
-	
-	
-	
-	
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String submit() throws Exception {
-		return SUCCESS;
-	}
-	
-	
-	
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/token/TokenAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/token/TokenAction.java
deleted file mode 100644
index 9101dd4..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/token/TokenAction.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.token;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionSupport;
-
-import java.util.Date;
-
-/**
- * Example to illustrate the <code>token</code> and <code>token-session</code> interceptor.
- *
- */
-public class TokenAction extends ActionSupport {
-
-	private static final long serialVersionUID = 616150375751184884L;
-	
-	private int amount;
-
-    public String execute() throws Exception {
-        // transfer from source to destination
-
-        Integer balSource = (Integer) ActionContext.getContext().getSession().get("balanceSource");
-        Integer balDest = (Integer) ActionContext.getContext().getSession().get("balanceDestination");
-
-        Integer newSource = new Integer(balSource.intValue() - amount);
-        Integer newDest = new Integer(balDest.intValue() + amount);
-
-        ActionContext.getContext().getSession().put("balanceSource", newSource);
-        ActionContext.getContext().getSession().put("balanceDestination", newDest);
-        ActionContext.getContext().getSession().put("time", new Date());
-
-        Thread.sleep(2000); // to simulate processing time
-
-        return SUCCESS;
-    }
-
-    public String doInput() throws Exception {
-        // prepare input form
-        Integer balSource = (Integer) ActionContext.getContext().getSession().get("balanceSource");
-        Integer balDest = (Integer) ActionContext.getContext().getSession().get("balanceDestination");
-
-        if (balSource == null) {
-            // first time set up an initial account balance
-            balSource = new Integer(1200);
-            ActionContext.getContext().getSession().put("balanceSource", balSource);
-        }
-
-        if (balDest == null) {
-            // first time set up an initial account balance
-            balDest = new Integer(2500);
-            ActionContext.getContext().getSession().put("balanceDestination", balDest);
-        }
-
-        return INPUT;
-    }
-
-    public int getAmount() {
-        return amount;
-    }
-
-    public void setAmount(int amount) {
-        this.amount = amount;
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tutorial/HelloName.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tutorial/HelloName.java
deleted file mode 100644
index 4fa4817..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tutorial/HelloName.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.apache.struts2.showcase.tutorial;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class HelloName extends ActionSupport {
-
-    public String execute() throws Exception {
-        if (getName() == null || getName().length() == 0)
-            return ERROR;
-        else
-            return SUCCESS;
-    }
-
-    private String name;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tutorial/HelloName2.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tutorial/HelloName2.java
deleted file mode 100644
index 11d51a5..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tutorial/HelloName2.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.apache.struts2.showcase.tutorial;
-
-import com.opensymphony.xwork2.ActionSupport;
-import org.apache.struts2.interceptor.ParameterAware;
-
-import java.util.Map;
-
-public class HelloName2 extends ActionSupport implements ParameterAware {
-
-    public static String NAME = "name";
-
-    public String execute() {
-        String[] name = (String[]) parameters.get(NAME);
-        if (name == null || name[0] == null || name[0].length() == 0)
-            return ERROR;
-        else
-            return SUCCESS;
-    }
-
-    Map parameters;
-
-    public Map getParameters() {
-        return parameters;
-    }
-
-    public void setParameters(Map parameters) {
-        this.parameters = parameters;
-    }
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tutorial/HelloWorld.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tutorial/HelloWorld.java
deleted file mode 100644
index 28a45ba..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/tutorial/HelloWorld.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.apache.struts2.showcase.tutorial;
-
-import com.opensymphony.xwork2.Action;
-
-import java.text.DateFormat;
-import java.util.Date;
-
-public class HelloWorld implements Action {
-
-    public String execute() {
-        message = "Hello, World!\n";
-        message += "The time is:\n";
-        message += DateFormat.getDateInstance().format(new Date());
-        return SUCCESS;
-    }
-
-    private String message;
-
-    public String getMessage() {
-        return message;
-    }
-
-}
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/AbstractValidationActionSupport.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/AbstractValidationActionSupport.java
deleted file mode 100644
index 39d1047..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/AbstractValidationActionSupport.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.validation;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-public abstract class AbstractValidationActionSupport extends ActionSupport {
-	
-	public String submit() throws Exception {
-		return "success";
-	}
-	
-	public String input() throws Exception {
-		return "input";
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-conversion.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-conversion.properties
deleted file mode 100644
index 2f970dc..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-dateValidatorField=java.util.Date
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitClientSideValidationExample-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitClientSideValidationExample-validation.xml
deleted file mode 100644
index 215a7c9..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitClientSideValidationExample-validation.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!DOCTYPE validators PUBLIC
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<!-- START SNIPPET: fieldValidatorsExample -->  		
-  		
-<validators>
-	<field name="requiredValidatorField">
-		<field-validator type="required">
-			<message><![CDATA[ required ]]></message>
-		</field-validator>
-	</field>
-	<field name="requiredStringValidatorField">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-            <message key="i18n.nothing.here"><![CDATA[ required and must be string ]]></message>
-		</field-validator>
-	</field>
-	<field name="requiredStringValidatorField">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-            <message key="i18n.requiredstring"><![CDATA[ required and must be string ]]></message>
-		</field-validator>
-	</field>
-	<field name="integerValidatorField">
-		<field-validator type="int">
-			<param name="min">1</param>
-			<param name="max">10</param>
-			<message><![CDATA[ must be integer min 1 max 10 if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="dateValidatorField">
-		<field-validator type="date">
-			<param name="min">01/01/1990</param>
-			<param name="max">01/01/2000</param>
-			<message><![CDATA[ must be a min 01-01-1990 max 01-01-2000 if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="emailValidatorField">
-		<field-validator type="email">
-			<message><![CDATA[ must be a valid email if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="urlValidatorField">
-		<field-validator type="url">
-			<message><![CDATA[ must be a valid url if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="stringLengthValidatorField">
-		<field-validator type="stringlength">
-			<param name="maxLength">4</param>
-			<param name="minLength">2</param>
-			<param name="trim">true</param>
-			<message><![CDATA[ must be a String of a specific greater than 1 less than 5 if specified ]]></message>
-		</field-validator>
-	</field>
-	<field name="regexValidatorField">
-		<field-validator type="regex">
-			<param name="expression">.*\.txt</param>
-			<message><![CDATA[ regexValidatorField must match a regexp (.*\.txt) if specified ]]></message>
-		</field-validator>
-	</field>
-	<field name="fieldExpressionValidatorField">
-		<field-validator type="fieldexpression">
-			<param name="expression">(fieldExpressionValidatorField == requiredValidatorField)</param>
-			<message><![CDATA[ must be the same as the Required Validator Field if specified ]]></message>
-		</field-validator>
-	</field>
-</validators>
-
-<!-- END SNIPPET: fieldValidatorsExample -->
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitFieldValidatorsExamples-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitFieldValidatorsExamples-validation.xml
deleted file mode 100644
index 97250cf..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitFieldValidatorsExamples-validation.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<!-- START SNIPPET: fieldValidatorsExample -->  		
-  		
-<validators>
-	<field name="requiredValidatorField">
-		<field-validator type="required">
-			<message><![CDATA[ required ]]></message>
-		</field-validator>
-	</field>
-	<field name="requiredStringValidatorField">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-			<message><![CDATA[ required and must be string ]]></message>
-		</field-validator>
-	</field>
-	<field name="integerValidatorField">
-		<field-validator type="int">
-			<param name="min">1</param>
-			<param name="max">10</param>
-			<message><![CDATA[ must be integer min 1 max 10 if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="dateValidatorField">
-		<field-validator type="date">
-			<param name="min">01/01/1990</param>
-			<param name="max">01/01/2000</param>
-			<message><![CDATA[ must be a min 01-01-1990 max 01-01-2000 if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="emailValidatorField">
-		<field-validator type="email">
-			<message><![CDATA[ must be a valid email if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="urlValidatorField">
-		<field-validator type="url">
-			<message><![CDATA[ must be a valid url if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="stringLengthValidatorField">
-		<field-validator type="stringlength">
-			<param name="maxLength">4</param>
-			<param name="minLength">2</param>
-			<param name="trim">true</param>
-			<message><![CDATA[ must be a String of a specific greater than 1 less than 5 if specified ]]></message>
-		</field-validator>
-	</field>
-	<field name="regexValidatorField">
-		<field-validator type="regex">
-			<param name="expression">.*\.txt</param>
-			<message><![CDATA[ regexValidatorField must match a regexp (.*\.txt) if specified ]]></message>
-		</field-validator>
-	</field>
-	<field name="fieldExpressionValidatorField">
-		<field-validator type="fieldexpression">
-			<param name="expression">(fieldExpressionValidatorField == requiredValidatorField)</param>
-			<message><![CDATA[ must be the same as the Required Validator Field if specified ]]></message>
-		</field-validator>
-	</field>
-</validators>
-
-<!-- END SNIPPET: fieldValidatorsExample -->
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction.java
deleted file mode 100644
index 9da8bd8..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.validation;
-
-import java.sql.Date;
-
-/**
- */
-
-// START SNIPPET: fieldValidatorsExample
-
-public class FieldValidatorsExampleAction extends AbstractValidationActionSupport {
-	
-	private static final long serialVersionUID = -4829381083003175423L;
-	
-	private String requiredValidatorField = null;
-	private String requiredStringValidatorField = null;
-	private Integer integerValidatorField = null;
-	private Date dateValidatorField = null;
-	private String emailValidatorField = null;
-	private String urlValidatorField = null;
-	private String stringLengthValidatorField = null;
-	private String regexValidatorField = null;
-	private String fieldExpressionValidatorField = null;
-	
-	
-	
-	public Date getDateValidatorField() {
-		return dateValidatorField;
-	}
-	public void setDateValidatorField(Date dateValidatorField) {
-		this.dateValidatorField = dateValidatorField;
-	}
-	public String getEmailValidatorField() {
-		return emailValidatorField;
-	}
-	public void setEmailValidatorField(String emailValidatorField) {
-		this.emailValidatorField = emailValidatorField;
-	}
-	public Integer getIntegerValidatorField() {
-		return integerValidatorField;
-	}
-	public void setIntegerValidatorField(Integer integerValidatorField) {
-		this.integerValidatorField = integerValidatorField;
-	}
-	public String getRegexValidatorField() {
-		return regexValidatorField;
-	}
-	public void setRegexValidatorField(String regexValidatorField) {
-		this.regexValidatorField = regexValidatorField;
-	}
-	public String getRequiredStringValidatorField() {
-		return requiredStringValidatorField;
-	}
-	public void setRequiredStringValidatorField(String requiredStringValidatorField) {
-		this.requiredStringValidatorField = requiredStringValidatorField;
-	}
-	public String getRequiredValidatorField() {
-		return requiredValidatorField;
-	}
-	public void setRequiredValidatorField(String requiredValidatorField) {
-		this.requiredValidatorField = requiredValidatorField;
-	}
-	public String getStringLengthValidatorField() {
-		return stringLengthValidatorField;
-	}
-	public void setStringLengthValidatorField(String stringLengthValidatorField) {
-		this.stringLengthValidatorField = stringLengthValidatorField;
-	}
-	public String getFieldExpressionValidatorField() {
-		return fieldExpressionValidatorField;
-	}
-	public void setFieldExpressionValidatorField(
-			String fieldExpressionValidatorField) {
-		this.fieldExpressionValidatorField = fieldExpressionValidatorField;
-	}
-
-    public String getUrlValidatorField() {
-        return urlValidatorField;
-    }
-
-    public void setUrlValidatorField(String urlValidatorField) {
-        this.urlValidatorField = urlValidatorField;
-    }
-}
-
-
-// END SNIPPET: fieldValidatorsExample
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction.properties b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction.properties
deleted file mode 100644
index 14f0412..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction.properties
+++ /dev/null
@@ -1 +0,0 @@
-i18n.requiredstring=Test String for required Strings...
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/NonFieldValidatorsExampleAction-submitNonFieldValidatorsExamples-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/NonFieldValidatorsExampleAction-submitNonFieldValidatorsExamples-validation.xml
deleted file mode 100644
index cba25b0..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/NonFieldValidatorsExampleAction-submitNonFieldValidatorsExamples-validation.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-  		
-<!-- START SNIPPET: nonFieldValidatorsExample -->  		
-  		
-<validators>
-	<validator type="expression">
-		<param name="expression"><![CDATA[ ( (someText == someTextRetype) && (someTextRetype == someTextRetypeAgain) ) ]]></param>
-		<message><![CDATA[ all three text must be exactly the same ]]></message>
-	</validator>
-</validators>
-
-<!--  END SNIPPET: nonFieldValidatorsExample -->
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/NonFieldValidatorsExampleAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/NonFieldValidatorsExampleAction.java
deleted file mode 100644
index 1461fcd..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/NonFieldValidatorsExampleAction.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.validation;
-
-/**
- */
-
-// START SNIPPET: nonFieldValidatorsExample
-
-public class NonFieldValidatorsExampleAction extends AbstractValidationActionSupport {
-	
-	private static final long serialVersionUID = -524460368233581186L;
-	
-	private String someText;
-	private String someTextRetype;
-	private String someTextRetypeAgain;
-	
-	public String getSomeText() {
-		return someText;
-	}
-	public void setSomeText(String someText) {
-		this.someText = someText;
-	}
-	public String getSomeTextRetype() {
-		return someTextRetype;
-	}
-	public void setSomeTextRetype(String someTextRetype) {
-		this.someTextRetype = someTextRetype;
-	}
-	public String getSomeTextRetypeAgain() {
-		return someTextRetypeAgain;
-	}
-	public void setSomeTextRetypeAgain(String someTextRetypeAgain) {
-		this.someTextRetypeAgain = someTextRetypeAgain;
-	}
-}
-
-
-// END SNIPPET: nonFieldValidatorsExample
-
-
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/QuizAction-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/QuizAction-validation.xml
deleted file mode 100644
index dd716fa..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/QuizAction-validation.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<!--  START SNIPPET: quizValidators -->
-<!--
-    Add the following DOCTYPE declaration as first line of your XXX-validation.xml file:
-    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
--->
-<validators>
-    <field name="name">
-        <field-validator type="requiredstring">
-            <message>You must enter a name</message>
-        </field-validator>
-    </field>
-    <field name="age">
-        <field-validator type="int">
-            <param name="min">13</param>
-            <param name="max">19</param>
-            <message>Only people ages 13 to 19 may take this quiz</message>
-        </field-validator>
-    </field>
-</validators>
-
-<!--  END SNIPPET: quizValidators  -->
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/QuizAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/QuizAction.java
deleted file mode 100644
index b1c4e6b..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/QuizAction.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.validation;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- */
-
-// START SNIPPET: quizAction 
-
-public class QuizAction extends ActionSupport {
-	
-	private static final long serialVersionUID = -7505437345373234225L;
-	
-	String name;
-    int age;
-    String answer;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public int getAge() {
-        return age;
-    }
-
-    public void setAge(int age) {
-        this.age = age;
-    }
-
-    public String getAnswer() {
-        return answer;
-    }
-
-    public void setAnswer(String answer) {
-        this.answer = answer;
-    }
-}
-
-// END SNIPPET: quizAction
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/SubmitApplication.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/SubmitApplication.java
deleted file mode 100644
index 7fbfeca..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/SubmitApplication.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.validation;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * 
- * @version $Date$ $Id$
- */
-public class SubmitApplication extends ActionSupport {
-	
-	private String name;
-	private Integer age;
-	
-	public void setName(String name) {
-		this.name = name;
-	}
-	public String getName() {
-		return this.name;
-	}
-	
-	public void setAge(Integer age) {
-		this.age = age;
-	}
-	public Integer getAge() {
-		return age;
-	}
-	
-	public String submitApplication() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String applicationOk() throws Exception {
-		addActionMessage("Your application looks ok.");
-		return SUCCESS;
-	}
-	public String cancelApplication() throws Exception {
-		addActionMessage("So you have decided to cancel the application");
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/User-userContext-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/User-userContext-validation.xml
deleted file mode 100644
index 508eb65..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/User-userContext-validation.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<validators>
-	<field name="name">
-		<field-validator type="requiredstring">
-			<message>Name Required</message>
-		</field-validator>
-	</field>
-	<field name="age">	
-		<field-validator type="int">
-			<param name="min">1</param>
-			<param name="max">100</param>
-			<message>Age Required (1-100)</message>
-		</field-validator>
-	</field>
-	<field name="birthday">
-		<field-validator type="date">
-			<message>Birthday Required</message>
-		</field-validator>
-	</field>
-</validators>  		
-
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/User.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/User.java
deleted file mode 100644
index 32a88f2..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/User.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.validation;
-
-import java.sql.Date;
-
-/**
- */
-public class User {
-	
-	private String name;
-	private Integer age;
-	private Date birthday;
-	
-	
-	public Integer getAge() {
-		return age;
-	}
-	public void setAge(Integer age) {
-		this.age = age;
-	}
-	public Date getBirthday() {
-		return birthday;
-	}
-	public void setBirthday(Date birthday) {
-		this.birthday = birthday;
-	}
-	public String getName() {
-		return name;
-	}
-	public void setName(String name) {
-		this.name = name;
-	}
-}
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/VisitorValidatorsExampleAction-submitVisitorValidatorsExamples-validation.xml b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/VisitorValidatorsExampleAction-submitVisitorValidatorsExamples-validation.xml
deleted file mode 100644
index a8af8f0..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/VisitorValidatorsExampleAction-submitVisitorValidatorsExamples-validation.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<!-- START SNIPPET: visitorValidatorsExample -->
-
-<validators>
-	<field name="user">
-		<field-validator type="visitor">
-			<param name="context">userContext</param>
-			<param name="appendPrefix">true</param>
-			<message>User:</message>
-		</field-validator>
-	</field>
-</validators>
-
-<!--  END SNIPPET: visitorValidatorExample -->
-
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/VisitorValidatorsExampleAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/VisitorValidatorsExampleAction.java
deleted file mode 100644
index 08a489d..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/validation/VisitorValidatorsExampleAction.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.validation;
-
-
-// START SNIPPET: visitorValidatorsExample
-
-public class VisitorValidatorsExampleAction extends AbstractValidationActionSupport {
-
-	private static final long serialVersionUID = 4375454086939598216L;
-	
-	private User user;
-	
-	public User getUser() {
-		return user;
-	}
-	
-	public void setUser(User user) {
-		this.user = user;
-	}
-}
-
-
-// END SNIPPET: visitorValidatorsExample
diff --git a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/wait/LongProcessAction.java b/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/wait/LongProcessAction.java
deleted file mode 100644
index 7f33be8..0000000
--- a/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/wait/LongProcessAction.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.showcase.wait;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Example to illustrate the <code>execAndWait</code> interceptor.
- *
- */
-public class LongProcessAction extends ActionSupport {
-
-	private static final long serialVersionUID = 2471910747833998708L;
-	
-	private int time;
-
-    public int getTime() {
-        return time;
-    }
-
-    public void setTime(int time) {
-        this.time = time;
-    }
-
-    public String execute() throws Exception {
-        System.err.println("time: " + time);
-        Thread.sleep(time);
-
-        return SUCCESS;
-    }
-
-}
diff --git a/trunk/apps/showcase/src/main/resources/globalMessages.properties b/trunk/apps/showcase/src/main/resources/globalMessages.properties
deleted file mode 100644
index 24a39d4..0000000
--- a/trunk/apps/showcase/src/main/resources/globalMessages.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-save=Save
-
-item.edit=Edit {0}
-item.create=Create {0}
-item.list={0} List
-
-token.transfer.time=The bank transfer was executed at {0,date,HH:mm:ss MM-dd-yyyy}
diff --git a/trunk/apps/showcase/src/main/resources/globalMessages_de.properties b/trunk/apps/showcase/src/main/resources/globalMessages_de.properties
deleted file mode 100644
index 0dc66ef..0000000
--- a/trunk/apps/showcase/src/main/resources/globalMessages_de.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-save=Speichern
-
-item.edit={0} bearbeiten
-item.create={0} neu anlegen
-item.list={0}-Liste
-
-token.transfer.time=Die \u00dcberweisung wurde am {0,date,HH:mm:ss MM-dd-yyyy} durchgef\u00fchrt
diff --git a/trunk/apps/showcase/src/main/resources/log4j.properties b/trunk/apps/showcase/src/main/resources/log4j.properties
deleted file mode 100644
index 226f3de..0000000
--- a/trunk/apps/showcase/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Log4J Settings for log4j 1.2.x (via jakarta-commons-logging)
-#
-# The five logging levels used by Log are (in order):
-#
-#   1. DEBUG (the least serious)
-#   2. INFO
-#   3. WARN
-#   4. ERROR
-#   5. FATAL (the most serious)
-
-
-# Set root logger level to WARN and append to stdout
-log4j.rootLogger=WARN, stdout
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-
-# Pattern to output the caller's file name and line number.
-log4j.appender.stdout.layout.ConversionPattern=%d %5p (%c:%L) - %m%n
-
-# Print only messages of level ERROR or above in the package noModule.
-log4j.logger.noModule=FATAL
-
-# OpenSymphony Stuff
-log4j.logger.com.opensymphony=INFO
-log4j.logger.org.apache.struts2=DEBUG
-
-# Spring Stuff
-log4j.logger.org.springframework=INFO
-
diff --git a/trunk/apps/showcase/src/main/resources/myTemplateDir/myTheme/myAnotherTemplate.ftl b/trunk/apps/showcase/src/main/resources/myTemplateDir/myTheme/myAnotherTemplate.ftl
deleted file mode 100644
index 544f44e..0000000
--- a/trunk/apps/showcase/src/main/resources/myTemplateDir/myTheme/myAnotherTemplate.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-<div style="background-color:yellow;">
-<p>
-Freemarker Custom Template -
-parameter 'paramName' - ${parameters.paramName}
-</p>
-</div>
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/DateAction.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/DateAction.properties
deleted file mode 100644
index d49c743..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/DateAction.properties
+++ /dev/null
@@ -1 +0,0 @@
-struts.date.format=yyyy/MM/dd hh:mm:ss
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/LotsOfRichtexteditorAction-lotsOfRichtexteditorSubmit-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/LotsOfRichtexteditorAction-lotsOfRichtexteditorSubmit-validation.xml
deleted file mode 100644
index 8bf17c7..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/LotsOfRichtexteditorAction-lotsOfRichtexteditorSubmit-validation.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<validators>
-	<field name="description1">
-		<field-validator type="requiredstring">
-			<message>Description1 Is Required !!!</message>
-		</field-validator>
-	</field>
-	
-	<field name="description2">
-		<field-validator type="requiredstring">
-			<message>Description2 Is Required !!!</message>
-		</field-validator>
-	</field>
-	
-	<field name="description3">
-		<field-validator type="requiredstring">
-			<message>Description3 Is Required !!!</message>
-		</field-validator>
-	</field>
-	
-	<field name="description4">
-		<field-validator type="requiredstring">
-			<message>Description4 Is Required !!!</message>
-		</field-validator>
-	</field>
-</validators>  		
- 
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/UITagExample-conversion.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/UITagExample-conversion.properties
deleted file mode 100644
index 2415dcf..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/UITagExample-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-Element_friends = java.lang.String
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction-conversion.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction-conversion.properties
deleted file mode 100644
index 21d3eda..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-Element_selectedSkills=java.lang.String
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction-validation.xml
deleted file mode 100644
index c499598..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction-validation.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
-<validators>
-    <!-- Field-Validator Syntax -->
-    <field name="currentEmployee.empId">
-        <field-validator type="required">
-            <message key="employee.id.required"/>
-        </field-validator>
-    </field>
-    <field name="currentEmployee.lastName">
-        <field-validator type="requiredstring">
-            <param name="trim">true</param>
-            <message key="employee.lastName.required"/>
-        </field-validator>
-    </field>
-    <field name="currentEmployee.birthDate">
-        <field-validator type="required">
-            <message key="employee.birthDate.required"/>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction.properties
deleted file mode 100644
index e2e548b..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-employee=Employee
-employee.firstName=First Name
-employee.lastName=Last Name
-employee.description=Description
-
-employee.id.required=Id is required
-employee.lastName.required=Last Name is required
-employee.birthDate.required=Birthdate is required
-employee.backtolist=Back to Employee List
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction_de.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction_de.properties
deleted file mode 100644
index ca594de..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/EmployeeAction_de.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-employee=Mitarbeiter    
-employee.firstName=Vorname
-employee.lastName=Nachname
-employee.description=Beschreibung
-
-employee.id.required=ID muß angegeben werden
-employee.lastName.required=Nachname wird benötigt
-employee.birthDate.required=Geburtsdatum wird benötigt
-employee.backtolist=Zurück zur Mitarbeiterliste
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/SkillAction-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/SkillAction-validation.xml
deleted file mode 100644
index 486e79f..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/SkillAction-validation.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
-<validators>
-    <!-- Field-Validator Syntax -->
-    <field name="currentSkill.name">
-        <field-validator type="requiredstring">
-            <param name="trim">true</param>
-            <message key="skill.name.required"/>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/SkillAction.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/SkillAction.properties
deleted file mode 100644
index 27b7c81..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/SkillAction.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-skill=Skill
-skill.name=Name
-skill.description=Description
-
-skill.name.required=Name is required
-skill.backtolist=Back to Skill List
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/SkillAction_de.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/SkillAction_de.properties
deleted file mode 100644
index 7c7156f..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/action/SkillAction_de.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-skill=Kenntnis
-skill.name=Name
-skill.description=Beschreibung
-
-skill.name.required=Name muss angegeben werden
-skill.backtolist=Zurück zur Kenntnis Liste
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/ajax/Example5Action-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/ajax/Example5Action-validation.xml
deleted file mode 100644
index b80e7d5..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/ajax/Example5Action-validation.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<validators>
-	<field name="name">
-		<field-validator type="requiredstring">
-			<message>Name is required</message>
-		</field-validator>
-	</field>
-	<field name="age">
-		<field-validator type="required">
-			<message>Age is required</message>
-		</field-validator>
-	</field>
-</validators>  		
-
-
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/ChatLoginAction-chatLogin-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/ChatLoginAction-chatLogin-validation.xml
deleted file mode 100644
index d4ab299..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/ChatLoginAction-chatLogin-validation.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<validators>
-	<field name="name">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-			<message>Name is required</message>
-		</field-validator>
-	</field>
-</validators>
-
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/ChatMessage-conversion.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/ChatMessage-conversion.properties
deleted file mode 100644
index 8869d38..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/ChatMessage-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-creationDate=org.apache.struts2.showcase.chat.DateConverter
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/CrudRoomAction-createRoom-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/CrudRoomAction-createRoom-validation.xml
deleted file mode 100644
index bf8977c..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/CrudRoomAction-createRoom-validation.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
-	<field name="name">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-			<message>Room name is required</message>
-		</field-validator>
-	</field>
-	<field name="description">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-			<message>Room description is required</message>
-		</field-validator>
-	</field>
-</validators>  		
-  		
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/Room-conversion.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/Room-conversion.properties
deleted file mode 100644
index 8869d38..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/Room-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-creationDate=org.apache.struts2.showcase.chat.DateConverter
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/SendMessageToRoomAction-sendMessageToRoom-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/SendMessageToRoomAction-sendMessageToRoom-validation.xml
deleted file mode 100644
index b4197a4..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/SendMessageToRoomAction-sendMessageToRoom-validation.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
-	<field name="message">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-			<message>Message is required</message>
-		</field-validator>
-	</field>
-</validators>  		
-
-  		
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/conversion/PersonAction-conversion.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/conversion/PersonAction-conversion.properties
deleted file mode 100644
index 12f602f..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/conversion/PersonAction-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-Element_persons=org.apache.struts2.showcase.conversion.Person
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/person/CreatePerson-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/person/CreatePerson-validation.xml
deleted file mode 100644
index 6d19ebd..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/person/CreatePerson-validation.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
-<validators>
-    <field name="person">
-        <field-validator type="visitor">
-            <message></message>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/person/EditPerson-conversion.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/person/EditPerson-conversion.properties
deleted file mode 100644
index 00b2a03..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/person/EditPerson-conversion.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-KeyProperty_persons=id
-Element_persons=org.apache.struts2.showcase.person.Person
-CreateIfNull_persons=true
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/person/Person-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/person/Person-validation.xml
deleted file mode 100644
index da2c81f..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/person/Person-validation.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
-<validators>
-    <field name="name">
-        <field-validator type="requiredstring">
-            <message>You must enter a first name.</message>
-        </field-validator>
-    </field>
-    <field name="lastName">
-        <field-validator type="requiredstring">
-            <message>You must enter a last name</message>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/tag/nonui/iteratortag/IteratorGeneratorTagDemo-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/tag/nonui/iteratortag/IteratorGeneratorTagDemo-validation.xml
deleted file mode 100644
index 55f9577..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/tag/nonui/iteratortag/IteratorGeneratorTagDemo-validation.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC 
-	"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
-	"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-	
-<validators>
-	<field name="value">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-			<message>Value must not be empty</message>
-		</field-validator>
-	</field>
-	
-	
-	<field name="count">
-		<field-validator type="int">
-			<message>Count must be an integer</message>
-		</field-validator>	
-	</field>
-</validators>	
-
-
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-conversion.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-conversion.properties
deleted file mode 100644
index 2f970dc..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-dateValidatorField=java.util.Date
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitClientSideValidationExample-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitClientSideValidationExample-validation.xml
deleted file mode 100644
index 215a7c9..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitClientSideValidationExample-validation.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!DOCTYPE validators PUBLIC
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<!-- START SNIPPET: fieldValidatorsExample -->  		
-  		
-<validators>
-	<field name="requiredValidatorField">
-		<field-validator type="required">
-			<message><![CDATA[ required ]]></message>
-		</field-validator>
-	</field>
-	<field name="requiredStringValidatorField">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-            <message key="i18n.nothing.here"><![CDATA[ required and must be string ]]></message>
-		</field-validator>
-	</field>
-	<field name="requiredStringValidatorField">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-            <message key="i18n.requiredstring"><![CDATA[ required and must be string ]]></message>
-		</field-validator>
-	</field>
-	<field name="integerValidatorField">
-		<field-validator type="int">
-			<param name="min">1</param>
-			<param name="max">10</param>
-			<message><![CDATA[ must be integer min 1 max 10 if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="dateValidatorField">
-		<field-validator type="date">
-			<param name="min">01/01/1990</param>
-			<param name="max">01/01/2000</param>
-			<message><![CDATA[ must be a min 01-01-1990 max 01-01-2000 if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="emailValidatorField">
-		<field-validator type="email">
-			<message><![CDATA[ must be a valid email if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="urlValidatorField">
-		<field-validator type="url">
-			<message><![CDATA[ must be a valid url if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="stringLengthValidatorField">
-		<field-validator type="stringlength">
-			<param name="maxLength">4</param>
-			<param name="minLength">2</param>
-			<param name="trim">true</param>
-			<message><![CDATA[ must be a String of a specific greater than 1 less than 5 if specified ]]></message>
-		</field-validator>
-	</field>
-	<field name="regexValidatorField">
-		<field-validator type="regex">
-			<param name="expression">.*\.txt</param>
-			<message><![CDATA[ regexValidatorField must match a regexp (.*\.txt) if specified ]]></message>
-		</field-validator>
-	</field>
-	<field name="fieldExpressionValidatorField">
-		<field-validator type="fieldexpression">
-			<param name="expression">(fieldExpressionValidatorField == requiredValidatorField)</param>
-			<message><![CDATA[ must be the same as the Required Validator Field if specified ]]></message>
-		</field-validator>
-	</field>
-</validators>
-
-<!-- END SNIPPET: fieldValidatorsExample -->
-
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitFieldValidatorsExamples-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitFieldValidatorsExamples-validation.xml
deleted file mode 100644
index 97250cf..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitFieldValidatorsExamples-validation.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<!-- START SNIPPET: fieldValidatorsExample -->  		
-  		
-<validators>
-	<field name="requiredValidatorField">
-		<field-validator type="required">
-			<message><![CDATA[ required ]]></message>
-		</field-validator>
-	</field>
-	<field name="requiredStringValidatorField">
-		<field-validator type="requiredstring">
-			<param name="trim">true</param>
-			<message><![CDATA[ required and must be string ]]></message>
-		</field-validator>
-	</field>
-	<field name="integerValidatorField">
-		<field-validator type="int">
-			<param name="min">1</param>
-			<param name="max">10</param>
-			<message><![CDATA[ must be integer min 1 max 10 if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="dateValidatorField">
-		<field-validator type="date">
-			<param name="min">01/01/1990</param>
-			<param name="max">01/01/2000</param>
-			<message><![CDATA[ must be a min 01-01-1990 max 01-01-2000 if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="emailValidatorField">
-		<field-validator type="email">
-			<message><![CDATA[ must be a valid email if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="urlValidatorField">
-		<field-validator type="url">
-			<message><![CDATA[ must be a valid url if supplied ]]></message>
-		</field-validator>
-	</field>
-	<field name="stringLengthValidatorField">
-		<field-validator type="stringlength">
-			<param name="maxLength">4</param>
-			<param name="minLength">2</param>
-			<param name="trim">true</param>
-			<message><![CDATA[ must be a String of a specific greater than 1 less than 5 if specified ]]></message>
-		</field-validator>
-	</field>
-	<field name="regexValidatorField">
-		<field-validator type="regex">
-			<param name="expression">.*\.txt</param>
-			<message><![CDATA[ regexValidatorField must match a regexp (.*\.txt) if specified ]]></message>
-		</field-validator>
-	</field>
-	<field name="fieldExpressionValidatorField">
-		<field-validator type="fieldexpression">
-			<param name="expression">(fieldExpressionValidatorField == requiredValidatorField)</param>
-			<message><![CDATA[ must be the same as the Required Validator Field if specified ]]></message>
-		</field-validator>
-	</field>
-</validators>
-
-<!-- END SNIPPET: fieldValidatorsExample -->
-
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction.properties b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction.properties
deleted file mode 100644
index 14f0412..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction.properties
+++ /dev/null
@@ -1 +0,0 @@
-i18n.requiredstring=Test String for required Strings...
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/NonFieldValidatorsExampleAction-submitNonFieldValidatorsExamples-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/NonFieldValidatorsExampleAction-submitNonFieldValidatorsExamples-validation.xml
deleted file mode 100644
index cba25b0..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/NonFieldValidatorsExampleAction-submitNonFieldValidatorsExamples-validation.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-  		
-<!-- START SNIPPET: nonFieldValidatorsExample -->  		
-  		
-<validators>
-	<validator type="expression">
-		<param name="expression"><![CDATA[ ( (someText == someTextRetype) && (someTextRetype == someTextRetypeAgain) ) ]]></param>
-		<message><![CDATA[ all three text must be exactly the same ]]></message>
-	</validator>
-</validators>
-
-<!--  END SNIPPET: nonFieldValidatorsExample -->
-
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/QuizAction-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/QuizAction-validation.xml
deleted file mode 100644
index dd716fa..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/QuizAction-validation.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<!--  START SNIPPET: quizValidators -->
-<!--
-    Add the following DOCTYPE declaration as first line of your XXX-validation.xml file:
-    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
--->
-<validators>
-    <field name="name">
-        <field-validator type="requiredstring">
-            <message>You must enter a name</message>
-        </field-validator>
-    </field>
-    <field name="age">
-        <field-validator type="int">
-            <param name="min">13</param>
-            <param name="max">19</param>
-            <message>Only people ages 13 to 19 may take this quiz</message>
-        </field-validator>
-    </field>
-</validators>
-
-<!--  END SNIPPET: quizValidators  -->
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/SubmitApplication-submitApplication-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/SubmitApplication-submitApplication-validation.xml
deleted file mode 100644
index 0dbb123..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/SubmitApplication-submitApplication-validation.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE validators PUBLIC
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
-	<field name="name">
-		<field-validator type="requiredstring">
-			<message>You must provide a name</message>
-		</field-validator>
-	</field>
-	<field name="age">
-		<field-validator type="required">
-			<message>You must provide your age</message>
-		</field-validator>
-		<field-validator type="int">
-			<param name="min">18</param>
-			<param name="max">50</param>
-			<message>Your age must be between 18 and 50</message>
-		</field-validator>
-	</field>
-</validators>
-
-
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/User-userContext-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/User-userContext-validation.xml
deleted file mode 100644
index 508eb65..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/User-userContext-validation.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<validators>
-	<field name="name">
-		<field-validator type="requiredstring">
-			<message>Name Required</message>
-		</field-validator>
-	</field>
-	<field name="age">	
-		<field-validator type="int">
-			<param name="min">1</param>
-			<param name="max">100</param>
-			<message>Age Required (1-100)</message>
-		</field-validator>
-	</field>
-	<field name="birthday">
-		<field-validator type="date">
-			<message>Birthday Required</message>
-		</field-validator>
-	</field>
-</validators>  		
-
-
diff --git a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/VisitorValidatorsExampleAction-submitVisitorValidatorsExamples-validation.xml b/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/VisitorValidatorsExampleAction-submitVisitorValidatorsExamples-validation.xml
deleted file mode 100644
index a8af8f0..0000000
--- a/trunk/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/VisitorValidatorsExampleAction-submitVisitorValidatorsExamples-validation.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE validators PUBLIC 
-  		"-//OpenSymphony Group//XWork Validator 1.0//EN" 
-  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-  		
-<!-- START SNIPPET: visitorValidatorsExample -->
-
-<validators>
-	<field name="user">
-		<field-validator type="visitor">
-			<param name="context">userContext</param>
-			<param name="appendPrefix">true</param>
-			<message>User:</message>
-		</field-validator>
-	</field>
-</validators>
-
-<!--  END SNIPPET: visitorValidatorExample -->
-
diff --git a/trunk/apps/showcase/src/main/resources/struts-actionchaining.xml b/trunk/apps/showcase/src/main/resources/struts-actionchaining.xml
deleted file mode 100644
index f0818a0..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-actionchaining.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-	
-<struts>
-	<package name="actionchaining" extends="struts-default" namespace="/actionchaining">
-		<action name="actionChain1" class="org.apache.struts2.showcase.actionchaining.ActionChain1">
-			<result type="chain">actionChain2</result>		
-		</action>
-		<action name="actionChain2" class="org.apache.struts2.showcase.actionchaining.ActionChain2">
-			<result type="chain">actionChain3</result>
-		</action>
-		<action name="actionChain3" class="org.apache.struts2.showcase.actionchaining.ActionChain3">
-			<result>/actionchaining/actionChainingResult.jsp</result>
-		</action>
-	</package>
-</struts>
-
-
diff --git a/trunk/apps/showcase/src/main/resources/struts-ajax.xml b/trunk/apps/showcase/src/main/resources/struts-ajax.xml
deleted file mode 100644
index 5cbc951..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-ajax.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-    <package name="ajax" extends="struts-default">
-        <action name="AjaxTest" class="org.apache.struts2.showcase.ajax.AjaxTestAction">
-            <result>/ajax/AjaxResult.jsp</result>
-        </action>
-
-        <action name="AjaxRemoteLink" class="org.apache.struts2.showcase.ajax.AjaxTestAction">
-            <result>/ajax/AjaxResult2.js</result>
-        </action>
-
-        <action name="AjaxRemoteForm" class="org.apache.struts2.showcase.ajax.AjaxTestAction">
-            <result>/ajax/AjaxResult3.jsp</result>
-        </action>
-
-        <action name="Test1">
-            <result>/ajax/remoteforms/test2.jsp</result>
-        </action>
-
-        <action name="Test2">
-            <result>/ajax/remoteforms/test3.jsp</result>
-        </action>
-
-        <action name="Test3">
-            <result>/ajax/testjs.jsp</result>
-        </action>
-
-        <action name="tree">
-            <result>/ajax/tree/tree.jsp</result>
-        </action>
-
-        <action name="getCategory" class="org.apache.struts2.showcase.ajax.tree.GetCategory">
-            <result>/ajax/tree/getCategory.jsp</result>
-        </action>
-
-        <action name="toggle" class="org.apache.struts2.showcase.ajax.tree.Toggle">
-            <result>/ajax/tree/toggle.jsp</result>
-        </action>
-        
-        <action name="example4">
-        	<result type="freemarker">/ajax/tabbedpanel/example4.ftl</result>
-        </action>
-        
-        <action name="example5" class="org.apache.struts2.showcase.ajax.Example5Action">
-        	<result name="input">/ajax/tabbedpanel/example5.jsp</result>
-        	<result>/ajax/tabbedpanel/example5Ok.jsp</result>
-        </action>
-    </package>
-    
-    <package name="ajaxNoDecorate" namespace="/nodecorate" extends="struts-default">
-    	<!--  example 4 -->
-        <action name="panel1" class="org.apache.struts2.showcase.ajax.Example4ShowPanelAction" method="panel1">
-    		<result type="freemarker">/ajax/tabbedpanel/nodecorate/panel1.ftl</result>
-    	</action>
-    	<action name="panel2">
-    		<result type="freemarker">/ajax/tabbedpanel/nodecorate/panel2.ftl</result>
-    	</action>
-    	<action name="panel3">
-    		<result type="freemarker">/ajax/tabbedpanel/nodecorate/panel3.ftl</result>
-    	</action>
-    	<action name="panel2Submit" class="org.apache.struts2.showcase.ajax.Example4ShowPanelAction" method="panel2">
-    		<result type="freemarker">/ajax/tabbedpanel/nodecorate/panel2Submit.ftl</result>
-    	</action>
-    	<action name="panel3Submit" class="org.apache.struts2.showcase.ajax.Example4ShowPanelAction" method="panel3">
-    		<result type="freemarker">/ajax/tabbedpanel/nodecorate/panel3Submit.ftl</result>
-    	</action>
-    </package>
-</struts>
diff --git a/trunk/apps/showcase/src/main/resources/struts-chat.xml b/trunk/apps/showcase/src/main/resources/struts-chat.xml
deleted file mode 100644
index 173d3bc..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-chat.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-	
-<struts>
-	<package name="chat" extends="struts-default" namespace="/chat">
-		<interceptors>
-			<interceptor name="chatAuthentication" 
-						 class="org.apache.struts2.showcase.chat.ChatAuthenticationInterceptor" />
-			<interceptor-stack name="chatAuthenticationStack">
-				<interceptor-ref name="createSession" />
-				<interceptor-ref name="exception"/>
-                <interceptor-ref name="alias"/>
-                <interceptor-ref name="servlet-config"/>
-                <interceptor-ref name="prepare"/>
-                <interceptor-ref name="i18n"/>
-                <interceptor-ref name="chain"/>
-                <interceptor-ref name="debugging"/>
-                <interceptor-ref name="model-driven"/>
-                <interceptor-ref name="fileUpload"/>
-                <interceptor-ref name="static-params"/>
-                <interceptor-ref name="params"/>
-                <interceptor-ref name="conversionError"/>
-                <interceptor-ref name="validation">
-                    <param name="excludeMethods">input,back,cancel,browse</param>
-                </interceptor-ref>
-                <interceptor-ref name="workflow">
-                    <param name="excludeMethods">input,back,cancel,browse</param>
-                </interceptor-ref>
-                <interceptor-ref name="chatAuthentication" />
-			</interceptor-stack>						
-		</interceptors>
-		
-		<global-results>
-			<result name="login" type="freemarker">/chat/chatLogin.ftl</result>
-		</global-results>
-		
-		<action name="main">
-			<interceptor-ref name="chatAuthentication" />
-			<result type="freemarker">/chat/roomSelection.ftl</result>
-		</action>
-		
-		<action name="login" class="chatLoginAction">
-			<interceptor-ref name="defaultStack" />
-			<result type="redirect">/chat/showRooms.action</result>
-			<result name="input" type="freemarker">/chat/chatLogin.ftl</result>
-		</action>
-		
-		<action name="logout" class="chatLogoutAction">
-			<interceptor-ref name="defaultStack" />
-			<result type="redirect">/chat/main.action</result>
-		</action>
-		
-		<action name="showRooms">
-			<interceptor-ref name="chatAuthenticationStack" />
-			<result type="freemarker">/chat/roomSelection.ftl</result>
-		</action>
-		
-		<action name="enterRoom" class="enterRoomAction">
-			<interceptor-ref name="chatAuthenticationStack" />
-			<result type="freemarker">/chat/showRoom.ftl</result>
-		</action>
-		
-		<action name="exitRoom" class="exitRoomAction">
-			<interceptor-ref name="chatAuthenticationStack" />
-			<result type="redirect">/chat/showRooms.action</result>
-		</action>
-		
-	</package>
-	
-	<package name="chat-remote" extends="struts-default" namespace="/chat/ajax">
-		<interceptors>
-			<interceptor name="chatAuthentication" 
-						 class="org.apache.struts2.showcase.chat.ChatAuthenticationInterceptor" />
-			<interceptor-stack name="chatAuthenticationStack">
-				<interceptor-ref name="createSession" />
-				<interceptor-ref name="exception"/>
-                <interceptor-ref name="alias"/>
-                <interceptor-ref name="servlet-config"/>
-                <interceptor-ref name="prepare"/>
-                <interceptor-ref name="i18n"/>
-                <interceptor-ref name="chain"/>
-                <interceptor-ref name="debugging"/>
-                <interceptor-ref name="model-driven"/>
-                <interceptor-ref name="fileUpload"/>
-                <interceptor-ref name="static-params"/>
-                <interceptor-ref name="params"/>
-                <interceptor-ref name="conversionError"/>
-                <interceptor-ref name="validation">
-                    <param name="excludeMethods">input,back,cancel,browse</param>
-                </interceptor-ref>
-                <interceptor-ref name="workflow">
-                    <param name="excludeMethods">input,back,cancel,browse</param>
-                </interceptor-ref>
-                <interceptor-ref name="chatAuthentication" />
-			</interceptor-stack>						
-		</interceptors>
-		
-		
-		<action name="usersAvailable" class="usersAvailableAction">
-			<interceptor-ref name="chatAuthenticationStack" />
-			<result type="freemarker">/chat/usersAvailable.ftl</result>
-		</action>
-		
-		<action name="roomsAvailable" class="roomsAvailableAction">
-			<interceptor-ref name="chatAuthenticationStack" />
-			<result type="freemarker">/chat/roomsAvailable.ftl</result>
-		</action>
-		
-		<action name="createRoom" class="crudRoomAction" method="create">
-			<interceptor-ref name="chatAuthenticationStack" />
-			<result type="freemarker">/chat/createRoom.ftl</result>
-			<result name="input" type="freemarker">/chat/createRoom.ftl</result>
-		</action>
-		
-		<action name="messagesAvailableInRoom" class="messagesAvailableInRoomAction">
-			<interceptor-ref name="chatAuthenticationStack" />
-			<result type="freemarker">/chat/messagesAvailableInRoom.ftl</result>
-			<result name="input" type="freemarker">/chat/messagesAvailableInRoom.ftl</result>
-		</action>
-		
-		<action name="sendMessageToRoom" class="sendMessageToRoomAction">
-			<interceptor-ref name="chatAuthenticationStack" />
-			<result type="freemarker">/chat/sendMessageToRoomResult.ftl</result>
-			<result name="input" type="freemarker">/chat/sendMessageToRoomResult.ftl</result>
-		</action>
-		
-		<action name="usersAvailableInRoom" class="usersAvailableInRoomAction">
-			<interceptor-ref name="chatAuthenticationStack" />
-			<result type="freemarker">/chat/usersAvailableInRoom.ftl</result>
-		</action>
-	</package> 
-</struts>	
-
diff --git a/trunk/apps/showcase/src/main/resources/struts-continuations.xml b/trunk/apps/showcase/src/main/resources/struts-continuations.xml
deleted file mode 100644
index dc806e3..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-continuations.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-<struts>
-    <package name="continuations" extends="struts-default" namespace="/continuations">
-        <action name="guess" class="org.apache.struts2.showcase.Guess">
-            <result type="freemarker">guess.ftl</result>
-        </action>
-    </package>
-</struts>
diff --git a/trunk/apps/showcase/src/main/resources/struts-conversion.xml b/trunk/apps/showcase/src/main/resources/struts-conversion.xml
deleted file mode 100644
index c3259e6..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-conversion.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-	
-<struts>
-	<package name="conversion" namespace="/conversion" extends="struts-default">
-	
-		<!-- Example populating a List inside an Action -->
-		<action name="enterPersonsInfo" method="input"
-				class="org.apache.struts2.showcase.conversion.PersonAction">
-			<result>enterPersonInfo.jsp</result>
-		</action>
-		<action name="submitPersonInfo" method="submit"
-				class="org.apache.struts2.showcase.conversion.PersonAction">
-			<result>showPersonInfo.jsp</result>	
-			<result name="input">enterPersonInfo.jsp</result>
-		</action>
-		<action name="showPersonJspCode">
-			<result type="plaintext">/conversion/enterPersonInfo.jsp</result>
-		</action>
-		<action name="showPersonActionJavaCode">
-			<result type="plaintext">/conversion/PersonAction.java.txt</result>
-		</action>
-		<action name="showPersonJavaCode">
-			<result type="plaintext">/conversion/Person.java.txt</result>
-		</action>
-		
-		
-		<!-- Example populating a Set inside an Action -->
-		<action name="enterAddressesInfo" class="org.apache.struts2.showcase.conversion.AddressAction" method="input">
-			<result>enterAddressInfo.jsp</result>
-		</action>
-		<action name="submitAddressesInfo" class="org.apache.struts2.showcase.conversion.AddressAction" method="submit">
-			<result>showAddressInfo.jsp</result>
-			<result name="input">enterAddressInfo.jsp</result>
-		</action>
-		<action name="showAddressJspCode">
-			<result type="plaintext">/conversion/enterAddressInfo.jsp</result>
-		</action>
-		<action name="showAddressActionJavaCode">
-			<result type="plaintext">/conversion/AddressAction.java.txt</result>
-		</action>
-		<action name="showAddressJavaCode">
-			<result type="plaintext">/conversion/Address.java.txt</result>
-		</action>
-		
-		
-		<!-- Example populating a List with Tiger 5 Enum  -->		
-		<action name="enterOperationEnumInfo" class="org.apache.struts2.showcase.conversion.OperationsEnumAction" method="input">
-			<result>enterOperations.jsp</result>
-		</action>
-		<action name="submitOperationEnumInfo" class="org.apache.struts2.showcase.conversion.OperationsEnumAction" method="submit">
-			<result>showOperations.jsp</result>
-			<result name="input">enterOperations.jsp</result>
-		</action>
-		<action name="showEnumJspCode">
-			<result type="plaintext">/conversion/enterOperations.jsp</result>
-		</action>
-		<action name="showOperationsEnumJavaCode">
-			<result type="plaintext">/conversion/OperationsEnum.java.txt</result>
-		</action>
-		<action name="showOperationEnumActionJavaCode">
-			<result type="plaintext">/conversion/OperationsEnumAction.java.txt</result>
-		</action>
-		<action name="showEnumTypeConverterJavaCode">
-			<result type="plaintext">/conversion/EnumTypeConverter.java.txt</result>
-		</action>
-		<action name="showOperationsEnumActionConversionProperties">
-			<result type="plaintext">/conversion/OperationsEnumActionConversion.txt</result>
-		</action>
-		
-	</package>
-</struts>	
diff --git a/trunk/apps/showcase/src/main/resources/struts-filedownload.xml b/trunk/apps/showcase/src/main/resources/struts-filedownload.xml
deleted file mode 100644
index c64a643..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-filedownload.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-	<package name="filedownload" extends="struts-default" namespace="/filedownload">
-
-        <default-action-ref name="download"/>
-
-        <action name="download" class="org.apache.struts2.showcase.filedownload.FileDownloadAction">
-			<result name="success" type="stream">
-                <param name="contentType">image/jpeg</param>
-                <param name="inputName">imageStream</param>
-                <param name="contentDisposition">filename="logo.png"</param>
-                <param name="bufferSize">4096</param>
-            </result>
-        </action>
-
-    </package>
-</struts>
-
-
diff --git a/trunk/apps/showcase/src/main/resources/struts-fileupload.xml b/trunk/apps/showcase/src/main/resources/struts-fileupload.xml
deleted file mode 100644
index b416fac..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-fileupload.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-	<package name="fileupload" extends="struts-default" namespace="/fileupload">
-        
-        <default-action-ref name="upload"/>
-
-        <action name="upload" class="org.apache.struts2.showcase.fileupload.FileUploadAction" method="input">
-			<result>upload.jsp</result>
-		</action>
-
-        <action name="doUpload" class="org.apache.struts2.showcase.fileupload.FileUploadAction" method="upload">
-			<result>upload-success.jsp</result>
-		</action>
-
-    </package>
-</struts>
-
-
diff --git a/trunk/apps/showcase/src/main/resources/struts-freemarker.xml b/trunk/apps/showcase/src/main/resources/struts-freemarker.xml
deleted file mode 100644
index af352a4..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-freemarker.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-	
-
-<struts>
-	<package name="freemarker" namespace="/freemarker" extends="struts-default">
-		<action name="customFreemarkerManagerDemo">
-			<result type="freemarker">/freemarker/customFreemarkerManagerUsage.ftl</result>
-		</action>
-	</package>
-</struts>	
diff --git a/trunk/apps/showcase/src/main/resources/struts-hangman.xml b/trunk/apps/showcase/src/main/resources/struts-hangman.xml
deleted file mode 100644
index b12ddce..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-hangman.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-	<package name="hangman" extends="struts-default" namespace="/hangman">
-		<action name="hangmanMenu">
-			<result type="freemarker">/hangman/hangmanMenu.ftl</result>
-		</action>
-		<action name="hangmanAjax" class="startHangmanAction">
-			<result type="freemarker">/hangman/hangmanAjax.ftl</result>		
-		</action>
-		<action name="hangmanNonAjax" class="startHangmanAction">
-			<result type="freemarker">/hangman/hangmanNonAjax.ftl</result>
-		</action>
-		<action name="test">
-			<result type="freemarker">/hangman/test.ftl</result>
-		</action>
-		<action name="guessCharacter" class="guessCharacterAction">
-			<result type="freemarker">/hangman/blank.ftl</result>
-		</action>
-		<action name="guessCharacterNonAjax" class="guessCharacterAction">
-			<result type="freemarker">/hangman/hangmanNonAjax.ftl</result>
-		</action>
-	</package>
-	
-	
-	
-	<package name="hangman-ajax" extends="struts-default" namespace="/hangman/ajax">
-		<action name="blank">
-			<result type="freemarker">/hangman/blank.ftl</result>
-		</action>
-		<action name="updateVocabCharacters" class="getUpdatedHangmanAction">
-			<result type="freemarker">/hangman/updateVocabCharacters.ftl</result>
-		</action>
-		<action name="updateCharacterAvailable" class="getUpdatedHangmanAction">
-			<result type="freemarker">/hangman/updateCharacterAvailable.ftl</result>
-		</action>
-		<action name="updateScaffold" class="getUpdatedHangmanAction">
-			<result type="freemarker">/hangman/updateScaffold.ftl</result>
-		</action>
-		<action name="updateGuessLeft" class="getUpdatedHangmanAction">
-			<result type="freemarker">/hangman/updateGuessLeft.ftl</result>
-		</action>
-	</package>
-</struts>	
diff --git a/trunk/apps/showcase/src/main/resources/struts-integration.xml b/trunk/apps/showcase/src/main/resources/struts-integration.xml
deleted file mode 100644
index 66f28d2..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-integration.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-	<package name="integration" extends="struts1-default" namespace="/integration">
-	    
-	    <interceptors>
-	        <interceptor name="gangsterForm" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor">
-	        	<param name="className">org.apache.struts2.showcase.integration.GangsterForm</param>
-	        	<param name="name">gangsterForm</param>
-	        </interceptor>
-	        <interceptor name="gangsterValidation" class="org.apache.struts2.s1.ActionFormValidationInterceptor">
-	        	<param name="pathnames">/org/apache/struts/validator/validator-rules.xml,/WEB-INF/validation.xml</param>
-	        </interceptor>
-	    
-	    	<interceptor-stack name="integration">
-	    		<interceptor-ref name="static-params"/>
-	    		<interceptor-ref name="gangsterForm"/>
-	    		<interceptor-ref name="model-driven"/>
-                <interceptor-ref name="actionForm-reset"/>
-                <interceptor-ref name="basicStack"/>
-                <interceptor-ref name="gangsterValidation"/>
-                <interceptor-ref name="workflow"/>
-	    	</interceptor-stack>
-	    </interceptors>
-	    
-	    <default-interceptor-ref name="integration" />
-	    <default-action-ref name="editGangster" />
-	    
-	    <!-- Diplay entry page that uses Model-Driven technique -->
-		<action name="editGangster" class="org.apache.struts2.s1.Struts1Action">
-	    	<param name="className">org.apache.struts2.showcase.integration.EditGangsterAction</param>
-			<result>modelDriven.jsp</result>
-		</action>
-		
-		<!-- Display the result page whose content is populated using the Model-Driven technique -->
-		<action name="saveGangster" class="org.apache.struts2.s1.Struts1Action">
-	    	<param name="className">org.apache.struts2.showcase.integration.SaveGangsterAction</param>
-	    	<param name="validate">true</param>
-			<result name="input">modelDriven.jsp</result>
-			<result>modelDrivenResult.jsp</result>
-		</action>
-	    
-	</package>
-</struts>	
-	
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/resources/struts-jsf.xml b/trunk/apps/showcase/src/main/resources/struts-jsf.xml
deleted file mode 100644
index 2ef59b5..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-jsf.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-<struts>
-  <package name="jsf" extends="jsf-default" namespace="/jsf">
-
-      <result-types>
-          <result-type name="jsf" class="org.apache.struts2.jsf.FacesResult" />
-      </result-types>
-
-    <interceptors>
-      <interceptor-stack name="jsfFullStack">
-        <interceptor-ref name="params" />
-        <interceptor-ref name="basicStack"/>
-        <interceptor-ref name="jsfStack"/>
-      </interceptor-stack>
-    </interceptors>
-
-    <default-interceptor-ref name="jsfFullStack"/>
-
-  </package>
-  
-  <package name="jsf.employee" extends="jsf" namespace="/jsf/employee">
-  
-    <action name="list" class="org.apache.struts2.showcase.jsf.JsfEmployeeAction" method="list">
-      <result name="success" type="jsf" />
-    </action>
-    <action name="edit" class="org.apache.struts2.showcase.jsf.JsfEmployeeAction">
-      <result name="success" type="jsf" />
-    </action>
-    <action name="delete" class="org.apache.struts2.showcase.action.EmployeeAction" method="delete">
-      <result name="error" type="redirect">list.action</result>
-      <result type="redirect">list.action</result>
-    </action>
-  
-  </package>
-
-</struts>
diff --git a/trunk/apps/showcase/src/main/resources/struts-model-driven.xml b/trunk/apps/showcase/src/main/resources/struts-model-driven.xml
deleted file mode 100644
index bf3d57e..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-model-driven.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-	<package name="modelDriven" extends="struts-default" namespace="/modelDriven">
-	    <!-- Diplay entry page that uses Model-Driven technique -->
-		<action name="modelDriven" class="org.apache.struts2.showcase.modelDriven.ModelDrivenAction" method="input">
-			<result>modelDriven.jsp</result>
-		</action>
-		
-		<!-- Display the result page whose content is populated using the Model-Driven technique -->
-		<action name="modelDrivenResult" class="org.apache.struts2.showcase.modelDriven.ModelDrivenAction">
-			<result>modelDrivenResult.jsp</result>
-		</action>
-	</package>
-</struts>	
-	
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/resources/struts-person.xml b/trunk/apps/showcase/src/main/resources/struts-person.xml
deleted file mode 100644
index 8846225..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-person.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<!-- START SNIPPET: xworkSample -->
-
-<struts>
-    <package name="person" extends="struts-default" namespace="/person">
-        <action name="listPeople" class="org.apache.struts2.showcase.person.ListPeople">
-            <interceptor-ref name="validationWorkflowStack"/>
-            <result type="freemarker">listPeople.ftl</result>
-        </action>
-
-        <action name="newPerson!*" class="org.apache.struts2.showcase.person.CreatePerson" method="{1}">
-            <result type="redirect">listPeople.action</result>
-            <result name="input" type="freemarker">newPerson.ftl</result>
-        </action>
-
-        <action name="editPerson" class="org.apache.struts2.showcase.person.EditPerson">
-            <result>editPeople.jsp</result>
-        </action>
-
-        <action name="doEditPerson" class="org.apache.struts2.showcase.person.EditPerson" method="save">
-            <result name="error">editPeople.jsp</result>
-            <result type="redirect">listPeople.action</result>
-        </action>
-    </package>
-</struts>
-
-<!--  END SNIPPET: xworkSample -->
-
diff --git a/trunk/apps/showcase/src/main/resources/struts-tags-non-ui.xml b/trunk/apps/showcase/src/main/resources/struts-tags-non-ui.xml
deleted file mode 100644
index 0200b7b..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-tags-non-ui.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-	
-<struts>
-	
-	<!-- ================================== -->
-	<!-- === Package for ActionTag Demo === -->
-	<!-- ================================== -->
-	
-	<package name="actionTag" extends="struts-default" namespace="/tags/non-ui/actionTag">
-		<action name="showActionTagDemo" class="org.apache.struts2.showcase.tag.nonui.actiontag.ActionTagDemo" method="show">
-			<result>/tags/non-ui/actionTag/showActionTagDemo.jsp</result>
-		</action>
-		<action name="includePage" class="org.apache.struts2.showcase.tag.nonui.actiontag.ActionTagDemo" method="doInclude">
-			<result>/tags/non-ui/actionTag/includedPage.jsp</result>
-		</action>
-		<action name="includePage2">
-			<result>/tags/non-ui/actionTag/includedPage2.jsp</result>
-		</action>
-		<action name="includePage3">
-			<result>/tags/non-ui/actionTag/includedPage3.jsp</result>
-		</action>
-		<action name="lookAtSource">
-			<result type="plaintext">/tags/non-ui/actionTag/showActionTagDemo.jsp</result>
-		</action>
-	</package>
-	
-	<!-- ==================================== -->
-	<!-- === Package for IteratorGeneratorTag Demo === -->
-	<!-- ==================================== -->
-	
-	<package name="iteratorGeneratorTag" extends="struts-default" namespace="/tags/non-ui/iteratorGeneratorTag">
-		<action name="showGeneratorTagDemo" class="org.apache.struts2.showcase.tag.nonui.iteratortag.IteratorGeneratorTagDemo" method="input">
-			<result>/tags/non-ui/iteratorTag/showIteratorGeneratorTagDemo.jsp</result>
-		</action>
-		<action name="submitGeneratorTagDemo" class="org.apache.struts2.showcase.tag.nonui.iteratortag.IteratorGeneratorTagDemo" method="submit">
-			<result name="input">/tags/non-ui/iteratorTag/showIteratorGeneratorTagDemo.jsp</result>
-			<result>/tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp</result>
-		</action>
-	</package>
-	
-	
-	<!-- ===================================== -->
-	<!-- === Package for AppendIteratorTag Demo ===  -->
-	<!-- ========================================== -->
-	<package name="appendIteratorTag" extends="struts-default" namespace="/tags/non-ui/appendIteratorTag">
-		<action name="showAppendTagDemo" class="org.apache.struts2.showcase.tag.nonui.iteratortag.AppendIteratorTagDemo" method="input">
-			<result>/tags/non-ui/iteratorTag/showAppendIteratorTagDemo.jsp</result>
-		</action>
-		<action name="submitAppendTagDemo" class="org.apache.struts2.showcase.tag.nonui.iteratortag.AppendIteratorTagDemo" method="submit">
-			<result name="input">/tag/non-ui/iteratorTag/showAppendIteratorTagDemo.jsp</result>
-			<result>/tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp</result>
-		</action>
-	</package>
-	
-	
-	<!-- ====================================== -->
-	<!-- === Package for MergeIteratorTag Demo === -->
-	<!-- ========================================= -->
-	<package name="mergeIteratorTag" extends="struts-default" namespace="/tags/non-ui/mergeIteratorTag">
-		<action name="showMergeTagDemo" class="org.apache.struts2.showcase.tag.nonui.iteratortag.MergeIteratorTagDemo" method="input">
-			<result>/tags/non-ui/iteratorTag/showMergeIteratorTagDemo.jsp</result>
-		</action>
-		<action name="submitMergeTagDemo" class="org.apache.struts2.showcase.tag.nonui.iteratortag.MergeIteratorTagDemo" method="submit">
-			<result name="input">/tags/non-ui/iteratorTag/showMergeIteratorTagDemo.jsp</result>
-			<result>/tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp</result>
-		</action>
-	</package>
-	
-	<!-- ============================================= -->
-	<!-- === Package for SubsetIteratorTag Demo === -->
-	<!-- =========================================== -->
-	<package name="subsetIteratorTag" extends="struts-default" namespace="/tags/non-ui/subsetIteratorTag">
-		<action name="showSubsetTagDemo" class="org.apache.struts2.showcase.tag.nonui.iteratortag.SubsetIteratorTagDemo" method="input">
-			<result>/tags/non-ui/iteratorTag/subsetIteratorTagDemo.jsp</result>
-		</action>
-		<action name="submitSubsetTagDemo" class="org.apache.struts2.showcase.tag.nonui.iteratortag.SubsetIteratorTagDemo" method="submit">
-			<result name="input">/tags/non-ui/iteratorTag/subsetIteratorTagDemo.jsp</result>
-			<result>/tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp</result>
-		</action>
-	</package>
-	
-	<!-- ========================================= -->
-	<!-- === Package for Action Prefix Example === -->
-	<!-- ========================================= -->
-	<package name="actionPrefix" extends="struts-default" namespace="/tags/non-ui/actionPrefix">
-		<action name="actionPrefixExampleUsingFreemarker">
-			<result type="freemarker">/tags/non-ui/actionPrefix/actionPrefixExample.ftl</result>
-		</action>	
-		<action name="submit" class="org.apache.struts2.showcase.tag.nonui.actionPrefix.SubmitAction">
-			<result type="freemarker">/tags/non-ui/actionPrefix/normalSubmit.ftl</result>
-		</action>
-		<action name="submit" class="org.apache.struts2.showcase.tag.nonui.actionPrefix.SubmitAction" method="alternateMethod">
-			<result name="methodPrefixResult" type="freemarker">/tags/non-ui/actionPrefix/methodPrefix.ftl</result>
-		</action>
-		<action name="actionPrefix" class="org.apache.struts2.showcase.tag.nonui.actionPrefix.SubmitAction">
-			<result type="freemarker">/tags/non-ui/actionPrefix/actionPrefix.ftl</result>
-		</action>
-		<action name="redirectPrefix">
-			<result type="freemarker">/tags/non-ui/actionPrefix/redirectPrefix.ftl</result>
-		</action>
-		<action name="redirectActionPrefix">
-			<result type="freemarker">/tags/non-ui/actionPrefix/redirectActionPrefix.ftl</result>
-		</action>
-		<action name="viewSource">
-			<result type="plaintext">/tags/non-ui/actionPrefix/actionPrefixExample.ftl</result>
-		</action>
-	</package>
-	
-	<!--  ========================================== -->
-	<!--  === Package for If Tag Test / Examples === -->
-	<!--  ========================================== -->
-	<package name="ifTagPackage" extends="struts-default" namespace="/tags/non-ui/ifTag">
-		<action name="testIfTagJsp">
-			<result>/tags/non-ui/ifTag/testIf.jsp</result>
-		</action>
-		<action name="testIfTagFreemarker">
-			<result type="freemarker">/tags/non-ui/ifTag/testIf.ftl</result>
-		</action>
-	</package>
-</struts>
-
diff --git a/trunk/apps/showcase/src/main/resources/struts-tags-ui.xml b/trunk/apps/showcase/src/main/resources/struts-tags-ui.xml
deleted file mode 100644
index 5274706..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-tags-ui.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-	
-<struts>
-    <package name="ui-tags" extends="struts-default" namespace="/tags/ui">
-        <action name="example" class="org.apache.struts2.showcase.UITagExample">
-            <result>example.jsp</result>
-            <result name="input">example.jsp</result>
-        </action>
-        <action name="exampleSubmit" class="org.apache.struts2.showcase.UITagExample" method="doSubmit">
-        	<result>exampleSubmited.jsp</result>
-        	<result name="input">example.jsp</result>
-        </action>
-        <action name="exampleVelocity" class="org.apache.struts2.showcase.UITagExample">
-            <result type="velocity">example.vm</result>
-            <result name="input" type="velocity">example.vm</result>
-        </action>
-        <action name="exampleSubmitVelocity" class="org.apache.struts2.showcase.UITagExample" method="doSubmit">
-        	<result type="velocity">exampleSubmited.vm</result>
-        	<result name="input" type="velocity">example.vm</result>
-        </action>
-        <action name="lotsOfOptiontransferselect" class="org.apache.struts2.showcase.LotsOfOptiontransferselectAction" method="input">
-        	<result>lotsOfOptiontransferselect.jsp</result>
-        </action>
-        <action name="lotsOfOptiontransferselectSubmit" class="org.apache.struts2.showcase.LotsOfOptiontransferselectAction" method="submit">
-        	<result name="input">lotsOfOptiontransferselect.jsp</result>
-        	<result>lotsOfOptiontransferselectSubmit.jsp</result>
-        </action>
-        
-        <!--  START SNIPPET: treeExampleDynamicXWorkXml -->
-        
-        <action name="showDynamicTreeAction" class="org.apache.struts2.showcase.ShowDynamicTreeAction">
-        	<result>/tags/ui/treeExampleDynamic.jsp</result>
-        </action>
-        
-        <!--  END SNIPPET: treeExampleDynamicXWorkXml -->
-        
-        
-        <action name="showComponentTagExampleCode">
-        	<result type="plaintext">/tags/ui/componentTagExample.jsp</result>
-        </action>
-        
-	</package>
-	
-	<!--  START SNIPPET: treeExampleXWorkXml -->
-	
-	<package name="ui-tags-ajax" namespace="/tags/ui/ajax" extends="struts-default">        
-        <!-- Actions dealing with Tree Example  -->
-        <action name="staticTreeSelectAction">
-        	<result>/tags/ui/staticTreeSelect.jsp</result>
-        </action>
-        <action name="dynamicTreeSelectAction" class="org.apache.struts2.showcase.DynamicTreeSelectAction">
-        	<result>/tags/ui/dynamicTreeSelect.jsp</result>
-        </action>
-    </package>
-    
-    <!--  END SNIPPET: treeExampleXWorkXml -->
-</struts>
diff --git a/trunk/apps/showcase/src/main/resources/struts-tags.xml b/trunk/apps/showcase/src/main/resources/struts-tags.xml
deleted file mode 100644
index 4b59952..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-tags.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-<struts>
-    <include file="struts-tags-ui.xml"/>
-    <include file="struts-tags-non-ui.xml" />
-</struts>
diff --git a/trunk/apps/showcase/src/main/resources/struts-token.xml b/trunk/apps/showcase/src/main/resources/struts-token.xml
deleted file mode 100644
index a06098c..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-token.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-<struts>
-    <package name="token" extends="struts-default" namespace="/token">
-
-        <action name="tokenPrepare!*" class="org.apache.struts2.showcase.token.TokenAction" method="{1}">
-            <interceptor-ref name="defaultStack"/>
-            <result name="input">example1.jsp</result>
-        </action>
-
-        <action name="transfer" class="org.apache.struts2.showcase.token.TokenAction">
-            <interceptor-ref name="defaultStack"/>
-            <interceptor-ref name="token"/>
-            <result name="invalid.token">doublePost.jsp</result>
-            <result name="success">transferDone.jsp</result>
-        </action>
-
-
-
-        <action name="tokenPrepare2!*" class="org.apache.struts2.showcase.token.TokenAction" method="{1}">
-            <interceptor-ref name="defaultStack"/>
-            <result name="input">example2.jsp</result>
-        </action>
-
-        <action name="transfer2" class="org.apache.struts2.showcase.token.TokenAction">
-            <interceptor-ref name="defaultStack"/>
-            <interceptor-ref name="token"/>
-            <result name="invalid.token">doublePost.jsp</result>
-            <result name="success" type="redirect">transferDone.jsp</result>
-        </action>
-
-
-
-        <action name="tokenPrepare3!*" class="org.apache.struts2.showcase.token.TokenAction" method="{1}">
-            <interceptor-ref name="defaultStack"/>
-            <result name="input">example3.jsp</result>
-        </action>
-
-        <action name="transfer3" class="org.apache.struts2.showcase.token.TokenAction">
-            <interceptor-ref name="defaultStack"/>
-            <interceptor-ref name="token-session"/>
-            <result name="invalid.token">doublePost.jsp</result>
-            <result name="success" type="redirect">transferDone.jsp</result>
-        </action>
-
-
-        <action name="tokenPrepare4!*" class="org.apache.struts2.showcase.token.TokenAction" method="{1}">
-            <interceptor-ref name="defaultStack"/>
-            <interceptor-ref name="createSession"/> <!-- we must have a session when using freemarker and the @s.token tag -->
-            <result name="input" type="freemarker">example4.ftl</result>
-        </action>
-
-        <action name="transfer4" class="org.apache.struts2.showcase.token.TokenAction">
-            <interceptor-ref name="defaultStack"/>
-            <interceptor-ref name="token"/>
-            <result name="invalid.token">doublePost.jsp</result>
-            <result name="success">transferDone.jsp</result>
-        </action>
-
-    </package>
-
-</struts>
diff --git a/trunk/apps/showcase/src/main/resources/struts-validation.xml b/trunk/apps/showcase/src/main/resources/struts-validation.xml
deleted file mode 100755
index 3cedcf4..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-validation.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-	
-<struts>
-	<package name="validation" extends="struts-default" namespace="/validation">
-	    <action name="quizBasic" class="org.apache.struts2.showcase.validation.QuizAction">
-            <result name="input">quiz-basic.jsp</result>
-            <result>quiz-success.jsp</result>
-        </action>
-
-        <action name="quizClient" class="org.apache.struts2.showcase.validation.QuizAction">
-            <result name="input">quiz-client.jsp</result>
-            <result>quiz-success.jsp</result>
-        </action>
-
-        <action name="quizClientCss" class="org.apache.struts2.showcase.validation.QuizAction">
-            <result name="input">quiz-client-css.jsp</result>
-            <result>quiz-success.jsp</result>
-        </action>
-
-        <action name="quizAjax" class="org.apache.struts2.showcase.validation.QuizAction">
-            <result name="input">quiz-ajax.jsp</result>
-            <result>quiz-success.jsp</result>
-        </action>
-	</package>
-
-
-	<package name="validationExamples" extends="struts-default" namespace="/validation" >
-
-		<action name="list">
-			<result>index.jsp</result>
-		</action>
-		
-		
-		<!-- ======================== -->
-		<!-- === Field Validators === -->
-		<!-- ======================== -->
-		
-		<action name="showFieldValidatorsExamples" class="org.apache.struts2.showcase.validation.FieldValidatorsExampleAction" method="input">
-			<result name="input" type="dispatcher">/validation/fieldValidatorsExample.jsp</result>
-		</action>
-		
-		<action name="submitFieldValidatorsExamples" class="org.apache.struts2.showcase.validation.FieldValidatorsExampleAction" method="submit">
-			<result name="input" type="dispatcher">/validation/fieldValidatorsExample.jsp</result>
-			<result type="dispatcher">/validation/successFieldValidatorsExample.jsp</result>
-		</action>
-		
-		
-		
-		<!-- ============================ -->
-		<!-- === Non Field Validators === -->
-		<!-- ============================ -->
-		
-		<action name="showNonFieldValidatorsExamples" class="org.apache.struts2.showcase.validation.NonFieldValidatorsExampleAction" method="input">
-			<result name="input">/validation/nonFieldValidatorsExample.jsp</result>		
-		</action>
-		
-		<action name="submitNonFieldValidatorsExamples" class="org.apache.struts2.showcase.validation.NonFieldValidatorsExampleAction" method="submit">
-			<result name="input">/validation/nonFieldValidatorsExample.jsp</result>		
-			<result>/validation/successNonFieldValidatorsExample.jsp</result>
-		</action>
-		
-		
-		
-		<!-- ========================== -->
-		<!-- === Visitor Validators === -->
-		<!-- ========================== -->
-		
-		<action name="showVisitorValidatorsExamples" class="org.apache.struts2.showcase.validation.VisitorValidatorsExampleAction" method="input">
-			<result name="input">/validation/visitorValidatorsExample.jsp</result>
-		</action>
-		
-		<action name="submitVisitorValidatorsExamples" class="org.apache.struts2.showcase.validation.VisitorValidatorsExampleAction" method="submit">
-			<result name="input">/validation/visitorValidatorsExample.jsp</result>
-			<result>/validation/successVisitorValidatorsExample.jsp</result>
-		</action>
-
-
-
-		<!-- ========================== -->
-		<!-- === Visitor Validators === -->
-		<!-- ========================== -->
-
-		<action name="clientSideValidationExample" class="org.apache.struts2.showcase.validation.FieldValidatorsExampleAction" method="input">
-			<result name="input">/validation/clientSideValidationExample.jsp</result>
-		</action>
-
-		<action name="submitClientSideValidationExample" class="org.apache.struts2.showcase.validation.FieldValidatorsExampleAction" method="submit">
-			<result name="input">/validation/clientSideValidationExample.jsp</result>
-			<result>/validation/successClientSideValidationExample.jsp</result>
-		</action>
-
-		<!-- =========================================== -->
-		<!-- === Store Error Messages Across Request === -->
-		<!-- =========================================== -->
-		
-		<action name="submitApplication" class="org.apache.struts2.showcase.validation.SubmitApplication" method="submitApplication">
-			<interceptor-ref name="store">
-				<param name="operationMode">STORE</param>
-			</interceptor-ref>
-			<interceptor-ref name="defaultStack" />
-			<result name="input" type="redirect">/validation/resubmitApplication.action</result>
-			<result type="redirect">/validation/applicationOk.action</result>
-		</action>
-		<action name="resubmitApplication" class="org.apache.struts2.showcase.validation.SubmitApplication">
-			<interceptor-ref name="store">
-				<param name="operationMode">RETRIEVE</param>
-			</interceptor-ref>
-			<result>/validation/storeErrorsAcrossRequestExample.jsp</result>
-		</action>
-		<action name="applicationOk" class="org.apache.struts2.showcase.validation.SubmitApplication" method="applicationOk">
-			<interceptor-ref name="store">
-				<param name="operationMode">RETRIEVE</param>
-			</interceptor-ref>
-			<result>/validation/storeErrorsAcrossRequestOk.jsp</result>
-		</action>
-		<action name="cancelApplication" class="org.apache.struts2.showcase.validation.SubmitApplication" method="cancelApplication">
-			<result>/validation/storeErrorsAcrossRequestCancel.jsp</result>
-		</action>
-		
-    </package>
-</struts>
-	
diff --git a/trunk/apps/showcase/src/main/resources/struts-wait.xml b/trunk/apps/showcase/src/main/resources/struts-wait.xml
deleted file mode 100644
index e398634..0000000
--- a/trunk/apps/showcase/src/main/resources/struts-wait.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-<struts>
-    <package name="wait" extends="struts-default" namespace="/wait">
-
-        <action name="longProcess1" class="org.apache.struts2.showcase.wait.LongProcessAction">
-            <interceptor-ref name="defaultStack"/>
-            <interceptor-ref name="execAndWait"/>
-            <result name="wait">wait.jsp</result>
-            <result name="success">complete.jsp</result>
-        </action>
-
-        <action name="longProcess2" class="org.apache.struts2.showcase.wait.LongProcessAction">
-            <interceptor-ref name="defaultStack"/>
-            <interceptor-ref name="execAndWait">
-                <param name="delay">2000</param>
-            </interceptor-ref>
-            <result name="wait">wait.jsp</result>
-            <result name="success">complete.jsp</result>
-        </action>
-
-        <action name="longProcess3" class="org.apache.struts2.showcase.wait.LongProcessAction">
-            <interceptor-ref name="defaultStack"/>
-            <interceptor-ref name="execAndWait">
-                <param name="delay">3000</param>
-                <param name="delaySleepInterval">1000</param>
-            </interceptor-ref>
-            <result name="wait">wait.jsp</result>
-            <result name="success">complete.jsp</result>
-        </action>
-
-    </package>
-
-</struts>
diff --git a/trunk/apps/showcase/src/main/resources/struts.properties b/trunk/apps/showcase/src/main/resources/struts.properties
deleted file mode 100644
index 6352045..0000000
--- a/trunk/apps/showcase/src/main/resources/struts.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-struts.i18n.reload=true
-struts.devMode = true
-struts.configuration.xml.reload=true
-struts.continuations.package = org.apache.struts2.showcase
-struts.objectFactory = spring
-struts.custom.i18n.resources=globalMessages
-#struts.action.extension=jspa
-struts.url.http.port = 8080
-struts.freemarker.manager.classname=customFreemarkerManager
-struts.serve.static=true
-struts.serve.static.browserCache=false
diff --git a/trunk/apps/showcase/src/main/resources/struts.xml b/trunk/apps/showcase/src/main/resources/struts.xml
deleted file mode 100644
index 2f316fa..0000000
--- a/trunk/apps/showcase/src/main/resources/struts.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<!-- START SNIPPET: xworkSample -->
-<struts>
-
-    <include file="struts-chat.xml" />
-    
-    <include file="struts-hangman.xml" />
-    
-    <include file="struts-continuations.xml"/>
-
-    <include file="struts-tags.xml"/>
-    
-    <include file="struts-validation.xml" />
-    
-    <include file="struts-actionchaining.xml" />
-
-    <include file="struts-ajax.xml" />
-
-    <include file="struts-fileupload.xml" />
-
-    <include file="struts-person.xml" />
-
-    <include file="struts-wait.xml" />
-	
-    <include file="struts-jsf.xml" />
-
-    <include file="struts-token.xml" />
-    
-    <include file="struts-model-driven.xml" />
-    
-    <include file="struts-integration.xml" />
-    
-    <include file="struts-filedownload.xml" />
-    
-    <include file="struts-conversion.xml" />
-    
-    <include file="struts-freemarker.xml" />
-
-    <package name="default" extends="struts-default">
-        <interceptors>
-            <interceptor-stack name="crudStack">
-            	<interceptor-ref name="checkbox" />
-                <interceptor-ref name="params" />
-				<interceptor-ref name="static-params" />
-                <interceptor-ref name="defaultStack" />
-            </interceptor-stack>
-        </interceptors>
-		
-        <action name="showcase">
-            <result>showcase.jsp</result>
-        </action>
-        
-        <action name="viewSource" class="org.apache.struts2.showcase.source.ViewSourceAction">
-            <result>viewSource.jsp</result>
-        </action>
-
-        <action name="date" class="org.apache.struts2.showcase.DateAction">
-            <result name="success">/date.jsp</result>
-        </action>
-
-    </package>
-
-    <package name="skill" extends="default" namespace="/skill">
-        <default-interceptor-ref name="crudStack"/>
-
-        <action name="list" class="org.apache.struts2.showcase.action.SkillAction" method="list">
-            <result>/empmanager/listSkills.jsp</result>
-            <interceptor-ref name="basicStack"/>
-        </action>
-        <action name="edit" class="org.apache.struts2.showcase.action.SkillAction">
-            <result>/empmanager/editSkill.jsp</result>
-            <interceptor-ref name="params" />
-            <interceptor-ref name="basicStack"/>
-        </action>
-        <action name="save" class="org.apache.struts2.showcase.action.SkillAction" method="save">
-            <result name="input">/empmanager/editSkill.jsp</result>
-            <result type="redirect">edit.action?skillName=${currentSkill.name}</result>
-        </action>
-        <action name="delete" class="org.apache.struts2.showcase.action.SkillAction" method="delete">
-            <result name="error">/empmanager/editSkill.jsp</result>
-            <result type="redirect">edit.action?skillName=${currentSkill.name}</result>
-        </action>
-    </package>
-
-    <package name="employee" extends="default" namespace="/employee">
-        <default-interceptor-ref name="crudStack"/>
-
-        <action name="list" class="org.apache.struts2.showcase.action.EmployeeAction" method="list">
-            <result>/empmanager/listEmployees.jsp</result>
-            <interceptor-ref name="basicStack"/>
-        </action>
-        <action name="edit-*" class="org.apache.struts2.showcase.action.EmployeeAction">
-			<param name="empId">{1}</param>
-            <result>/empmanager/editEmployee.jsp</result>
-            <interceptor-ref name="crudStack"><param name="validation.excludeMethods">execute</param></interceptor-ref>
-        </action>
-        <action name="save" class="org.apache.struts2.showcase.action.EmployeeAction" method="save">
-            <result name="input">/empmanager/editEmployee.jsp</result>
-            <result type="redirect">edit-${currentEmployee.empId}.action</result>
-        </action>
-        <action name="delete" class="org.apache.struts2.showcase.action.EmployeeAction" method="delete">
-            <result name="error">/empmanager/editEmployee.jsp</result>
-            <result type="redirect">edit-${currentEmployee.empId}.action</result>
-        </action>
-    </package>
-
-</struts>
-
-<!-- END SNIPPET: xworkSample -->
-
diff --git a/trunk/apps/showcase/src/main/webapp/WEB-INF/applicationContext.xml b/trunk/apps/showcase/src/main/webapp/WEB-INF/applicationContext.xml
deleted file mode 100644
index cec8c68..0000000
--- a/trunk/apps/showcase/src/main/webapp/WEB-INF/applicationContext.xml
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-<beans default-autowire="byName">
-
-    <bean id="storage" class="org.apache.struts2.showcase.application.MemoryStorage" singleton="true"/>
-
-    <bean id="testDataProvider" class="org.apache.struts2.showcase.application.TestDataProvider" singleton="true" lazy-init="false"/>
-
-    <bean id="skillDao" class="org.apache.struts2.showcase.dao.SkillDao"/>
-    <bean id="employeeDao" class="org.apache.struts2.showcase.dao.EmployeeDao"/>
-
-    <bean id="personManager" class="org.apache.struts2.showcase.person.PersonManager" singleton="true"/>
-    
-    <!-- Showcase's CustomFreemarkerManager example -->
-    <bean id="customFreemarkerManager" class="org.apache.struts2.showcase.freemarker.CustomFreemarkerManager">
-        <constructor-arg index="0">
-            <ref bean="customFreemarkerManagerUtil" />
-        </constructor-arg>      
-    </bean>
-    <bean id="customFreemarkerManagerUtil" class="org.apache.struts2.showcase.freemarker.CustomFreemarkerManagerUtil" />
-    
-    
-    
-    <!-- Chat Example -->
-    <bean id="chatService" class="org.apache.struts2.showcase.chat.ChatServiceImpl">
-    </bean>
-    
-    <bean id="chatLoginAction" class="org.apache.struts2.showcase.chat.ChatLoginAction" singleton="false">
-        <constructor-arg index="0">
-            <ref local="chatService" />
-        </constructor-arg>
-    </bean>
-    
-    <bean id="chatLogoutAction" class="org.apache.struts2.showcase.chat.ChatLogoutAction" singleton="false">
-        <constructor-arg index="0">
-            <ref local="chatService" />
-        </constructor-arg>
-    </bean>
-    
-    <bean id="usersAvailableAction" class="org.apache.struts2.showcase.chat.UsersAvailableAction" singleton="false">
-        <constructor-arg index="0">
-            <ref local="chatService" />
-        </constructor-arg>
-    </bean>
-    
-    <bean id="roomsAvailableAction" class="org.apache.struts2.showcase.chat.RoomsAvailableAction" singleton="false">
-        <constructor-arg index="0">
-            <ref local="chatService" />
-        </constructor-arg>
-    </bean>
-    
-    <bean id="crudRoomAction" class="org.apache.struts2.showcase.chat.CrudRoomAction" singleton="false"> 
-        <constructor-arg index="0">
-            <ref local="chatService" />
-        </constructor-arg>
-    </bean>
-    
-    <bean id="enterRoomAction" class="org.apache.struts2.showcase.chat.EnterRoomAction" singleton="false">
-        <constructor-arg index="0">
-            <ref local="chatService" />
-        </constructor-arg>
-    </bean>
-    
-    <bean id="messagesAvailableInRoomAction" class="org.apache.struts2.showcase.chat.MessagesAvailableInRoomAction" singleton="false">
-        <constructor-arg index="0">
-            <ref local="chatService" />
-        </constructor-arg>
-    </bean>
-    
-    <bean id="sendMessageToRoomAction" class="org.apache.struts2.showcase.chat.SendMessageToRoomAction" singleton="false">
-        <constructor-arg index="0">
-            <ref local="chatService" />
-        </constructor-arg>
-    </bean>
-    
-    <bean id="usersAvailableInRoomAction" class="org.apache.struts2.showcase.chat.UsersAvailableInRoomAction" singleton="false">
-        <constructor-arg index="0">
-            <ref local="chatService" />
-        </constructor-arg>
-    </bean>
-    
-    <bean id="exitRoomAction" class="org.apache.struts2.showcase.chat.ExitRoomAction" singleton="false">
-        <constructor-arg index="0">
-            <ref local="chatService" />
-        </constructor-arg>
-    </bean>
-    
-    
-    <!-- Hangman Showcase Example  -->
-    <bean id="hangmanService" class="org.apache.struts2.showcase.hangman.HangmanService">
-        <constructor-arg index="0">
-                <bean class="org.apache.struts2.showcase.hangman.PropertiesVocabSource">
-                        <constructor-arg index="0">
-                                <props>
-                                        <!--
-                                        <prop key="DOG">An animal, men best friend</prop>
-                                        <prop key="CAT">An animal whose child is called kitten</prop>
-                                        <prop key="CAR">A common vehical with 4 wheels</prop>
-                                        <prop key="STRUTS2">The premier action-based framework for Java</prop>
-                                        -->
-                                        <prop key="JAVA">A popular programming language that is used to create the Struts framework</prop>
-                                </props>
-                        </constructor-arg>
-                </bean>
-        </constructor-arg>
-    </bean>
-
-    <bean id="startHangmanAction" class="org.apache.struts2.showcase.hangman.StartHangmanAction" singleton="false">
-                <constructor-arg index="0">
-                        <ref local="hangmanService" />
-                </constructor-arg>
-    </bean>
-
-    <bean id="guessCharacterAction" class="org.apache.struts2.showcase.hangman.GuessCharacterAction" singleton="false" />
-    <bean id="getUpdatedHangmanAction" class="org.apache.struts2.showcase.hangman.GetUpdatedHangmanAction" singleton="false" />
-</beans>
-
diff --git a/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators.xml b/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators.xml
deleted file mode 100644
index 31936b9..0000000
--- a/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<decorators defaultdir="/WEB-INF/decorators">
-    <!-- Any urls that are excluded will never be decorated by Sitemesh -->
-    <excludes>
-        <pattern>/debug.jsp</pattern>
-        <pattern>/styles/*</pattern>
-        <pattern>/scripts/*</pattern>
-        <pattern>/images/*</pattern>
-        <pattern>/dojo/*</pattern>
-        <pattern>/struts/*</pattern>
-        <pattern>/ajax/AjaxResult*</pattern>
-        <pattern>/AjaxTest.action</pattern>
-        <pattern>/ajax/remoteforms/AjaxRemoteForm.action</pattern>
-        <pattern>/tags/ui/ajax/*</pattern>
-        <pattern>/chat/ajax/*</pattern>
-        <pattern>/hangman/ajax/*</pattern>
-        <pattern>/nodecorate/*</pattern>
-    </excludes>
-
-    <decorator name="main" page="main.jsp">
-        <pattern>/*</pattern>
-    </decorator>
-    <!--<decorator name="panel" page="panel.jsp"/>-->
-    <!--<decorator name="dashedBox" page="dashedBox.jsp"/>-->
-    <!--<decorator name="printable" page="printable.jsp"/>-->
-</decorators>
diff --git a/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp b/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp
deleted file mode 100644
index 978b773..0000000
--- a/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<%
-    response.setHeader("Pragma", "no-cache");
-    response.setHeader("Cache-Control", "no-cache");
-    response.setDateHeader("Expires", 0);
-    
-    // Calculate the view sources url
-    String sourceUrl = request.getContextPath()+"/viewSource.action";
-    com.opensymphony.xwork2.ActionInvocation inv = com.opensymphony.xwork2.ActionContext.getContext().getActionInvocation();
-    org.apache.struts2.dispatcher.mapper.ActionMapping mapping = org.apache.struts2.ServletActionContext.getActionMapping();
-    if (inv != null) {
-        sourceUrl += "?config="+inv.getProxy().getConfig().getLocation().getURI()+":"+inv.getProxy().getConfig().getLocation().getLineNumber();
-        sourceUrl += "&className="+inv.getProxy().getConfig().getClassName();
-        
-        if (inv.getResult() != null && inv.getResult() instanceof org.apache.struts2.dispatcher.StrutsResultSupport) {
-	        sourceUrl += "&page="+mapping.getNamespace()+"/"+((org.apache.struts2.dispatcher.StrutsResultSupport)inv.getResult()).getLastFinalLocation();
-        }
-    } else {
-        sourceUrl += "?page="+request.getServletPath();
-    }
-%>
-<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
-<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page" %>
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title><decorator:title default="Struts Showcase"/></title>
-    <link href="<s:url value='/styles/main.css' encode='false' includeParams='none'/>" rel="stylesheet" type="text/css" media="all"/>
-    <link href="<s:url value='/struts/niftycorners/niftyCorners.css' encode='false' includeParams='none'/>" rel="stylesheet" type="text/css"/>
-    <link href="<s:url value='/struts/niftycorners/niftyPrint.css' encode='false' includeParams='none'/>" rel="stylesheet" type="text/css" media="print"/>
-
-    <script language="JavaScript" type="text/javascript" src="<s:url value='/struts/niftycorners/nifty.js' encode='false' includeParams='none'/>"></script>
-
-    <script language="JavaScript" type="text/javascript">
-
-        window.onload=function(){
-            if(!NiftyCheck())
-                return;
-            Rounded("blockquote","tr bl","#ECF1F9","#CDFFAA","smooth border #88D84F");
-            Rounded("div#outer-header", "all", "white", "#818EBD", "smooth border #434F7C");
-            Rounded("div#footer", "all", "white", "#818EBD", "smooth border #434F7C");
-        }
-
-    </script>
-
-    <decorator:head/>
-</head>
-
-<body id="page-home">
-
-
-<div id="page">
-    <div id="outer-header">
-        <div id="header" class="clearfix">
-            <div id="branding">
-                <h1 class="title">Struts Showcase</h1>
-                <s:action id="dateAction" name="date" namespace="/" executeResult="true" />
-            </div><!-- end branding -->
-
-            <div id="search">
-                <img src="<s:url value='/images/struts-power.gif' encode='false' includeParams='none'/>" alt="Powered by Struts"/>
-            </div><!-- end search -->
-
-            <hr/>
-        </div>
-    </div><!-- end header -->
-
-    <div id="content" class="clearfix">
-
-        <decorator:body/>
-
-        <div id="nav">
-            <div class="wrapper">
-                <h2 class="accessibility">Navigation</h2>
-                <ul class="clearfix">
-                    <li><strong><a href="<s:url action="showcase" namespace="/"  includeParams="none" />">Home</a></strong></li>
-                    <li><a href="<s:url action="index" namespace="/config-browser" includeParams="none" />">Config Browser</a></li>
-                    <li><a href="<s:url action="guess" namespace="/continuations" />">Continuations</a></li>
-                    <li><a href="<s:url value="/tags/index.jsp"/>">Tags</a></li>
-                    <li><a href="<s:url action="upload" namespace="/fileupload" includeParams="none"/>">File Upload</a></li>
-                    <li><a href="<s:url value="/empmanager/index.jsp"/>">CRUD</a></li>
-                    <li><a href="<s:url value="/person/index.jsp"/>">Person Manager</a></li>
-                    <li><a href="<s:url value="/validation/index.jsp"/>">Validation</a></li>
-                    <li><a href="<s:url value="/ajax/index.jsp"/>">AJAX</a></li>
-                    <li><a href="<s:url action="actionChain1!input" namespace="/actionchaining"  includeParams="none" />">Action Chaining</a></li>
-                    <li><a href="<s:url value="/wait/index.jsp"/>">Execute & Wait</a></li>
-                    <li><a href="<s:url value="/token/index.jsp"/>">Token</a></li>
-                    <li><a href="<s:url value="/filedownload/index.jsp"/>">File Download</a></li>
-                    <li><a href="<s:url value="/conversion/index.jsp"/>">Conversion</a></li>
-                    <li><a href="<s:url value="/jsf/index.jsp"/>">JSF</a></li>
-                    <li><a href="<s:url value="/freemarker/index.jsp"/>">Freemarker</a>
-                    <li><a href="<s:url value="/chat/index.jsp"/>">Chat (AJAX)</a>
-                    <li><a href="<s:url action="hangmanMenu" namespace="/hangman"/>">Hangman</a></li>
-                    <li class="last"><a href="<s:url value="/help.jsp"/>">Help</a></li>
-                </ul>
-            </div>
-            <hr/>
-
-        </div><!-- end nav -->
-
-    </div><!-- end content -->
-
-	<div>
-    	<p>
-    		<a href="<%=sourceUrl %>">View Sources</a>
-    	</p>
-	</div>
-    <div id="footer" class="clearfix">
-        <p>Copyright &copy; 2003-<s:property value="#dateAction.now.year + 1900" /> The Apache Software Foundation.</p>
-    </div><!-- end footer -->
-    <p/>
-
-</div><!-- end page -->
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/WEB-INF/dwr.xml b/trunk/apps/showcase/src/main/webapp/WEB-INF/dwr.xml
deleted file mode 100644
index 99869bf..0000000
--- a/trunk/apps/showcase/src/main/webapp/WEB-INF/dwr.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- START SNIPPET: dwr -->
-<!DOCTYPE dwr PUBLIC 
-	"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" 
-	"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
-
-<dwr>
-    <allow>
-        <create creator="new" javascript="validator">
-            <param name="class" value="org.apache.struts2.validators.DWRValidator"/>
-        </create>
-        <convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
-    </allow>
-
-    <signatures>
-        <![CDATA[
-        import java.util.Map;
-        import org.apache.struts2.validators.DWRValidator;
-
-        DWRValidator.doPost(String, String, Map<String, String>);
-        ]]>
-    </signatures>
-</dwr>
-<!-- END SNIPPET: dwr -->
diff --git a/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh-decorator.tld b/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh-decorator.tld
deleted file mode 100644
index 18f525c..0000000
--- a/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh-decorator.tld
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
-
-<taglib>
-
-    <tlibversion>1.0</tlibversion>
-    <jspversion>1.1</jspversion>
-    <shortname>SiteMesh Decorator Tags</shortname>
-    <uri>sitemesh-decorator</uri>
-
-    <tag>
-        <name>head</name>
-        <tagclass>com.opensymphony.module.sitemesh.taglib.decorator.HeadTag</tagclass>
-        <bodycontent>JSP</bodycontent>
-    </tag>
-
-    <tag>
-        <name>body</name>
-        <tagclass>com.opensymphony.module.sitemesh.taglib.decorator.BodyTag</tagclass>
-        <bodycontent>JSP</bodycontent>
-    </tag>
-
-    <tag>
-        <name>title</name>
-        <tagclass>com.opensymphony.module.sitemesh.taglib.decorator.TitleTag</tagclass>
-        <bodycontent>JSP</bodycontent>
-        <attribute>
-            <name>default</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-    </tag>
-
-    <tag>
-        <name>getProperty</name>
-        <tagclass>com.opensymphony.module.sitemesh.taglib.decorator.PropertyTag</tagclass>
-        <bodycontent>JSP</bodycontent>
-        <attribute>
-            <name>property</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>default</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>writeEntireProperty</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-    </tag>
-
-    <tag>
-        <name>usePage</name>
-        <tagclass>com.opensymphony.module.sitemesh.taglib.decorator.UsePageTag</tagclass>
-        <teiclass>com.opensymphony.module.sitemesh.taglib.decorator.UsePageTEI</teiclass>
-        <bodycontent>JSP</bodycontent>
-        <attribute>
-            <name>id</name>
-            <required>true</required>
-            <rtexprvalue>false</rtexprvalue>
-        </attribute>
-    </tag>
-
-    <tag>
-        <name>useHtmlPage</name>
-        <tagclass>com.opensymphony.module.sitemesh.taglib.decorator.UsePageTag</tagclass>
-        <teiclass>com.opensymphony.module.sitemesh.taglib.decorator.UseHTMLPageTEI</teiclass>
-        <bodycontent>JSP</bodycontent>
-        <attribute>
-            <name>id</name>
-            <required>true</required>
-            <rtexprvalue>false</rtexprvalue>
-        </attribute>
-    </tag>
-
-</taglib>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh-page.tld b/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh-page.tld
deleted file mode 100644
index 797ec5d..0000000
--- a/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh-page.tld
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
-
-<taglib>
-
-    <tlibversion>1.0</tlibversion>
-    <jspversion>1.1</jspversion>
-    <shortname>SiteMesh Page Tags</shortname>
-    <uri>sitemesh-page</uri>
-
-    <tag>
-        <name>applyDecorator</name>
-        <tagclass>com.opensymphony.module.sitemesh.taglib.page.ApplyDecoratorTag</tagclass>
-        <bodycontent>JSP</bodycontent>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>page</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>contentType</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>encoding</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-    </tag>
-
-    <!-- Deprecated tag: use applyDecorator instead -->
-    <tag>
-        <name>apply-decorator</name>
-        <tagclass>com.opensymphony.module.sitemesh.taglib.page.ApplyDecoratorTag</tagclass>
-        <bodycontent>JSP</bodycontent>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>page</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>contentType</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>encoding</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-    </tag>
-
-    <tag>
-        <name>param</name>
-        <tagclass>com.opensymphony.module.sitemesh.taglib.page.ParamTag</tagclass>
-        <bodycontent>JSP</bodycontent>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-    </tag>
-
-</taglib>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml b/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml
deleted file mode 100644
index cfd1b34..0000000
--- a/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<sitemesh>
-    <property name="decorators-file" value="/WEB-INF/decorators.xml"/>
-    <excludes file="${decorators-file}"/>
-
-    <page-parsers>
-        <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
-    </page-parsers>
-
-    <decorator-mappers>
-
-        <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
-            <param name="property.1" value="meta.decorator"/>
-            <param name="property.2" value="decorator"/>
-        </mapper>
-
-        <mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper">
-        </mapper>
-
-        <mapper class="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper">
-            <param name="match.MSIE" value="ie"/>
-            <param name="match.Mozilla [" value="ns"/>
-            <param name="match.Opera" value="opera"/>
-            <param name="match.Lynx" value="lynx"/>
-        </mapper>
-
-        <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
-            <param name="decorator" value="printable"/>
-            <param name="parameter.name" value="printable"/>
-            <param name="parameter.value" value="true"/>
-        </mapper>
-
-        <mapper class="com.opensymphony.module.sitemesh.mapper.RobotDecoratorMapper">
-            <param name="decorator" value="robot"/>
-        </mapper>
-
-        <mapper class="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper">
-            <param name="decorator.parameter" value="decorator"/>
-            <param name="parameter.name" value="confirm"/>
-            <param name="parameter.value" value="true"/>
-        </mapper>
-
-        <mapper class="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper">
-        </mapper>
-
-        <mapper class="org.apache.struts2.showcase.sitemesh.NoneDecoratorMapper">
-        </mapper>
-
-        <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
-            <param name="config" value="${decorators-file}"/>
-        </mapper>
-
-    </decorator-mappers>
-
-</sitemesh>
diff --git a/trunk/apps/showcase/src/main/webapp/WEB-INF/validation.xml b/trunk/apps/showcase/src/main/webapp/WEB-INF/validation.xml
deleted file mode 100644
index 2849753..0000000
--- a/trunk/apps/showcase/src/main/webapp/WEB-INF/validation.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-
-<!DOCTYPE form-validation PUBLIC
-     "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
-     "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
-
-<form-validation>
-
-<!--
-     This is a minimal Validator form file with a couple of examples.
--->
-
-    <global>
-
-        <!-- An example global constant
-        <constant>
-            <constant-name>postalCode</constant-name>
-            <constant-value>^\d{5}\d*$</constant-value>
-        </constant>
-        end example-->
-
-    </global>
-
-    <formset>
-
-        <!-- An example form -->
-        <form name="gangsterForm">
-            <field
-                property="age"
-                depends="required">
-                    <msg name="required" key="The age is required" resource="false"/>
-            </field>
-        </form>
-
-    </formset>
-
-</form-validation>
diff --git a/trunk/apps/showcase/src/main/webapp/WEB-INF/web.xml b/trunk/apps/showcase/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 6278bb6..0000000
--- a/trunk/apps/showcase/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-	
-
-    <display-name>Struts Showcase Application</display-name>
-
-	
-    <filter>
-        <filter-name>struts-cleanup</filter-name>
-        <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
-    </filter>
-
-    <filter>
-        <filter-name>struts</filter-name>
-        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
-    </filter>
-
-    <filter>
-        <filter-name>sitemesh</filter-name>
-        <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
-    </filter>
-	
-	
-
-    <filter-mapping>
-        <filter-name>struts-cleanup</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-
-    <filter-mapping>
-        <filter-name>sitemesh</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-
-    <filter-mapping>
-        <filter-name>struts</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-
-
-    <listener>
-        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-    </listener>
-	
-    <listener>
-        <listener-class>
-          org.apache.myfaces.webapp.StartupServletContextListener
-        </listener-class>
-    </listener>
-    
-    <!-- Chat Example in Showcase -->
-    <listener>
-    	<listener-class>
-    	  org.apache.struts2.showcase.chat.ChatSessionListener
-    	</listener-class>
-    </listener>
-	
-    <!-- SNIPPET START: dwr -->
-
-    <servlet>
-        <servlet-name>dwr</servlet-name>
-        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
-        <init-param>
-            <param-name>debug</param-name>
-            <param-value>true</param-value>
-        </init-param>
-    </servlet>
-	
-	<!-- JavaServer Faces Servlet Configuration, not used directly -->
-  	<servlet>
-    	<servlet-name>faces</servlet-name>
-	    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    	<load-on-startup>1</load-on-startup>
-  	</servlet>
-
-  	<!-- JavaServer Faces Servlet Mapping, not called directly -->
-    	<servlet-mapping>
-        <servlet-name>faces</servlet-name>
-        <url-pattern>*.action</url-pattern>
-  	</servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>dwr</servlet-name>
-        <url-pattern>/dwr/*</url-pattern>
-    </servlet-mapping>
-
-    <!-- END SNIPPET: dwr -->
-
-    <!-- SNIPPET START: example.velocity.filter.chain
-        <filter>
-            <filter-name>struts-cleanup</filter-name>
-            <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
-        </filter>
-        <filter>
-            <filter-name>sitemesh</filter-name>
-            <filter-class>org.apache.struts2.sitemesh.VelocityPageFilter</filter-class>
-        </filter>
-        <filter>
-            <filter-name>struts</filter-name>
-            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
-        </filter>
-
-        <filter-mapping>
-            <filter-name>struts-cleanup</filter-name>
-            <url-pattern>/*</url-pattern>
-        </filter-mapping>
-        <filter-mapping>
-            <filter-name>sitemesh</filter-name>
-            <url-pattern>/*</url-pattern>
-        </filter-mapping>
-        <filter-mapping>
-            <filter-name>struts</filter-name>
-            <url-pattern>/*</url-pattern>
-        </filter-mapping>
-    END SNIPPET: example.velocity.filter.chain -->
-
-    <!-- SNIPPET START: example.freemarker.filter.chain
-    <filter>
-        <filter-name>struts-cleanup</filter-name>
-        <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
-    </filter>
-    <filter>
-        <filter-name>sitemesh</filter-name>
-        <filter-class>org.apache.struts2.sitemesh.FreeMarkerPageFilter</filter-class>
-    </filter>
-    <filter>
-        <filter-name>struts</filter-name>
-        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>struts-cleanup</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>sitemesh</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>struts</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-    END SNIPPET: example.freemarker.filter.chain -->
-
-    <welcome-file-list>
-        <welcome-file>index.jsp</welcome-file>
-        <welcome-file>default.jsp</welcome-file>
-        <welcome-file>index.html</welcome-file>
-    </welcome-file-list>
-
-</web-app>
diff --git a/trunk/apps/showcase/src/main/webapp/actionchaining/actionChainingResult.jsp b/trunk/apps/showcase/src/main/webapp/actionchaining/actionChainingResult.jsp
deleted file mode 100644
index b165113..0000000
--- a/trunk/apps/showcase/src/main/webapp/actionchaining/actionChainingResult.jsp
+++ /dev/null
@@ -1,14 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Showcase - Action Chaining Result</title>
-</head>
-<body>
-    <h1>Action Chaining Result:</h1>
-    <s:label label="Action Chain 1 Property 1" name="actionChain1Property1" /><br/>
-    <s:label label="Action Chain 2 Property 1" name="actionChain2Property1" /><br/>
-    <s:label label="Action Chain 3 Property 1" name="actionChain3Property1" /><br/>
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/AjaxResult.jsp b/trunk/apps/showcase/src/main/webapp/ajax/AjaxResult.jsp
deleted file mode 100644
index b93c00f..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/AjaxResult.jsp
+++ /dev/null
@@ -1,10 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<%
-    request.setAttribute("decorator", "none");
-    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
-    response.setHeader("Pragma","no-cache"); //HTTP 1.0
-    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
-%>
-
-Result: <s:property value="count"/> @ <s:property value="serverTime"/>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/AjaxResult2.js b/trunk/apps/showcase/src/main/webapp/ajax/AjaxResult2.js
deleted file mode 100644
index 537c390..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/AjaxResult2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-alert('This JavaScript currently being evaluated is the result...');
-alert('... of an action executed on the server!');
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/AjaxResult3.jsp b/trunk/apps/showcase/src/main/webapp/ajax/AjaxResult3.jsp
deleted file mode 100644
index 45cb2b0..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/AjaxResult3.jsp
+++ /dev/null
@@ -1,12 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<%
-    request.setAttribute("decorator", "none");
-    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
-    response.setHeader("Pragma","no-cache"); //HTTP 1.0
-    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
-%>
-
-Result: <s:property value="count"/> @ <s:property value="serverTime"/>
-
-The value you entered was: <s:property value="data"/><br/>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/commonInclude.jsp b/trunk/apps/showcase/src/main/webapp/ajax/commonInclude.jsp
deleted file mode 100644
index f004910..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/commonInclude.jsp
+++ /dev/null
@@ -1,4 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<!--// START SNIPPET: common-include-->
-<s:head theme="ajax"/>
-<!--// END SNIPPET: common-include-->
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/footer.jsp b/trunk/apps/showcase/src/main/webapp/ajax/footer.jsp
deleted file mode 100644
index 4823487..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/footer.jsp
+++ /dev/null
@@ -1,9 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<hr/>
-
-<s:url id="backToAjaxExamples" value=".." />
-<s:url id="backToShowCase" action="showcase" namespace="/" />
-
-<s:a href="%{backToAjaxExamples}">Back To AJAX Examples</s:a>&nbsp;
-<s:a href="%{backToShowCase}">Back To Showcase</s:a>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/index.jsp b/trunk/apps/showcase/src/main/webapp/ajax/index.jsp
deleted file mode 100644
index 75a5fce..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/index.jsp
+++ /dev/null
@@ -1,20 +0,0 @@
-<html>
-<head><title>AJAX Examples</title></head>
-
-<body>
-
-<h1>AJAX Example</h1>
-
-Note: these examples have only been tested under FireFox 1.5 and IE 6.
-
-<ul>
-    <li><a href="remotediv">Remote div tag</a></li>
-    <li><a href="remotelink">Remote link tag</a></li>
-    <li><a href="tabbedpanel">Tabbed panel</a></li>
-    <li><a href="remoteforms">Remote forms</a></li>
-    <li><a href="widgets">Widgets </a> (experimental - may not work in all browsers
-        see the <a href="http://www.dojotoolkit.org">dojo website</a> for more information</li>
-    <li><a href=".."><i>Back to Showcase</i></a></li>
-</ul>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example1.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example1.jsp
deleted file mode 100644
index fe9b1d1..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example1.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Examples</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-</head>
-
-<body>
-
-<s:div
-        id="once"
-        theme="ajax"
-        cssStyle="border: 1px solid yellow;"
-        href="/AjaxTest.action"
-        delay="5000"
-        loadingText="loading...">
-    Initial Content</s:div>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example2.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example2.jsp
deleted file mode 100644
index 9fbb894..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example2.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Examples</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-</head>
-
-<body>
-    <s:div
-            id="twoseconds"
-            cssStyle="border: 1px solid yellow;"
-            href="/AjaxTest.action"
-            theme="ajax"
-            updateFreq="2000"
-            errorText="There was an error"
-            loadingText="loading...">Initial Content
-    </s:div>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example3.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example3.jsp
deleted file mode 100644
index d90cb51..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example3.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Examples</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-</head>
-
-<body>
-
-<s:div
-        id="twoseconds"
-        cssStyle="border: 1px solid yellow;"
-        href="/AjaxTest.action"
-        theme="ajax"
-        delay="2000"
-        updateFreq="%{#parameters.period}"
-        errorText="There was an error">Initial Content</s:div>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example4.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example4.jsp
deleted file mode 100644
index f8db61e..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example4.jsp
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Examples</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-</head>
-
-<body>
-
-<s:div
-        id="fiveseconds"
-        cssStyle="border: 1px solid yellow;"
-        href="/AjaxTest.action"
-        theme="ajax"
-        delay="1000"
-        updateFreq="5000"
-        errorText="There was an error"
-        loadingText="reloading">loading now</s:div>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example5.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example5.jsp
deleted file mode 100644
index 6fa0363..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example5.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Examples</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-</head>
-
-<body>
-
-<s:div
-        id="error"
-        cssStyle="border: 1px solid yellow;"
-        href="/AjaxNoUrl.jsp"
-        theme="ajax"
-        delay="1000"
-        errorText="Could not contact server"
-        loadingText="reloading">loading now</s:div>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example6.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example6.jsp
deleted file mode 100644
index 3088742..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example6.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Examples</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-</head>
-
-<body>
-
-<s:div
-        id="error"
-        cssStyle="border: 1px solid yellow;"
-        href="/AjaxNoUrl.jsp"
-        theme="ajax"
-        delay="1000"
-        showErrorTransportText="true"
-        loadingText="reloading">loading now</s:div>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example7.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example7.jsp
deleted file mode 100644
index bff2bdf..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example7.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Examples</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-</head>
-
-<body>
-
-<s:div
-        id="error"
-        cssStyle="border: 1px solid yellow;"
-        href="/Test3.action"
-        theme="ajax"
-        delay="1000"
-        showErrorTransportText="true"
-        loadingText="reloading">loading now</s:div>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example8.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example8.jsp
deleted file mode 100644
index 600027f..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/example8.jsp
+++ /dev/null
@@ -1,27 +0,0 @@
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Examples</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-</head>
-
-<body>
-
-<s:div
-        id="once"
-        theme="ajax"
-        cssStyle="border: 1px solid yellow;"
-        href="/AjaxTest.action"
-        updateFreq="0"
-        delay="0">
-    Initial Content ... should not change</s:div>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
-
-
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/index.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remotediv/index.jsp
deleted file mode 100644
index 7bf1ec3..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remotediv/index.jsp
+++ /dev/null
@@ -1,56 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>AJAX-based remote DIV tag</title>
-    <%@ include file="/ajax/commonInclude.jsp" %>
-</head>
-
-<body>
-
-<h2>Examples</h2>
-
-<p>
-    <ol>
-        <li>
-            <a href="example1.jsp">A simple DIV that refreshes only once</a>
-        </li>
-
-        <li>
-            <a href="example2.jsp?url=/AjaxTest.action">A simple DIV that updates every 2 seconds</a>
-        </li>
-
-        <li>
-            <a href="example3.jsp?period=3000">A simple DIV that obtains the update freq (3 secs) from the value
-                stack/action</a>
-        </li>
-
-        <li>
-            <a href="example4.jsp">A simple DIV that updates every 5 seconds with loading text and reloading text</a>
-        </li>
-
-        <li>
-            <a href="example5.jsp">A simple DIV's that cannot contact the server</a>
-        </li>
-
-        <li>
-            <a href="example6.jsp">A simple DIV's that cannot contact the server and displays the transport error
-                message</a>
-        </li>
-
-        <li>
-            <a href="example7.jsp">A div that calls the server, and JS in the resulting page is executed</a>
-        </li>
-        
-        <li>
-            <a href="example8.jsp">A div that will not update itself (updateFreq=0 and delay=0)</a>
-        </li>
-
-    </ol>
-
-
-</p>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/index.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/index.jsp
deleted file mode 100644
index 9b96d0f..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/index.jsp
+++ /dev/null
@@ -1,111 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Examples</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-
-    <script language="JavaScript" type="text/javascript">
-        function doSomething() {
-            alert('you can manipulate the form before it gets submitted');
-            return true;
-        }
-    </script>
-
-</head>
-
-<body>
-
-
-Remote form replacing another div:<br/>
-
-<div id='two' style="border: 1px solid yellow;"><b>initial content</b></div>
-<s:form
-        id='theForm2'
-        cssStyle="border: 1px solid green;"
-        action='AjaxRemoteForm'
-        method='post'
-        theme="ajax">
-
-    <input type='text' name='data' value='Struts User'>
-
-    <s:submit value="GO2" theme="ajax" resultDivId="two"/>
-
-</s:form>
-
-
-Remote form replacing the forms content:<br/>
-<s:form
-        id='theForm3'
-        cssStyle="border: 1px solid green;"
-        action='AjaxRemoteForm'
-        method='post'
-        theme="ajax">
-
-    <input type='text' name='data' value='Struts User'>
-
-    <s:submit value="GO3" theme="ajax" resultDivId="theForm3"/>
-
-</s:form>
-
-Remote form evaluating suplied JS on completion:<br/>
-<s:form
-        id='theForm4'
-        cssStyle="border: 1px solid green;"
-        action='AjaxRemoteForm'
-        method='post'
-        theme="ajax">
-
-    <input type='text' name='data' value='Struts User'>
-
-    <s:submit value="GO4" theme="ajax" onLoadJS="alert('form submitted');"/>
-
-</s:form>
-
-Remote form replacing the forms content after confirming results:<br/>
-<s:form
-        id='theForm5'
-        cssStyle="border: 1px solid green;"
-        action='AjaxRemoteForm'
-        method='post'
-        theme="ajax">
-
-    <input type='text' name='data' value='Struts User'>
-
-    <s:submit value="GO3" theme="ajax" resultDivId="theForm5" preInvokeJS="confirm('sure?');"/>
-
-</s:form>
-
-Remote form replacing the forms content after running a function:<br/>
-<s:form
-        id='theForm6'
-        cssStyle="border: 1px solid green;"
-        action='AjaxRemoteForm'
-        method='post'
-        theme="ajax">
-
-    <input type='text' name='data' value='Struts User'>
-
-    <s:submit value="GO3" theme="ajax" resultDivId="theForm6" preInvokeJS="doSomething();"/>
-
-</s:form>
-
-A form with no remote submit (so should not be ajaxified):<br/>
-<s:form
-        id='theForm7'
-        cssStyle="border: 1px solid green;"
-        action='AjaxRemoteForm'
-        method='post'
-        theme="ajax">
-
-    <input type='text' name='data' value='Struts User'>
-
-    <s:submit value="Go AWAY" resultDivId="theForm7" />
-
-</s:form>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/test1.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/test1.jsp
deleted file mode 100644
index e3c06ce..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/test1.jsp
+++ /dev/null
@@ -1,18 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<s:head theme="ajax"/>
-</head>
-
-<body>
-<s:form name="test1" id="test1" action="/ajax/Test1.action" theme="ajax">
-    Test 1 Form
-<s:submit theme="ajax" resultDivId="result2"/>
-</s:form>
-
-<s:div id="result2" theme="ajax" >test2 - before</s:div>
-
-<s:div id="result3" theme="ajax">test3 - before</s:div>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/test2.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/test2.jsp
deleted file mode 100644
index 9eecf50..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/test2.jsp
+++ /dev/null
@@ -1,6 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<s:form name="test2" id="test2" action="/ajax/Test2.action" theme="ajax">
-    Test 2 form
-<s:submit theme="ajax" resultDivId="result3"/>
-</s:form>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/test3.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/test3.jsp
deleted file mode 100644
index 9862ad2..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remoteforms/test3.jsp
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-</head>
-
-<body>
-Test 3 Page
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/remotelink/index.jsp b/trunk/apps/showcase/src/main/webapp/ajax/remotelink/index.jsp
deleted file mode 100644
index 2e06e86..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/remotelink/index.jsp
+++ /dev/null
@@ -1,112 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Examples</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-</head>
-
-<body>
-
-One Component:
-<s:div
-        id="one"
-        cssStyle="border: 1px solid yellow;"
-        href="/AjaxTest.action"
-        theme="ajax"
-        listenTopics="mylink1_click"
-        delay="1000">Initial Content</s:div>
-
-<br/><br/>
-
-Two Component:
-<s:div
-        id="two"
-        cssStyle="border: 1px solid yellow;"
-        href="/AjaxTest.action"
-        theme="ajax"
-        listenTopics="mylink1_click,mylink2_click"
-        delay="1000">Initial Content</s:div>
-<br/><br/>
-
-Three Component:
-<s:div
-        id="three"
-        cssStyle="border: 1px solid yellow;"
-        href="/AjaxTest.action"
-        theme="ajax"
-        listenTopics="mylink2_click"
-        delay="1000">Initial Content</s:div>
-<br/><br/>
-
-Fourth Component:
-<s:div
-       id="four"
-       theme="ajax"
-       cssStyle="border: 1px solid yellow;"
-       href="/AjaxTest.action"
-       listenTopics="myLink3_click"
-       delay="0"
-       updateFreq="0">Initial Content</s:div>
-<br/><br/>
-
-
-<s:url id="remoteLink" value   ="/AjaxRemoteLink.action" />
-<s:url id="testLink" value   ="/AjaxTest.action" />
-
-Remote link 1 updating "One Component" and "Two Component"<br/>
-
-<s:a
-        id="link1"
-        theme="ajax"
-        href="%{remoteLink}"
-        notifyTopics="mylink1_click"
-        showErrorTransportText="true"
-        errorText="An Error ocurred">Update</s:a>
-<br/><br/>
-
-Remote link 2 updating "Two Component" and "Three Component"<br/>
-<s:a
-        id="link2"
-        theme="ajax"
-        href="%{remoteLink}"
-        notifyTopics="mylink2_click"
-        showErrorTransportText="true"
-        errorText="An Error ocurred">Update</s:a>
-<br/><br/>
-
-Remote DIV that is not connected to any remote links:
-<s:div
-        id="five"
-        cssStyle="border: 1px solid yellow;"
-        href="/AjaxTest.action"
-        theme="ajax"
-        delay="1000">Initial Content</s:div>
-<br/><br/>
-
-A Remote link that doesn't trigger any remote DIV updates<br/>
-
-<s:a
-        id="link3"
-        theme="ajax"
-        href="%{remoteLink}"
-        showErrorTransportText="true"
-        errorText="An Error ocurred">Update
-</s:a>
-<br/><br/>
-
-A Remote link that will update "Fourth Component"
-<s:a 
-        id="link4"
-        theme="ajax"
-        href="%{remoteLink}"
-        notifyTopics="myLink3_click"
-        showErrorTransportText="true"
-        errorText="An Error Ocurred">Update</s:a>
-<br/><br/>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example1.jsp b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example1.jsp
deleted file mode 100644
index 5769826..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example1.jsp
+++ /dev/null
@@ -1,113 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax examples - tabbled panel</title>
-
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/tabs.css"/>">
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/niftycorners/niftyCorners.css"/>">
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/niftycorners/niftyPrint.css"/>" media="print">
-    <script type="text/javascript" src="<s:url value="/struts/niftycorners/nifty.js"/>"></script>
-    <script type="text/javascript">
-        dojo.event.connect(window, "onload", function() {
-            if (!NiftyCheck())
-                return;
-            Rounded("li.tab_selected", "top", "white", "transparent", "border #ffffffS");
-            Rounded("li.tab_unselected", "top", "white", "transparent", "border #ffffffS");
-            //                Rounded("div#tab_header_main li","top","white","transparent","border #ffffffS");
-            // "white" needs to be replaced with the background color
-        });
-    </script>
-</head>
-
-<body>
-
-    <table cellpadding="0" cellspacing="10" border="0" width="600">
-        <tr>
-            <td align="top">
-                <s:tabbedPanel id="test" >
-                    <s:panel id="one" tabName="one">
-                        This is the first pane<br/>
-                        <s:form>
-                            <s:textfield name="tt" label="Test Text"/>  <br/>
-                            <s:textfield name="tt2" label="Test Text2"/>
-                        </s:form>
-                    </s:panel>
-                    <s:panel id="two" tabName="two">
-                        This is the second panel
-                    </s:panel>
-                    <s:panel id="three" tabName="three">
-                        This is the three
-                    </s:panel>
-                </s:tabbedPanel>
-            </td>
-            <td align="top">
-                <s:tabbedPanel id="test2" >
-                    <s:panel id="left" tabName="left">
-                        This is the left pane<br/>
-                        <s:form>
-                            <s:textfield name="tt" label="Test Text"/>  <br/>
-                            <s:textfield name="tt2" label="Test Text2"/>
-                        </s:form>
-                    </s:panel>
-                    <s:panel remote="true" href="/AjaxTest.action" id="ryh1" theme="ajax"
-                                    tabName="remote one"></s:panel>
-                    <s:panel id="middle" tabName="middle">
-                        middle tab<br/>
-                        <s:form>
-                            <s:textfield name="tt" label="Test Text44"/>  <br/>
-                            <s:textfield name="tt2" label="Test Text442"/>
-                        </s:form>
-                    </s:panel>
-                    <s:panel remote="true" href="/AjaxTest.action" id="ryh21" theme="ajax" tabName="remote right"/>
-                </s:tabbedPanel>
-            </td>
-        </tr>
-        <tr>
-            <td align="top">
-                <s:tabbedPanel id="testremote">
-                    <s:panel remote="true" href="/AjaxTest.action" id="r1" theme="ajax" tabName="remote one">
-                        <s:action name="AjaxTest" executeResult="true" />
-                    </s:panel>
-                    <s:panel remote="true" href="/AjaxTest.action" id="r2" theme="ajax" tabName="remote two"></s:panel>
-                    <s:panel remote="true" href="/AjaxTest.action" id="r3" theme="ajax" tabName="remote three"></s:panel>
-                </s:tabbedPanel>
-            </td>
-            <td align="top">
-                <s:tabbedPanel id="test3" >
-                    <s:panel id="left1" tabName="out one">
-                        Outer one<br/>
-                        <s:tabbedPanel id="test11">
-                            <s:panel id="i11" tabName="inner 1 one">Inner 1</s:panel>
-                            <s:panel id="112" tabName="inner 1 two">Inner 2</s:panel>
-                            <s:panel id="i13" tabName="inner 1 three">Inner 3</s:panel>
-                        </s:tabbedPanel>
-                    </s:panel>
-                    <s:panel id="middle1" tabName="out two">
-                        Outer two<br/>
-                        <s:tabbedPanel id="test12" >
-                            <s:panel id="i21" tabName="inner 2 one">Inner 21</s:panel>
-                            <s:panel id="122" tabName="inner 2 two">Inner 22</s:panel>
-                            <s:panel id="i23" tabName="inner 2 three">Inner 23</s:panel>
-                        </s:tabbedPanel>
-                    </s:panel>
-                    <s:panel id="right1" tabName="out three">
-                        Outer three<br/>
-                        <s:tabbedPanel id="test13">
-                            <s:panel id="i31" tabName="inner 3 one">Inner 31</s:panel>
-                            <s:panel id="132" tabName="inner 3 two">Inner 32</s:panel>
-                            <s:panel id="i33" tabName="inner 3 three">Inner 33</s:panel>
-                        </s:tabbedPanel>
-                    </s:panel>
-                </s:tabbedPanel>
-            </td>
-        </tr>
-    </table>
-
-<s:include value="../footer.jsp"/>
-
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example2.jsp b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example2.jsp
deleted file mode 100644
index ec2d6f6..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example2.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax examples - tabbled panel</title>
-
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/tabs.css"/>">
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/niftycorners/niftyCorners.css"/>">
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/niftycorners/niftyPrint.css"/>" media="print">
-    <script type="text/javascript" src="<s:url value="/struts/niftycorners/nifty.js"/>"></script>
-    <script type="text/javascript">
-        window.onload = function() {
-            if (!NiftyCheck())
-                return;
-            Rounded("li.tab_selected", "top", "white", "transparent", "border #ffffffS");
-            Rounded("li.tab_unselected", "top", "white", "transparent", "border #ffffffS");
-            //                Rounded("div#tab_header_main li","top","white","transparent","border #ffffffS");
-            // "white" needs to be replaced with the background color
-        }
-    </script>
-</head>
-
-<body>
-
-    <table cellpadding="0" cellspacing="10" border="0" width="600">
-        <tr>
-            <td align="top">
-                <s:tabbedPanel id="test" theme="ajax">
-                    <s:panel id="one" tabName="one" theme="ajax" >
-                        This is the first pane<br/>
-                        <s:form>
-                            <s:textfield name="tt" label="Test Text"/>  <br/>
-                            <s:textfield name="tt2" label="Test Text2"/>
-                        </s:form>
-                    </s:panel>
-                    <s:panel id="two" tabName="two" theme="ajax">
-                        This is the second panel
-                    </s:panel>
-                    <s:panel id="three" tabName="three" theme="ajax">
-                        This is the three
-                    </s:panel>
-                </s:tabbedPanel>
-            </td>
-        </tr>
-    </table>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example3.jsp b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example3.jsp
deleted file mode 100644
index 55dedaa..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example3.jsp
+++ /dev/null
@@ -1,57 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax examples - tabbled panel</title>
-
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/tabs.css"/>">
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/niftycorners/niftyCorners.css"/>">
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/niftycorners/niftyPrint.css"/>" media="print">
-    <script type="text/javascript" src="<s:url value="/struts/niftycorners/nifty.js"/>"></script>
-    <script type="text/javascript">
-        dojo.event.connect(window, "onload", function() {
-            if (!NiftyCheck())
-                return;
-            Rounded("li.tab_selected", "top", "white", "transparent", "border #ffffffS");
-            Rounded("li.tab_unselected", "top", "white", "transparent", "border #ffffffS");
-            //                Rounded("div#tab_header_main li","top","white","transparent","border #ffffffS");
-            // "white" needs to be replaced with the background color
-        });
-    </script>
-</head>
-
-<body>
-
-    <table cellpadding="0" cellspacing="10" border="0" width="600">
-        <tr>
-            <td align="top">
-                <!--// START SNIPPET: tabbedpanel-tag-->
-                <s:tabbedPanel id="test2" theme="simple" >
-                      <s:panel id="left" tabName="left">
-                          This is the left pane<br/>
-                          <s:form >
-                              <s:textfield name="tt" label="Test Text" />  <br/>
-                              <s:textfield name="tt2" label="Test Text2" />
-                          </s:form>
-                      </s:panel>
-                      <s:panel remote="true" href="/AjaxTest.action" id="ryh1" theme="ajax" tabName="remote one" />
-                      <s:panel id="middle" tabName="middle">
-                          middle tab<br/>
-                          <s:form >
-                              <s:textfield name="tt" label="Test Text44" />  <br/>
-                              <s:textfield name="tt2" label="Test Text442" />
-                          </s:form>
-                      </s:panel>
-                      <s:panel remote="true" href="/AjaxTest.action"  id="ryh21" theme="ajax" tabName="remote right" />
-                  </s:tabbedPanel>
-                <!--// END SNIPPET: tabbedpanel-tag-->
-             </td>
-        </tr>
-    </table>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example4.ftl b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example4.ftl
deleted file mode 100644
index c533d15..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example4.ftl
+++ /dev/null
@@ -1,18 +0,0 @@
-<html>
-<head>
-	<title>Example 4</title>
-	<@s.head theme="ajax" debug="false" />
-	<link rel="stylesheet" type="text/css" href="<@s.url value="/struts/tabs.css"/>" />
-</head>
-<body>
-	<@s.url id="panel1url" action="panel1" namespace="/nodecorate" includeContext="false" />
-	<@s.url id="panel2url" action="panel2" namespace="/nodecorate" includeContext="false"/>
-	<@s.url id="panel3url" action="panel3" namespace="/nodecorate" includeContext="false"/>
-	<@s.tabbedPanel id="tabbedpanel" >
-		<@s.panel id="panel1" tabName="Panel1" remote="true" href="%{#panel1url}" theme="ajax" />
-		<@s.panel id="panel2" tabName="Panel2" remote="true" href="%{#panel2url}" theme="ajax"  />
-		<@s.panel id="panel3" tabName="Panel3" remote="true" href="%{#panel3url}" theme="ajax" />
-	</@s.tabbedPanel>
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example5.jsp b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example5.jsp
deleted file mode 100644
index 770b353..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example5.jsp
+++ /dev/null
@@ -1,27 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<%@taglib prefix="s" uri="/struts-tags" %>    
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Insert title here</title>
-
-<link rel="stylesheet" type="text/css" href="<s:url value='/struts/tabs.css' />" />
-<s:head theme="ajax" />
-</head>
-<body>
-<s:url id="url" action="example5" namespace="/nodecorate" includeContext="false" />
-<s:tabbedPanel id="tp" theme="ajax">
-	<s:panel id="t1" tabName="Tab 1" href="%{#url}">
-		<s:form action="example5" namespace="" theme="ajax" validate="true" >
-			<s:textfield label="Name" name="name" theme="ajax" />
-			<s:textfield label="Age" name="age" theme="ajax" />
-			<s:submit />
-		</s:form>
-	</s:panel>
-</s:tabbedPanel>
-
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example5Ok.jsp b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example5Ok.jsp
deleted file mode 100644
index 5c3b801..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/example5Ok.jsp
+++ /dev/null
@@ -1,9 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<%@taglib prefix="s" uri="/struts-tags" %>
-    
-<h1>OK</h1>    
-<s:property value="name" /><br/>
-<s:property value="age" /><br/>
-    
-    
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/index.jsp b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/index.jsp
deleted file mode 100644
index 7c501df..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/index.jsp
+++ /dev/null
@@ -1,33 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Tabbed Panes</title>
-    <%@ include file="/ajax/commonInclude.jsp" %>
-</head>
-
-<body>
-
-<h2>Examples</h2>
-
-<p>
-    <ol>
-        <li><a href="example2.jsp">A local tabbed panel</a></li>
-        <li><a href="example3.jsp">A remote and local tabbed panel</a></li>
-        <li><a href="example1.jsp">Various remote and local tabbed panels (with enclosed tabbed pannels)</a></li>
-        <li>
-            <s:url id="url" action="example4" />
-            <s:a href="%{#url}">Only remove tabbed panel</s:a>
-        </li>
-        <li>
-        	<s:url id="url" value="/ajax/tabbedpanel/example5.jsp" />
-        	<s:a href="%{#url}">Remote form validation inside tabbed panel</s:a>
-        </li>
-    </ol>
-
-
-</p>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel1.ftl b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel1.ftl
deleted file mode 100644
index 601c060..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel1.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-
-Hello, <br/>
-Today is ${todayDate}, the time now is ${todayTime}
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel2.ftl b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel2.ftl
deleted file mode 100644
index b027ee0..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel2.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-
-<div id="result">
-</div>
-<@s.form action="panel2Submit" namespace="/nodecorate" theme="ajax">
-	<@s.textfield label="Name" name="name" theme="ajax" />
-	<@s.submit theme="ajax" resultDivId="result" />
-</@s.form>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel2Submit.ftl b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel2Submit.ftl
deleted file mode 100644
index 34e4e0d..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel2Submit.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Hello, ${name}
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel3.ftl b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel3.ftl
deleted file mode 100644
index 1d0a374..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel3.ftl
+++ /dev/null
@@ -1,9 +0,0 @@
-
-<div id="result">
-</div>
-
-<@s.form action="panel3Submit" namespace="/nodecorate" theme="ajax">
-	<@s.select label="Gender" name="gender" list=r"%{#{'Male':'Male','Female':'Female'}}" theme="ajax" />
-	<@s.submit theme="ajax" resultDivId="result" />
-</@s.form>
-
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel3Submit.ftl b/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel3Submit.ftl
deleted file mode 100644
index ee436e1..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tabbedpanel/nodecorate/panel3Submit.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-
-So, you are a ${gender}
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/testjs.jsp b/trunk/apps/showcase/src/main/webapp/ajax/testjs.jsp
deleted file mode 100644
index 5223ef7..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/testjs.jsp
+++ /dev/null
@@ -1,14 +0,0 @@
-<%
-    request.setAttribute("decorator", "none");
-    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
-    response.setHeader("Pragma","no-cache"); //HTTP 1.0
-    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
-%>
-
-<script language="JavaScript" type="text/javascript">
-    alert('This JavaScript currently being evaluated is in the result...');
-</script>
-Show me some text also
-<script language="JavaScript" type="text/javascript">
-    alert('And some more text for fun!');
-</script>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tree/getCategory.jsp b/trunk/apps/showcase/src/main/webapp/ajax/tree/getCategory.jsp
deleted file mode 100644
index 1cdf280..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tree/getCategory.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@include file="partialChunkHeader.jsp"%>
-<ul>
-<s:iterator value="category.children">
-    <li>
-        <s:if test="children.size() > 0">
-            <s:a theme="ajax" href="toggle.action?catId=%{id}">+</s:a>
-        </s:if>
-        <s:property value="name"/>
-    </li>
-    <s:if test="toggle">
-        <s:set name="display" value="'none'"/>
-    </s:if>
-    <s:else>
-        <s:set name="display" value="''"/>
-    </s:else>
-
-    <s:div theme="ajax"
-            id="children_%{id}"
-            cssStyle="display: %{display}"
-            href="getCategory.action?catId=%{id}"
-            listenTopics="children_%{id}"/>
-</s:iterator>
-</ul>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tree/partialChunkHeader.jsp b/trunk/apps/showcase/src/main/webapp/ajax/tree/partialChunkHeader.jsp
deleted file mode 100644
index 01113d6..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tree/partialChunkHeader.jsp
+++ /dev/null
@@ -1,6 +0,0 @@
-<%
-    request.setAttribute("decorator", "none");
-    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
-    response.setHeader("Pragma","no-cache"); //HTTP 1.0
-    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
-%>
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tree/toggle.jsp b/trunk/apps/showcase/src/main/webapp/ajax/tree/toggle.jsp
deleted file mode 100644
index 35010bb..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tree/toggle.jsp
+++ /dev/null
@@ -1,12 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@include file="partialChunkHeader.jsp"%>
-<%
-    response.setContentType("text/javascript");
-%>
-dojo.event.topic.publish("children_<s:property value="category.id"/>");
-var d = document.getElementById("children_<s:property value="category.id"/>");
-if (d.style.display != "none") {
-    d.style.display = "none";
-} else {
-    d.style.display = "";
-}
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/tree/tree.jsp b/trunk/apps/showcase/src/main/webapp/ajax/tree/tree.jsp
deleted file mode 100644
index 6d8e18c..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/tree/tree.jsp
+++ /dev/null
@@ -1,13 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Tree</title>
-    <s:head theme="ajax"/>
-</head>
-
-<body>
-
-<s:action name="getCategory" executeResult="true"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/ajax/widgets/index.jsp b/trunk/apps/showcase/src/main/webapp/ajax/widgets/index.jsp
deleted file mode 100644
index b9f6afe..0000000
--- a/trunk/apps/showcase/src/main/webapp/ajax/widgets/index.jsp
+++ /dev/null
@@ -1,36 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Ajax Widgets</title>
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-</head>
-
-<body>
-NOTES:
-<ul>
-    <li>Make sure that there is a 'value' attribute in the textarea with the content for the editor</li>
-    <li>This is experimental</li>
-</ul>
-
-Default Editor configuration:<br/>
-<s:form id="form1" action="AjaxRemoteForm" method="post">
-    <s:textarea name="data" theme="ajax" cols="50" rows="10" value="Test Data 1" />
-    <s:submit value="Submit"/>
-</s:form>
-<br/>
-
-Configured Editor configuration:<br/>
-<s:form id="form2" action="AjaxRemoteForm" method="post">
-    <s:textarea id="editor2" name="data" theme="ajax" cols="50" rows="10" value="Test Data 2">
-        <s:param name="editorControls">textGroup;|;justifyGroup;|;listGroup;|;indentGroup</s:param>
-    </s:textarea>
-    <s:submit value="Submit"/>
-</s:form>
-<br/>
-
-<s:include value="../footer.jsp"/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/chat/chatLogin.ftl b/trunk/apps/showcase/src/main/webapp/chat/chatLogin.ftl
deleted file mode 100644
index 1dfa3ca..0000000
--- a/trunk/apps/showcase/src/main/webapp/chat/chatLogin.ftl
+++ /dev/null
@@ -1,16 +0,0 @@
-
-<html>
-	<head>
-		<title>Showcase - Chat - Login</title>
-		<@s.head theme="ajax" />
-	</head>
-	<body>
-	<@s.actionerror />
-	<@s.actionmessage />
-	<@s.fielderror />
-	<@s.form action="login" namespace="/chat" method="POST">
-		<@s.textfield name="name" label="Name" required="true" />
-		<@s.submit/>
-	</@s.form>
-	</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/chat/createRoom.ftl b/trunk/apps/showcase/src/main/webapp/chat/createRoom.ftl
deleted file mode 100644
index fbe71cc..0000000
--- a/trunk/apps/showcase/src/main/webapp/chat/createRoom.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-<@s.actionerror />
-<@s.fielderror />
diff --git a/trunk/apps/showcase/src/main/webapp/chat/index.jsp b/trunk/apps/showcase/src/main/webapp/chat/index.jsp
deleted file mode 100644
index b58d7a3..0000000
--- a/trunk/apps/showcase/src/main/webapp/chat/index.jsp
+++ /dev/null
@@ -1,3 +0,0 @@
-
-<% response.sendRedirect("main.action"); %>
-
diff --git a/trunk/apps/showcase/src/main/webapp/chat/messagesAvailableInRoom.ftl b/trunk/apps/showcase/src/main/webapp/chat/messagesAvailableInRoom.ftl
deleted file mode 100644
index 2550dcd..0000000
--- a/trunk/apps/showcase/src/main/webapp/chat/messagesAvailableInRoom.ftl
+++ /dev/null
@@ -1,33 +0,0 @@
-
-<table class="table">
-<tr class="tableHeader">
-	<td class="tableSenderColumn">Sender</td>
-	<td class="tableDateColumn">Date</td>
-	<td class="tableMessageColumn">Message</td>
-</tr>
-<@s.iterator id="message" value="%{messagesAvailableInRoom}" status="stat">
-<tr class="tableContent">
-	<#if stat.odd>
-	<td class="tableSenderColumnOdd"> 
-	<#else>
-	<td clas="tableSenderColumnEven">
-	</#if>
-		<@s.property value="%{#message.creator.name}" />
-	</td>
-	<#if stat.odd>
-	<td class="tableDateColumnOdd">
-	<#else>
-	<td class="tableDateColumnEven">
-	</#if>
-		<@s.property value="%{#message.creationDate}" />
-	</td>
-	<#if stat.odd>
-	<td class="tableMessageColumnOdd">
-	<#else>
-	<td class="tableMessageColumnEven">
-	</#if>
-		<@s.property value="%{#message.message}" />
-	</td>
-</tr>
-</@s.iterator>
-</table>
diff --git a/trunk/apps/showcase/src/main/webapp/chat/roomSelection.ftl b/trunk/apps/showcase/src/main/webapp/chat/roomSelection.ftl
deleted file mode 100644
index 2af6608..0000000
--- a/trunk/apps/showcase/src/main/webapp/chat/roomSelection.ftl
+++ /dev/null
@@ -1,163 +0,0 @@
-
-
-<html>
-	<head>
-		<title>Showcase - Chat - Room Selection</title>
-		<@s.head theme="ajax" />
-		<style type="text/css">
-			div.box {
-				border: 1px solid darkblue;
-				margin: 5px;
-			}
-			
-			div.box h3 {
-				color: white;
-				background: darkblue;
-				margin: 3px;
-				padding: 2px;
-			}
-			
-			div.nobox {
-				margin: 5px;
-			}
-			
-			table.table {
-				border: 1px solid darkblue;
-				width: 98%;
-				margin: 5px;
-			}
-			
-			table.table tr.tableHeader {
-				color: white;
-				background: darkblue;
-				margin: 3px;
-				padding: 2px;
-				font-size: medium; 
-				font-weight: bold;
-			}
-			
-			table.table td.tableOperationColumnOdd {
-				background: gray;
-				color: white;
-				width: 20%
-			}
-			
-			table.table td.tableNameColumnOdd {
-				background: gray;
-				color: white;
-				width: 20%;
-			}
-			
-			table.table td.tableDescriptionColumnOdd {
-				background: gray;
-				color: white;
-				width: 40%;
-			}
-			
-			table.table td.tableDateCreatedColumnOdd {
-				background: gray;
-				color: white;
-				width: 20%;
-			}
-			
-			table.table td.tableOperationColumnEven {
-				background: white;
-				color: gray;
-				width: 20%
-			}
-			
-			table.table td.tableNameColumnEven {
-				background: white;
-				color: gray;
-				width: 20%;
-			}
-			
-			table.table td.tableDescriptionColumnEven {
-				background: white;
-				color: gray;
-				width: 40%;
-			}
-			
-			table.table td.tableDateCreatedColumnEven {
-				background: white;
-				color: gray;
-				width: 20%;
-			}
-
-			div.container {
-				margin-left: auto;
-				margin-right: auto;
-				width: 100%;
-			}
-			
-			div.left {
-				width: 20%;
-				float: left;
-			}
-			
-			div.right {
-				width: 20%;
-				float: right;
-			}
-			
-			div.center {
-				width: 60%;
-				float: left;
-			}
-			
-		</style>
-	</head>
-	<body>
-		<div class="container">
-		
-		
-		<div class="left">
-		<div class="box">
-			<h3>Operations</h3>
-			<@s.url id="url" action="logout" namespace="/chat" />
-			<ul>
-				<li><@s.a href="%{#url}">Logout</@s.a></li>
-			</ul>
-		</div>
-		<#if (actionErrors?size gt 0)>
-		<div class="box">
-			<h3>Action Errors</h3>
-			<@s.actionerrors />
-		</div>
-		</#if>
-		<div class="box">
-		<h3>Users Available In Chat</h3>
-		<@s.div id="usersAvailable" delay="1" updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}"
-		          theme="ajax" href="/chat/ajax/usersAvailable.action"
-		          class="box">
-				Initial Loading Users ...
-		</@s.div>
-		</div>
-		</div>
-		
-		
-		<div class="center">
-		<div class="box">
-		<h3>Rooms Available In Chat</h3>
-		<@s.div id="roomsAvailable" listenTopics="topicRoomCreated"
-				  delay="1" updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}"
-				  theme="ajax" href="/chat/ajax/roomsAvailable.action" >
-			     Initial Loading Rooms ...
-		</@s.div>
-		</div>
-		
-		<div id="createRoom" class="box">
-		<h3>Create Room In Chat</h3>
-			<div id="createRoomResult"></div>
-			<@s.form id="createRoomId" action="createRoom" namespace="/chat/ajax" method="POST" theme="ajax">
-				<@s.textfield label="Room Name" required="true" name="name" />
-				<@s.textarea theme="xhtml" label="Room Description" required="true" name="Description" />
-				<@s.submit value="%{'Create Room'}" resultDivId="createRoomResult" notifyTopics="topicRoomCreated" theme="ajax" align="left" />
-			</@s.form>
-		</div>
-		</div>
-		
-		</div>
-	</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/chat/roomsAvailable.ftl b/trunk/apps/showcase/src/main/webapp/chat/roomsAvailable.ftl
deleted file mode 100644
index 1d343c0..0000000
--- a/trunk/apps/showcase/src/main/webapp/chat/roomsAvailable.ftl
+++ /dev/null
@@ -1,44 +0,0 @@
-
-<table class="table">
-<tr class="tableHeader">
-	<td>Operation</td>
-	<td>Name</td>
-	<td>Description</td>
-	<td>Date Created</td>
-</tr>
-<@s.iterator id="room" value="%{availableRooms}" status="stat">
-<tr class="tableContent">
-	<#if stat.isOdd()>
-	<td class="tableOperationColumnOdd">
-	<#else>
-	<td class="tableOperationColumnEven">
-	</#if>
-	<@s.url id="url" action="enterRoom" namespace="/chat">
-		<@s.param name="roomName" value="%{#room.name}" />
-	</@s.url>
-	<@s.a href="%{url}">Enter</@s.a>
-	</td>
-	<#if stat.odd>
-	<td class="tableNameColumnOdd">
-	<#else>
-	<td class="tableNameColumnEven">
-	</#if>
-	<@s.property value="%{#room.name}" />
-	</td>
-	<#if stat.odd>
-	<td class="tableDescriptionColumnOdd">
-	<#else>
-	<td class="tableDescriptionColumnEven">
-	</#if>
-	<@s.property value="%{#room.description}" />
-	</td>
-	<#if stat.odd>
-	<td class="tableDateCreatedColumnOdd">
-	<#else>
-	<td class="tableDateCreateColumnEven">
-	</#if>
-	<@s.property value="%{#room.creationDate}" />
-	</td>
-</tr>
-</@s.iterator>
-</table>
diff --git a/trunk/apps/showcase/src/main/webapp/chat/sendMessageToRoomResult.ftl b/trunk/apps/showcase/src/main/webapp/chat/sendMessageToRoomResult.ftl
deleted file mode 100644
index c75d32b..0000000
--- a/trunk/apps/showcase/src/main/webapp/chat/sendMessageToRoomResult.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-
-<@s.fielderror />
diff --git a/trunk/apps/showcase/src/main/webapp/chat/showRoom.ftl b/trunk/apps/showcase/src/main/webapp/chat/showRoom.ftl
deleted file mode 100644
index e04a404..0000000
--- a/trunk/apps/showcase/src/main/webapp/chat/showRoom.ftl
+++ /dev/null
@@ -1,160 +0,0 @@
-
-<html>
-	<head>
-		<title>Showcase - Chat - Show Room </title>
-		<@s.head theme="ajax" />
-		<style type="text/css">
-			div.box {
-				border: 1px solid darkblue;
-				margin: 5px;
-			}
-			
-			div.box h3 {
-				color: white;
-				background: darkblue;
-				margin: 3px;
-				padding: 2px;
-			}
-			
-			div.nobox {
-				margin: 5px;
-			}
-			
-			table.table {
-				border: 1px solid darkblue;
-				width: 98%;
-				margin: 5px;
-			}
-			
-			table.table tr.tableHeader {
-				color: white;
-				background: darkblue;
-				margin: 3px;
-				padding: 2px;
-				font-size: medium; 
-				font-weight: bold;
-			}
-
-			table.table td.tableSenderColumnOdd {
-				background: gray;
-				color: white;
-				width: 20%
-			}
-			
-			table.table td.tableDateColumnOdd {
-				background: gray;
-				color: white;
-				width: 20%;
-			}
-			
-			table.table td.tableMessageColumnOdd {
-				background: gray;
-				color: white;
-				width: 60%;
-			}
-			
-			table.table td.tableSenderColumnEven {
-				background: white;
-				color: gray;
-				width: 20%
-			}
-			
-			table.table td.tableDateColumnEven {
-				background: white;
-				color: gray;
-				width: 20%;
-			}
-			
-			table.table td.tableMessageColumnEven {
-				background: white;
-				color: gray;
-				width: 60%;
-			}
-			
-			div.container {
-				margin-left: auto;
-				margin-right: auto;
-				width: 100%;
-			}
-			
-			div.left {
-				width: 20%;
-				float: left;
-			}
-			
-			div.right {
-				width: 20%;
-				float: left;
-			}
-			
-			div.center {
-				width: 60%;
-				float: left;
-			}
-			
-		</style>
-	</head>
-	<body>
-		<div class="container">
-		<div class="left">
-		<div class="box">
-			<h3>Operation</h3>
-			<@s.url id="url" action="exitRoom" namespace="/chat">
-				<@s.param name="roomName" value="%{roomName}" />
-			</@s.url>
-			<ul>
-				<li><@s.a href="%{#url}">Exit Room</@s.a></li>
-			</ul>
-		</div>
-		<div class="box">
-		<h3>Users Available In Chat</h3>
-		<@s.div id="usersAvailable" href="/chat/ajax/usersAvailable.action"
-				  theme="ajax" delay="1" updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}">
-			Initial Users Available ...
-		</@s.div>
-		</div>
-		</div>
-		
-		<div class="center">
-		<div class="box">
-		<h3>Messages Posted In Room [${roomName?default('')}]</h3>
-		<@s.url id="url" value="/chat/ajax/messagesAvailableInRoom.action" includeContext="false">
-			<@s.param name="roomName" value="%{roomName}" />
-		</@s.url>
-		<@s.div id="messagesInRoom" href="%{#url}" includeContext="false"
-				  theme="ajax" delay="1" updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}" 
-				  listenTopics="topicMessageSend">
-			Initial Messages In Room ...
-		</@s.div>
-		</div>
-		
-		<div class="box">
-		<h3>Send Messages</h3>
-		<@s.form id="sendMessageForm" action="sendMessageToRoom" namespace="/chat/ajax" method="POST" theme="ajax">
-			<div id="sendMessageResult"></div>
-			<@s.textarea label="Message"name="message" theme="xhtml" />
-			<@s.hidden name="roomName" value="%{roomName}" />
-			<@s.submit id="submit" theme="ajax" resultDivId="sendMessageResult" notifyTopics="topicMessageSend" value="%{'Send'}" />
-		</@s.form>
-		</div>
-		</div>
-		
-
-		<div class="right">
-		<div class="box">
-		<h3>Users Available In Room [${roomName?default('')}]</h3>
-		<@s.url id="url" value="/chat/ajax/usersAvailableInRoom.action" includeContext="false">
-			<@s.param name="roomName" value="%{roomName}" />
-		</@s.url>
-		<@s.div id="usersAvailableInRoom" href="%{#url}" includeContext="false"
-				  theme="ajax" delay="1" updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}">
-			Initial Users Available In Room ...
-		</@s.div>
-		</div>
-		</div>
-		
-		
-		</div>
-	
-	</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/chat/usersAvailable.ftl b/trunk/apps/showcase/src/main/webapp/chat/usersAvailable.ftl
deleted file mode 100644
index e03fa37..0000000
--- a/trunk/apps/showcase/src/main/webapp/chat/usersAvailable.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-
-<ul>
-<#list availableUsers as user>
-	<li>${user.name}</li>
-</#list>
-</ul>
diff --git a/trunk/apps/showcase/src/main/webapp/chat/usersAvailableInRoom.ftl b/trunk/apps/showcase/src/main/webapp/chat/usersAvailableInRoom.ftl
deleted file mode 100644
index 95822bf..0000000
--- a/trunk/apps/showcase/src/main/webapp/chat/usersAvailableInRoom.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-
-<ul>
-<@s.iterator id="member" value="%{usersAvailableInRoom}">
-	<li><@s.property value="%{#member.name}" /></li>
-</@s.iterator>
-</ul>
-
-
diff --git a/trunk/apps/showcase/src/main/webapp/continuations/guess.ftl b/trunk/apps/showcase/src/main/webapp/continuations/guess.ftl
deleted file mode 100644
index 453b0b9..0000000
--- a/trunk/apps/showcase/src/main/webapp/continuations/guess.ftl
+++ /dev/null
@@ -1,18 +0,0 @@
-<!-- START SNIPPET: example -->
-<html>
-<head>
-    <title></title>
-</head>
-
-<body>
-<#list actionMessages as msg>
-    ${msg}
-</#list>
-
-<@s.form action="guess" method="post">
-    <@s.textfield label="Guess" name="guess"/>
-    <@s.submit value="Guess"/>
-</@s.form>
-</body>
-</html>
-<!-- END SNIPPET: example -->
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/Address.java.txt b/trunk/apps/showcase/src/main/webapp/conversion/Address.java.txt
deleted file mode 100644
index bf50183..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/Address.java.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * $Id: Person.java 440597 2006-09-06 03:34:39Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-
-/**
- * @version $Date$ $Id$
- */
-public class Address {
-	
-	private String id;
-	private String address;
-	
-	public String getId() { return id; }
-	public void setId(String id) { this.id = id; }
-	
-	public String getAddress() { return address; }
-	public void setAddress(String address) { this.address = address; }
-	
-}
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/AddressAction.java.txt b/trunk/apps/showcase/src/main/webapp/conversion/AddressAction.java.txt
deleted file mode 100644
index 35f17f5..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/AddressAction.java.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * $Id: Person.java 440597 2006-09-06 03:34:39Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * @version $Date$ $Id$
- */
-public class AddressAction extends ActionSupport {
-
-	private Set addresses = new LinkedHashSet();
-	
-	public Set getAddresses() { return addresses; }
-	public void setAddresses(Set addresses) { this.addresses = addresses; }
-	
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String submit() throws Exception {
-		System.out.println(addresses);
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/EnumTypeConverter.java.txt b/trunk/apps/showcase/src/main/webapp/conversion/EnumTypeConverter.java.txt
deleted file mode 100644
index 0a1b1aa..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/EnumTypeConverter.java.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id: Person.java 440597 2006-09-06 03:34:39Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.util.StrutsTypeConverter;
-
-/**
- * @version $Date$ $Id$
- */
-public class EnumTypeConverter extends StrutsTypeConverter {
-
-	@Override
-	public Object convertFromString(Map context, String[] values, Class toClass) {
-		List<Enum> result = new ArrayList<Enum>();
-		for (int a=0; a< values.length; a++) {
-			Enum e = Enum.valueOf(OperationsEnum.class, values[a]);
-			if (e != null)
-				result.add(e);
-		}
-		return result;
-	}
-
-	@Override
-	public String convertToString(Map context, Object o) {
-		List l = (List) o;
-		String result ="<";
-		for (Iterator i = l.iterator(); i.hasNext(); ) {
-			result = result + "["+ i.next() +"]";
-		}
-		result = result+">";
-		return result;
-	}
-
-	
-}
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/OperationsEnum.java.txt b/trunk/apps/showcase/src/main/webapp/conversion/OperationsEnum.java.txt
deleted file mode 100644
index 2db1194..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/OperationsEnum.java.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * $Id: Person.java 440597 2006-09-06 03:34:39Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-/**
- * 
- * @version $Date$ $Id$
- */
-public enum OperationsEnum {
-	ADD, 
-	MINUS, 
-	DIVIDE, 
-	MULTIPLY, 
-	REMAINDER;
-}
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/OperationsEnumAction.java.txt b/trunk/apps/showcase/src/main/webapp/conversion/OperationsEnumAction.java.txt
deleted file mode 100644
index ee2327f..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/OperationsEnumAction.java.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * $Id: Person.java 440597 2006-09-06 03:34:39Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * 
- * @version $Date$ $Id$
- */
-public class OperationsEnumAction extends ActionSupport {
-
-	private static final long serialVersionUID = -2229489704988870318L;
-	
-	private List<OperationsEnum> selectedOperations = new LinkedList<OperationsEnum>();
-	
-	public List<OperationsEnum> getSelectedOperations() { return this.selectedOperations; }
-	public void setSelectedOperations(List<OperationsEnum> selectedOperations) {
-		this.selectedOperations = selectedOperations;
-	}
-	
-	
-	public List<OperationsEnum> getAvailableOperations() {
-		return Arrays.asList(OperationsEnum.values());
-	}
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	public String submit() throws Exception {
-		return SUCCESS;
-	}
-}
-
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/OperationsEnumActionConversion.txt b/trunk/apps/showcase/src/main/webapp/conversion/OperationsEnumActionConversion.txt
deleted file mode 100644
index 621beaf..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/OperationsEnumActionConversion.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-
-selectedOperations=org.apache.struts2.showcase.conversion.EnumTypeConverter
-Element_selectedOperations=org.apache.struts2.showcase.conversion.OperationsEnum
-
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/Person.java.txt b/trunk/apps/showcase/src/main/webapp/conversion/Person.java.txt
deleted file mode 100644
index 2ce9e0f..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/Person.java.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * $Id: AbstractDao.java 394498 2006-04-16 15:28:06Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-import java.io.Serializable;
-
-/**
- *
- */
-public class Person implements Serializable {
-	private String name;
-	private Integer age;
-	
-	public void setName(String name) { this.name = name; }
-	public String getName() { return this.name; }
-	
-	public void setAge(Integer age) { this.age = age; }
-	public Integer getAge() { return this.age; }
-}
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/PersonAction.java.txt b/trunk/apps/showcase/src/main/webapp/conversion/PersonAction.java.txt
deleted file mode 100644
index 015fab0..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/PersonAction.java.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * $Id: AbstractDao.java 394498 2006-04-16 15:28:06Z tmjee $
- *
- * Copyright 2006 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.struts2.showcase.conversion;
-
-import java.util.List;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * 
- */
-public class PersonAction extends ActionSupport {
-	
-	private List persons;
-	
-	public List getPersons() { return persons; }
-	public void setPersons(List persons) { this.persons = persons; }
-	
-	
-	
-	public String input() throws Exception {
-		return SUCCESS;
-	}
-	
-	public String submit() throws Exception {
-		return SUCCESS;
-	}
-}
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/enterAddressInfo.jsp b/trunk/apps/showcase/src/main/webapp/conversion/enterAddressInfo.jsp
deleted file mode 100644
index 2d028a8..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/enterAddressInfo.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<%@taglib prefix="s" uri="/struts-tags" %>   
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Showcase - Conversion - Set</title>
-</head>
-<body>
-
-<p/>
-An example populating a Set of object (Address.java) into Struts' action (AddressAction.java)
-
-<p/>
-
-See the jsp code <s:url id="url" action="showAddressJspCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
-See the code for PersonAction.java <s:url id="url" action="showAddressActionJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
-See the code for Person.java <s:url id="url" action="showAddressJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
-
-<p/>
-
-	<s:form action="submitAddressesInfo" namespace="/conversion">
-		<s:iterator value="%{new int[3]}" status="stat">
-			<s:textfield label="%{'Address '+#stat.index}"
-					 	 name="%{'addresses(\\'id'+#stat.index+'\\').address'}" />
-		</s:iterator>
-		<s:submit />
-	</s:form>
-	
-	<%--
-		The following is how its done statically
-	--%>
-	<%-- 
-	<s:form action="submitAddressInfo" namespace="/conversion">
-		<s:textfield label="Address 0"
-					 name="addresses('id0')" />
-		<s:textfield label="Address 1"
-					 name="addresses('id1')" />
-		<s:textfield label="Address 2"
-					 name="addresses('id2')" />
-		<s:submit />
-	</s:form>
-	--%>
-
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/enterOperations.jsp b/trunk/apps/showcase/src/main/webapp/conversion/enterOperations.jsp
deleted file mode 100644
index c01d648..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/enterOperations.jsp
+++ /dev/null
@@ -1,31 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<%@taglib prefix="s" uri="/struts-tags" %>    
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Showcase - Conversion - Tiger 5 Enum </title>
-</head>
-<body>
-
-See the jsp code <s:url id="url" action="showEnumJspCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
-See the code for OperationsEnum.java <s:url id="url" action="showOperationsEnumJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
-See the code for OperationsEnumAction.java <s:url id="url" action="showOperationEnumActionJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
-See the code for EnumTypeConverter.java  <s:url id="url" action="showEnumTypeConverterJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
-See the properties for OperationsEnumAction-conversion.properties <s:url id="url" action="showOperationsEnumActionConversionProperties" namespace="/conversion" /><s:a href="%{#url}">here.</s:a>
-<br/>
-<br/>
-
-	<s:form action="submitOperationEnumInfo" namespace="/conversion">
-		<s:checkboxlist label="Operations" 
-						name="selectedOperations"
-						list="%{availableOperations}" 
-						listKey="name()" 
-						listValue="name()"
-						/>
-		<s:submit />
-	</s:form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/enterPersonInfo.jsp b/trunk/apps/showcase/src/main/webapp/conversion/enterPersonInfo.jsp
deleted file mode 100644
index 8e9c541..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/enterPersonInfo.jsp
+++ /dev/null
@@ -1,58 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Showcase - Conversion - Populate Object into Struts' action List</title>
-</head>
-<body>
-
-<p/>
-An example populating a list of object (Person.java) into Struts' action (PersonAction.java)
-
-<p/>
-
-See the jsp code <s:url id="url" action="showPersonJspCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
-See the code for PersonAction.java <s:url id="url" action="showPersonActionJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
-See the code for Person.java <s:url id="url" action="showPersonJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
-
-<p/>
-
-<s:actionerror />
-<s:fielderror />
-
-<s:form action="submitPersonInfo" namespace="/conversion" method="post">
-    <%--
-        The following is done Dynamically
-    --%>
-    <s:iterator value="new int[3]" status="stat">
-        <s:textfield    label="%{'Person '+#stat.index+' Name'}" 
-                        name="%{'persons['+#stat.index+'].name'}" />
-        <s:textfield    label="%{'Person '+#stat.index+' Age'}" 
-                        name="%{'persons['+#stat.index+'].age'}" />
-    </s:iterator>
-    
-    
-    
-    <%--
-    The following is done statically:-
-    --%>
-    <%-- 
-    <s:textfield    label="Person 1 Name" 
-                    name="persons[0].name" />
-    <s:textfield    label="Person 1 Age"
-                    name="persons[0].age" />
-    <s:textfield    label="Person 2 Name" 
-                    name="persons[1].name" />
-    <s:textfield    label="Person 2 Age"
-                    name="persons[1].age" />
-    <s:textfield    label="Person 3 Name" 
-                    name="persons[2].name" />
-    <s:textfield    label="Person 3 Age"
-                    name="persons[2].age" />
-    --%>                
-                    
-    <s:submit />
-</s:form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/index.jsp b/trunk/apps/showcase/src/main/webapp/conversion/index.jsp
deleted file mode 100644
index 69f17c4..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/index.jsp
+++ /dev/null
@@ -1,26 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Showcase - Conversion</title>
-</head>
-<body>
-
-<ul>
-    <li>
-    	<s:url id="url" action="enterPersonsInfo" namespace="/conversion" />
-    	<s:a href="%{#url}">Populate into the Struts action class a List of Person.java Object</s:a>
-    </li>
-    <li>
-    	<s:url id="url" action="enterAddressesInfo" namespace="/conversion" />
-    	<s:a href="%{#url}">Populate into Struts action class a Set of Address.java Object</s:a>
-    </li>
-    <li>
-    	<s:url id="url" action="enterOperationEnumInfo" namespace="/conversion" />
-    	<s:a href="%{#url}">Populate into Struts action class a List of OperationEnum.java (Java5 Enum)</s:a> 
-    </li>
-</ul>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/showAddressInfo.jsp b/trunk/apps/showcase/src/main/webapp/conversion/showAddressInfo.jsp
deleted file mode 100644
index 2f1d4e3..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/showAddressInfo.jsp
+++ /dev/null
@@ -1,15 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<%@taglib prefix="s" uri="/struts-tags" %>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Showcase - Conversion - Set </title>
-</head>
-<body>
-	<s:iterator value="%{addresses}">
-		<s:property value="%{top.id}" /> -> <s:property value="%{top.address}" /><br/>
-	</s:iterator>
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/showOperations.jsp b/trunk/apps/showcase/src/main/webapp/conversion/showOperations.jsp
deleted file mode 100644
index c4b8859..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/showOperations.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<%@taglib prefix="s" uri="/struts-tags" %>    
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Showcase - Conversion - Tiger 5 Enum</title>
-</head>
-<body>
-
-	<s:iterator value="%{selectedOperations}" status="stat">
-		<s:property value="%{top.name()}" /><br/>
-	</s:iterator>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/conversion/showPersonInfo.jsp b/trunk/apps/showcase/src/main/webapp/conversion/showPersonInfo.jsp
deleted file mode 100644
index b0b10e1..0000000
--- a/trunk/apps/showcase/src/main/webapp/conversion/showPersonInfo.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Showcase - Conversion - Populate Object into Struts action List</title>
-</head>
-<body>
-
-<s:iterator value="persons" status="status">
-    <s:label label="%{'SET '+#status.index+' Name'}" value="%{name}" /><br/>
-    <s:label label="%{'SET '+#status.index+' Age'}" value="%{age}" /><br/>
-</s:iterator>
-
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/customTemplateDir/customTheme/ftlCustomTemplate.ftl b/trunk/apps/showcase/src/main/webapp/customTemplateDir/customTheme/ftlCustomTemplate.ftl
deleted file mode 100644
index 4152334..0000000
--- a/trunk/apps/showcase/src/main/webapp/customTemplateDir/customTheme/ftlCustomTemplate.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<div style="background-color:yellow;">
-<p>
-Freemarker Custom Template -
-parameter 'paramName' - ${parameters.paramName}
-</p>
-</div>
-
diff --git a/trunk/apps/showcase/src/main/webapp/customTemplateDir/customTheme/jspCustomTemplate.jsp b/trunk/apps/showcase/src/main/webapp/customTemplateDir/customTheme/jspCustomTemplate.jsp
deleted file mode 100644
index 311c329..0000000
--- a/trunk/apps/showcase/src/main/webapp/customTemplateDir/customTheme/jspCustomTemplate.jsp
+++ /dev/null
@@ -1,8 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<div style="background-color:yellow;">
-<p>
-JSP Custom Template - 
-parameter 'paramName' - <s:property value="%{top.parameters.paramName}" />
-</p>
-</div>
diff --git a/trunk/apps/showcase/src/main/webapp/date.jsp b/trunk/apps/showcase/src/main/webapp/date.jsp
deleted file mode 100644
index 400cd6d..0000000
--- a/trunk/apps/showcase/src/main/webapp/date.jsp
+++ /dev/null
@@ -1,2 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<s:date name="now"/>
diff --git a/trunk/apps/showcase/src/main/webapp/empmanager/editEmployee.jsp b/trunk/apps/showcase/src/main/webapp/empmanager/editEmployee.jsp
deleted file mode 100644
index fb432e6..0000000
--- a/trunk/apps/showcase/src/main/webapp/empmanager/editEmployee.jsp
+++ /dev/null
@@ -1,41 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
-<s:if test="currentEmployee!=null">
-    <s:text id="title" name="item.edit"><s:param><s:text name="employee"/></s:param></s:text>
-</s:if>
-<s:else>
-    <s:text id="title" name="item.create"><s:param><s:text name="employee"/></s:param></s:text>
-</s:else>
-<html>
-<head>
-    <title><s:property value="#title"/></title>
-    <s:head/>
-</head>
-
-<body>
-<h1><s:property value="#title"/></h1>
-
-<s:action id="skillAction" namespace="/skill" name="list"/>
-
-<s:form name="editForm" action="save">
-    <s:textfield label="Employee Id" name="currentEmployee.empId"/>
-    <s:textfield label="%{getText('employee.firstName')}" name="currentEmployee.firstName"/>
-    <s:textfield label="%{getText('employee.lastName')}" name="currentEmployee.lastName"/>
-    <s:datepicker label="Birthdate" name="currentEmployee.birthDate"/>
-    <s:textfield label="Salary" name="currentEmployee.salary"/>
-    <s:checkbox fieldValue="true" label="Married" name="currentEmployee.married"/>
-    <s:combobox list="availablePositions" label="Position" name="currentEmployee.position"/>
-    <s:select list="#skillAction.availableItems" listKey="name" label="Main Skill"
-               name="currentEmployee.mainSkill.name"/>
-    <s:select list="#skillAction.availableItems" listKey="name" listValue="description" label="Other Skills"
-               name="selectedSkills" multiple="true"/>
-    <s:password label="Password" name="currentEmployee.password"/>
-    <s:radio list="availableLevels" name="currentEmployee.level"/>
-    <s:textarea label="Comment" name="currentEmployee.comment" cols="50" rows="3"/>
-    <s:submit value="%{getText('save')}" />
-</s:form>
-<p><a href="<s:url action="list"/>"><s:text name="employee.backtolist"/></a></p>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/empmanager/editSkill.jsp b/trunk/apps/showcase/src/main/webapp/empmanager/editSkill.jsp
deleted file mode 100644
index a5544b0..0000000
--- a/trunk/apps/showcase/src/main/webapp/empmanager/editSkill.jsp
+++ /dev/null
@@ -1,27 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
-<s:if test="currentSkill!=null">
-    <s:set name="submitType" value="'update'"/>
-    <s:text id="title" name="item.edit"><s:param><s:text name="skill"/></s:param></s:text>
-</s:if>
-<s:else>
-    <s:set name="submitType" value="'create'"/>
-    <s:text id="title" name="item.create"><s:param><s:text name="skill"/></s:param></s:text>
-</s:else>
-<html>
-<head><title><s:property value="#title"/></title></head>
-
-<body>
-<h1><s:property value="#title"/></h1>
-
-<s:form action="save">
-    <s:textfield label="%{getText('skill.name')}" name="currentSkill.name"/>
-    <s:textfield label="%{getText('skill.description')}" name="currentSkill.description"/>
-    <%--s:submit name="%{#submitType}" value="%{getText('save')}" /--%>
-    <s:submit value="%{getText('save')}" />
-</s:form>
-<p><a href="<s:url action="list"/>"><s:text name="skill.backtolist"/></a></p>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/empmanager/index.jsp b/trunk/apps/showcase/src/main/webapp/empmanager/index.jsp
deleted file mode 100644
index b128df6..0000000
--- a/trunk/apps/showcase/src/main/webapp/empmanager/index.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - CRUD </title>
-</head>
-<body>
-<h1> CRUD </h1>
-
-<p>
-    <ul>
-        <li><s:url id="url" namespace="/skill" action="list"/><s:a href="%{url}">List available Skills</s:a></li>
-        <li><s:url id="url" namespace="/skill" action="edit"/><s:a href="%{url}">Create/Edit Skill</s:a></li>
-        <li><s:url id="url" namespace="/employee" action="list"/><s:a href="%{url}">List available Employees</s:a></li>
-        <li><s:url id="url" namespace="/employee" action="edit"/><s:a href="%{url}">Create/Edit Employee</s:a></li>
-    </ul>
-</p>
-
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/empmanager/listEmployees.jsp b/trunk/apps/showcase/src/main/webapp/empmanager/listEmployees.jsp
deleted file mode 100644
index 356bd0a..0000000
--- a/trunk/apps/showcase/src/main/webapp/empmanager/listEmployees.jsp
+++ /dev/null
@@ -1,26 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<html>
-<head><title>Available Employees</title></head>
-
-<body>
-<h1>Available Employees</h1>
-<table>
-    <tr>
-        <th>Id</th>
-        <th>First Name</th>
-        <th>Last Name</th>
-    </tr>
-    <s:iterator value="availableItems">
-        <tr>
-            <td><a href="<s:url action="edit-%{empId}" />"><s:property value="empId"/></a></td>
-            <td><s:property value="firstName"/></td>
-            <td><s:property value="lastName"/></td>
-        </tr>
-    </s:iterator>
-</table>
-<p><a href="<s:url action="edit-" includeParams="none"/>">Create new Employee</a></p>
-<p><a href="<s:url action="showcase" namespace="/" includeParams="none"/>">Back to Showcase Startpage</a></p>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/empmanager/listSkills.jsp b/trunk/apps/showcase/src/main/webapp/empmanager/listSkills.jsp
deleted file mode 100644
index 3b1f779..0000000
--- a/trunk/apps/showcase/src/main/webapp/empmanager/listSkills.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<html>
-<head><title>Available Skills</title></head>
-
-<body>
-<h1>Available Skills</h1>
-<table>
-    <tr>
-        <th>Name</th><th>Description</th>
-    </tr>
-    <s:iterator value="availableItems">
-        <tr>
-            <td><a href="<s:url action="edit"><s:param name="skillName" value="name"/></s:url>"><s:property value="name"/></a></td>
-            <td><s:property value="description"/></td>
-        </tr>
-    </s:iterator>
-</table>
-<!-- Although namescape not correctly specified, the following link should find the right action -->
-<p><a href="<s:url action="edit" includeParams="none"/>">Create new Skill</a></p>
-<p><a href="<s:url action="showcase" namespace="/" includeParams="none"/>">Back to Showcase Startpage</a></p>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/filedownload/index.jsp b/trunk/apps/showcase/src/main/webapp/filedownload/index.jsp
deleted file mode 100644
index 0bd107e..0000000
--- a/trunk/apps/showcase/src/main/webapp/filedownload/index.jsp
+++ /dev/null
@@ -1,14 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Showcase</title>
-</head>
-
-<body>
-    <h1>File Download Example</h1>
-
-    Click this <s:url id="url" action="download"/><s:a href="%{url}">link</s:a> to download Struts logo.
-
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/fileupload/upload-success.jsp b/trunk/apps/showcase/src/main/webapp/fileupload/upload-success.jsp
deleted file mode 100644
index 15029cb..0000000
--- a/trunk/apps/showcase/src/main/webapp/fileupload/upload-success.jsp
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@ page 
-	language="java" 
-	contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Showcase</title>
-</head>
-
-<body>
-<h1>Fileupload sample</h1>
-
-<p>
-    <ul>
-        <li>ContentType: <s:property value="uploadContentType" /></li>
-        <li>FileName: <s:property value="uploadFileName" /></li>
-        <li>File: <s:property value="upload" /></li>
-        <li>Caption:<s:property value="caption" /></li>
-    </ul>
-</p>
-
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/fileupload/upload.jsp b/trunk/apps/showcase/src/main/webapp/fileupload/upload.jsp
deleted file mode 100644
index c683014..0000000
--- a/trunk/apps/showcase/src/main/webapp/fileupload/upload.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<%@ page 
-	language="java" 
-	contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Showcase</title>
-</head>
-
-<body>
-    <h1>Fileupload sample</h1>
-
-    <s:form action="doUpload" method="POST" enctype="multipart/form-data">
-        <s:file name="upload" label="File"/>
-        <s:textfield name="caption" label="Caption"/>
-        <s:submit />
-    </s:form>
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/freemarker/customFreemarkerManagerUsage.ftl b/trunk/apps/showcase/src/main/webapp/freemarker/customFreemarkerManagerUsage.ftl
deleted file mode 100644
index 23f2b59..0000000
--- a/trunk/apps/showcase/src/main/webapp/freemarker/customFreemarkerManagerUsage.ftl
+++ /dev/null
@@ -1,26 +0,0 @@
-
-<html>
-<head>
-	<title>Showcase - Freemarker - CustomFreemarkerManager Usage</title>
-</head>
-<body>
-	<h1>Custom Freemarker Manager Usage</h1>
-	
-	<p/>
-	This page shows a simple example of using a custom freemarker manager.
-	The custom freemarker manager put into freemarker model an util classed 
-	under the name 'customFreemarkerManagerUtil'. so one could use
-	<p/>
-	<ul>
-		<li>$ { customFreemarkerManagerUtil.getTodayDate() } - to get today's date</li>
-		<li>$ { customFreemarkerManagerUtil.todayDate } - to get today's date</li>
-		<li>$ { customFreemarkerManagerUtil.getTimeNow() } - to get the time now</li>
-		<li>$ { customFreemarkerManagerUtil.timeNow } - to get the time now</li>
-	</ul>
-	 
-	 Today's Date = ${customFreemarkerManagerUtil.todayDate}<br/>
-	 Time now = ${customFreemarkerManagerUtil.getTimeNow()}<br/>
-
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/freemarker/index.jsp b/trunk/apps/showcase/src/main/webapp/freemarker/index.jsp
deleted file mode 100644
index 1f6084e..0000000
--- a/trunk/apps/showcase/src/main/webapp/freemarker/index.jsp
+++ /dev/null
@@ -1,20 +0,0 @@
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Showcase - Freemarker</title>
-</head>
-<body>
-    
-    <ul>
-        <li>
-            <s:url id="url" action="customFreemarkerManagerDemo" namespace="/freemarker" />
-            <s:a href="%{#url}">Demo of usage of a Custom Freemarker Manager</s:a>
-        </li>
-    </ul>
-
-</body>
-</html>
-
-
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/blank.ftl b/trunk/apps/showcase/src/main/webapp/hangman/blank.ftl
deleted file mode 100644
index e69de29..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/blank.ftl
+++ /dev/null
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/hangmanAjax.ftl b/trunk/apps/showcase/src/main/webapp/hangman/hangmanAjax.ftl
deleted file mode 100644
index 1845984..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/hangmanAjax.ftl
+++ /dev/null
@@ -1,232 +0,0 @@
-
-<html>
-<head>
-	<title>Showcase - Hangman</title>
-	<@s.head theme="ajax" debug="false" />
-</head>
-<body>
-
-<script>
-	var _listeners = {
-		   guessMade: function(sourceId) {
-		   		this.guessMadeFunc(sourceId);
-		   		this.updateCharacterAvailable(sourceId);
-		   		this.updateVocab(sourceId);
-		   		this.updateScaffold(sourceId);
-		   		this.updateGuessLeft(sourceId);
-		   }, 
-	       guessMadeFunc: function(sourceId) { 
-	       				var requestAttr = { character: sourceId };
-						dojo.io.bind({
-							url: "<@s.url action="guessCharacter" namespace="/hangman" />",
-							load: function(type, data, event) {
-								
-							},
-							mimetype: "text/html",
-							content: requestAttr
-						}); 
-	       			},
-	       updateCharacterAvailable: function(sourceId) {
-	       				dojo.io.bind({
-	       					url: "<@s.url action="updateCharacterAvailable" namespace="/hangman/ajax" />",
-	       					load: function(type, data, event) {
-	       						var div = dojo.byId("updateCharacterAvailableDiv");
-	       						div.innerHTML = data;
-	       						
-	       						try{
-                        			var xmlParser = new dojo.xml.Parse();
-                        			var frag  = xmlParser.parseElement(div, null, true);
-                        			dojo.widget.getParser().createComponents(frag);
-                        			// eval any scripts being returned
-                        			var scripts = div.getElementsByTagName('script');
-                        			for (var i=0; i<scripts.length; i++) {
-                            			eval(scripts[i].innerHTML);
-                        			}
-                    			}
-                    			catch(e){
-                    				alert('dojo error '+e);
-                        			dojo.debug("auto-build-widgets error: "+e);
-                    			}
-	       					},
-	       					mimetype: "text/html"
-	       				});
-	       			}, 
-	       	updateVocab: function(sourceId) {
-	       			dojo.io.bind({
-	       				url: "<@s.url action="updateVocabCharacters" namespace="/hangman/ajax" />",
-	       				load: function(type, data, event) {
-	       					var div = dojo.byId("updateVocabDiv");
-	       					div.innerHTML = data;
-	       					
-	       					try {
-	       						var xmlParser = new dojo.xml.Parse();
-	       						var frag = xmlParser.parseElement(div, null, true);
-	       						
-	       						var scripts = div.getElementsByTagName("script");
-	       						for(var i=0; i<scripts.length; i++) {
-	       							eval(scripts[i].innerHTML);
-	       						}
-	       					}
-	       					catch(e) {
-	       						alert("dojo error"+e);
-	       						dojo.debug("auto-build-widgets error: "+e);
-	       					}
-	       				},
-	       				mimetype: "text/html"
-	       			});
-	       		},
-	       	updateScaffold: function(sourceId) {
-	       		dojo.io.bind({
-	       			url: "<@s.url action="updateScaffold" namespace="/hangman/ajax" />",
-	       			load: function(type, data, event) {
-	       				var div = dojo.byId("updateScaffoldDiv");
-	       				div.innerHTML = data;
-	       				
-	       				try {
-	       					var xmlParser = new dojo.xml.Parse();
-	       					var frag = xmlParser.parseElement(div, null, true);
-	       					
-	       					var scripts = div.getElementsByTagName("script");
-	       					for(var i=0; i<scripts.length; i++) {
-	       							eval(scripts[i].innerHTML);
-	       					}
-	       				}
-	       				catch(e) {
-	       					alert("dojo error"+e);
-	       					dojo.debug("auto-build-widgets error: "+e);
-	       				}
-	       			},
-	       			mimetype: "text/html"
-	       		});
-	       	}, 
-	       	updateGuessLeft: function(sourceId) {
-	       		dojo.io.bind({
-	       			url: "<@s.url action="updateGuessLeft" namespace="/hangman/ajax" />",
-	       			load: function(type, data, event) {
-	       				var div = dojo.byId("updateGuessLeftDiv");
-	       				div.innerHTML = data;
-	       				
-	       				try {
-	       					var xmlParser = new dojo.xml.Parse();
-	       					var frag = xmlParser.parseElement(div, null, true);
-	       					
-	       					var scripts = div.getElementsByTagName("script");
-	       					for(var i=0; i<scripts.length; i++) {
-	       							eval(scripts[i].innerHTML);
-	       					}
-	       				}
-	       				catch(e) {
-	       					alert("dojo error"+e);
-	       					dojo.debug("auto-build-widgets error: "+e);
-	       				}
-	       			},
-	       			mimetype: "text/html"
-	       		});
-	       	}
-	    };
-	dojo.event.topic.subscribe("topicGuessMade", _listeners, "guessMade");
-	// dojo.event.topic.subscribe("topicGuessMade", _listeners, "guessMadeFunc"); 
-	// dojo.event.topic.subscribe("topicGuessMade", _listeners, "updateCharacterAvailable");
-	// dojo.event.topic.subscribe("topicGuessMade", _listeners, "updateVocab");
-	// dojo.event.topic.subscribe("topicGuessMade", _listeners, "updateScaffold");
-	// dojo.event.topic.subscribe("topicGuessMade", _listeners, "updateGuessLeft");
-</script>
-
-<table bgcolor="green"> 
-  <tr> 
-    <td>
-    <@s.url id="url" value="/hangman/images/hangman.png" />
-    <img alt="Hangman" src="<@s.property value="%{#url}" />"
-           width="197" height="50" border="0"/> 
-    </td> 
-    <td width="70" align="right">
-      <#-- Guesses Left -->
-      <div id="updateGuessLeftDiv">
-      <@s.set name="guessLeftImageName" value="%{'Chalkboard_'+hangman.guessLeft()+'.png'}" />
-      <@s.url id="url" value="%{'/hangman/images/'+#guessLeftImageName}" />
-      <img alt="No. Guesses Left"
-      	   src="<@s.property value="%{#url}"/>" width="20" height="20" border="0" />
-      </div>
-    </td>
-    <td>
-    	<@s.url id="url" value="/hangman/images/guesses-left.png" />
-    	<img alt="Guesses Left"
-            src="<@s.property value="%{#url}" />" width="164" height="11" border="0"/>
-    </td>
-  </tr> 
-  <tr> 
-  	<td></td>
-    <td align="left">
-    <#-- Display Scaffold -->
-  	<div id="updateScaffoldDiv">
-    	<@s.set name="scaffoldImageName" value="%{'scaffold_'+hangman.guessLeft()+'.png'}" />
-    	<@s.url id="url" value="%{'/hangman/images/'+#scaffoldImageName}" />
-    	<img src="<@s.property value="%{#url}" />" border="0"/>
-    </div>
-    </td>
-    <td></td>
-    </tr> 
-  <tr>
-    <td width="160"> 
-      <p align="right">
-      	<@s.url id="url" value="/hangman/images/guess.png" />
-        <img alt="Current Guess" src="<@s.property value="%{#url}" />"
-           align="MIDDLE" width="127" height="20" border="0"/></p> 
-    </td> 
-    <td>
-    <#-- Display Vacab  -->
-    <div id="updateVocabDiv">
-    <@s.iterator id="currentCharacter" value="%{hangman.vocab.inCharacters()}" stat="stat">
-    	<#if hangman.characterGuessedBefore(currentCharacter)>
-    		<@s.set name="chalkboardImageName" value="%{'Chalkboard_'+#currentCharacter.toString()+'.png'}" />
-    		<@s.url id="url" value="%{'/hangman/images/'+#chalkboardImageName}" />
-    		<img height="36" alt="<@s.property value="%{#currentCharacter}" />"
-        		src="<@s.property value="%{#url}" />" width="36" border="0"/>
-    	<#else>
-    		<@s.url id="url" value="/hangman/images/Chalkboard_underscroll.png" />
-    		<img height="36" alt="_"
-        		src="<@s.property value="%{#url}" />" width="36" border="0"/>
-    	</#if>
-	</@s.iterator>
-	</div>
-    </td> 
-  </tr>
-  <tr> 
-    <td valign="top"> 
-      <p align="right">
-      	<@s.url id="url" value="/hangman/images/choose.png" />
-        <img alt="Choose" src="<@s.property value="%{#url}" />"
-             height="20" width="151" border="0"/>
-      </p> 
-    </td> 
-    <td width="330">
-    
-    <#-- Show Characters Available -->
-    <div id="updateCharacterAvailableDiv">
-	<@s.iterator id="currentCharacter" value="%{hangman.charactersAvailable}" status="stat">
-      <@s.set name="chalkboardImageName" value="%{'Chalkboard_'+#currentCharacter+'.png'}" />
-      <@s.url id="chalkboardImageUrl" value="%{'/hangman/images/'+#chalkboardImageName}" />
-      <@s.url id="spacerUrl" value="/hangman/images/letter-spacer.png" />
-      
-      <@s.a theme="ajax"
-      		  href="ajax/blank.action"
-      		  id="%{#currentCharacter}" 
-      		  notifyTopics="topicGuessMade"
-      		  showErrorTransportText="true">
-      	<img height="36" alt="" src="<@s.property value="%{#chalkboardImageUrl}" />" width="36" border="0" />
-      </@s.a>
-	</@s.iterator>
-	</div>
- 
-   
-   </td>
-  </tr> 
-  <tr>
-  	<td>
-  		
-  	</td>
-  </tr>
-</table>
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/hangmanMenu.ftl b/trunk/apps/showcase/src/main/webapp/hangman/hangmanMenu.ftl
deleted file mode 100644
index 82bd032..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/hangmanMenu.ftl
+++ /dev/null
@@ -1,18 +0,0 @@
-
-<html>
-<head>
-	<title>Showcase - Hangman - Menu</title>
-</head>
-<body>
-	<ul>
-		<li>
-			<@s.url id="url" action="hangmanAjax" namespace="/hangman" />
-			<@s.a href="%{#url}">Hangman (Ajax)</@s.a>
-		</li>
-		<li>
-			<@s.url id="url" action="hangmanNonAjax" namespace="/hangman" />
-			<@s.a href="%{#url}">Hangman (Non Ajax)</@s.a>
-		</li>
-	</ul>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/hangmanNonAjax.ftl b/trunk/apps/showcase/src/main/webapp/hangman/hangmanNonAjax.ftl
deleted file mode 100644
index 73419f1..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/hangmanNonAjax.ftl
+++ /dev/null
@@ -1,135 +0,0 @@
-<html>
-<head>
-	<title>Showcase - Hangman</title>
-	<@s.head theme="xhtml" />
-</head>
-<body>
-<table bgcolor="green"> 
-  <tr> 
-    <td>
-    <@s.url id="url" value="/hangman/images/hangman.png" />
-    <img alt="Hangman" src="<@s.property value="%{#url}" />"
-           width="197" height="50" border="0"/> 
-    </td> 
-    <td width="70" align="right">
-      <#-- Guesses Left -->
-      <div id="updateGuessLeftDiv">
-      <#if (hangman.guessLeft() >= 0)>
-      <@s.set name="guessLeftImageName" value="%{'Chalkboard_'+hangman.guessLeft()+'.png'}" />
-      <@s.url id="url" value="%{'/hangman/images/'+#guessLeftImageName}" />
-      <img alt="No. Guesses Left"
-      	   src="<@s.property value="%{#url}"/>" width="20" height="20" border="0" />
-      </#if>
-      </div>
-    </td>
-    <td>
-    	<@s.url id="url" value="/hangman/images/guesses-left.png" />
-    	<img alt="Guesses Left"
-            src="<@s.property value="%{#url}" />" width="164" height="11" border="0"/>
-    </td>
-  </tr> 
-  <tr> 
-  	<td></td>
-    <td align="left">
-    <#-- Display Scaffold -->
-  	<div id="updateScaffoldDiv">
-    	<@s.set name="scaffoldImageName" value="%{'scaffold_'+hangman.guessLeft()+'.png'}" />
-    	<@s.url id="url" value="%{'/hangman/images/'+#scaffoldImageName}" />
-    	<img src="<@s.property value="%{#url}" />" border="0"/>
-    </div>
-    </td>
-    <td></td>
-    </tr> 
-  <tr>
-    <td width="160"> 
-      <p align="right">
-      	<@s.url id="url" value="/hangman/images/guess.png" />
-        <img alt="Current Guess" src="<@s.property value="%{#url}" />"
-           align="MIDDLE" width="127" height="20" border="0"/></p> 
-    </td> 
-    <td>
-    <#-- Display Vacab  -->
-    <div id="updateVocabDiv">
-    <#if hangman.gameEnded()>
-		<@s.iterator id="currentCharacter" value="%{hangman.vocab.inCharacters()}" stat="stat">
-			<@s.url id="url" value="%{'/hangman/images/Chalkboard_'+#currentCharacter.toString()+'.png'}" />
-			<img height="36" alt="<@s.property value="%{#currentCharacter}" />"
-		 			src="<@s.property value="%{#url}" />" width="36" border="0" />
-		</@s.iterator>
-	<#else>
-    <@s.iterator id="currentCharacter" value="%{hangman.vocab.inCharacters()}" stat="stat">
-    	<#if hangman.characterGuessedBefore(currentCharacter)>
-    		<@s.set name="chalkboardImageName" value="%{'Chalkboard_'+#currentCharacter.toString()+'.png'}" />
-    		<@s.url id="url" value="%{'/hangman/images/'+#chalkboardImageName}" />
-    		<img height="36" alt="<@s.property value="%{#currentCharacter}" />"
-        		src="<@s.property value="%{#url}" />" width="36" border="0"/>
-    	<#else>
-    		<@s.url id="url" value="/hangman/images/Chalkboard_underscroll.png" />
-    		<img height="36" alt="_"
-        		src="<@s.property value="%{#url}" />" width="36" border="0"/>
-    	</#if>
-	</@s.iterator>
-	</#if>
-	</div>
-    </td> 
-  </tr>
-  <tr> 
-    <td valign="top"> 
-      <p align="right">
-      	<@s.url id="url" value="/hangman/images/choose.png" />
-        <img alt="Choose" src="<@s.property value="%{#url}" />"
-             height="20" width="151" border="0"/>
-      </p> 
-    </td> 
-    <td width="330">
-    
-    <#-- Show Characters Available -->
-    <div id="updateCharacterAvailableDiv">
-    <#if hangman.gameEnded()>
-	<@s.set name="winImageName" value="%{'you-win.png'}" />
-	<@s.set name="looseImageName" value="%{'you-lose.png'}" />
-	<@s.set name="startImageName" value="%{'start.png'}" />
-	<@s.url id="winImageUrl" value="%{'/hangman/images/'+#winImageName}"  />
-	<@s.url id="looseImageUrl" value="%{'/hangman/images/'+#looseImageName}" />
-	<@s.url id="startImageUrl" value="%{'/hangman/images/'+#startImageName}" />
-	<@s.url id="startHref" action="hangmanNonAjax" namespace="/hangman" />
-	
-	<#if hangman.isWin()>
-	<img src="<@s.property value="%{#winImageUrl}" />" width="341" height="44" />
-	<#else>
-	<img src="<@s.property value="%{#looseImageUrl}" />" width="381" height="44" />
-	</#if>
-	<@s.a href="%{#startHref}">
-		<img src="<@s.property value="%{#startImageUrl}" />" width="250" height="43" />
-	</@s.a>
-	<#else>
-	<@s.iterator id="currentCharacter" value="%{hangman.charactersAvailable}" status="stat">
-      <@s.set name="chalkboardImageName" value="%{'Chalkboard_'+#currentCharacter+'.png'}" />
-      <@s.url id="chalkboardImageUrl" value="%{'/hangman/images/'+#chalkboardImageName}" />
-      <@s.url id="spacerUrl" value="/hangman/images/letter-spacer.png" />
-      <@s.url id="url" action="guessCharacterNonAjax" namespace="/hangman">
-      	<@s.param name="character" value="%{#currentCharacter}" />
-      </@s.url>
-      
-      <@s.a href="%{#url}"
-      		  id="%{#currentCharacter}" 
-      		  >
-      	<img height="36" alt="" src="<@s.property value="%{#chalkboardImageUrl}" />" width="36" border="0" />
-      </@s.a>
-	</@s.iterator>
-	</#if>
-	</div>
- 
-   
-   </td>
-  </tr> 
-  <tr>
-  	<td>
-  		
-  	</td>
-  </tr>
-</table>
-</body>
-</html>
-
-
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_0.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_0.png
deleted file mode 100644
index 7485012..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_0.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_1.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_1.png
deleted file mode 100644
index 5a9a82d..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_1.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_2.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_2.png
deleted file mode 100644
index 2fc9cdd..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_2.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_3.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_3.png
deleted file mode 100644
index 8b53770..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_3.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_4.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_4.png
deleted file mode 100644
index ee4d7a5..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_4.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_5.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_5.png
deleted file mode 100644
index 2fec709..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_5.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_A.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_A.png
deleted file mode 100644
index 837cae5..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_A.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_B.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_B.png
deleted file mode 100644
index b69c228..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_B.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_C.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_C.png
deleted file mode 100644
index 17e1485..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_C.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_D.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_D.png
deleted file mode 100644
index 886a380..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_D.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_E.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_E.png
deleted file mode 100644
index bcbea3f..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_E.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_F.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_F.png
deleted file mode 100644
index 506a3c5..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_F.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_G.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_G.png
deleted file mode 100644
index ff73d7f..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_G.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_H.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_H.png
deleted file mode 100644
index 61e95d2..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_H.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_I.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_I.png
deleted file mode 100644
index 23cff08..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_I.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_J.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_J.png
deleted file mode 100644
index 4a4e5fc..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_J.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_K.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_K.png
deleted file mode 100644
index cd124f7..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_K.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_L.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_L.png
deleted file mode 100644
index 8ae5113..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_L.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_M.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_M.png
deleted file mode 100644
index 26ca8ff..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_M.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_N.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_N.png
deleted file mode 100644
index bc3ef22..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_N.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_O.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_O.png
deleted file mode 100644
index 54c1923..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_O.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_P.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_P.png
deleted file mode 100644
index c7c1e00..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_P.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_Q.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_Q.png
deleted file mode 100644
index 9b84be3..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_Q.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_R.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_R.png
deleted file mode 100644
index fdc2887..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_R.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_S.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_S.png
deleted file mode 100644
index 4020d68..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_S.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_T.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_T.png
deleted file mode 100644
index fbc00e6..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_T.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_U.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_U.png
deleted file mode 100644
index 2d2b5da..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_U.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_V.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_V.png
deleted file mode 100644
index dea8443..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_V.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_W.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_W.png
deleted file mode 100644
index b26f97f..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_W.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_X.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_X.png
deleted file mode 100644
index 29dff7c..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_X.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_Y.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_Y.png
deleted file mode 100644
index 9e8a732..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_Y.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_Z.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_Z.png
deleted file mode 100644
index 04b3e33..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_Z.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_underscroll.png b/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_underscroll.png
deleted file mode 100644
index 15f65ab..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/Chalkboard_underscroll.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/choose.png b/trunk/apps/showcase/src/main/webapp/hangman/images/choose.png
deleted file mode 100644
index f445beb..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/choose.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/guess.png b/trunk/apps/showcase/src/main/webapp/hangman/images/guess.png
deleted file mode 100644
index 011978e..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/guess.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/guesses-left.png b/trunk/apps/showcase/src/main/webapp/hangman/images/guesses-left.png
deleted file mode 100644
index 666ca53..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/guesses-left.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/hangman.png b/trunk/apps/showcase/src/main/webapp/hangman/images/hangman.png
deleted file mode 100644
index 8ba1431..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/hangman.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/letter-spacer.png b/trunk/apps/showcase/src/main/webapp/hangman/images/letter-spacer.png
deleted file mode 100644
index bd6a7b0..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/letter-spacer.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/play-again.png b/trunk/apps/showcase/src/main/webapp/hangman/images/play-again.png
deleted file mode 100644
index 48f2455..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/play-again.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_-1.png b/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_-1.png
deleted file mode 100644
index f0d65f8..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_-1.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_0.png b/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_0.png
deleted file mode 100644
index 498e3cb..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_0.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_1.png b/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_1.png
deleted file mode 100644
index 8a24ba3..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_1.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_2.png b/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_2.png
deleted file mode 100644
index 6a1e91d..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_2.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_3.png b/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_3.png
deleted file mode 100644
index c65d235..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_3.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_4.png b/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_4.png
deleted file mode 100644
index 7969f5a..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_4.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_5.png b/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_5.png
deleted file mode 100644
index a15006b..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/scaffold_5.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/start.png b/trunk/apps/showcase/src/main/webapp/hangman/images/start.png
deleted file mode 100644
index 89fd770..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/start.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/you-lose.png b/trunk/apps/showcase/src/main/webapp/hangman/images/you-lose.png
deleted file mode 100644
index 80e1726..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/you-lose.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/images/you-win.png b/trunk/apps/showcase/src/main/webapp/hangman/images/you-win.png
deleted file mode 100644
index c6b3cf7..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/images/you-win.png
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/test.ftl b/trunk/apps/showcase/src/main/webapp/hangman/test.ftl
deleted file mode 100644
index 0cbd17f..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/test.ftl
+++ /dev/null
@@ -1,21 +0,0 @@
-
-<html>
-<head>
-  <@s.head theme="ajax" debug="true" />
-</head>
-<body>
-	
-	
-	<a href="#" id="myAnchor">click</a>
-	
-	<script>
-		var anchor = dojo.byId("myAnchor");
-		alert(anchor);
-		dojo.event.connect(anchor, "onclick", function(event) {
-			alert('aaa');
-		});
-	</script>
-	
-	
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/updateCharacterAvailable.ftl b/trunk/apps/showcase/src/main/webapp/hangman/updateCharacterAvailable.ftl
deleted file mode 100644
index 9dfe7a6..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/updateCharacterAvailable.ftl
+++ /dev/null
@@ -1,47 +0,0 @@
-<#if hangman.gameEnded()>
-	<@s.set name="winImageName" value="%{'you-win.png'}" />
-	<@s.set name="looseImageName" value="%{'you-lose.png'}" />
-	<@s.set name="startImageName" value="%{'start.png'}" />
-	<@s.url id="winImageUrl" value="%{'/hangman/images/'+#winImageName}"  />
-	<@s.url id="looseImageUrl" value="%{'/hangman/images/'+#looseImageName}" />
-	<@s.url id="startImageUrl" value="%{'/hangman/images/'+#startImageName}" />
-	<@s.url id="startHref" action="hangmanAjax" namespace="/hangman" />
-	
-	<#if hangman.isWin()>
-	<img src="<@s.property value="%{#winImageUrl}" />" width="341" height="44" />
-	<#else>
-	<img src="<@s.property value="%{#looseImageUrl}" />" width="381" height="44" />
-	</#if>
-	<@s.a href="%{#startHref}">
-		<img src="<@s.property value="%{#startImageUrl}" />" width="250" height="43" />
-	</@s.a>
-<#else>
-<@s.iterator id="currentCharacter" value="%{hangman.charactersAvailable}" status="stat">
-      <@s.set name="chalkboardImageName" value="%{'Chalkboard_'+#currentCharacter+'.png'}" />
-      <@s.url id="chalkboardImageUrl" value="%{'/hangman/images/'+#chalkboardImageName}" />
-      <@s.url id="spacerUrl" value="/hangman/images/letter-spacer.png" />
-      
-      
-      <@s.a theme="ajax"
-      		  id="%{#currentCharacter}" 
-      		  href="ajax/blank.action"
-      		  notifyTopics="topicGuessMade"
-      		  showErrorTransportText="true">
-      	<img height="36" alt="" src="<@s.property value="%{#chalkboardImageUrl}" />" width="36" border="0" />
-      </@s.a>
-      
-      <#--
-      <a href="#" id="<@s.property value="%{#currentCharacter}"/>" >
-      	<img height="36" alt="" src="<@s.property value="%{#chalkboardImageUrl}" />" width="36" border="0" />
-      </a>
-      
-      <script>
-      	// var anchor = dojo.byId("<@s.property value="%{#currentCharacter}" />");
-      	var anchor = document.getElementById("<@s.property value="%{#currentCharacter}" />");
-      	dojo.event.connect(anchor, "onclick", function(event) {
-      		dojo.event.topic.publish("topicGuessMade", "<@s.property value="%{#currentCharacter}" />");
-      	});
-      </script>
-      -->
-</@s.iterator>
-</#if>
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/updateGuessLeft.ftl b/trunk/apps/showcase/src/main/webapp/hangman/updateGuessLeft.ftl
deleted file mode 100644
index 8b5ef4e..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/updateGuessLeft.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<#if (hangman.guessLeft() >= 0)>
-	<@s.set name="guessLeftImageName" value="%{'Chalkboard_'+hangman.guessLeft()+'.png'}" />
-    <@s.url id="url" value="%{'/hangman/images/'+#guessLeftImageName}" />
-    <img alt="No. Guesses Left"
-      	   src="<@s.property value="%{#url}"/>" width="20" height="20" border="0" />
-</#if>
-      	   
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/updateScaffold.ftl b/trunk/apps/showcase/src/main/webapp/hangman/updateScaffold.ftl
deleted file mode 100644
index afd11b6..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/updateScaffold.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-	<@s.set name="scaffoldImageName" value="%{'scaffold_'+hangman.guessLeft()+'.png'}" />
-    <@s.url id="url" value="%{'/hangman/images/'+#scaffoldImageName}" />
-    <img src="<@s.property value="%{#url}" />" border="0"/>
diff --git a/trunk/apps/showcase/src/main/webapp/hangman/updateVocabCharacters.ftl b/trunk/apps/showcase/src/main/webapp/hangman/updateVocabCharacters.ftl
deleted file mode 100644
index d4b370b..0000000
--- a/trunk/apps/showcase/src/main/webapp/hangman/updateVocabCharacters.ftl
+++ /dev/null
@@ -1,20 +0,0 @@
-<#if hangman.gameEnded()>
-<@s.iterator id="currentCharacter" value="%{hangman.vocab.inCharacters()}" stat="stat">
-	<@s.url id="url" value="%{'/hangman/images/Chalkboard_'+#currentCharacter.toString()+'.png'}" />
-	<img height="36" alt="<@s.property value="%{#currentCharacter}" />"
-		 src="<@s.property value="%{#url}" />" width="36" border="0" />
-</@s.iterator>
-<#else>
-<@s.iterator id="currentCharacter" value="%{hangman.vocab.inCharacters()}" stat="stat">
-    	<#if hangman.characterGuessedBefore(currentCharacter)>
-    		<@s.set name="chalkboardImageName" value="%{'Chalkboard_'+#currentCharacter.toString()+'.png'}" />
-    		<@s.url id="url" value="%{'/hangman/images/'+#chalkboardImageName}" />
-    		<img height="36" alt="<@s.property value="%{#currentCharacter}" />"
-        		src="<@s.property value="%{#url}" />" width="36" border="0"/>
-    	<#else>
-    		<@s.url id="url" value="/hangman/images/Chalkboard_underscroll.png" />
-    		<img height="36" alt="_"
-        		src="<@s.property value="%{#url}" />" width="36" border="0"/>
-    	</#if>
-</@s.iterator>
-</#if>
diff --git a/trunk/apps/showcase/src/main/webapp/help.jsp b/trunk/apps/showcase/src/main/webapp/help.jsp
deleted file mode 100644
index 7da2b14..0000000
--- a/trunk/apps/showcase/src/main/webapp/help.jsp
+++ /dev/null
@@ -1,31 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Struts ~ Getting Support</title>
-</head>
-
-<body>
-    <div id="main">
-        <h4>Getting support</h4>
-
-        <table style="width: auto;">
-            <tr>
-                <th style="width: auto;">Link</th>
-                <th style="width: auto;">Description</th>
-            </tr>
-            <tr>
-                <td><a href="http://struts.apache.org/mail.html">User List</a></td>
-                <td>Use this mailing list if you encounter problems while developing and using with Struts</td>
-            </tr>
-            <tr>
-                <td><a href="http://struts.apache.org/2.x/">Struts 2</a></td>
-                <td>The Struts 2 website</td>
-            </tr>
-        </table>
-    </div>
-
-    <div id="local">
-        <img src='<s:url value="/images/logo.png"/>' alt="Struts Logo" width="290" height="80"/>
-    </div>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/images/struts-power.gif b/trunk/apps/showcase/src/main/webapp/images/struts-power.gif
deleted file mode 100644
index 5f4e9d4..0000000
--- a/trunk/apps/showcase/src/main/webapp/images/struts-power.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/images/struts.gif b/trunk/apps/showcase/src/main/webapp/images/struts.gif
deleted file mode 100644
index 42e7d33..0000000
--- a/trunk/apps/showcase/src/main/webapp/images/struts.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/index.jsp b/trunk/apps/showcase/src/main/webapp/index.jsp
deleted file mode 100644
index 391e002..0000000
--- a/trunk/apps/showcase/src/main/webapp/index.jsp
+++ /dev/null
@@ -1 +0,0 @@
-<% response.sendRedirect("showcase.action"); %>
diff --git a/trunk/apps/showcase/src/main/webapp/integration/modelDriven.jsp b/trunk/apps/showcase/src/main/webapp/integration/modelDriven.jsp
deleted file mode 100644
index ce7938b..0000000
--- a/trunk/apps/showcase/src/main/webapp/integration/modelDriven.jsp
+++ /dev/null
@@ -1,31 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Struts 1 Integration Example</title>
-<s:head/>
-</head>
-<body>
-
-<s:form action="saveGangster" namespace="/integration">
-    
-    <s:textfield 
-            label="Gangster Name"
-            name="name" />
-    <s:textfield
-            label="Gangster Age"
-            name="age" />
-    <s:checkbox
-            label="Gangster Busted Before"
-            name="bustedBefore" />
-    <s:textarea
-            cols="30"
-            rows="5"
-            label="Gangster Description"
-            name="description" />           
-    <s:submit />
-    
-</s:form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/integration/modelDrivenResult.jsp b/trunk/apps/showcase/src/main/webapp/integration/modelDrivenResult.jsp
deleted file mode 100644
index 550c558..0000000
--- a/trunk/apps/showcase/src/main/webapp/integration/modelDrivenResult.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Struts 1 Integration  Example</title>
-<s:head/>
-</head>
-<body>
-	<s:actionmessage />
-    <s:label 
-            label="Gangster Name" 
-            name="name" /><br/>
-    <s:label 
-            label="Gangster Age"
-            name="age" /><br/>
-    <s:label
-            label="Busted Before"
-            name="bustedBefore" /><br/>
-    <s:label
-            label="Gangster Description"
-            name="description" /><br/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/jsf/employee/edit.jsp b/trunk/apps/showcase/src/main/webapp/jsf/employee/edit.jsp
deleted file mode 100644
index 717c825..0000000
--- a/trunk/apps/showcase/src/main/webapp/jsf/employee/edit.jsp
+++ /dev/null
@@ -1,106 +0,0 @@
-<%--
-
- Copyright 2006 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.
-
- $Id$
-
---%>
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-
-<html>
-<!--  todo: make header variable -->
-  <head>
-    <title>JSF Integration Examples</title>
-  </head>
-
-  <body>
-  
-  	<h1>Modify Employee</h1>
-  	
-  	<h:form>
-  		<h:inputHidden value="#{action.currentEmployee.empId}" />
-  		<h:panelGrid columns="3">
-  		    <h:outputText value="Employee Id:" />
-  			<h:inputText id="id" size="5" value="#{action.currentEmployee.empId}" required="true" />
-  			<h:message for="id" />
-  			
-  			<h:outputText value="First Name:" />
-  			<h:inputText id="firstName" size="30" value="#{action.currentEmployee.firstName}" required="true">
-  			    <f:validateLength minimum="2" maximum="30" />
-  			</h:inputText>
-  			<h:message for="firstName" />
-  			
-  			<h:outputText value="Last Name:" />
-  			<h:inputText id="lastName" size="30" value="#{action.currentEmployee.lastName}" required="true">
-  			    <f:validateLength minimum="2" maximum="30" />
-  			</h:inputText>
-  			<h:message for="lastName" />
-  			
-  			<h:outputText value="Salary:" />
-  			<h:inputText id="salary" size="10" value="#{action.currentEmployee.salary}" />
-  			<h:message for="salary" />
-  			
-  			<h:outputText value="Married:" />
-  			<h:selectBooleanCheckbox id="married" value="#{action.currentEmployee.married}" />
-  			<h:message for="married" />
-  			
-  			<h:outputText value="Position:" />
-  			<h:selectOneMenu id="position" value="#{action.currentEmployee.position}">
-  		        <f:selectItems value="#{action.availablePositionsAsMap}" />
-  			</h:selectOneMenu>
-  			<h:message for="position" />
-  			
-  			<h:outputText value="Main Skill:" />
-  			<h:selectOneMenu id="mainSkill" value="#{action.currentEmployee.mainSkill.name}">
-  			    <f:selectItems value="#{action.availableSkills}" />
-  			</h:selectOneMenu>
-  			<h:message for="mainSkill" />
-  			
-  			<h:outputText value="Other Skills:" />
-  			<h:selectManyListbox id="otherSkills" value="#{action.selectedSkills}" >
-  			    <f:selectItems value="#{action.availableSkills}" />
-  			</h:selectManyListbox>
-  			<h:message for="otherSkills" />
-  			
-  			<h:outputText value="Password:" />
-  			<h:inputSecret id="password" value="#{action.currentEmployee.password}" />
-  			<h:message for="password" />
-  			
-  			<h:outputText value="Level:" />
-  			<h:selectOneRadio id="level" value="#{action.currentEmployee.level}" >
-  			    <f:selectItems value="#{action.availableLevelsAsMap}" />
-  			</h:selectOneRadio>
-  			<h:message for="level" />
-  			
-  			<h:outputText value="Comment:" />
-  			<h:inputTextarea id="comment" value="#{action.currentEmployee.comment}" cols="50" rows="3" />
-  			<h:message for="comment" />
-  		</h:panelGrid>
-  		
-  		<h:commandButton value="Save" action="#{action.save}" />
-  		<br /><br />
-  		<h:outputLink value="list.action">
-  			<h:outputText value="Back" />
-  		</h:outputLink>
-  	</h:form>
-  </body>
-
-</html>
-
-</f:view>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/jsf/employee/list.jsp b/trunk/apps/showcase/src/main/webapp/jsf/employee/list.jsp
deleted file mode 100644
index cad7d1c..0000000
--- a/trunk/apps/showcase/src/main/webapp/jsf/employee/list.jsp
+++ /dev/null
@@ -1,69 +0,0 @@
-<%--
-
- Copyright 2006 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.
-
- $Id$
-
---%>
-
-<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
-<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
-
-<f:view>
-
-<html>
-<head><title>Available Employees</title></head>
-
-<body>
-<h1>Available Employees</h1>
-  	
-  	<h:dataTable value="#{action.availableItems}" var="e">
-  		<h:column>
-  			<f:facet name="header">
-  				<h:outputText value="Id" />
-  			</f:facet>
-  			<h:outputLink value="edit.action">
-  				<f:param name="empId" value="#{e.empId}" />
-  				<h:outputText value="#{e.empId}" />
-  			</h:outputLink>	
-  		</h:column>
-		<h:column>
-  			<f:facet name="header">
-  				<h:outputText value="First Name" />
-  			</f:facet>
-  			<h:outputText value="#{e.firstName}" />
-  		</h:column>
-  		<h:column>
-  			<f:facet name="header">
-  				<h:outputText value="Last Name" />
-  			</f:facet>
-  			<h:outputText value="#{e.lastName}" />
-  		</h:column>
-  	</h:dataTable>	
-  	
-  	<p>
-  	<h:outputLink value="edit.action">
-  		<h:outputText value="Create new Employee" />
-  	</h:outputLink>
-  	</p>
-  	
-  	<h:outputLink value="../../showcase.action">
-  		<h:outputText value="Back to Showcase Startpage" />
-  	</h:outputLink>
-  </body>
-
-</html>
-
-</f:view>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/jsf/index.jsp b/trunk/apps/showcase/src/main/webapp/jsf/index.jsp
deleted file mode 100644
index e546668..0000000
--- a/trunk/apps/showcase/src/main/webapp/jsf/index.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - JSF Integration</title>
-</head>
-<body>
-<h1> JavaServer Faces Integration </h1>
-
-<p>
-The following pages show how Struts and JSF components can work together,
-each doing what they do best.
-</p>
-
-<p>
-    <ul>
-        <li><s:url id="url" namespace="/jsf/employee" action="list"/><s:a href="%{url}">List available Employees</s:a></li>
-        <li><s:url id="url" namespace="/jsf/employee" action="edit"/><s:a href="%{url}">Create/Edit Employee</s:a></li>
-    </ul>
-</p>
-
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/modelDriven/modelDriven.jsp b/trunk/apps/showcase/src/main/webapp/modelDriven/modelDriven.jsp
deleted file mode 100644
index 346ffce..0000000
--- a/trunk/apps/showcase/src/main/webapp/modelDriven/modelDriven.jsp
+++ /dev/null
@@ -1,31 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Model Driven Example</title>
-<s:head/>
-</head>
-<body>
-
-<s:form action="modelDrivenResult" method="POST" namespace="/modelDriven">
-    
-    <s:textfield 
-            label="Gangster Name"
-            name="name" />
-    <s:textfield
-            label="Gangster Age"
-            name="age" />
-    <s:checkbox
-            label="Gangster Busted Before"
-            name="bustedBefore" />
-    <s:textarea
-            cols="30"
-            rows="5"
-            label="Gangster Description"
-            name="description" />           
-    <s:submit />
-    
-</s:form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/modelDriven/modelDrivenResult.jsp b/trunk/apps/showcase/src/main/webapp/modelDriven/modelDrivenResult.jsp
deleted file mode 100644
index 5b96cca..0000000
--- a/trunk/apps/showcase/src/main/webapp/modelDriven/modelDrivenResult.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Model Driven Example</title>
-<s:head/>
-</head>
-<body>
-
-    <s:label 
-            label="Gangster Name" 
-            name="name" /><br/>
-    <s:label 
-            label="Gangster Age"
-            name="age" /><br/>
-    <s:label
-            label="Busted Before"
-            name="bustedBefore" /><br/>
-    <s:label
-            label="Gangster Description"
-            name="description" /><br/>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/person/editPeople.jsp b/trunk/apps/showcase/src/main/webapp/person/editPeople.jsp
deleted file mode 100644
index e836cef..0000000
--- a/trunk/apps/showcase/src/main/webapp/person/editPeople.jsp
+++ /dev/null
@@ -1,41 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Edit Persons (batch-edit)</title>
-</head>
-
-<body>
-<s:form action="doEditPerson" theme="simple" validate="false">
-
-    <table>
-        <tr>
-            <th>ID</th>
-            <th>First Name</th>
-            <th>Last Name</th>
-        </tr>
-        <s:iterator id="p" value="persons">
-            <tr>
-                <td>
-                    <s:property value="%{id}" />
-                </td>
-                <td>
-                    <s:textfield label="First Name" name="persons(%{id}).name" value="%{name}" theme="simple" />
-                </td>
-                <td>
-                    <s:textfield label="Last Name" name="persons(%{id}).lastName" value="%{lastName}" theme="simple"/>
-                </td>
-            </tr>
-        </s:iterator>
-    </table>
-
-    <s:submit value="Save all persons"/>
-</s:form>
-
-<ul>
-    <li><a href="newPerson!input.action">Create</a> a new person</li>
-    <li><a href="listPeople.action">List</a> all people</li>
-</ul>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/person/index.jsp b/trunk/apps/showcase/src/main/webapp/person/index.jsp
deleted file mode 100644
index 48afafe..0000000
--- a/trunk/apps/showcase/src/main/webapp/person/index.jsp
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<head>
-    <title>Acme Corp</title>
-</head>
-
-<body>
-<ul>
-    <li><a href="newPerson!input.action">Create</a> a new person</li>
-    <li><a href="listPeople.action">List</a> all people</li>
-</ul>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/person/listPeople.ftl b/trunk/apps/showcase/src/main/webapp/person/listPeople.ftl
deleted file mode 100644
index b2b854f..0000000
--- a/trunk/apps/showcase/src/main/webapp/person/listPeople.ftl
+++ /dev/null
@@ -1,28 +0,0 @@
-<html>
-<head>
-    <title>All People</title>
-</head>
-
-<body>
-
-There are ${peopleCount} people... 
-<table>
-    <tr>
-        <th>ID</th>
-        <th>Name</th>
-    </tr>
-<#list people as person>
-    <tr>
-        <td>${person.id}</td>
-        <td>${person.name}</td>
-        <td>${person.lastName}</td>
-    </tr>
-</#list>
-</table>
-
-<ul>
-    <li><a href="editPerson.action">Edit people</a></li>
-    <li><a href="newPerson!input.action">Create</a> a new person</li>
-</ul>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/person/newPerson.ftl b/trunk/apps/showcase/src/main/webapp/person/newPerson.ftl
deleted file mode 100644
index 142eb07..0000000
--- a/trunk/apps/showcase/src/main/webapp/person/newPerson.ftl
+++ /dev/null
@@ -1,19 +0,0 @@
-<html>
-<head>
-    <title>New Person</title>
-</head>
-
-<body>
-<@s.form action="newPerson">
-    <@s.textfield label="First Name" name="person.name"/>
-    <@s.textfield label="Last Name" name="person.lastName"/>
-    <@s.submit value="Create person"/>
-</@s.form>
-
-<ul>
-    <li><a href="editPerson.action">Edit people</a></li>
-    <li><a href="listPeople.action">List</a> all people</li>
-</ul>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/showcase.jsp b/trunk/apps/showcase/src/main/webapp/showcase.jsp
deleted file mode 100644
index 10d2fcf..0000000
--- a/trunk/apps/showcase/src/main/webapp/showcase.jsp
+++ /dev/null
@@ -1,82 +0,0 @@
-<%-- 
-    showcase.jsp
-    
-    @version $Date$ $Id$
---%>
-
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Showcase</title>
-    <s:head theme="simple"/>
-</head>
-
-<body>
-<h1>Showcase samples</h1>
-
-<p>The given examples will demonstrate the usages of all Struts tags as well as validations etc.</p>
-
-<p>
-    <ul>
-        <!-- config-browser -->
-        <li><s:url id="url" namespace="/config-browser" action="index"/><s:a href="%{url}">Configuration browser (Great for development!)</s:a></li>
-
-        <!-- continuation -->
-        <li><s:url id="url" namespace="/continuations" action="guess"/><s:a href="%{url}">Continuations Example</s:a></li>
-        
-        <!-- tags -->
-        <li><s:url id="url" value="/tags"/><s:a href="%{url}">Tags Examples</s:a></li>
-        
-        <!-- fileupload -->
-        <li><s:url id="url" namespace="/fileupload" action="upload"/><s:a href="%{url}">File Upload Example</s:a></li>
-
-        <!-- crud -->
-        <li><s:url id="url" value="/empmanager"/><s:a href="%{url}">CRUD Examples</s:a></li>
-        
-        <!-- person manager sample -->
-        <li><s:url id="url" value="/person"/><s:a href="%{url}">PersonManager Sample</s:a></li>
-
-        <!-- validation -->
-        <li><s:url id="url" value="/validation"/><s:a href="%{url}">Validation Examples</s:a></li>
-
-        <!-- ajax -->
-        <li><s:url id="url" value="/ajax"/><s:a href="%{url}">AJAX Examples</s:a></li>
-        
-        <!-- action chaining -->
-        <li><s:url id="url" namespace="actionchaining" action="actionChain1" method="input" /><s:a href="%{url}">Action Chaining Example</s:a></li>
-
-        <!-- execute and wait -->
-        <li><s:url id="url" value="/wait"/><s:a href="%{url}">Execute and Wait Examples</s:a></li>
-
-        <!-- token -->
-        <li><s:url id="url" value="/token"/><s:a href="%{url}">Token Examples (double post)</s:a></li>
-
-        <!-- filedownload -->
-        <li><s:url id="url" value="/filedownload"/><s:a href="%{url}">File Download Example</s:a></li>
-        
-        <!-- model-driven -->
-        <li><s:url id="url" action="modelDriven" namespace="/modelDriven" method="input"/><s:a href="%{url}">Model Driven Example</s:a>
-        
-        <!-- conversion -->
-        <li><s:url id="url" value="/conversion" /><s:a href="%{url}">Conversion Example</s:a></li>
-        
-        <!--  freemarker -->
-        <li><s:url id="url" value="/freemarker" /><s:a href="%{#url}">Freemarker Example</s:a></li>
-        
-        <!--  JavaServer Faces -->
-        <li><s:url id="url" value="/jsf" /><s:a href="%{#url}">JavaServer Faces Example</s:a></li>
-        
-        <!--  Integration -->
-        <li><s:url id="url" action="editGangster" namespace="/integration"/><s:a href="%{#url}">Struts 1.3 Integration Example</s:a></li>
-        
-        <!--  Chat (AJAX) Example -->
-        <li><s:url id="url" value="/chat" /><s:a href="%{#url}">Chat (AJAX) Example</s:a></li>
-        
-        <!--  Hangman (AJAX and Non AJAX) Example -->
-        <li><s:url id="url" action="hangmanMenu" namespace="/hangman"/><s:a href="%{#url}">Hangman (AJAX and Non AJAX) Example</s:a>
-
-    </ul>
-</p>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/styles/forms.css b/trunk/apps/showcase/src/main/webapp/styles/forms.css
deleted file mode 100644
index 4cc2188..0000000
--- a/trunk/apps/showcase/src/main/webapp/styles/forms.css
+++ /dev/null
@@ -1,102 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */
-
-/* FORM ELEMENTS */
-	form {
-		margin:0;
-		padding:0;
-	}
-	form div,
-	form p {
-		font-size: 1em;
-		margin: 0 0 1em 0;
-		padding: 0;
-	}
-	label {
-		font-weight: bold;
-	}
-	fieldset {
-		border: 1px solid #eee;
-		padding: 5px 10px;
-		margin: 0 0 1.5em 0;
-	}
-	fieldset legend {
-		color: #666;
-		font-size: 1.1em;
-		font-weight: bold;
-		margin: 0 0 0 0px;
-		padding: 0;
-		background-color: #ECF1F9;
-	}
-	* html fieldset legend {
-		margin: 0 0 10px -10px;
-	}
-	fieldset ul {
-		list-style: none;
-		margin: 0 0 1.5em 0;
-		padding: 0;
-	}
-	fieldset ul li {
-		list-style: none;
-		margin: 0 0 0.5em 0;
-		padding: 0;
-	}
-     
-	
-	input, select, textarea {
-		font-size:1em; 
-		font-family: arial, helvetica, verdana, sans-serif;
-        
-        margin: 0;
-		padding: 2px;
-	}
-	
-	input, select {
-		vertical-align:middle;
-	}
-	
-	textarea {
-		width: 200px;
-		height: 8em;
-	}
-	
-	input.check {
-		border: none;
-		width: auto;
-		height: auto;
-		margin: 0;
-	}
-	input.radio {
-		border: none;
-		width: auto;
-		height: auto;
-		margin: 0;
-	}
-	input.file {
-		height: auto;
-		width: 250px;
-	}
-	input.readonly {
-		background-color: transparent;
-		border: none;
-	}
-	input.button {
-		width: 10em;
-		border:1px solid black;
-		background-color: #ddd;
-	}
-	input.image {
-		border: none;
-		width: auto;
-		height: auto; 
-	}
-	
-    form div.submit {
-		margin: 1em 0;
-	}
-    form div.submit input {
-		height: 2em;
-        width: 15em;
-	}
-	
-/* END FORM ELEMENTS */
-		
diff --git a/trunk/apps/showcase/src/main/webapp/styles/layout-navtop-1col.css b/trunk/apps/showcase/src/main/webapp/styles/layout-navtop-1col.css
deleted file mode 100644
index 595123f..0000000
--- a/trunk/apps/showcase/src/main/webapp/styles/layout-navtop-1col.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */
-
-@import url("nav-horizontal.css");
- 
-/* NAV BAR AT THE TOP AND ONE COLUMN OF CONTENT */
-    div#content {
-        position: relative;
-        width: 98%;
-        
-        margin: 0 auto 20px auto;
-        padding: 0;
-        
-        text-align: left;
-    }
-    div#main {
-        width: 100%;
-    }
-    div#local {
-        width: 100%;
-		  display: none;
-    }
-    div#sub {
-        width: 100%;
-    }
-    div#nav {
-        position: absolute;
-        top: -15px;
-        left: 0;
-        width: 100%;
-        
-        text-align: left;
-    }
-/* END CONTENT */
diff --git a/trunk/apps/showcase/src/main/webapp/styles/layout-navtop-localleft.css b/trunk/apps/showcase/src/main/webapp/styles/layout-navtop-localleft.css
deleted file mode 100644
index a12210c..0000000
--- a/trunk/apps/showcase/src/main/webapp/styles/layout-navtop-localleft.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */
-
-@import url("nav-horizontal.css");
-
-/* NAV BAR AT THE TOP, LOCAL NAVIGATION ON THE LEFT AND ONE COLUMN OF CONTENT */
-    div#content {
-        position: relative;
-        width: 98%;
-        
-        margin: 5em auto 20px auto;
-        padding: 0;
-        
-        text-align: left;
-    }
-    div#main {
-        float: right;
-        width: auto;
-        display: inline;
-    }
-    div#local {
-        float: left;
-        width: 275px;
-        display: inline;
-    }
-    div#sub {
-        display: none;
-    }
-    div#nav {
-        position: absolute;
-        top: -15px;
-        left: 0;
-        width: 100%;
-        
-        text-align: left;
-    }
-/* END CONTENT */
diff --git a/trunk/apps/showcase/src/main/webapp/styles/layout.css b/trunk/apps/showcase/src/main/webapp/styles/layout.css
deleted file mode 100644
index 5a7aec1..0000000
--- a/trunk/apps/showcase/src/main/webapp/styles/layout.css
+++ /dev/null
@@ -1,136 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */
-
-/* SITE SPECIFIC LAYOUT */
-    body {
-        margin: 0;
-        padding: 0;
-        
-        background: white;
-              
-        text-align: center;
-    }
-    div#page {
-        width: 98%;
-        
-        margin:  0 auto;
-        padding: 0;
-        
-        text-align: center;
-    }
-    
-    /* HEADER */
-        div#header {
-            margin: 0;
-            padding: 5px 0px 0 0;
-            
-            color: white;
-            background: #818EBD;
-            
-            text-align: left;
-        }
-        div#branding {
-            float: left;
-            width: 40%;
-            
-            margin: 0;
-            padding: 5px 0 5px 10px;
-            
-            text-align: left;
-        }
-        div#search {
-            float: right;
-            width: 49%;
-            
-            margin: 0;
-            padding: 8px 10px 0 0;
-            
-            text-align: right;
-        }
-    div#header_spacer {
-            display: block;
-            height: 5em;
-            background-color: transparent;
-        }
-    /* END HEADER */
-
-
-    /* CONTENT */
-
-    /* END HEADER */
-
-
-    /* CONTENT */
-        div#content {
-
-        }
-        
-        /* MAIN */
-            div#main {
-                
-            }
-        /* END MAIN */
-        
-        /* SUB */
-            div#sub {
-                
-            }
-        /* END SUB */
-        
-    /* END CONTENT */
-    
-    
-    /* FOOTER */
-        div#footer {
-            color: white;
-            background-color: #818EBD;
-            border-width:0;
-				margin-bottom: 4px;
-        }
-        div#footer p {
-            font-size: 0.8em;
-            
-            margin: 0;
-            padding: 5px;
-        }
-    /* END FOOTER */
-/* END LAYOUT */
-
-
-
-
-/* UL.SUBNAV */
-    ul.subnav {
-        margin: 0;
-        padding: 0;
-        
-        font-size: 0.8em;
-        list-style: none;
-    }
-    ul.subnav li {
-        margin: 0 0 1em 0;
-        padding: 0;
-        list-style: none;
-    }
-    ul.subnav li a,
-    ul.subnav li a:link,
-    ul.subnav li a:visited,
-    ul.subnav li a:active {
-        text-decoration: none;
-        font-weight: bold;
-        color: black;
-    }
-    ul.subnav li a:hover {
-        text-decoration: underline;
-    }
-    ul.subnav li strong {
-        padding: 0 0 0 12px;
-        background: url("../i/subnav-highlight.gif") left top no-repeat transparent;
-    }
-    ul.subnav li strong a,
-    ul.subnav li strong a:link,
-    ul.subnav li strong a:visited,
-    ul.subnav li strong a:active {
-        color: white;
-        background-color: #818EBD;
-    }
-/* END UL.SUBNAV */
diff --git a/trunk/apps/showcase/src/main/webapp/styles/main.css b/trunk/apps/showcase/src/main/webapp/styles/main.css
deleted file mode 100644
index 3085ed3..0000000
--- a/trunk/apps/showcase/src/main/webapp/styles/main.css
+++ /dev/null
@@ -1,5 +0,0 @@
-@import url(layout-navtop-localleft.css);
-@import url(layout.css);
-@import url(forms.css);
-@import url(typo.css);
-@import url(tools.css);
diff --git a/trunk/apps/showcase/src/main/webapp/styles/nav-horizontal.css b/trunk/apps/showcase/src/main/webapp/styles/nav-horizontal.css
deleted file mode 100644
index 8e94d22..0000000
--- a/trunk/apps/showcase/src/main/webapp/styles/nav-horizontal.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */
-
-/* NAV */
-	div#nav {
-        font-size: 0.8em;
-    }
-    * html div#nav {
-        /* hide ie/mac \*/
-        height: 1%;
-        /* end hide */
-    }
-    div#nav div.wrapper {
-        position: absolute;
-        left: 0;
-        bottom: 0;
-        width: 100%;
-    }
-    div#nav ul {
-        width: auto; 
-        width: 100%;
-                
-        margin: 0;
-        padding: 0;
-        
-        line-height: 1em;
-        list-style: none;
-    }
-    div#nav li {
-        float: left;
-        display: inline;
-   
-        list-style: none;
-        
-        margin: 0;
-        padding: 0;
-        
-        line-height: 1em;
-        border-right: 1px solid #aaa;
-    }
-    div#nav li.last {
-        border-right: none;
-    }
-    div#nav a,
-    div#nav a:link,
-    div#nav a:active,
-    div#nav a:visited {
-        display: inline-block;
-        /* hide from ie/mac \*/
-        display: block;
-        /* end hide */
-        font-weight: bold;
-        text-decoration: none;
-        
-        margin: 0;
-        padding: 5px 10px 5px 10px;
-        
-        color: black;
-        background: #ddd;
-    }
-    div#nav a:hover {
-        text-decoration: underline;
-    }
-    div#nav strong {
-        display: inline-block;
-        /* hide from ie/mac \*/
-        display: block;
-        /* end hide */
-        
-        color: white;
-        background: #818EBD;
-    }
-    div#nav strong a,
-    div#nav strong a:link,
-    div#nav strong a:active,
-    div#nav strong a:visited,
-    div#nav strong a:hover {
-       color: white;
-       background-color: #818EBD;
-    }
-/* END NAV */
diff --git a/trunk/apps/showcase/src/main/webapp/styles/tools.css b/trunk/apps/showcase/src/main/webapp/styles/tools.css
deleted file mode 100644
index 351b103..0000000
--- a/trunk/apps/showcase/src/main/webapp/styles/tools.css
+++ /dev/null
@@ -1,68 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */
-
-/* clearing */
-	.stretch,
-	.clear {
-		clear:both; 
-		height:1px; 
-		margin:0; 
-		padding:0; 
-		font-size: 15px;
-		line-height: 1px;
-	}
-	.clearfix:after {
-		content: "."; 
-		display: block; 
-		height: 0; 
-		clear: both; 
-		visibility: hidden;
-	}
-	* html>body .clearfix {
-		display: inline-block; 
-		width: 100%;
-	}
-	
-	* html .clearfix {
-		/* Hides from IE-mac \*/
-		height: 1%;
-		/* End hide from IE-mac */
-	}
-/* end clearing */
-
-
-/* replace */
-	.replace {
-		display:block;
-		
-		background-repeat: no-repeat;
-		background-position: left top;
-		background-color:transparent;
-	}
-	/* tidy these up */
-	.replace * {
-		text-indent: -10000px;
-		display:block;
-		
-		background-repeat: no-repeat;
-		background-position: left top;
-		background-color:transparent;
-	}
-	.replace a {
-		text-indent:0;
-	}
-	.replace a span {
-		text-indent:-10000px;
-	}
-/* end replace */
-
-
-/* accessibility */
-     span.accesskey {
-     	text-decoration:none;
-     }
-     .accessibility {
-     	position: absolute;
-     	top: -999em;
-     	left: -999em;
-     }
-/* end accessibility */
diff --git a/trunk/apps/showcase/src/main/webapp/styles/typo.css b/trunk/apps/showcase/src/main/webapp/styles/typo.css
deleted file mode 100644
index 349bd0b..0000000
--- a/trunk/apps/showcase/src/main/webapp/styles/typo.css
+++ /dev/null
@@ -1,195 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */
-
-/* TYPOGRAPHY */
-	body {
-		text-align: left;
-		font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
-		font-size: 76%;
-        line-height: 1em;
-		color: #333;
-		background: White;
-	}
-	div {
-		font-size: 1em;
-	}
-	img {
-		border: 0;
-	}
-	
-/* LINKS */
-	a,
-	a:link 
-	a:active {
-		color: blue;
-		text-decoration: underline;
-	}
-	a:visited {
-		color: purple;
-	}
-	a:hover {
-        color: red;
-		text-decoration: none;
-	}
-/* END LINKS */
-	
-/* HEADINGS */
-	h1 {
-		font-size: 2em;
-		line-height: 1.5em;
-		margin: 0 0 0.5em 0;
-		padding: 0;
-        color: black;
-	}
-
-    h1.title {
-        font-style: italic;
-        font-weight: bold;
-        color: white;
-    }
-
-	h2 {
-		font-size: 1.5em;
-        line-height: 1.5em;
-		margin: 0 0 0.5em 0;
-		padding: 0;
-        color: black;
-	}
-	h3 {
-		font-size: 1.3em;
-		line-height: 1.3em;
-		margin: 0 0 0.5em 0;
-		padding:0;
-        color: black;
-	}
-	h4 {
-		font-size: 1.2em;
-		line-height: 1.3em;
-		margin: 0 0 0.25em 0;
-		padding: 0;
-        color: black;
-	}
-	h5 {
-		font-size: 1.1em;
-		line-height: 1.3em;
-		margin: 0 0 0.25em 0;
-		padding: 0;
-        color: black;
-	}
-	h6 {
-		font-size: 1em;
-		line-height: 1.3em;
-		margin: 0 0 0.25em 0;
-		padding: 0;
-        color: black;
-	}
-/* END HEADINGS */
-
-/* TEXT */
-	p {
-		font-size: 1em;
-		margin: 0 0 1.5em 0;
-		padding: 0;
-		line-height:1.4em;
-	}
-
-	blockquote {
-		margin-left:10px;
-		margin-right:10px;
-        margin-top:0px;
-        margin-bottom:0px;
-		display: block;
-		font: italic large Verdana, Geneva, Arial, Helvetica, sans-serif;
-		color: #A9A9A9;
-        background-color:#CDFFAA;
-	}
-
-    blockquote p {
-        padding:5px;
-        margin: 0;
-    }
-
-	pre {
-		font-family: monospace;
-		font-size: 1.0em;
-	}
-	strong, b {
-		font-weight: bold;
-	}
-	em, i {
-		font-style:italic;
-	}
-    code {
-        font-family: "Courier New", Courier, monospace;
-        font-size: 1em;
-        white-space: pre;
-    }
-/* END TEXT */
-	
-/* LISTS */
-	ul {
-        line-height:1.4em;
-		margin: 0 0 1.5em 0;
-		padding: 0;
-	}
-	ul li {
-		margin: 0 0 0.25em 30px;
-		padding: 0;
-	}
-	ol {
-		font-size: 1.0em;
-		line-height: 1.4em;
-		margin: 0 0 1.5em 0;
-		padding: 0;
-	}
-	ol li {
-		font-size: 1.0em;
-		margin: 0 0 0.25em 30px;
-		padding: 0;
-	}
-	dl {
-		margin: 0 0 1.5em 0;
-		padding: 0;
-		line-height: 1.4em;
-	}
-	dl dt {
-		font-weight: bold;
-		margin: 0.25em 0 0.25em 0;
-		padding: 0;
-	}
-	dl dd {
-		margin: 0 0 0 30px;
-		padding: 0;
-	}
-/* END LISTS */
-	
-	
-/* TABLE */
-	table {
-        font-size: 1em;
-		margin: 0 0 1.5em 0;
-        padding: 0;
-	}
-	table caption {
-		font-weight: bold;
-		margin: 0 0 0 0;
-		padding: 0 0 1.5em 0;
-	}
-	th {
-		font-weight: bold;
-		text-align: left;
-	}
-	td {
-		font-size: 1em;
-	}
-/* END TABLE */	
-	
-	hr {
-		display: none;
-	}
-	div.hr {
-		height: 1px;
-		margin: 1.5em 10px;
-		border-bottom: 1px dotted black;
-	}
-	
-/* END TYPOGRAPHY */	
diff --git a/trunk/apps/showcase/src/main/webapp/tags/index.jsp b/trunk/apps/showcase/src/main/webapp/tags/index.jsp
deleted file mode 100644
index 88fa036..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/index.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tags </title>
-</head>
-<body>
-<h1> Tags </h1>
-
-<ul>
-    <li><s:url id="url" value="/tags/non-ui/" /><s:a href="%{url}">Non UI Tags Examples</s:a></li>
-    <li><s:url id="url" value="/tags/ui" /><s:a href="%{url}">UI Tags Example</s:a></li>
-</ul>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefix.ftl b/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefix.ftl
deleted file mode 100644
index 70b8161..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefix.ftl
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-<html>
-<head>
-	<title>Showcase - Tags - Non UI - Action Prefix (freemarker)</title>
-</head>
-<body>
-	
-	You have come to this page because you used an 'action' prefix.<p/>
-	
-	The text you've enter is ${text?default('')}<p/>
-	
-	<@s.url id="url" action="actionPrefixExampleUsingFreemarker" namespace="/tags/non-ui/actionPrefix" />
-	<@s.a href="%{#url}">Back</@s.a>
-	
-</body>
-</html>
-
-
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefixExample.ftl b/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefixExample.ftl
deleted file mode 100644
index 9407713..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefixExample.ftl
+++ /dev/null
@@ -1,45 +0,0 @@
-
-<html>
-	<head>
-		<title>Showcase - Tags - Non UI - Action Prefix (Freemarker)</title>
-	</head>
-	<body>
-		<b>Action Prefix</b><br/>
-		By clicking on 'action prefix' button, the request will go to the action alias 'actionPrefix'
-		instead of the normal 'submit' action alias. <p/><p/>
-		
-		<b>Method Prefix</b><br/>
-		By clicking on the 'method prefix' button, the request will cause Struts to invoke 'submit' 
-		action alias's 'alternateMethod' method instead of the default 'execute' method.<p/>
-		
-		<b>Redirect Prefix</b><br/>
-		By clicking on the 'redirect prefix' button, the request will get redirected to www.google.com 
-		instead<p/>
-		
-		<b>Redirect Action Prefix</b><br/>
-		By clicking on the 'redirect-action prefix' button, the request will get redirected to 
-		an action alias of 'redirectActionPrefix' instead of 'submit' action alias. Since this is a
-		redirect (a new request is issue from the client), the text entered will be lost.<p/>
-		
-		
-		<@s.url id="url" action="viewSource" namespace="/tags/non-ui/actionPrefix" />
-		The JSP code can be read <@s.a href="%{#url}">here</@s.a>.
-		
-	
-		<@s.form action="submit" namespace="/tags/non-ui/actionPrefix" method="POST">
-			
-			<@s.textfield label="Enter Some Text" name="text" />
-			
-			<@s.submit name="action:actionPrefix" value="%{'action prefix'}" />
-			
-			<@s.submit name="method:alternateMethod" value="%{'method prefix'}" />
-			
-			<@s.submit name="redirect:http://www.google.com" value="%{'redirect prefix'}" />
-			
-			<@s.submit name="redirect-action:redirectActionPrefix" value="%{'redirect-action prefix'}" />
-			
-			<@s.submit value="Normal Submit" />
-		</@s.form>
-	</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/index.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/index.jsp
deleted file mode 100644
index e134c71..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/index.jsp
+++ /dev/null
@@ -1,13 +0,0 @@
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tags - Non-Ui - Action Prefix</title>
-</head>
-<body>
-    <ul><s:url id="url" action="actionPrefixExampleUsingFreemarker" namespace="/tags/non-ui/actionPrefix" />
-    <s:a href="%{#url}">Action Prefix Example (Freemarker)</s:a></ul>
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/methodPrefix.ftl b/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/methodPrefix.ftl
deleted file mode 100644
index fe9ac75..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/methodPrefix.ftl
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-<html>
-<head>
-	<title>Showcase - Tags - Non UI - Action Prefix (freemarker)</title>
-</head>
-<body>
-	
-	You have come to this page because you used an 'method' prefix.<p/>
-	
-	The text you've enter is ${text?default('')}<p/>
-	
-	<@s.url id="url" action="actionPrefixExampleUsingFreemarker" namespace="/tags/non-ui/actionPrefix" />
-	<@s.a href="%{#url}">Back</@s.a>
-	
-</body>
-</html>
-
-
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/normalSubmit.ftl b/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/normalSubmit.ftl
deleted file mode 100644
index c183d97..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/normalSubmit.ftl
+++ /dev/null
@@ -1,17 +0,0 @@
-
-<html>
-<head>
-	<title>Showcase - Tags - Non UI - Action Prefix (freemarker)</title>
-</head>
-<body>
-	
-	You have come to this page because you did a normal submit.<p/>
-	
-	The text you've enter is %{text}<p/>
-	
-	<@s.url id="url" action="actionPrefixExampleUsingFreemarker" namespace="/tags/non-ui/prefix" />
-	<@s.a href="%{#url}">Back</@s.a>
-	
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/redirectActionPrefix.ftl b/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/redirectActionPrefix.ftl
deleted file mode 100644
index c991ee3..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/redirectActionPrefix.ftl
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-<html>
-<head>
-	<title>Showcase - Tags - Non UI - Action Prefix (freemarker)</title>
-</head>
-<body>
-	
-	You have come to this page because you used an 'redirect-action' prefix.<p/>
-	
-	Because this is a 'redirect-action', the text will be lost, due to a redirection
-	implies a new request being issued from the client.<p/>
-	
-	The text you've enter is ${text?default('')}<p/>
-	
-	<@s.url id="url" action="actionPrefixExampleUsingFreemarker" namespace="/tags/non-ui/actionPrefix" />
-	<@s.a href="%{#url}">Back</@s.a>
-	
-</body>
-</html>
-
-
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/includedPage.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/includedPage.jsp
deleted file mode 100644
index bf84a37..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/includedPage.jsp
+++ /dev/null
@@ -1 +0,0 @@
-<h1>This is INCLUDED by the action tag</h1>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/includedPage2.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/includedPage2.jsp
deleted file mode 100644
index 2b73ee0..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/includedPage2.jsp
+++ /dev/null
@@ -1,2 +0,0 @@
-
-<h1>This is INCLUDED by the action tag (Page2)</h1>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/includedPage3.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/includedPage3.jsp
deleted file mode 100644
index cddd14d..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/includedPage3.jsp
+++ /dev/null
@@ -1,2 +0,0 @@
-
-<h1>This is INCLUDED by the action tag (Page3)</h1>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/showActionTagDemo.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/showActionTagDemo.jsp
deleted file mode 100644
index c0340a9..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionTag/showActionTagDemo.jsp
+++ /dev/null
@@ -1,43 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Non-Ui Tag - Action Tag </title>
-</head>
-<body>
-
-<div style="margin: 5px; border: solid 1px; ">
-<h1> This is Not - Included by the Action Tag</h1>
-</div>
-
-
-<!-- lets include the first page many times -->
-<div style="margin: 5px; border: solid 1px; ">
-<s:action name="includePage" namespace="/tags/non-ui/actionTag" executeResult="true" />
-<s:action name="includePage" namespace="/tags/non-ui/actionTag" executeResult="true" />
-<s:action name="includePage" namespace="/tags/non-ui/actionTag" executeResult="true" />
-</div>
-
-
-<!-- lets include the second page many times -->
-<div style="margin: 5px; border: solid 1px; ">
-<s:action name="includePage2" namespace="/tags/non-ui/actionTag" executeResult="true" />
-<s:action name="includePage2" namespace="/tags/non-ui/actionTag" executeResult="true" />
-<s:action name="includePage2" namespace="/tags/non-ui/actionTag" executeResult="true" />
-</div>
-
-
-<!--  lets include the third page many time -->
-<div style="margin: 5px; margin: 5px; border: solid 1px; ">
-<s:action name="includePage3" namespace="/tags/non-ui/actionTag" executeResult="true" />
-<s:action name="includePage3" namespace="/tags/non-ui/actionTag" executeResult="true" />
-<s:action name="includePage3" namespace="/tags/non-ui/actionTag" executeResult="true" />
-</div>
-
-
-<s:url id="url" action="lookAtSource" namespace="/tags/non-ui/actionTag" />
-<s:a href="%{#url}">Source</s:a>
-
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/date.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/date.jsp
deleted file mode 100644
index 9303e70..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/date.jsp
+++ /dev/null
@@ -1,104 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>UI Tags Example: Date</title>
-    <s:head/>
-</head>
-
-<body>
-<s:action id="myDate" name="date" namespace="/" executeResult="false" />
-
-<table>
-    <tr>
-        <th>Name</th>
-        <th>Format</th>
-        <th>Output</th>
-    </tr>
-    <tr>
-        <td><strong>Before date</strong></td>
-        <td>toString()</td>
-        <td><s:property value="#myDate.before.toString()"/></td>
-    </tr>
-    <tr>
-        <td><strong>Past date</strong></td>
-        <td>toString()</td>
-        <td><s:property value="#myDate.past.toString()"/></td>
-    </tr>
-    <tr>
-        <td><strong>Now date</strong></td>
-        <td>toString()</td>
-        <td><s:property value="#myDate.now.toString()"/></td>
-    </tr>
-    <tr>
-        <td><strong>Future date</strong></td>
-        <td>toString()</td>
-        <td><s:property value="#myDate.future.toString()"/></td>
-    </tr>
-    <tr>
-        <td><strong>After date</strong></td>
-        <td>toString()</td>
-        <td><s:property value="#myDate.after.toString()"/></td>
-    </tr>
-    <tr>
-        <td><strong>Current date</strong></td>
-        <td>yyyy/MM/dd hh:mm:ss</td>
-        <td><s:date name="#myDate.now" format="yyyy/MM/dd hh:mm:ss" /></td>
-    </tr>
-    <tr>
-        <td><strong>Current date</strong></td>
-        <td>dd.MM.yyyy hh:mm:ss</td>
-        <td><s:date name="#myDate.now" format="dd.MM.yyyy hh:mm:ss" /></td>
-    </tr>
-    <tr>
-        <td><strong>Current time (24h)</strong></td>
-        <td>HH:mm:ss</td>
-        <td><s:date name="#myDate.now" format="HH:mm:ss" /></td>
-    </tr>
-    <tr>
-        <td><strong>Before date</strong></td>
-        <td>MMM, dd yyyy</td>
-        <td><s:date name="#myDate.before" format="MMM, dd yyyy" /></td>
-    </tr>
-    <tr>
-        <td><strong>Before date</strong></td>
-        <td>nice</td>
-        <td><s:date name="#myDate.before" nice="true"/></td>
-    </tr>
-    <tr>
-        <td><strong>After date</strong></td>
-        <td>dd.MM.yyyy</td>
-        <td><s:date name="#myDate.after" format="dd.MM.yyyy" /></td>
-    </tr>
-    <tr>
-        <td><strong>After date</strong></td>
-        <td>nice</td>
-        <td><s:date name="#myDate.after" nice="true"/></td>
-    </tr>
-    <tr>
-        <td><strong>Past date</strong></td>
-        <td>dd/MM/yyyy hh:mm</td>
-        <td><s:date name="#myDate.past" format="dd/MM/yyyy hh:mm"/></td>
-    </tr>
-    <tr>
-        <td><strong>Future date</strong></td>
-        <td>MM-dd-yy</td>
-        <td><s:date name="#myDate.past" format="MM-dd-yy"/></td>
-    </tr>
-    <tr>
-        <td><strong>Future date (fallback)</strong></td>
-        <td>fallback</td>
-        <td><s:date name="#myDate.future" /></td>
-    </tr>
-    <tr>
-        <td><strong>Past date</strong></td>
-        <td>nice</td>
-        <td><s:date name="#myDate.past" nice="true"/></td>
-    </tr>
-    <tr>
-        <td><strong>Future date</strong></td>
-        <td>nice</td>
-        <td><s:date name="#myDate.future" nice="true"/></td>
-    </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/debug.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/debug.jsp
deleted file mode 100644
index 88de057..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/debug.jsp
+++ /dev/null
@@ -1,20 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Non-UI Tags Example: Debug</title>
-    <s:head/>
-</head>
-
-<body>
-<h1>Debug Tag Usage</h1>
-
-	<p/>
-	This page shows a simple example of using the debug tag.  <br/>
-	Just add <tt style="font-size: 12px; font-weight:bold;color: blue;">&lt;s:debug /&gt;</tt> to your JSP page
-    and you will see the debug link.
-    <p/>
-    Just click on the Debug label to see the Struts ValueStack Debug information.
-    <p/>
-    <s:debug />
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/ifTag/testIf.ftl b/trunk/apps/showcase/src/main/webapp/tags/non-ui/ifTag/testIf.ftl
deleted file mode 100644
index a40b756..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/ifTag/testIf.ftl
+++ /dev/null
@@ -1,607 +0,0 @@
-<html>
-	<head>
-		<title>TEST IF</title>
-	</head>
-<body>
-<p>
-This is a simple freemarker template to test the If Tag (using freemarker directive).
-There's quite a few combination being tested. The characters in bold and non-bold should be the same.
-</p>	
-	
-	
-<b>1 - Foo -</b>
-<@s.if test="true">
-	Foo
-</@s.if>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>2 - Bar -</b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>3 - FooFooFoo - </b>
-<@s.if test="true">
-	Foo
-	<@s.if test="true">
-		FooFoo	
-	</@s.if>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.if>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>4 - FooBarBar - </b>
-<@s.if test="true">
-	Foo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.if>
-<hr/>
-<b>5 - BarFooFoo - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.else>
-	Bar
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.else>
-<hr/>
-<b>6 - BarBarBar - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.else>
-	Bar
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.else>
-<hr/>
-<b>7 - Foo - </b>
-<@s.if test="true">
-	Foo
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>8 - Moo - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="true">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>9 - Bar - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>10 - FooFooFoo - </b>
-<@s.if test="true">
-	Foo
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>11 - FooMooMoo - </b>
-<@s.if test="true">
-	Foo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="true">
-		MooMoo
-	</@s.elseif>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>12 - FooBarBar - </b>
-<@s.if test="true">
-	Foo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>13 - MooFooFoo - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="true">
-	Moo
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>14 - MooMooMoo - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="true">
-	Moo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="true">
-		MooMoo
-	</@s.elseif>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>15 - MooBarBar - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="true">
-	Moo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-<hr/>
-<b>16 - BarFooFoo - </b>
-<@s.if test="false">	
-	Foo
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.else>	
-<hr/>
-<b>17 - BarMooMoo - </b>
-<@s.if test="false">	
-	Foo
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="true">
-		MooMoo
-	</@s.elseif>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.else>	
-<hr/>	
-<b>18 - BarBarBar - </b>
-<@s.if test="false">	
-	Foo
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-	<@s.else>
-		BarBar
-	</@s.else>
-</@s.else>
-
-<hr/>
-<b>19 - Foo - </b> 
-<@s.if test="true">
-	Foo
-</@s.if>
-
-<hr/>
-<b>20 - ** should not display anything ** - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-
-<hr/>
-<b>21 FooFooFoo - </b>
-<@s.if test="true">
-	Foo
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-</@s.if>
-<@s.else>
-	Bar
-</@s.else>
-
-<hr/>
-<b>22 - Foo -  </b>
-<@s.if test="true">
-	Foo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-</@s.if>
-<@s.else>
-	Bar
-</@s.else>
-
-<hr/>
-<b>23 - BarFooFoo - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.else>
-	Bar
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-</@s.else>
-
-<hr/>
-<b>24 - Bar - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.else>
-	Bar
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-</@s.else>
-
-<hr/>
-<b>25 - FooFooFoo</b>
-<@s.if test="true">
-	Foo
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-
-<hr/>
-<b>26 - FooMooMoo</b>
-<@s.if test="true">
-	Foo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="true">
-		MooMoo
-	</@s.elseif>
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-
-<b>27 - Foo - </b>
-<@s.if test="true">
-	Foo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-
-<b>28 - MooFooFoo</b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="true">
-	Moo
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-
-
-<b>29 - MooMooMoo</b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="true">
-	Moo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="true">
-		MooMoo
-	</@s.elseif>
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-
-
-<b>30 - Moo - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="true">
-	Moo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-
-
-<b>31 - BarFooFoo - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-</@s.else>
-
-<b>32 - BarMooMoo - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="true">
-		MooMoo
-	</@s.elseif>
-</@s.else>
-
-<b>33 - Bar - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-	<@s.elseif test="false">
-		MooMoo
-	</@s.elseif>
-</@s.else>
-
-<hr/>
-<b>34 - FooFooFoo - </b>
-<@s.if test="true">
-	Foo
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-
-<hr/>
-<b>35 - Foo - </b>
-<@s.if test="true">
-	Foo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-
-<hr/>
-<b>36 - MooFooFoo - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="true">
-	Moo
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-
-<hr/>
-<b>37 - Moo - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="true">
-	Moo
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-</@s.elseif>
-<@s.else>
-	Bar
-</@s.else>
-
-<hr/>
-<b>38 - BarFooFoo  - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-	<@s.if test="true">
-		FooFoo
-	</@s.if>
-</@s.else>
-
-<hr/>
-<b>39 - Bar  - </b>
-<@s.if test="false">
-	Foo
-</@s.if>
-<@s.elseif test="false">
-	Moo
-</@s.elseif>
-<@s.else>
-	Bar
-	<@s.if test="false">
-		FooFoo
-	</@s.if>
-</@s.else>
-
-
-
-
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/ifTag/testIf.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/ifTag/testIf.jsp
deleted file mode 100644
index 62ec588..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/ifTag/testIf.jsp
+++ /dev/null
@@ -1,616 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-    
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Test If Tag</title>
-</head>
-<body>
-<p>
-This is a simple jsp to test the If Tag. There's quite a few combination being tested. 
-The characters in bold an non-bold should be the same.
-</p>
-
-
-<b>1 - Foo -</b>
-<s:if test="true">
-	Foo
-</s:if>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>2 - Bar -</b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>3 - FooFooFoo - </b>
-<s:if test="true">
-	Foo
-	<s:if test="true">
-		FooFoo	
-	</s:if>
-	<s:else>
-		BarBar
-	</s:else>
-</s:if>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>4 - FooBarBar - </b>
-<s:if test="true">
-	Foo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:else>
-		BarBar
-	</s:else>
-</s:if>
-<hr/>
-<b>5 - BarFooFoo - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:else>
-	Bar
-	<s:if test="true">
-		FooFoo
-	</s:if>
-	<s:else>
-		BarBar
-	</s:else>
-</s:else>
-<hr/>
-<b>6 - BarBarBar - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:else>
-	Bar
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:else>
-		BarBar
-	</s:else>
-</s:else>
-<hr/>
-<b>7 - Foo - </b>
-<s:if test="true">
-	Foo
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>8 - Moo - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="true">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>9 - Bar - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>10 - FooFooFoo - </b>
-<s:if test="true">
-	Foo
-	<s:if test="true">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-	<s:else>
-		BarBar
-	</s:else>
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>11 - FooMooMoo - </b>
-<s:if test="true">
-	Foo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="true">
-		MooMoo
-	</s:elseif>
-	<s:else>
-		BarBar
-	</s:else>
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>12 - FooBarBar - </b>
-<s:if test="true">
-	Foo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-	<s:else>
-		BarBar
-	</s:else>
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>13 - MooFooFoo - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="true">
-	Moo
-	<s:if test="true">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-	<s:else>
-		BarBar
-	</s:else>
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>14 - MooMooMoo - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="true">
-	Moo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="true">
-		MooMoo
-	</s:elseif>
-	<s:else>
-		BarBar
-	</s:else>
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>15 - MooBarBar - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="true">
-	Moo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-	<s:else>
-		BarBar
-	</s:else>
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-<hr/>
-<b>16 - BarFooFoo - </b>
-<s:if test="false">	
-	Foo
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-	<s:if test="true">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-	<s:else>
-		BarBar
-	</s:else>
-</s:else>	
-<hr/>
-<b>17 - BarMooMoo - </b>
-<s:if test="false">	
-	Foo
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="true">
-		MooMoo
-	</s:elseif>
-	<s:else>
-		BarBar
-	</s:else>
-</s:else>	
-<hr/>	
-<b>18 - BarBarBar - </b>
-<s:if test="false">	
-	Foo
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-	<s:else>
-		BarBar
-	</s:else>
-</s:else>
-
-<hr/>
-<b>19 - Foo - </b> 
-<s:if test="true">
-	Foo
-</s:if>
-
-<hr/>
-<b>20 - ** should not display anything ** - </b>
-<s:if test="false">
-	Foo
-</s:if>
-
-<hr/>
-<b>21 FooFooFoo - </b>
-<s:if test="true">
-	Foo
-	<s:if test="true">
-		FooFoo
-	</s:if>
-</s:if>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>22 - Foo -  </b>
-<s:if test="true">
-	Foo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-</s:if>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>23 - BarFooFoo - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:else>
-	Bar
-	<s:if test="true">
-		FooFoo
-	</s:if>
-</s:else>
-
-<hr/>
-<b>24 - Bar - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:else>
-	Bar
-	<s:if test="false">
-		FooFoo
-	</s:if>
-</s:else>
-
-<hr/>
-<b>25 - FooFooFoo</b>
-<s:if test="true">
-	Foo
-	<s:if test="true">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>26 - FooMooMoo</b>
-<s:if test="true">
-	Foo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="true">
-		MooMoo
-	</s:elseif>
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>27 - Foo - </b>
-<s:if test="true">
-	Foo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>28 - MooFooFoo</b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="true">
-	Moo
-	<s:if test="true">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>29 - MooMooMoo</b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="true">
-	Moo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="true">
-		MooMoo
-	</s:elseif>
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>30 - Moo - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="true">
-	Moo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>31 - BarFooFoo - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-	<s:if test="true">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-</s:else>
-
-<hr/>
-<b>32 - BarMooMoo - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="true">
-		MooMoo
-	</s:elseif>
-</s:else>
-
-<hr/>
-<b>33 - Bar - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-	<s:if test="false">
-		FooFoo
-	</s:if>
-	<s:elseif test="false">
-		MooMoo
-	</s:elseif>
-</s:else>
-
-
-<hr/>
-<b>34 - FooFooFoo - </b>
-<s:if test="true">
-	Foo
-	<s:if test="true">
-		FooFoo
-	</s:if>
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>35 - Foo - </b>
-<s:if test="true">
-	Foo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>36 - MooFooFoo - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="true">
-	Moo
-	<s:if test="true">
-		FooFoo
-	</s:if>
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>37 - Moo - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="true">
-	Moo
-	<s:if test="false">
-		FooFoo
-	</s:if>
-</s:elseif>
-<s:else>
-	Bar
-</s:else>
-
-<hr/>
-<b>38 - BarFooFoo  - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-	<s:if test="true">
-		FooFoo
-	</s:if>
-</s:else>
-
-<hr/>
-<b>39 - Bar  - </b>
-<s:if test="false">
-	Foo
-</s:if>
-<s:elseif test="false">
-	Moo
-</s:elseif>
-<s:else>
-	Bar
-	<s:if test="false">
-		FooFoo
-	</s:if>
-</s:else>
-
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/index.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/index.jsp
deleted file mode 100644
index 2fc1a7b..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/index.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tags - Non UI Tags</title>
-</head>
-<body>
-<h1>Non UI Tags</h1>
-
-<ul>
-    <li><s:url id="url" action="showActionTagDemo" namespace="/tags/non-ui/actionTag"/><s:a href="%{url}">Action Tag</s:a></li>
-    <li><s:url id="url" value="date.jsp" /><s:a href="%{url}">Date Tag</s:a></li>
-    <li><s:url id="url" value="debug.jsp" /><s:a href="%{url}">Debug Tag</s:a></li>
-    <li><s:url id="url" action="showGeneratorTagDemo" namespace="/tags/non-ui/iteratorGeneratorTag" /><s:a href="%{url}">Iterator Generator Tag</s:a></li>
-    <li><s:url id="url" action="showAppendTagDemo" namespace="/tags/non-ui/appendIteratorTag" /><s:a href="%{#url}">Append Iterator Tag</s:a>
-    <li><s:url id="url" action="showMergeTagDemo" namespace="/tags/non-ui/mergeIteratorTag" /><s:a href="%{#url}">Merge Iterator Demo</s:a>
-    <li><s:url id="url" action="showSubsetTagDemo" namespace="/tags/non-ui/subsetIteratorTag" /><s:a href="%{#url}">Subset Tag</s:a>
-    <li><s:url id="url" value="actionPrefix/index.jsp"/><s:a href="%{#url}">Action Prefix Example</s:a></li>
-	<li><s:url id="url" action="testIfTagJsp" namespace="/tags/non-ui/ifTag"/><s:a href="%{#url}">If Tag (JSP)</s:a></li>
-	<li><s:url id="url" action="testIfTagFreemarker" namespace="/tags/non-ui/ifTag"/><s:a href="%{#url}">If Tag (Freemarker)</s:a></li>
-</ul>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp
deleted file mode 100644
index 2e398de..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tag - Non UI Tag - AppendIterator Tag</title>
-</head>
-<body>
-
-    <s:generator id="iterator1" separator="," val="%{iteratorValue1}" />
-    <s:generator id="iterator2" separator="," val="%{iteratorValue2}" />
-    
-    <s:append id="appendedIterator">
-        <s:param value="%{#attr.iterator1}" />
-        <s:param value="%{#attr.iterator2}" />
-    </s:append>
-    
-    <s:iterator value="#appendedIterator">
-        <s:property /><br/>
-    </s:iterator>
-    
-    <s:url value="%{'/tags/non-ui/'}" id="url" /><s:a href="%{#url}">Back To Non-UI Demo</s:a>
-    <s:url value="%{'/'}" id="url" /><s:a href="%{#url}">Back To Showcase</s:a>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp
deleted file mode 100644
index efb582c..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp
+++ /dev/null
@@ -1,19 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tag - Non Ui Tag - Iterator Generator Tag Demo</title>
-</head>
-<body>
-
-    <s:generator val="%{value}" separator="%{separator}" count="%{count}">
-        <s:iterator value="%{top}">
-            <s:property /><br/>
-        </s:iterator>
-    </s:generator>
-
-    <s:url value="%{'/tags/non-ui/'}" id="url" /><s:a href="%{#url}">Back To Non-UI Demo</s:a>
-    <s:url value="%{'/'}" id="url" /><s:a href="%{#url}">Back To Showcase</s:a>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp
deleted file mode 100644
index 03b340d..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tags - Non UI Tag - MergeIterator Tag</title>
-</head>
-<body>
-
-    <s:generator id="iterator1" val="%{iteratorValue1}" separator="," />
-    <s:generator id="iterator2" val="%{iteratorValue2}" separator="," />
-    
-    <s:merge id="mergedIterator">
-        <s:param value="%{#attr.iterator1}" />
-        <s:param value="%{#attr.iterator2}" />
-    </s:merge>
-    
-    <s:iterator value="%{#mergedIterator}">
-        <s:property /><br/>
-    </s:iterator>
-
-    <s:url value="%{'/tags/non-ui/'}" id="url" /><s:a href="%{#url}">Back To Non-UI Demo</s:a>
-    <s:url value="%{'/'}" id="url" /><s:a href="%{#url}">Back To Showcase</s:a>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/showAppendIteratorTagDemo.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/showAppendIteratorTagDemo.jsp
deleted file mode 100644
index 838a9a1..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/showAppendIteratorTagDemo.jsp
+++ /dev/null
@@ -1,19 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tag - Non UI Tag - AppendIterator Tag</title>
-</head>
-<body>
-
-    <s:actionerror/>
-    <s:actionmessage/>
-
-    <s:form action="submitAppendTagDemo" namespace="/tags/non-ui/appendIteratorTag" method="POST">
-        <s:textfield label="iterator 1 values (comma separated)" name="iteratorValue1" />
-        <s:textfield label="iterator 2 values (comma separated)" name="iteratorValue2" />
-        <s:submit />
-    </s:form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/showIteratorGeneratorTagDemo.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/showIteratorGeneratorTagDemo.jsp
deleted file mode 100644
index f076828..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/showIteratorGeneratorTagDemo.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tag - Non Ui Tag - Iterator Generator Tag Demo</title>
-<s:head/>
-</head>
-<body>
-
-    <s:actionerror/>
-    <s:actionmessage/>
-    
-    <s:form action="submitGeneratorTagDemo" namespace="/tags/non-ui/iteratorGeneratorTag" method="POST">
-        <s:textfield label="Value" name="value" />
-        <s:textfield label="Separator" name="separator" />
-        <s:textfield label="Count" name="count" />
-        <s:submit />
-    </s:form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/showMergeIteratorTagDemo.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/showMergeIteratorTagDemo.jsp
deleted file mode 100644
index 032e27d..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/showMergeIteratorTagDemo.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tags - Non UI Tag - MergeIterator Tag</title>
-</head>
-<body>
-
-    <s:form action="submitMergeTagDemo" namespace="/tags/non-ui/mergeIteratorTag" method="POST">
-        <s:textfield label="Iterator 1 Value (Comma Separated)" name="iteratorValue1" />
-        <s:textfield label="Iterator 2 Value (Comma Separated)" name="iteratorValue2" />
-        <s:submit />
-    </s:form>
-
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/subsetIteratorTagDemo.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/subsetIteratorTagDemo.jsp
deleted file mode 100644
index 84f6249..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/subsetIteratorTagDemo.jsp
+++ /dev/null
@@ -1,20 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tags - Non UI Tags - SubsetTag Demo</title>
-</head>
-<body>
-
-    <s:actionerror/>
-    <s:actionmessage/>
-
-    <s:form action="submitSubsetTagDemo" namespace="/tags/non-ui/subsetIteratorTag" method="POST">
-        <s:textfield label="Iterator value (comma separated)" name="iteratorValue" />
-        <s:textfield label="Count" name="count" />
-        <s:textfield label="Start" name="start" />
-        <s:submit />
-    </s:form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp b/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp
deleted file mode 100644
index b34631b..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tags - Non UI Tags - Subset Tag</title>
-</head>
-<body>
-
-    <s:generator id="iterator" val="%{iteratorValue}" separator="," />
-
-    <s:subset count="%{count}" start="%{start}" source="%{#attr.iterator}" >
-        <s:iterator>
-            <s:property /><br/>
-        </s:iterator>
-    </s:subset>
-
-    <s:url value="%{'/tags/non-ui/'}" id="url" /><s:a href="%{#url}">Back To Non-UI Demo</s:a>
-    <s:url value="%{'/'}" id="url" /><s:a href="%{#url}">Back To Showcase</s:a>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/componentTagExample.jsp b/trunk/apps/showcase/src/main/webapp/tags/ui/componentTagExample.jsp
deleted file mode 100644
index 2eb3df2..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/componentTagExample.jsp
+++ /dev/null
@@ -1,62 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tags - UI Tags - Component Tag</title>
-</head>
-<body>
-    
-This example tries to demonstrates the usage of &lt;s:component ... &gt; tag.
-<p/>
-
-To have a look at the source of this jsp page click 
-<s:url id="url" action="showComponentTagExampleCode" namespace="/tags/ui"/>
-<s:a href="%{#url}">here</s:a>
-<p/>
-    
-<b>Example 1:</b>   
-This example load the template from the webapp context path using 
-the default (ftl) as its template.
-    <s:component 
-        theme="customTheme" 
-        templateDir="customTemplateDir" 
-        template="ftlCustomTemplate">
-        <s:param name="paramName" value="%{'paramValue1'}" />
-    </s:component>
-<p/>
-    
-<b>Example 2:</b>
-This example load the template from the webapp context path using
-jsp as its template (notice the *.jsp extension to the template).       
-    <s:component 
-        theme="customTheme" 
-        templateDir="customTemplateDir" 
-        template="jspCustomTemplate.jsp">
-        <s:param name="paramName" value="%{'paramValue2'}" />
-    </s:component>      
-<p/>
-    
-<b>Example 3</b>
-This example load the template from the webapp context path, 
-using the default template directory and theme (default to 
-'template' and 'xhtml' respectively)
-    <s:component template="mytemplate.jsp">
-        <s:param name="paramName" value="%{'paramValue3'}" />
-    </s:component>
-<p/>
-    
-    
-<b>Example 4</b>    
-This example load the template from the webapp classpath using 
-a custom themplate directory and theme.
-    <s:component
-        theme="myTheme"
-        templateDir="myTemplateDir"
-        template="myAnotherTemplate">
-        <s:param name="paramName" value="%{'paramValue4'}" />
-    </s:component>
-<p/>
-
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/dynamicTreeSelect.jsp b/trunk/apps/showcase/src/main/webapp/tags/ui/dynamicTreeSelect.jsp
deleted file mode 100644
index 2c1cd2e..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/dynamicTreeSelect.jsp
+++ /dev/null
@@ -1,6 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-Id:<s:property value="%{nodeId}" /><br/>
-Name:<s:property value="%{nodeName}" /><br/>
-
-
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/example.jsp b/trunk/apps/showcase/src/main/webapp/tags/ui/example.jsp
deleted file mode 100644
index 410bbd2..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/example.jsp
+++ /dev/null
@@ -1,126 +0,0 @@
-<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>UI Tags Example</title>
-    <s:head/>
-</head>
-
-<body>
-
-<s:actionerror/>
-<s:actionmessage/>
-<s:fielderror />
-
-
-<s:form action="exampleSubmit" method="post" enctype="multipart/form-data" tooltipConfig="#{'jsTooltipEnabled':'true'}">
-    <s:textfield 
-            label="Name" 
-            name="name"
-            tooltip="Enter your Name here" />
-
-    <s:datepicker
-            tooltip="Select Your Birthday"
-            label="Birthday"
-            name="birthday" />
-
-    <s:textarea
-            tooltip="Enter your Biography"
-            label="Biograph"
-            name="bio"
-            cols="20"
-            rows="3"/>
-
-    <s:select
-            tooltip="Choose Your Favourite Color"
-            label="Favorite Color"
-            list="{'Red', 'Blue', 'Green'}"
-            name="favoriteColor"
-            emptyOption="true"
-            headerKey="None"
-            headerValue="None"/>
-
-    <s:select
-            tooltip="Choose Your Favourite Language"
-            label="Favourite Language"
-            list="favouriteLanguages"
-            name="favouriteLanguage"
-            listKey="key"
-            listValue="description"
-            emptyOption="true"
-            headerKey="None"
-            headerValue="None"/>
-
-    <s:checkboxlist
-            tooltip="Choose your Friends"
-            label="Friends"
-            list="{'Patrick', 'Jason', 'Jay', 'Toby', 'Rene'}"
-            name="friends"/>
-
-    <s:checkbox
-            tooltip="Confirmed that your are Over 18"
-            label="Age 18+"
-            name="legalAge"/>
-
-    <s:doubleselect
-            tooltip="Choose Your State"
-            label="State"
-            name="region" list="{'North', 'South'}"
-            value="'South'"
-            doubleValue="'Florida'"
-            doubleList="top == 'North' ? {'Oregon', 'Washington'} : {'Texas', 'Florida'}" 
-            doubleName="state"
-            headerKey="-1"
-            headerValue="---------- Please Select ----------"
-            emptyOption="true" />
-
-    <s:doubleselect
-            tooltip="Choose your Vehical"
-            label="Favourite Vehical"
-            name="favouriteVehicalType"
-            list="vehicalTypeList"
-            listKey="key"
-            listValue="description"
-            value="'MotorcycleKey'"
-            doubleValue="'YamahaKey'"
-            doubleList="vehicalSpecificList"
-            doubleListKey="key"
-            doubleListValue="description"
-            doubleName="favouriteVehicalSpecific" headerKey="-1"
-            headerValue="---------- Please Select ----------"
-            emptyOption="true" />
-
-    <s:file
-            tooltip="Upload Your Picture"
-            label="Picture" 
-            name="picture" />
-            
-    <s:optiontransferselect
-            tooltip="Select Your Favourite Cartoon Characters"
-            label="Favourite Cartoons Characters"
-            name="leftSideCartoonCharacters" 
-            leftTitle="Left Title"
-            rightTitle="Right Title"
-            list="{'Popeye', 'He-Man', 'Spiderman'}" 
-            multiple="true"
-            headerKey="headerKey"
-            headerValue="--- Please Select ---"
-            emptyOption="true"
-            doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}" 
-            doubleName="rightSideCartoonCharacters"
-            doubleHeaderKey="doubleHeaderKey"
-            doubleHeaderValue="--- Please Select ---" 
-            doubleEmptyOption="true"
-            doubleMultiple="true" />
-    
-    <s:textarea
-            label="Your Thougths"
-            name="thoughts" 
-            tooltip="Enter your thoughts here" />
-            
-    <s:submit onclick="alert('aaaa');" />
-    <s:reset onclick="alert('bbbb');" />
-</s:form>
-    
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/example.vm b/trunk/apps/showcase/src/main/webapp/tags/ui/example.vm
deleted file mode 100644
index e0eaf79..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/example.vm
+++ /dev/null
@@ -1,32 +0,0 @@
-<html>
-<head>
-    <title>UI Tags Example</title>
-    #shead()
-</head>
-
-<body>
-
-#surl ("id=url" "value=index.jsp")
-<a href="${url}">Back to index.jsp</a>!
-
-
-#sform ("action=exampleSubmitVelocity" "method=post" "enctype=multipart/form-data")
-    #stextfield ("label=Name" "name=name")
-    #sdatepicker ("label=Birthday" "name=birthday")
-    #stextarea ("label=Biograph" "name=bio" "cols=20" "rows=3")
-    #sselect ("label=Favorite Color" "list={'Red', 'Blue', 'Green'}" "name=favoriteColor" "emptyOption=true" "headerKey=None" "headerValue=None")
-    #sselect ("label=Favourite Language" "list=favouriteLanguages" "name=favouriteLanguage" "listKey=key" "listValue=description" "emptyOption=true" "headerKey=None" "headerValue=None")
-    #scheckboxlist ("label=Friends" "list={'Patrick', 'Jason', 'Jay', 'Toby', 'Rene'}" "name=friends")
-    #scheckbox ("label=Age 18+" "name=legalAge")
-    #sdoubleselect ("label=State" "name=region" "list={'North', 'South'}" "value='North'" "doubleValue='Florida'" "doubleList=top == 'North' ? {'Oregon', 'Washington'} : {'Texas', 'Florida'}" "doubleName=state" "headerKey=-1" "headerValue=---------- Please Select ----------" "emptyOption=true" )
-    #sdoubleselect ("label=Favourite Vehical" "name=favouriteVehicalType" "list=vehicalTypeList" "listKey=key" "listValue=description" "value='MotorcycleKey'" "doubleValue='YamahaKey'" "doubleList=vehicalSpecificList" "doubleListKey=key" "doubleListValue=description" "doubleName=favouriteVehicalSpecific" "headerKey=-1" "headerValue=---------- Please Select ----------" "emptyOption=true" )
-    #sfile ("label=Picture" "name=picture")
-    #soptiontransferselect ("label=Favourite Cartoons Characters" "name=leftSideCartoonCharacters" "leftTitle=Left Title" "rightTitle=Right Title" "list={'Popeye', 'He-Man', 'Spiderman'}" "multiple=true" "headerKey=headerKey" "headerValue=--- Please Select ---" "emptyOption=true" "doubleList={'Superman', 'Mickey Mouse', 'Donald Duck'}" "doubleName=rightSideCartoonCharacters" "doubleHeaderKey=doubleHeaderKey" "doubleHeaderValue=--- Please Select ---" "doubleEmptyOption=true" "doubleMultiple=true" )
-    #ssubmit()
-    #sreset()
-#end
-
-#sa("href=${url}")Back to index.jsp#end
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/exampleSubmited.jsp b/trunk/apps/showcase/src/main/webapp/tags/ui/exampleSubmited.jsp
deleted file mode 100644
index 9fe7076..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/exampleSubmited.jsp
+++ /dev/null
@@ -1,43 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Non-UI Tag - Example Submited </title>
-</head>
-<body>
-
-<h1>Example Submitted</h1>
-<table>
-    <s:label label="Name" name="name" /> 
-    <s:label label="Birthday" name="birthday" />
-    <s:label label="Biography" name="bio" /> 
-    <s:label label="Favourite Color" name="favouriteColor" /> 
-    <s:label label="Friends" name="friends" /> 
-    <s:label label="Legal Age" name="legalAge" /> 
-    <s:label label="Region" name="region" /> 
-    <s:label label="State" name="state" /> 
-    <s:label label="Picture" name="picture" /> 
-    <s:label label="Favourite Language" name="favouriteLanguage" />
-    <s:label label="Favourite Vehical Type" name="favouriteVehicalType" />
-    <s:label label="Favourite Vehical Specific" name="favouriteVehicalSpecific" />
-    <tr>
-        <td><label class="label">Favourite Cartoon Characters (Left):</label></td>
-        <td>
-            <s:iterator value="leftSideCartoonCharacters" status="stat">
-                <s:property value="%{#stat.count}" />.<s:property value="top" />&nbsp;
-            </s:iterator>
-        </td>
-    </tr>
-    <tr>
-        <td><label class="label">Favourite Cartoon Characters (Right):</label></td>
-        <td>
-            <s:iterator value="rightSideCartoonCharacters" status="stat">
-                <s:property value="%{#stat.count}" />.<s:property value="top" />&nbsp;
-            </s:iterator>
-        </td>
-    </tr>
-    <s:label label="Thoughts" name="thoughts" />
-    
-</table>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/exampleSubmited.vm b/trunk/apps/showcase/src/main/webapp/tags/ui/exampleSubmited.vm
deleted file mode 100644
index e33f552..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/exampleSubmited.vm
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>
-<head>
-<title>Showcase - Non-UI Tag - Example Submited </title>
-</head>
-<body>
-
-<h1>Example Submitted</h1>
-<table>
-	#slabel ("label=Name" "name=name")
-	#slabel ("label=Birthday" "name=birthday")
-	#slabel ("label=Biography" "name=bio")
-	#slabel ("label=Favourite Color" "name=favouriteColor")
-	#slabel ("label=Friends" "name=friends")
-	#slabel ("label=Legal Age" "name=legalAge")
-	#slabel ("label=Region" "name=region")
-	#slabel ("label=State" "name=state")
-	#slabel ("label=Picture" "name=picture")
-	#slabel ("label=Favourite Language" "name=favouriteLanguage")
-	#slabel ("label=Favourite Vehical Type" "name=favouriteVehicalType")
-	#slabel ("label=Favourite Vehical Specific" "name=favouriteVehicalSpecific")
-	<tr>
-		<td>Favourite Cartoon Characters (Left):</td>
-		<td>
-            #set ( $startCount = 1)
-		    #foreach( $item in $leftSideCartoonCharacters)
-				$startCount.${item}&nbsp;
-				#set ( $startCount = $startCount + 1)
-            #end
-		</td>
-	</tr>
-	<tr>
-		<td>Favourite Cartoon Characters (Right):</td>
-		<td>
-            #set ( $startCount = 1)
-		    #foreach( $item in $rightSideCartoonCharacters)
-				$startCount.${item}&nbsp;
-				#set ( $startCount = $startCount + 1)
-            #end
-		</td>
-	</tr>
-</table>
-
-#surl ("id=url" "value=index.jsp")
-#sa("href=${url}")Back to index.jsp#end
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/images/backgroundImage.jpg b/trunk/apps/showcase/src/main/webapp/tags/ui/images/backgroundImage.jpg
deleted file mode 100644
index 0f9cb92..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/images/backgroundImage.jpg
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/images/leopard.jpg b/trunk/apps/showcase/src/main/webapp/tags/ui/images/leopard.jpg
deleted file mode 100644
index f67f96b..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/images/leopard.jpg
+++ /dev/null
Binary files differ
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/index.jsp b/trunk/apps/showcase/src/main/webapp/tags/ui/index.jsp
deleted file mode 100644
index a02dfb7..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/index.jsp
+++ /dev/null
@@ -1,20 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Showcase - Tags - UI Tags</title>
-</head>
-<body>
-    <h1>UI Tags</h1>
-    
-    <ul>
-        <li><s:url id="url" namespace="/tags/ui" action="example" method="input" /><s:a href="%{url}">UI Example</s:a></li>
-        <li><s:url id="url" namespace="/tags/ui" action="exampleVelocity" method="input" /><s:a href="%{url}">UI Example (Velocity)</s:a></li>
-        <li><s:url id="url" namespace="/tags/ui" action="lotsOfOptiontransferselect" method="input" /><s:a href="%{url}">Option Transfer Select UI Example</s:a></li>
-        <li><s:url id="url" namespace="/tags/ui" value="treeExampleStatic.jsp" /><s:a href="%{url}">Tree Example (static)</s:a>
-        <li><s:url id="url" namespace="/tags/ui" action="showDynamicTreeAction"/><s:a href="%{url}">Tree Example (dynamic)</s:a>
-        <li><s:url id="url" value="componentTagExample.jsp"/><s:a href="%{#url}">Component Tag Example</s:a>
-        <%--li><s:url id="url" namespace="/tags/ui" action="populateUsingIterator" method="input" /><s:a href="%{url}">UI population using iterator tag</s:a></li--%>
-    </ul>
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselect.jsp b/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselect.jsp
deleted file mode 100644
index 15569ed..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselect.jsp
+++ /dev/null
@@ -1,109 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Show Case - Tags - UI Tags - Optiontransferselect</title>
-<s:head />
-</head>
-<body>
-
-<s:form action="lotsOfOptiontransferselectSubmit" namespace="/tags/ui" method="post">
-    <s:optiontransferselect 
-        tooltip="Select Your Favourite Cartoon Characters"
-        headerKey="-1"
-        headerValue="--- Please Select ---"
-        doubleHeaderKey="-1"
-        doubleHeaderValue="--- Please Select ---"
-        emptyOption="true"
-        doubleEmptyOption="true"
-        label="Favourite Cartoon Characters"
-        leftTitle="Favourite Cartoon Characters"
-        rightTitle="Non Favourite Cartoon Characters"
-        name="favouriteCartoonCharacters" 
-        list="defaultFavouriteCartoonCharacters" 
-        doubleName="notFavouriteCartoonCharacters"
-        doubleList="defaultNotFavouriteCartoonCharacters" />
-        
-    <br/>   
-        
-    <s:optiontransferselect
-        tooltip="Select Your Favourite Cars"
-        label="Favourite Cars"
-        leftTitle="Favourite Cars"
-        rightTitle="Non Favourite Cars"
-        name="favouriteCars"
-        list="defaultFavouriteCars"
-        doubleName="notFavouriteCars"
-        doubleList="defaultNotFavouriteCars" />
-        
-    <br/>
-        
-    <s:optiontransferselect 
-        tooltip="Select Your Favourite Motorcycles"
-        headerKey="-1"
-        headerValue="--- Please Select ---"
-        doubleHeaderKey="-1"
-        doubleHeaderValue="--- Please Select ---"
-        label="Favourite Motorcycles"
-        leftTitle="Favourite Motorcycles"
-        rightTitle="Non Favourite Motorcycles"
-        name="favouriteMotorcycles" 
-        list="defaultFavouriteMotorcycles"
-        doubleName="notFavouriteMotorcycles"
-        doubleList="defaultNotFavouriteMotorcycles" />
-        
-    <br/>
-        
-    <s:optiontransferselect 
-        tooltip="Select Your Favourite Countries"
-        emptyOption="true"
-        doubleEmptyOption="true"
-        label="Favourite Countries"
-        leftTitle="Favourite Countries"
-        rightTitle="Non Favourite Countries"
-        name="favouriteCountries" 
-        list="defaultFavouriteCountries" 
-        doubleName="notFavouriteCountries" 
-        doubleList="defaultNotFavouriteCountries"
-          /> 
-        
-    <br/>   
-    
-    <s:updownselect 
-        tooltip="Prioritized Your Favourite Cartoon Characters"
-        label="Prioritised Favourite Cartoon Characters"
-        list="defaultFavouriteCartoonCharacters" 
-        name="prioritisedFavouriteCartoonCharacters" 
-        headerKey="-1" 
-        headerValue="--- Please Order ---" 
-        emptyOption="true"  />  
-        
-    <br/>
-        
-    <s:updownselect
-        tooltip="Prioritise Your Favourite Cars"
-        label="Prioritised Favourite Cars"
-        list="defaultFavouriteCars"
-        name="prioritisedFavouriteCars" 
-        headerKey="-10" 
-        headerValue="--- Please Order ---" />
-        
-    <br/>
-        
-    <s:updownselect 
-        tooltip="Prioritised Your Favourite Countries"
-        label="Prioritised Favourite Countries"
-        list="defaultFavouriteCountries"
-        name="prioritisedFavouriteCountries" 
-        emptyOption="true" 
-        value="{'england', 'brazil'}" />    
-        
-    <br/>
-    
-    <s:submit value="Submit It" />
-    
-    <br/>
-    
-</s:form>
-
-</body>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselectSubmit.jsp b/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselectSubmit.jsp
deleted file mode 100644
index 5ee3314..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselectSubmit.jsp
+++ /dev/null
@@ -1,101 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - Tags - UI Tags - Optiontransferoption Result</title>
-</head>
-<body>
-    
-    <table>
-    <tr>
-        <td>Favourite Cartoons:</td>
-        <td>
-        <s:iterator value="favouriteCartoonCharacters" status="stat">
-            <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-        </s:iterator>
-        </td>
-    </tr>
-    <tr>
-        <td>Non Favourite Cartoons:</td>
-        <td>
-        <s:iterator value="notFavouriteCartoonCharacters" status="stat">
-            <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-        </s:iterator>
-        </td>
-    </tr>
-    <tr>
-        <td>Favourite Cars:</td>
-        <td>
-        <s:iterator value="favouriteCars" status="stat">
-            <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-        </s:iterator>
-        </td>
-    </tr>
-    <tr>
-        <td>Non Favourite Cars:</td>
-        <td>
-        <s:iterator value="notFavouriteCars" status="stat">
-            <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-        </s:iterator>
-        </td>
-    </tr>
-    <tr>
-        <td>Favourite Motorcycles:</td>
-        <td>
-        <s:iterator value="favouriteMotorcycles" status="stat">
-            <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-        </s:iterator>
-        </td>
-    </tr>
-    <tr>
-        <td>Non Favourite Motorcycles:</td>
-        <td>
-        <s:iterator value="notFavouriteMotorcycles" status="stat">
-            <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-        </s:iterator>
-        </td>
-    </tr>
-    <tr>
-        <td>Favourite Countries:</td>
-        <td>
-        <s:iterator value="favouriteCountries" status="stat">
-            <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-        </s:iterator>
-        </td>
-    </tr>
-    <tr>
-        <td>Non Favourite Countries:</td>
-        <td>
-            <s:iterator value="notFavouriteCountries" status="stat">
-                <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-            </s:iterator>
-        </td>
-    </tr>
-    <tr>
-        <td>Prioritised Favourite Cartoon Characters:</td>
-        <td>
-            <s:iterator value="prioritisedFavouriteCartoonCharacters" status="stat">
-                <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-            </s:iterator>
-        </td>
-    </tr>
-    <tr>
-        <td>Prioritised Favourite Cars:</td>
-        <td>
-            <s:iterator value="prioritisedFavouriteCars" status="stat">
-                <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-            </s:iterator>
-        </td>   
-    </tr>
-    <tr>
-        <td>Prioritised Favourite Countries</td>
-        <td>
-            <s:iterator value="prioritisedFavouriteCountries" status="stat">
-                <s:property value="%{#stat.count}" />.<s:property />&nbsp;
-            </s:iterator>
-        </td>
-    </tr>
-    </table>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/staticTreeSelect.jsp b/trunk/apps/showcase/src/main/webapp/tags/ui/staticTreeSelect.jsp
deleted file mode 100644
index c08ed8a..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/staticTreeSelect.jsp
+++ /dev/null
@@ -1,28 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<%
-    request.setAttribute("decorator", "none");
-    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
-    response.setHeader("Pragma","no-cache"); //HTTP 1.0
-    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
-%>
-
-
-<%--
-<script>
-    var widget = dojo.widget.byId("parentId");
-    alert(widget.selectedNode);
-    if (widget.selectedNode != null) {
-        var inputElement = dojo.byId('sId');
-        inputElement.value='true';
-        alert(inputElement+'\t'+inputElement.value);
-    }
-    else {
-        var inputElement = dojo.byId('sId');
-        inputElement.value='false';
-        alert(inputElement+'\t'+inputElement.value);
-    }
-</script>
---%>
-
-<%=request.getParameter("nodeId") %>
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/treeExampleDynamic.jsp b/trunk/apps/showcase/src/main/webapp/tags/ui/treeExampleDynamic.jsp
deleted file mode 100644
index 26929da..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/treeExampleDynamic.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-<title>Showcase - UI Tag Example - Tree Example (Dynamic)</title>
-<s:head theme="ajax" debug="true" />
-</head>
-<body>
-
-<!-- START SNIPPET: treeExampleDynamicJsp -->
-
-<script>
-    function treeNodeSelected(nodeId) {
-        dojo.io.bind({
-            url: "<s:url value='/tags/ui/ajax/dynamicTreeSelectAction.action' />?nodeId="+nodeId,
-            load: function(type, data, evt) {
-                var displayDiv = dojo.byId("displayId");
-                displayDiv.innerHTML = data;
-            },
-            mimeType: "text/html"
-        });
-    };
-
-    dojo.event.topic.subscribe("treeSelected", this, "treeNodeSelected");
-</script>
-
-
-
-<div style="float:left; margin-right: 50px;">
-<s:tree 
-    theme="ajax"
-    rootNode="%{treeRootNode}" 
-    childCollectionProperty="children" 
-    nodeIdProperty="id"
-    nodeTitleProperty="name"
-    treeSelectedTopic="treeSelected">
-</s:tree> 
-</div>
-
-<div id="displayId">
-Please click on any of the tree nodes.
-</div>
-
-<!-- END SNIPPET: treeExampleDynamicJsp -->
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/tags/ui/treeExampleStatic.jsp b/trunk/apps/showcase/src/main/webapp/tags/ui/treeExampleStatic.jsp
deleted file mode 100644
index b9cf834..0000000
--- a/trunk/apps/showcase/src/main/webapp/tags/ui/treeExampleStatic.jsp
+++ /dev/null
@@ -1,53 +0,0 @@
-<%@taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-<title>Showcase - UI Tag Example - Tree Example (Static)</title>
-<s:head theme="ajax" debug="true"  />
-</head>
-<body>
-
-<!-- START SNIPPET: treeExampleStaticJsp -->
-
-<script>
-    function treeNodeSelected(nodeId) {
-        dojo.io.bind({
-            url: "<s:url value='/tags/ui/ajax/staticTreeSelectAction.action'/>?nodeId="+nodeId,
-            load: function(type, data, evt) {
-                var divDisplay = dojo.byId("displayIt");
-                divDisplay.innerHTML=data;
-            },
-            mimeType: "text/html"
-        });
-    };
-
-    dojo.event.topic.subscribe("treeSelected", this, "treeNodeSelected");
-</script>
-
-
-<div style="float:left; margin-right: 50px;">
-<s:tree label="parent" id="parentId" theme="ajax" templateCssPath="/struts/tree.css" 
-showRootGrid="true" showGrid="true" treeSelectedTopic="treeSelected">
-    <s:treenode theme="ajax" label="child1" id="child1Id">
-        <s:treenode theme="ajax" label="grandchild1" id="grandchild1Id"/>
-        <s:treenode theme="ajax" label="grandchild2" id="grandchild2Id"/>
-        <s:treenode theme="ajax" label="grandchild3" id="grandchild3Id"/>
-    </s:treenode>
-    <s:treenode theme="ajax" label="child2" id="child2Id"/>
-    <s:treenode theme="ajax" label="child3" id="child3Id"/>
-    <s:treenode theme="ajax" label="child4" id="child4Id"/>
-    <s:treenode theme="ajax" label="child5" id="child5Id">
-        <s:treenode theme="ajax" label="gChild1" id="gChild1Id"/>
-        <s:treenode theme="ajax" label="gChild2" id="gChild2Id"/>
-    </s:treenode>
-</s:tree>
-</div>
-
-
-<div id="displayIt">
-Please click on any node on the tree.
-</div>
-
-<!-- END SNIPPET: treeExampleStaticJsp  -->
-
-</body>
-</html>
\ No newline at end of file
diff --git a/trunk/apps/showcase/src/main/webapp/template/xhtml/mytemplate.jsp b/trunk/apps/showcase/src/main/webapp/template/xhtml/mytemplate.jsp
deleted file mode 100644
index 7ebb967..0000000
--- a/trunk/apps/showcase/src/main/webapp/template/xhtml/mytemplate.jsp
+++ /dev/null
@@ -1,9 +0,0 @@
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<div style="background-color:yellow;">
-<p>
-JSP  Custom Template -
-parameter 'paramName' - <s:property value="%{parameters.paramName}" />
-</p>
-</div>
diff --git a/trunk/apps/showcase/src/main/webapp/token/doublePost.jsp b/trunk/apps/showcase/src/main/webapp/token/doublePost.jsp
deleted file mode 100644
index 6aa8223..0000000
--- a/trunk/apps/showcase/src/main/webapp/token/doublePost.jsp
+++ /dev/null
@@ -1,15 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-</head>
-
-<body>
-    <p style="border: 1px solid silver; padding: 5px; background: #ffd; text-align: center;">
-      Double post. Struts intercepted this request and prevents the action from executing again.
-    </p>
-
-    <p/>
-    Click here to <s:url id="back" value="/token"/><s:a href="%{back}">return</s:a>.
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/token/example1.jsp b/trunk/apps/showcase/src/main/webapp/token/example1.jsp
deleted file mode 100644
index 99aa5b8..0000000
--- a/trunk/apps/showcase/src/main/webapp/token/example1.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-    <head><title>Token Examples</title></head>
-
-<body>
-    <h1>Token Example 1</h1>
-
-    <b>Example 1:</b> This example illustrates a situation where you can transfer money from
-    one account to another. We use the token to prevent double posts so the transfer only
-    happens once.
-    <p/>
-
-    <br/>Balance of source account: <s:property value="#session.balanceSource"/>
-    <br/>Balance of destination account: <s:property value="#session.balanceDestination"/>
-    <p/>
-
-    <s:form action="transfer">
-        <s:token/>
-        <s:textfield label="Amount" name="amount" required="true" value="100"/>
-        <s:submit value="Transfer money"/>
-    </s:form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/token/example2.jsp b/trunk/apps/showcase/src/main/webapp/token/example2.jsp
deleted file mode 100644
index c3d99c4..0000000
--- a/trunk/apps/showcase/src/main/webapp/token/example2.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-    <head><title>Token Examples</title></head>
-
-<body>
-    <h1>Token Example 2</h1>
-
-    <b>Example 2:</b> This example illustrates a situation where you can transfer money from
-    one account to another. We use the token to prevent double posts so the transfer only
-    happens once. This action will redirect after you have submitted the form.
-    <p/>
-
-    <br/>Balance of source account: <s:property value="#session.balanceSource"/>
-    <br/>Balance of destination account: <s:property value="#session.balanceDestination"/>
-    <p/>
-
-    <s:form action="transfer2">
-        <s:token/>
-        <s:textfield label="Amount" name="amount" required="true" value="200"/>
-        <s:submit value="Transfer money"/>
-    </s:form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/token/example3.jsp b/trunk/apps/showcase/src/main/webapp/token/example3.jsp
deleted file mode 100644
index c624ad6..0000000
--- a/trunk/apps/showcase/src/main/webapp/token/example3.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-    <head><title>Token Examples</title></head>
-
-<body>
-    <h1>Token Example 3</h1>
-
-    <b>Example 3:</b> This example illustrates a situation where you can transfer money from
-    one account to another. We use the token to prevent double posts so the transfer only
-    happens once. This example uses the token session based interceptor and redirect after post.
-    <p/>
-
-    <br/>Balance of source account: <s:property value="#session.balanceSource"/>
-    <br/>Balance of destination account: <s:property value="#session.balanceDestination"/>
-    <p/>
-
-    <s:form action="transfer3">
-        <s:token/>
-        <s:textfield label="Amount" name="amount" required="true" value="300"/>
-        <s:submit value="Transfer money"/>
-    </s:form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/token/example4.ftl b/trunk/apps/showcase/src/main/webapp/token/example4.ftl
deleted file mode 100644
index f890ba3..0000000
--- a/trunk/apps/showcase/src/main/webapp/token/example4.ftl
+++ /dev/null
@@ -1,26 +0,0 @@
-<html>
-    <head><title>Token Examples</title></head>
-
-<body>
-    <h1>Token Example 4</h1>
-
-    <b>Example 4:</b> This example illustrates a situation where you can transfer money from
-    one account to another. We use the token to prevent double posts so the transfer only
-    happens once. This page is rendered using freemarker. See the xwork-token.xml where
-    we must also use the createSession interceptor to be sure that a HttpSession exists
-    when freemarker renders this webpage, otherwise the @s.token tag causes an exception
-    while rendering the page.
-    <p/>
-
-    <br/>Balance of source account: <@s.property value="#session.balanceSource"/>
-    <br/>Balance of destination account: <@s.property value="#session.balanceDestination"/>
-    <p/>
-
-    <@s.form action="transfer4">
-        <@s.token/>
-        <@s.textfield label="Amount" name="amount" required="true" value="400"/>
-        <@s.submit value="Transfer money"/>
-    </@s.form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/token/index.jsp b/trunk/apps/showcase/src/main/webapp/token/index.jsp
deleted file mode 100644
index 1290810..0000000
--- a/trunk/apps/showcase/src/main/webapp/token/index.jsp
+++ /dev/null
@@ -1,33 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-    <head><title>Token Examples (double post)</title></head>
-
-<body>
-    <h1>Token Examples</h1>
-
-    These examples illustrate Struts build in support of using tokens to prevent double post.
-    <p/>
-    You have a web page where user can input data and press a button to submit.
-    There could be a problem that the user submit the data many times, by either clicking the
-    button many times, or use the browser back button and then submit the form again.
-    <br/> A good solution is to use a hidden token in the form. The token is autogenerated and unique
-    from time to time. This token is then validated with the HttpSession that it is the first time
-    it is submitted, if not we have a double post and therefore can prevent the second submit action.
-    <p/>
-    For more information check out javadoc for org.apache.struts2.interceptor.TokenInterceptor
-    and org.apache.struts2.interceptor.TokenSessionStoreInterceptor.
-
-    <br/>
-    <br/><a href="tokenPrepare!input.action">Example 1 (token based .jsp example)</a>
-
-    <br/>
-    <br/><a href="tokenPrepare2!input.action">Example 2 (as example 1 with redirect after post)</a>
-
-    <br/>
-    <br/><a href="tokenPrepare3!input.action">Example 3 (token-session based .jsp example)</a>
-
-    <br/>
-    <br/><a href="tokenPrepare4!input.action">Example 4 (token based freemarker example)</a>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/token/transferDone.jsp b/trunk/apps/showcase/src/main/webapp/token/transferDone.jsp
deleted file mode 100644
index f296e7c..0000000
--- a/trunk/apps/showcase/src/main/webapp/token/transferDone.jsp
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-    <head><title>Token Examples (double post)</title></head>
-
-<body>
-    <h1>Token Examples</h1>
-
-    The transfer is done at <s:text name="token.transfer.time"><s:param value="#session.time"/></s:text>
-
-    <br/>New balance of source account: <s:property value="#session.balanceSource"/>
-    <br/>New balance of destination account: <s:property value="#session.balanceDestination"/>
-
-    <p/>
-    Try using the browser back button and submit the form again. This should result in a double post
-    that Struts should intercept and handle accordingly.
-    <p/>
-    For example 3 (session token) you should notice that the date/time stays the same. This interceptor
-    catches that this is a double post but doens't display the double post page, but just renders the
-    web page result from the first post. 
-
-    <p/>
-    Click here to <s:url id="back" value="/token"/><s:a href="%{back}">return</s:a>.
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/validation/clientSideValidationExample.jsp b/trunk/apps/showcase/src/main/webapp/validation/clientSideValidationExample.jsp
deleted file mode 100644
index 2c19f01..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/clientSideValidationExample.jsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<%--
-   fieldValidatorExample.jsp
-
-   @author tm_jee
-   @version $Date$ $Id$
---%>
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-    <head>
-        <title>Showcase - Validation - Field Validators Example</title>
-        <s:url id="siteCss" includeContext="true" value="/validation/validationExamplesStyles.css" />
-        <s:head />
-        <!--  link rel="stylesheet" type="text/css" href='<s:property value="%{siteCss}" />'-->
-    </head>
-    <body>
-
-    <!-- START SNIPPET: fieldValidatorsExample -->
-
-        <h3>All Field Errors Will Appear Here</h3>
-        <s:fielderror />
-        <hr/>
-
-        <h3>Field Error due to 'Required String Validator Field' Will Appear Here</h3>
-        <s:fielderror>
-            <s:param value="%{'requiredStringValidatorField'}" />
-        </s:fielderror>
-        <hr/>
-
-        <h3>Field Error due to 'String Length Validator Field' Will Appear Here</h3>
-        <s:fielderror>
-            <s:param>stringLengthValidatorField</s:param>
-        </s:fielderror>
-        <hr/>
-
-        <s:form action="submitClientSideValidationExample" namespace="/validation" method="POST" validate="true">
-            <s:textfield label="Required Validator Field" name="requiredValidatorField" />
-            <s:textfield label="Required String Validator Field" name="requiredStringValidatorField" />
-            <s:textfield label="Integer Validator Field" name="integerValidatorField" />
-            <s:textfield label="Date Validator Field" name="dateValidatorField" />
-            <s:textfield label="Email Validator Field" name="emailValidatorField" />
-            <s:textfield label="URL Validator Field" name="urlValidatorField" />
-            <s:textfield label="String Length Validator Field" name="stringLengthValidatorField" />
-            <s:textfield label="Regex Validator Field" name="regexValidatorField"/>
-            <s:textfield label="Field Expression Validator Field" name="fieldExpressionValidatorField" />
-            <s:submit label="Submit" />
-        </s:form>
-
-    <!-- END SNIPPET: fieldValidatorsExample -->
-
-
-        <s:include value="footer.jsp" />
-    </body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/validation/fieldValidatorsExample.jsp b/trunk/apps/showcase/src/main/webapp/validation/fieldValidatorsExample.jsp
deleted file mode 100644
index 8938fe1..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/fieldValidatorsExample.jsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<%-- 
-   fieldValidatorExample.jsp
-   
-   @author tm_jee
-   @version $Date$ $Id$
---%>
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-    <head>
-        <title>Showcase - Validation - Field Validators Example</title>
-        <s:url id="siteCss" includeContext="true" value="/validation/validationExamplesStyles.css" />
-        <s:head theme="xhtml"/>
-        <!--  link rel="stylesheet" type="text/css" href='<s:property value="%{siteCss}" />'-->
-    </head>
-    <body>
-    
-    <!-- START SNIPPET: fieldValidatorsExample -->
-    
-        <h3>All Field Errors Will Appear Here</h3>
-        <s:fielderror />
-        <hr/>
-        
-        <h3>Field Error due to 'Required String Validator Field' Will Appear Here</h3>
-        <s:fielderror>
-            <s:param value="%{'requiredStringValidatorField'}" />
-        </s:fielderror>
-        <hr/>
-        
-        <h3>Field Error due to 'String Length Validator Field' Will Appear Here</h3>
-        <s:fielderror>
-            <s:param>stringLengthValidatorField</s:param>
-        </s:fielderror>
-        <hr/>
-    
-        <s:form action="submitFieldValidatorsExamples" namespace="/validation" method="POST" theme="xhtml">
-            <s:textfield label="Required Validator Field" name="requiredValidatorField" />
-            <s:textfield label="Required String Validator Field" name="requiredStringValidatorField" />
-            <s:textfield label="Integer Validator Field" name="integerValidatorField" />
-            <s:textfield label="Date Validator Field" name="dateValidatorField" />
-            <s:textfield label="Email Validator Field" name="emailValidatorField" />
-            <s:textfield label="URL Validator Field" name="urlValidatorField" />
-            <s:textfield label="String Length Validator Field" name="stringLengthValidatorField" />
-            <s:textfield label="Regex Validator Field" name="regexValidatorField"/>
-            <s:textfield label="Field Expression Validator Field" name="fieldExpressionValidatorField" />
-            <s:submit label="Submit" />
-        </s:form>
-        
-    <!-- END SNIPPET: fieldValidatorsExample -->
-        
-        
-        <s:include value="footer.jsp" />
-    </body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/validation/footer.jsp b/trunk/apps/showcase/src/main/webapp/validation/footer.jsp
deleted file mode 100644
index 11828c8..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/footer.jsp
+++ /dev/null
@@ -1,9 +0,0 @@
- <%@taglib prefix="s" uri="/struts-tags" %>
-
-<hr/>
-
-<s:url id="backToValidationExamples" action="list" namespace="/validation" />
-<s:url id="backToShowCase" action="showcase" namespace="/" />
-        
-<s:a href="%{backToValidationExamples}">Back To Validation Examples</s:a>&nbsp;
-<s:a href="%{backToShowCase}">Back To Showcase</s:a>
diff --git a/trunk/apps/showcase/src/main/webapp/validation/index.jsp b/trunk/apps/showcase/src/main/webapp/validation/index.jsp
deleted file mode 100644
index f3860de..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/index.jsp
+++ /dev/null
@@ -1,42 +0,0 @@
-<%--
-    index.jsp
-
-    @author tm_jee
-    @version $Date$ $Id$
---%>
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-    <head>
-        <title>Showcase - Validation</title>
-    </head>
-    <body>
-        <h1>Validation Examples</h1>
-        
-        <s:url id="quizBasic" namespace="/validation" action="quizBasic" method="input"/>
-        <s:url id="quizClient" namespace="/validation" action="quizClient" method="input"/>
-        <s:url id="quizClientCss" namespace="/validation" action="quizClientCss" method="input"/>
-        <s:url id="quizAjax" namespace="/validation" action="quizAjax" method="input"/>
-        <s:url id="fieldValidatorUrl" action="showFieldValidatorsExamples" namespace="/validation" />
-        <s:url id="nonFieldValidatorUrl" action="showNonFieldValidatorsExamples" namespace="/validation" />
-        <s:url id="visitorValidatorUrl" action="showVisitorValidatorsExamples" namespace="/validation" />
-        <s:url id="clientSideValidationUrl" action="clientSideValidationExample" namespace="/validation" />
-        <s:url id="backToShowcase" action="showcase" namespace="/" />
-        <s:url id="storeMessageAcrossRequestExample" value="/validation/storeErrorsAcrossRequestExample.jsp" />
-        
-        <ul>
-            <li><s:a href="%{quizBasic}">Validation (basic)</s:a></li>
-            <li><s:a href="%{quizClient}">Validation (client)</s:a></li>
-            <li><s:a href="%{quizClientCss}">Validation (client using css_xhtml theme)</s:a></li>
-            <li><s:a href="%{quizAjax}">Validation (ajax)</s:a></li>
-            <li><s:a href="%{fieldValidatorUrl}">Field Validators</s:a></li>
-            <li><s:a href="%{nonFieldValidatorUrl}">Non Field Validator</s:a></li>
-            <li><s:a href="%{visitorValidatorUrl}">Visitor Validator</s:a></li>
-            <li><s:a href="%{clientSideValidationUrl}">Client side validation using JavaScript</s:a></li>
-            <li><s:a href="%{backToShowcase}">Back To Showcase</s:a>
-            <li><s:a href="%{storeMessageAcrossRequestExample}">Store across request using MessageStoreInterceptor (Example)</s:a></li>
-        </ul>
-    </body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/nonFieldValidatorsExample.jsp b/trunk/apps/showcase/src/main/webapp/validation/nonFieldValidatorsExample.jsp
deleted file mode 100644
index 0480087..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/nonFieldValidatorsExample.jsp
+++ /dev/null
@@ -1,38 +0,0 @@
-<%-- 
-    nonFieldValidatorsExample.jsp
-    
-    @author tm_jee
-    @version $Date$ $Id$
---%>
-
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-    <head>
-        <title>Showcase - Validation - Non Field Validator Example</title>
-        <s:url id="siteCss" value="/validation/validationExamplesStyles.css" includeContext="true" />
-        <s:head />
-        <!-- link rel="stylesheet" type="text/css" href='<s:property value="%{siteCss}" />'-->
-    </head>
-    <body>
-    
-       
-       <!-- START SNIPPET: nonFieldValidatorsExample -->
-        <s:actionerror />
-    
-        <s:form method="POST" action="submitNonFieldValidatorsExamples" namespace="/validation">
-            <s:textfield name="someText" label="Some Text" />
-            <s:textfield name="someTextRetype" label="Retype Some Text" />  
-            <s:textfield name="someTextRetypeAgain" label="Retype Some Text Again" />
-            <s:submit label="Submit" />
-        </s:form>
-        
-        
-        <!--  END SNIPPET: nonFieldValidatorsExample -->
-        
-        
-        <s:include value="footer.jsp" />
-    </body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/quiz-ajax.jsp b/trunk/apps/showcase/src/main/webapp/validation/quiz-ajax.jsp
deleted file mode 100644
index 22840de..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/quiz-ajax.jsp
+++ /dev/null
@@ -1,23 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<!-- START SNIPPET: ajaxValidation -->
-
-<html>
-<head>
-    <title>Validation - Basic</title>
-    <s:head theme="ajax"/>
-</head>
-
-<body>
-
-<s:form method="post" validate="true" theme="ajax">
-    <s:textfield label="Name" name="name"/>
-    <s:textfield label="Age" name="age"/>
-    <s:textfield label="Favorite color" name="answer"/>
-    <s:submit/>
-</s:form>
-
-</body>
-</html>
-
-<!-- END SNIPPET: ajaxValidation -->
diff --git a/trunk/apps/showcase/src/main/webapp/validation/quiz-basic.jsp b/trunk/apps/showcase/src/main/webapp/validation/quiz-basic.jsp
deleted file mode 100644
index 6d75c51..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/quiz-basic.jsp
+++ /dev/null
@@ -1,27 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<!-- START SNIPPET: basicValidation -->
-
-<html>
-<head>
-    <title>Validation - Basic</title>
-    <s:head/>
-</head>
-
-<body>
-
-<b>What is your favorite color?</b>
-<p/>
-
-<s:form method="post">
-    <s:textfield label="Name" name="name"/>
-    <s:textfield label="Age" name="age"/>
-    <s:textfield label="Favorite color" name="answer"/>
-    <s:submit/>
-</s:form>
-
-</body>
-</html>
-
-<!-- END SNIPPET: basicValidation -->
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/quiz-client-css.jsp b/trunk/apps/showcase/src/main/webapp/validation/quiz-client-css.jsp
deleted file mode 100644
index ac62bb2..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/quiz-client-css.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<!-- START SNIPPET: clientCssValidation -->
-
-<html>
-<head>
-    <title>Validation - Basic</title>
-    <s:head theme="css_xhtml"/>
-</head>
-
-<body>
-
-<s:form method="post" theme="css_xhtml" validate="true">
-    <s:textfield label="Name" name="name"/>
-    <s:textfield label="Age" name="age"/>
-    <s:textfield label="Favorite color" name="answer"/>
-    <s:submit/>
-</s:form>
-
-</body>
-</html>
-
-<!--  END SNIPPET: clientCssValidation -->
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/quiz-client.jsp b/trunk/apps/showcase/src/main/webapp/validation/quiz-client.jsp
deleted file mode 100644
index 0517e05..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/quiz-client.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<!-- START SNIPPET: clientValidation -->
-
-<html>
-<head>
-    <title>Validation - Basic</title>
-    <s:head/>
-</head>
-
-<body>
-
-<s:form method="post" validate="true">
-    <s:textfield label="Name" name="name"/>
-    <s:textfield label="Age" name="age"/>
-    <s:textfield label="Favorite color" name="answer"/>
-    <s:submit/>
-</s:form>
-
-</body>
-</html>
-
-<!--  END SNIPPET: clientValidation -->
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/quiz-success.jsp b/trunk/apps/showcase/src/main/webapp/validation/quiz-success.jsp
deleted file mode 100644
index 738097a..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/quiz-success.jsp
+++ /dev/null
@@ -1,14 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>Quiz submitted!</title>
-</head>
-
-<body>
-
-Thank you, <b><s:property value="name"/></b>. Your answer has been submitted as:
-
-<b><s:property value="answer"/></b>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/validation/storeErrorsAcrossRequestCancel.jsp b/trunk/apps/showcase/src/main/webapp/validation/storeErrorsAcrossRequestCancel.jsp
deleted file mode 100644
index ef6efcb..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/storeErrorsAcrossRequestCancel.jsp
+++ /dev/null
@@ -1,21 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<%@taglib prefix="s" uri="/tags" %>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Insert title here</title>
-</head>
-<body>
-
-	<s:actionmessage/>
-	<s:actionerror/>
-	<s:fielderror />
-
-	<h1>Application Canceled</h1>	
-	<s:url id="url" value="/validation/storeErrorsAcrossRequestExample.jsp" />
-	<s:a href="%{#url}">Try Again</s:a>
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/storeErrorsAcrossRequestExample.jsp b/trunk/apps/showcase/src/main/webapp/validation/storeErrorsAcrossRequestExample.jsp
deleted file mode 100644
index 1986e8c..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/storeErrorsAcrossRequestExample.jsp
+++ /dev/null
@@ -1,35 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<%@taglib prefix="s" uri="/tags" %>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Showcase - Validation - Store Errors Across Request Example</title>
-</head>
-<body>
-	<p>
-	This is an example demonstrating the use of MessageStoreInterceptor.
-	When this form is submited a redirect is issue both when there's a validation
-	error or not. Normally, when a redirect is issue the action messages / errors and
-	field errors stored in the action will be lost (due to an action lives 
-	only as long as a request). With a MessageStoreInterceptor in place and 
-	configured, the action errors / messages / field errors will be store and 
-	remains retrieveable even after a redirect.
-	</p>
-	<p/>
-	
-	<s:actionmessage/>
-	<s:actionerror/>
-	<s:fielderror />
-
-	<s:form action="submitApplication" namespace="/validation">
-		<s:textfield name="name" label="Name" />
-		<s:textfield name="age" label="Age" />
-		<s:submit />
-		<s:submit action="cancelApplication" value="%{'Cancel'}" />
-	</s:form>
-
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/storeErrorsAcrossRequestOk.jsp b/trunk/apps/showcase/src/main/webapp/validation/storeErrorsAcrossRequestOk.jsp
deleted file mode 100644
index c60638f..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/storeErrorsAcrossRequestOk.jsp
+++ /dev/null
@@ -1,23 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<%@taglib prefix="s" uri="/tags" %>    
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Showcase - Validation - Store Errors Across Request Example</title>
-</head>
-<body>
-
-	<s:actionmessage/>
-	<s:actionerror/>
-	<s:fielderror />
-
-	<h2>Ok !</h2>
-	
-	<s:url id="url" value="/validation/storeErrorsAcrossRequestExample.jsp" />
-	<s:a href="%{#id}">Try Again</s:a>
-
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/successClientSideValidationExample.jsp b/trunk/apps/showcase/src/main/webapp/validation/successClientSideValidationExample.jsp
deleted file mode 100644
index 77f111c..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/successClientSideValidationExample.jsp
+++ /dev/null
@@ -1,53 +0,0 @@
-<%--
-    successFieldValidatorsExample.jsp
-
-    @author tm_jee
-    @version $Date$ $Id$
---%>
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-    <head><title>Showcase - Validation - SuccessFieldValidatorsExample</title></head>
-    <body>
-        <h1>Success !</h1>
-        <table>
-            <tr>
-                <td>Required Validator Field:</td>
-                <td><s:property value="requiredValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>Required String Validator Field:</td>
-                <td><s:property value="requiredStringValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>Integer Validator Field: </td>
-                <td><s:property value="integerValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>Date Validator Field: </td>
-                <td><s:property value="dateValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>Email Validator Field: </td>
-                <td><s:property value="emailValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>URL Validator Field: </td>
-                <td><s:property value="urlValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>String Length Validator Field: </td>
-                <td><s:property value="stringLengthValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>Regex Validator Field: <s:property value="regexValidatorField" /></td>
-                <td>Field Expression Validator Field: <s:property value="fieldExpressionValidatorField" /></td>
-            </tr>
-        </table>
-
-        <s:include value="footer.jsp" />
-    </body>
-    
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/successFieldValidatorsExample.jsp b/trunk/apps/showcase/src/main/webapp/validation/successFieldValidatorsExample.jsp
deleted file mode 100644
index 5e83be4..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/successFieldValidatorsExample.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%--
-    successFieldValidatorsExample.jsp
-    
-    @author tm_jee
-    @version $Date$ $Id$
---%>
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-    <head><title>Showcase - Validation - SuccessFieldValidatorsExample</title></head>
-    <body>
-        <h1>Success !</h1>
-        <table>
-            <tr>
-                <td>Required Validator Field:</td>
-                <td><s:property value="requiredValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>Required String Validator Field:</td>
-                <td><s:property value="requiredStringValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>Integer Validator Field: </td>
-                <td><s:property value="integerValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>Date Validator Field: </td>
-                <td><s:property value="dateValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>Email Validator Field: </td>
-                <td><s:property value="emailValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>String Length Validator Field: </td>
-                <td><s:property value="stringLengthValidatorField" /></td>
-            </tr>
-            <tr>
-                <td>Regex Validator Field: <s:property value="regexValidatorField" /></td>
-                <td>Field Expression Validator Field: <s:property value="fieldExpressionValidatorField" /></td>
-            </tr>
-        </table>
-        
-        <s:include value="footer.jsp" />
-    </body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/successNonFieldValidatorsExample.jsp b/trunk/apps/showcase/src/main/webapp/validation/successNonFieldValidatorsExample.jsp
deleted file mode 100644
index bc22e4f..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/successNonFieldValidatorsExample.jsp
+++ /dev/null
@@ -1,33 +0,0 @@
-<%--
-    successNonFieldValidatorsExample.jsp
-    
-    @author tm_jee
-    @version $Date$ $Id$
---%>
-
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-    <head><title>Showcase - Validation - SuccessNonFieldValidatorsExample</title></head>
-    <body>
-        <h1>Success !</h1>
-        <table>
-            <tr>
-                <td>Some Text: </td>
-                <td><s:property value="someText" /></td>
-            </tr>
-            <tr>
-                <td>Some Text Retyped: </td>
-                <td><s:property value="someTextRetype" /></td>
-            </tr>
-            <tr>
-                <td>Some Text Retyped Again: </td>
-                <td><s:property value="someTextRetypeAgain" /></td>
-            </tr>
-        </table>
-        
-        <s:include value="footer.jsp" />
-    </body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/successVisitorValidatorsExample.jsp b/trunk/apps/showcase/src/main/webapp/validation/successVisitorValidatorsExample.jsp
deleted file mode 100644
index 90e2b42..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/successVisitorValidatorsExample.jsp
+++ /dev/null
@@ -1,35 +0,0 @@
-<%-- 
-    successVisitorValidatorsExample.jsp
-    
-    @author tm_jee
-    @version $Date$ $Id$
---%>
-
-
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-    <head><title>Showcase - Validation - SuccessVisitorValidatorsExameple</title></head>
-    <body>
-        <h1>Success !</h1>
-        <table>
-            <tr>
-                <td>User Name:</td>
-                <td><s:property value="user.name" /></td>
-            </tr>
-            <tr>
-                <td>User Age:</td>          
-                <td><s:property value="user.age" /></td>
-            </tr>
-            <tr>
-                <td>User Birthday:</td>
-                <td><s:property value="user.birthday" /></td>
-            </tr>
-        </table>
-        
-        <s:include value="footer.jsp" />
-        
-    </body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/validation/validationExamplesStyles.css b/trunk/apps/showcase/src/main/webapp/validation/validationExamplesStyles.css
deleted file mode 100644
index 961be7c..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/validationExamplesStyles.css
+++ /dev/null
@@ -1,11 +0,0 @@
-@CHARSET "UTF-8";
-
-@CHARSET "UTF-8";
-
-.errorMessage {
-	color: red;
-}
-
-/*.errorLabel {
-	color: red;
-}*/
diff --git a/trunk/apps/showcase/src/main/webapp/validation/visitorValidatorsExample.jsp b/trunk/apps/showcase/src/main/webapp/validation/visitorValidatorsExample.jsp
deleted file mode 100644
index 0300a4f..0000000
--- a/trunk/apps/showcase/src/main/webapp/validation/visitorValidatorsExample.jsp
+++ /dev/null
@@ -1,36 +0,0 @@
-<%-- 
-    visitorValidatorsExample.jsp
-    
-    @author tm_jee
-    @version $Date$ $Id$
---%>
-
-
-<%@taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head><title>Showcase - Validation - VisitorValidatorsExample </title>
-        <s:url id="siteCss" value="/validation/validationExamplesStyles.css" includeContext="true" />
-        <s:head />
-        <!-- link rel="stylesheet" type="text/css" href='<s:property value="%{siteCss}" />' -->
-</head>
-<body>
-
-    <!-- START SNIPPET: visitorValidatorsExample -->
-    
-    <s:fielderror />
-
-    <s:form method="POST" action="submitVisitorValidatorsExamples" namespace="/validation">
-        <s:textfield name="user.name" label="User Name" />
-        <s:textfield name="user.age" label="User Age" />
-        <s:textfield name="user.birthday" label="Birthday" />
-        <s:submit label="Submit" />
-    </s:form>
-    
-    <!--  END SNIPPET: visitorValidatorsExample -->
-    
-    
-    <s:include value="footer.jsp" />
-</body>
-</html>
-
diff --git a/trunk/apps/showcase/src/main/webapp/viewSource.jsp b/trunk/apps/showcase/src/main/webapp/viewSource.jsp
deleted file mode 100644
index eac6c32..0000000
--- a/trunk/apps/showcase/src/main/webapp/viewSource.jsp
+++ /dev/null
@@ -1,53 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <title>View Sources</title>
-
-    <jsp:include page="/ajax/commonInclude.jsp"/>
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/tabs.css"/>">
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/niftycorners/niftyCorners.css"/>">
-    <link rel="stylesheet" type="text/css" href="<s:url value="/struts/niftycorners/niftyPrint.css"/>" media="print">
-    <script type="text/javascript" src="<s:url value="/struts/niftycorners/nifty.js"/>"></script>
-    <script type="text/javascript">
-        window.onload = function() {
-            if (!NiftyCheck())
-                return;
-            Rounded("li.tab_selected", "top", "white", "transparent", "border #ffffffS");
-            Rounded("li.tab_unselected", "top", "white", "transparent", "border #ffffffS");
-            //                Rounded("div#tab_header_main li","top","white","transparent","border #ffffffS");
-            // "white" needs to be replaced with the background color
-        }
-    </script>
-</head>
-<body>
-<h1>View Sources</h1>
-
-<s:tabbedPanel id="test" theme="ajax">
-	<s:panel id="one" tabName="Page" theme="ajax">
-        <h3>${empty page ? "Unknown page" : page}</h3>
-<pre>
-<s:iterator value="pageLines" status="row">
-${row.count}: <s:property/></s:iterator>
-</pre>
-    </s:panel>
-    <s:panel id="two" tabName="Configuration" theme="ajax" >
-        <h3>${empty config ? "Unknown configuration" : config}</h3>
-<pre>
-
-<s:iterator value="configLines" status="row"><s:if test="%{(#row.count-1)==(configLines.size()/2)}">
-<span style="background-color:yellow">${configLine - padding + row.count - 1}: <s:property/></span></s:if><s:else>
-${configLine - padding + row.count - 1}: <s:property/></s:else></s:iterator>
-</pre>
-    </s:panel>
-    <s:panel id="three" tabName="Java Action" theme="ajax">
-        <h3>${empty className ? "Unknown or unavailable Action class" : className}</h3>
-<pre>
-<s:iterator value="classLines" status="row">
-${row.count}: <s:property/></s:iterator>
-</pre>
-    </s:panel>
-    
-</s:tabbedPanel>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/wait/complete.jsp b/trunk/apps/showcase/src/main/webapp/wait/complete.jsp
deleted file mode 100644
index f124310..0000000
--- a/trunk/apps/showcase/src/main/webapp/wait/complete.jsp
+++ /dev/null
@@ -1,13 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-    <head><title>Execute and Wait Examples</title></head>
-
-<body>
-    <h1>The process is complete</h1>
-
-    <b>We have processed your request.</b>
-    <p/>
-    Click here to <s:url id="back" value="/wait"/><s:a href="%{back}">return</s:a>.
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/wait/example1.jsp b/trunk/apps/showcase/src/main/webapp/wait/example1.jsp
deleted file mode 100644
index d3c1d83..0000000
--- a/trunk/apps/showcase/src/main/webapp/wait/example1.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-    <head><title>Execute and Wait Examples</title></head>
-
-<body>
-    <h1>Execute and Wait Example 1</h1>
-    
-    <b>Example 1:</b> In the form below enter how long time to simulate the process should take.
-
-    <s:form action="longProcess1">
-        <s:textfield label="Time (millis)" name="time" required="true" value="7000"/>
-        <s:submit value="submit"/>
-    </s:form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/wait/example2.jsp b/trunk/apps/showcase/src/main/webapp/wait/example2.jsp
deleted file mode 100644
index 484636c..0000000
--- a/trunk/apps/showcase/src/main/webapp/wait/example2.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-    <head><title>Execute and Wait Examples</title></head>
-
-<body>
-    <h1>Execute and Wait Example 2</h1>
-
-    <b>Example 2:</b> As example 1 but uses a delay of 2000 millis before the wait page is shown. Try simulating with
-    a value of 500 millis to see that no wait page is shown at all.
-
-    <s:form action="longProcess2">
-        <s:textfield label="Time (millis)" name="time" required="true" value="8000"/>
-        <s:submit value="submit"/>
-    </s:form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/wait/example3.jsp b/trunk/apps/showcase/src/main/webapp/wait/example3.jsp
deleted file mode 100644
index 3fe6504..0000000
--- a/trunk/apps/showcase/src/main/webapp/wait/example3.jsp
+++ /dev/null
@@ -1,18 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-    <head><title>Execute and Wait Examples</title></head>
-
-<body>
-    <h1>Execute and Wait Example 3</h1>
-
-    <b>Example 3:</b> As example 1 but uses a delay of 3000 millis before the wait page is shown.
-    While waiting for the wait page it will check every 1000 millis if the background process is already
-    done. Try simulating with a value of 700 millis to see that the wait page is shown soon thereafter.
-
-    <s:form action="longProcess3">
-        <s:textfield label="Time (millis)" name="time" required="true" value="9000"/>
-        <s:submit value="submit"/>
-    </s:form>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/wait/index.jsp b/trunk/apps/showcase/src/main/webapp/wait/index.jsp
deleted file mode 100644
index 566bc55..0000000
--- a/trunk/apps/showcase/src/main/webapp/wait/index.jsp
+++ /dev/null
@@ -1,19 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-    <head><title>Execute and Wait Examples</title></head>
-
-<body>
-    <h1>Execute and Wait Examples</h1>
-
-    These examples illustrate Struts build in support for execute and wait.
-    <p/>
-    When you have a process that takes a long time your users can be impatient and starts to submit/click again.
-    <br/> A good solution is to show the user a progress page (wait page) while the process takes it time.
-
-    <br/>
-    <br/><a href="example1.jsp">Example 1 (no delay)</a>
-    <br/><a href="example2.jsp">Example 2 (with delay)</a>
-    <br/><a href="example3.jsp">Example 2 (with longer check delay)</a>
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/main/webapp/wait/wait.jsp b/trunk/apps/showcase/src/main/webapp/wait/wait.jsp
deleted file mode 100644
index 7913943..0000000
--- a/trunk/apps/showcase/src/main/webapp/wait/wait.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
-    <meta http-equiv="refresh" content="5;url=<s:url includeParams="all"/>"/>
-</head>
-
-<body>
-    <p style="border: 1px solid silver; padding: 5px; background: #ffd; text-align: center;">
-        We are processing your request. Please wait.
-    </p>
-
-    <p/>
-    You can click this link to <a href="<s:url includeParams="all"/>">refresh</a>.
-
-</body>
-</html>
diff --git a/trunk/apps/showcase/src/test/java/org/apache/struts2/showcase/tutorial/HelloTest.java b/trunk/apps/showcase/src/test/java/org/apache/struts2/showcase/tutorial/HelloTest.java
deleted file mode 100644
index e309ff0..0000000
--- a/trunk/apps/showcase/src/test/java/org/apache/struts2/showcase/tutorial/HelloTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.apache.struts2.showcase.tutorial;
-
-import junit.framework.TestCase;
-
-/**
- * An example text class to verify the configuration.
- */
-public class HelloTest extends TestCase {
-
-    /**
-     * An example test that asserts true.
-     *
-     * @throws Exception On invalid assertions
-     */
-    public void testHelloAction() throws Exception {
-        assertTrue(true);
-    }
-}
diff --git a/trunk/assembly/pom.xml b/trunk/assembly/pom.xml
deleted file mode 100644
index 72d652b..0000000
--- a/trunk/assembly/pom.xml
+++ /dev/null
@@ -1,442 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/* 
- * Copyright 2005-2006 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.
- *
- * $Id$
- */
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-assembly</artifactId>
-    <packaging>pom</packaging>
-    <name>Struts 2 Assembly</name>
-    <description>
-        Struts 2 Assembly
-    </description>
-
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-parent</artifactId>
-        <version>2.0.1</version>
-    </parent>
-
-    <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/struts/struts2/trunk/assembly</connection>
-        <developerConnection>
-            scm:svn:https://svn.apache.org/repos/asf/struts/struts2/trunk/assembly</developerConnection>
-        <url>http://svn.apache.org/viewcvs.cgi/struts/struts2/trunk/assembly</url>
-    </scm>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>dependency-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-war</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>struts2-blank</artifactId>
-                                    <version>${version}</version>
-                                    <type>war</type>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>struts2-mailreader</artifactId>
-                                    <version>${version}</version>
-                                    <type>war</type>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>struts2-portlet</artifactId>
-                                    <version>${version}</version>
-                                    <type>war</type>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>struts2-showcase</artifactId>
-                                    <version>${version}</version>
-                                    <type>war</type>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.struts</groupId>
-                                    <artifactId>struts2-mailreader</artifactId>
-                                    <version>${version}</version>
-                                    <type>war</type>
-                                </artifactItem>
-                            </artifactItems>
-                            <outputDirectory>${project.build.directory}/apps</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>xwork-javadoc</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>unpack</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>opensymphony</groupId>
-                                    <artifactId>xwork</artifactId>
-                                    <classifier>javadoc</classifier>
-                                    <version>2.0-beta-1</version>
-                                </artifactItem>
-                            </artifactItems>
-                            <outputDirectory>${project.build.directory}/xwork-apidocs</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <version>2.0.1</version>
-                <configuration>
-                    <descriptors>
-                        <descriptor>src/main/assembly/all.xml</descriptor>
-                        <descriptor>src/main/assembly/lib.xml</descriptor>
-                        <descriptor>src/main/assembly/apps.xml</descriptor>
-                        <descriptor>src/main/assembly/src.xml</descriptor>
-                    </descriptors>
-                    <finalName>struts-${version}</finalName>
-                    <outputDirectory>target/assembly/out</outputDirectory>
-                    <workDirectory>target/assembly/work</workDirectory>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-api</artifactId>
-            <version>${version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-core</artifactId>
-            <version>${version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-all</artifactId>
-            <version>${version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-config-browser-plugin</artifactId>
-            <version>${version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-jasperreports-plugin</artifactId>
-            <version>${version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-jfreechart-plugin</artifactId>
-            <version>${version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-jsf-plugin</artifactId>
-            <version>${version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-pell-multipart-plugin</artifactId>
-            <version>${version}</version>
-        </dependency> 
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-plexus-plugin</artifactId>
-            <version>${version}</version>
-        </dependency> 
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-quickstart-plugin</artifactId>
-            <version>${version}</version>
-        </dependency> 
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-sitegraph-plugin</artifactId>
-            <version>${version}</version>
-        </dependency> 
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-sitemesh-plugin</artifactId>
-            <version>${version}</version>
-        </dependency> 
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-struts1-plugin</artifactId>
-            <version>${version}</version>
-        </dependency> 
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-tiles-plugin</artifactId>
-            <version>${version}</version>
-        </dependency> 
-
-
-        <!-- Include optional dependencies -->
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>jsp-api</artifactId>
-            <version>2.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- Ajax -->
-        <dependency>
-            <groupId>uk.ltd.getahead</groupId>
-            <artifactId>dwr</artifactId>
-            <version>1.1-beta-3</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- Velocity -->
-        <dependency>
-            <groupId>velocity</groupId>
-            <artifactId>velocity</artifactId>
-            <version>1.4</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>velocity-tools</groupId>
-            <artifactId>velocity-tools</artifactId>
-            <version>1.1</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- File upload -->
-        <dependency>
-            <groupId>commons-fileupload</groupId>
-            <artifactId>commons-fileupload</artifactId>
-            <version>1.1.1</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- Sitemesh -->
-        <dependency>
-            <groupId>opensymphony</groupId>
-            <artifactId>sitemesh</artifactId>
-            <version>2.2.1</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- Quickstart -->
-        <dependency>
-            <groupId>jetty</groupId>
-            <artifactId>org.mortbay.jetty</artifactId>
-            <version>5.1.4</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>eclipse</groupId>
-            <artifactId>jdtcore</artifactId>
-            <version>3.1.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>ant</groupId>
-            <artifactId>ant</artifactId>
-            <version>1.6.5</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>tomcat</groupId>
-            <artifactId>jasper-compiler</artifactId>
-            <version>5.5.12</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>tomcat</groupId>
-            <artifactId>jasper-runtime</artifactId>
-            <version>5.5.12</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>tomcat</groupId>
-            <artifactId>jasper-compiler-jdt</artifactId>
-            <version>5.5.12</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-el</groupId>
-            <artifactId>commons-el</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.1</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- QuickStart -->
-        <dependency>
-            <groupId>xstream</groupId>
-            <artifactId>xstream</artifactId>
-            <version>1.1.2</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- Tiles -->
-        <dependency>
-            <groupId>org.apache.struts.tiles</groupId>
-            <artifactId>tiles-core</artifactId>
-            <version>0.2-SNAPSHOT</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>commons-digester</groupId>
-            <artifactId>commons-digester</artifactId>
-            <version>1.7</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- Portlet -->
-        <dependency>
-            <groupId>portlet-api</groupId>
-            <artifactId>portlet-api</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.pluto</groupId>
-            <artifactId>pluto</artifactId>
-            <version>1.0.1-rc4</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- Plexus -->
-        <dependency>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
-            <version>1.0-alpha-10-SNAPSHOT</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- Spring -->
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-            <version>1.2.8</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>1.2.8</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>1.2.8</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-            <version>1.2.8</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-mock</artifactId>
-            <version>1.2.8</version>
-            <scope>provided</scope>
-        </dependency>
-        
-
-        <dependency>
-            <groupId>myfaces</groupId>
-            <artifactId>myfaces-jsf-api</artifactId>
-            <version>1.0.9</version>
-            <scope>provided</scope>
-        </dependency>
-
-      <dependency>
-         <groupId>org.rifers</groupId>
-         <artifactId>rife-continuations</artifactId>
-         <version>0.0.2</version>
-         <scope>provided</scope>
-     </dependency>
- 
-        <!-- Exclude transitive dependencies -->
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-
-    </dependencies>
-
-</project>
diff --git a/trunk/assembly/src/main/assembly/all.xml b/trunk/assembly/src/main/assembly/all.xml
deleted file mode 100644
index 4724a49..0000000
--- a/trunk/assembly/src/main/assembly/all.xml
+++ /dev/null
@@ -1,188 +0,0 @@
-<!--
-/*
- * $Id$
- *
- * Copyright 2006 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.
- */
--->
-
-<assembly>
-  <id>all</id>
-  <formats>
-    <format>zip</format>
-  </formats>
-  <dependencySets>
-    <dependencySet>
-      <outputDirectory>lib</outputDirectory>
-      <scope>runtime</scope>
-    </dependencySet>
-  </dependencySets>
-  <fileSets>
-    <fileSet>
-        <directory>src/main/resources</directory>
-        <outputDirectory></outputDirectory>
-      <includes>
-        <include>README*</include>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>target/apps</directory>
-      <outputDirectory>apps</outputDirectory>
-      <includes>
-        <include>*.war</include>
-      </includes>
-    </fileSet>
-
-    <!-- Include the XWork Javadoc in the assembly -->
-    <fileSet>
-      <directory>target/xwork-apidocs</directory>
-      <outputDirectory>docs/xwork-apidocs</outputDirectory>
-    </fileSet>
-
-      <!-- Include the website in the assembly -->
-      <fileSet>
-        <directory>../target/site</directory>
-        <outputDirectory>docs</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../api/target/site</directory>
-        <outputDirectory>docs/struts2-api</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../core/target/site</directory>
-        <outputDirectory>docs/struts2-core</outputDirectory>
-      </fileSet>
-
-      <!-- Plugins -->
-      <!-- 
-      <fileSet>
-        <directory>../plugins/$plugin/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-$plugin-plugin</outputDirectory>
-      </fileSet>
-      -->
-      <fileSet>
-        <directory>../plugins/config-browser/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-config-browser-plugin</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../plugins/jasperreports/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-jasperreports-plugin</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../plugins/jfreechart/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-jfreechart-plugin</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../plugins/jsf/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-jsf-plugin</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../plugins/pell-multipart/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-pell-multipart-plugin</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../plugins/plexus/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-plexus-plugin</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../plugins/quickstart/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-quickstart-plugin</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../plugins/struts1/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-struts1-plugin</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../plugins/sitegraph/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-sitegraph-plugin</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../plugins/sitemesh/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-sitemesh-plugin</outputDirectory>
-      </fileSet>
-      <fileSet>
-        <directory>../plugins/tiles/target/site</directory>
-        <outputDirectory>docs/struts2-plugins/struts2-tiles-plugin</outputDirectory>
-      </fileSet>
-
-    <!-- Include the source code in the assembly -->
-    <fileSet>
-      <directory>../</directory>
-      <outputDirectory>src/</outputDirectory>
-      <includes>
-        <include>pom.xml</include>
-        <include>src/</include>
-      </includes>
-    </fileSet>
-      <fileSet>
-        <directory>../api</directory>
-        <outputDirectory>src/api</outputDirectory>
-        <includes>
-          <include>pom.xml</include>
-          <include>src/</include>
-        </includes>
-      </fileSet>
-    <fileSet>
-      <directory>../apps</directory>
-      <outputDirectory>src/apps</outputDirectory>
-      <includes>
-        <include>pom.xml</include>
-        <include>src/</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>../apps/blank</directory>
-      <outputDirectory>src/apps/blank</outputDirectory>
-      <includes>
-        <include>pom.xml</include>
-        <include>src/</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>../apps/portlet</directory>
-      <outputDirectory>src/apps/portlet</outputDirectory>
-      <includes>
-        <include>pom.xml</include>
-        <include>src/</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>../apps/showcase</directory>
-      <outputDirectory>src/apps/showcase</outputDirectory>
-      <includes>
-        <include>pom.xml</include>
-        <include>src/</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>../assembly</directory>
-      <outputDirectory>src/assembly</outputDirectory>
-      <includes>
-        <include>pom.xml</include>
-        <include>src/</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>../core</directory>
-      <outputDirectory>src/core</outputDirectory>
-      <includes>
-        <include>pom.xml</include>
-        <include>src/</include>
-      </includes>
-   </fileSet>
-  </fileSets>
-</assembly>
diff --git a/trunk/assembly/src/main/assembly/apps.xml b/trunk/assembly/src/main/assembly/apps.xml
deleted file mode 100644
index 28d77c1..0000000
--- a/trunk/assembly/src/main/assembly/apps.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--
-/*
- * $Id$
- *
- * Copyright 2006 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.
- */
--->
-<assembly>
-  <id>apps</id>
-  <formats>
-    <format>zip</format>
-  </formats>
-  <fileSets>
-    <fileSet>
-    	<directory>src/main/resources</directory>
-    	<outputDirectory></outputDirectory>
-      <includes>
-        <include>README*</include>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>target/apps</directory>
-      <outputDirectory>apps</outputDirectory>
-      <includes>
-        <include>*.war</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/trunk/assembly/src/main/assembly/lib.xml b/trunk/assembly/src/main/assembly/lib.xml
deleted file mode 100644
index d3107d1..0000000
--- a/trunk/assembly/src/main/assembly/lib.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--
-/*
- * $Id$
- *
- * Copyright 2006 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.
- */
--->
-
-<assembly>
-  <id>lib</id>
-  <formats>
-    <format>zip</format>
-  </formats>
-  <dependencySets>
-    <dependencySet>
-      <outputDirectory>lib</outputDirectory>
-      <scope>runtime</scope>
-    </dependencySet>
-  </dependencySets>
-  <fileSets>
-    <fileSet>
-    	<directory>src/main/resources</directory>
-    	<outputDirectory></outputDirectory>
-      <includes>
-        <include>README*</include>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/trunk/assembly/src/main/assembly/src.xml b/trunk/assembly/src/main/assembly/src.xml
deleted file mode 100644
index c4c5fed..0000000
--- a/trunk/assembly/src/main/assembly/src.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<!--
-/*
- * $Id$
- *
- * Copyright 2006 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.
- */
--->
-
-<assembly>
-  <id>src</id>
-  <formats>
-    <format>zip</format>
-  </formats>
-  <includeBaseDirectory>true</includeBaseDirectory>
-  <dependencySets>
-    <dependencySet>
-      <outputDirectory>lib</outputDirectory>
-      <scope>optional</scope>
-    </dependencySet>
-    <dependencySet>
-      <outputDirectory>lib</outputDirectory>
-      <scope>compile</scope>
-    </dependencySet>
-    <dependencySet>
-      <outputDirectory>lib</outputDirectory>
-      <scope>provided</scope>
-    </dependencySet>
-  </dependencySets>
-  <fileSets>
-
-      <fileSet>
-          <directory>src/main/resources</directory>
-          <outputDirectory></outputDirectory>
-          <includes>
-              <include>README*</include>
-              <include>LICENSE*</include>
-              <include>NOTICE*</include>
-              <include>build.xml</include>
-          </includes>
-      </fileSet>
-
-      <!-- Include the source code in the assembly -->
-      <fileSet>
-        <directory>../</directory>
-        <outputDirectory>src/</outputDirectory>
-        <includes>
-          <include>pom.xml</include>
-          <include>src/</include>
-        </includes>
-      </fileSet>
-        <fileSet>
-          <directory>../api</directory>
-          <outputDirectory>src/api</outputDirectory>
-          <includes>
-            <include>pom.xml</include>
-            <include>src/</include>
-          </includes>
-        </fileSet>
-      <fileSet>
-        <directory>../apps</directory>
-        <outputDirectory>src/apps</outputDirectory>
-        <includes>
-          <include>pom.xml</include>
-          <include>src/</include>
-        </includes>
-      </fileSet>
-      <fileSet>
-        <directory>../apps/blank</directory>
-        <outputDirectory>src/apps/blank</outputDirectory>
-        <includes>
-          <include>pom.xml</include>
-          <include>src/</include>
-        </includes>
-      </fileSet>
-      <fileSet>
-        <directory>../apps/portlet</directory>
-        <outputDirectory>src/apps/portlet</outputDirectory>
-        <includes>
-          <include>pom.xml</include>
-          <include>src/</include>
-        </includes>
-      </fileSet>
-      <fileSet>
-        <directory>../apps/showcase</directory>
-        <outputDirectory>src/apps/showcase</outputDirectory>
-        <includes>
-          <include>pom.xml</include>
-          <include>src/</include>
-        </includes>
-      </fileSet>
-      <fileSet>
-        <directory>../assembly</directory>
-        <outputDirectory>src/assembly</outputDirectory>
-        <includes>
-          <include>pom.xml</include>
-          <include>src/</include>
-        </includes>
-      </fileSet>
-      <fileSet>
-        <directory>../core</directory>
-        <outputDirectory>src/core</outputDirectory>
-        <includes>
-          <include>pom.xml</include>
-          <include>src/</include>
-        </includes>
-     </fileSet>
-
-  </fileSets>
-</assembly>
diff --git a/trunk/assembly/src/main/resources/LICENSE.txt b/trunk/assembly/src/main/resources/LICENSE.txt
deleted file mode 100644
index dd5b3a5..0000000
--- a/trunk/assembly/src/main/resources/LICENSE.txt
+++ /dev/null
@@ -1,174 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
diff --git a/trunk/assembly/src/main/resources/NOTICE.txt b/trunk/assembly/src/main/resources/NOTICE.txt
deleted file mode 100644
index 439eb83..0000000
--- a/trunk/assembly/src/main/resources/NOTICE.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
-
diff --git a/trunk/assembly/src/main/resources/build.xml b/trunk/assembly/src/main/resources/build.xml
deleted file mode 100644
index d93200b..0000000
--- a/trunk/assembly/src/main/resources/build.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0"?>

-<project name="struts2-core" default="default">

-

-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->

-  <!--                   directories                     -->

-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->

-  <property name="src.dir" value="src/core/src/main/java"/>

-  <property name="build.dir" value="build"/>

-  <property name="build.classes.dir" value="${build.dir}/classes"/>

-  <property name="dist.dir" value="dist"/>

-  <property name="lib.dir" value="lib"/>

-  		

-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->

-  <!--                    paths                          -->

-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->

-  <path id="compile.classpath">

-    <pathelement location="${build.classes.dir}"/>

-    <fileset dir="${lib.dir}">

-      <include name="**/*.jar" />

-    </fileset>

-  </path>

-  

-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->

-  <!--                  targets                          -->

-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->

-  <target name="default" 

-          depends="dist" 

-          description="default: build everything"

-  />

-  

-  <target name="clean" description="remove all built files">

-    <delete dir="${build.dir}" />

-    <delete dir="${dist.dir}" />

-  </target>

-

-  <target name="dist" 

-          depends="compile" 

-          description="create distributables (jars etc)">

-    <mkdir dir="${dist.dir}" />

-    <jar jarfile="${dist.dir}/struts2-core.jar"> 

-      <fileset dir="${build.classes.dir}"/>

-    </jar>

-  </target>

-  <target name="compile" description="compile java">

-    <mkdir dir="${build.classes.dir}" />

-    <javac srcdir="${src.dir}" 

-           destdir="${build.classes.dir}" 

-           classpathref="compile.classpath" 

-           debug="on" 

-           deprecation="on"/>

-  </target>

-

-</project>

diff --git a/trunk/backport/ASM-LICENSE.txt b/trunk/backport/ASM-LICENSE.txt
deleted file mode 100755
index 9496b17..0000000
--- a/trunk/backport/ASM-LICENSE.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-

- ASM: a very small and fast Java bytecode manipulation framework

- Copyright (c) 2000-2005 INRIA, France Telecom

- All rights reserved.

-

- Redistribution and use in source and binary forms, with or without

- modification, are permitted provided that the following conditions

- are met:

- 1. Redistributions of source code must retain the above copyright

-    notice, this list of conditions and the following disclaimer.

- 2. Redistributions in binary form must reproduce the above copyright

-    notice, this list of conditions and the following disclaimer in the

-    documentation and/or other materials provided with the distribution.

- 3. Neither the name of the copyright holders nor the names of its

-    contributors may be used to endorse or promote products derived from

-    this software without specific prior written permission.

-

- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE

- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF

- THE POSSIBILITY OF SUCH DAMAGE.

diff --git a/trunk/backport/LICENSE.txt b/trunk/backport/LICENSE.txt
deleted file mode 100644
index 28c9615..0000000
--- a/trunk/backport/LICENSE.txt
+++ /dev/null
@@ -1,29 +0,0 @@
- Retrotranslator: a Java bytecode transformer that translates Java classes

- compiled with JDK 5.0 into classes that can be run on JVM 1.4.

-

- Copyright (c) 2005, 2006 Taras Puchko

- All rights reserved.

-

- Redistribution and use in source and binary forms, with or without

- modification, are permitted provided that the following conditions

- are met:

- 1. Redistributions of source code must retain the above copyright

-    notice, this list of conditions and the following disclaimer.

- 2. Redistributions in binary form must reproduce the above copyright

-    notice, this list of conditions and the following disclaimer in the

-    documentation and/or other materials provided with the distribution.

- 3. Neither the name of the copyright holders nor the names of its

-    contributors may be used to endorse or promote products derived from

-    this software without specific prior written permission.

-

- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE

- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF

- THE POSSIBILITY OF SUCH DAMAGE.

diff --git a/trunk/backport/RETROTRANSLATOR-LICENSE.txt b/trunk/backport/RETROTRANSLATOR-LICENSE.txt
deleted file mode 100755
index 28c9615..0000000
--- a/trunk/backport/RETROTRANSLATOR-LICENSE.txt
+++ /dev/null
@@ -1,29 +0,0 @@
- Retrotranslator: a Java bytecode transformer that translates Java classes

- compiled with JDK 5.0 into classes that can be run on JVM 1.4.

-

- Copyright (c) 2005, 2006 Taras Puchko

- All rights reserved.

-

- Redistribution and use in source and binary forms, with or without

- modification, are permitted provided that the following conditions

- are met:

- 1. Redistributions of source code must retain the above copyright

-    notice, this list of conditions and the following disclaimer.

- 2. Redistributions in binary form must reproduce the above copyright

-    notice, this list of conditions and the following disclaimer in the

-    documentation and/or other materials provided with the distribution.

- 3. Neither the name of the copyright holders nor the names of its

-    contributors may be used to endorse or promote products derived from

-    this software without specific prior written permission.

-

- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE

- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF

- THE POSSIBILITY OF SUCH DAMAGE.

diff --git a/trunk/backport/S2-FOR-J4-README.txt b/trunk/backport/S2-FOR-J4-README.txt
deleted file mode 100755
index 7d845dc..0000000
--- a/trunk/backport/S2-FOR-J4-README.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-STRUTS 2 FOR JAVA 4

-

-Struts 2 is targeted for Java 5, but a "backported" version to Java 4 is being made available, 

-using the RetroTranslator tool. 

-

-To use Struts 2 with Java 4 (preferably Java 1.4.2), place the enclosed Struts, XWork, 

-RetroTranslator, and backport-util-concurrent JARs on your classpath. For complete details on 

-using RetroTranslator JARs, see the RetroTranslator site. 

-

-* http://retrotranslator.sourceforge.net/

-

-NOTE: The Struts 2 and XWork 2 JARs are complete replacements for the corresponding standard 

-Java 5 JARs. Do not use both sets of JARs in the same environment! 

-

-If you discover any issues using the Struts 2 for Java 4 JAR, please report them to the Struts 

-Dev list or JIRA ticket ww-1391. 

-

-* http://struts.apache.org/mail.html

-

-* https://issues.apache.org/struts/browse/WW-1391

-

-Cheers!

diff --git a/trunk/backport/STRUTS-LICENSE.txt b/trunk/backport/STRUTS-LICENSE.txt
deleted file mode 100755
index c6055ec..0000000
--- a/trunk/backport/STRUTS-LICENSE.txt
+++ /dev/null
@@ -1,174 +0,0 @@
-                                 Apache License

-                           Version 2.0, January 2004

-                        http://www.apache.org/licenses/

-

-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

-

-   1. Definitions.

-

-      "License" shall mean the terms and conditions for use, reproduction,

-      and distribution as defined by Sections 1 through 9 of this document.

-

-      "Licensor" shall mean the copyright owner or entity authorized by

-      the copyright owner that is granting the License.

-

-      "Legal Entity" shall mean the union of the acting entity and all

-      other entities that control, are controlled by, or are under common

-      control with that entity. For the purposes of this definition,

-      "control" means (i) the power, direct or indirect, to cause the

-      direction or management of such entity, whether by contract or

-      otherwise, or (ii) ownership of fifty percent (50%) or more of the

-      outstanding shares, or (iii) beneficial ownership of such entity.

-

-      "You" (or "Your") shall mean an individual or Legal Entity

-      exercising permissions granted by this License.

-

-      "Source" form shall mean the preferred form for making modifications,

-      including but not limited to software source code, documentation

-      source, and configuration files.

-

-      "Object" form shall mean any form resulting from mechanical

-      transformation or translation of a Source form, including but

-      not limited to compiled object code, generated documentation,

-      and conversions to other media types.

-

-      "Work" shall mean the work of authorship, whether in Source or

-      Object form, made available under the License, as indicated by a

-      copyright notice that is included in or attached to the work

-      (an example is provided in the Appendix below).

-

-      "Derivative Works" shall mean any work, whether in Source or Object

-      form, that is based on (or derived from) the Work and for which the

-      editorial revisions, annotations, elaborations, or other modifications

-      represent, as a whole, an original work of authorship. For the purposes

-      of this License, Derivative Works shall not include works that remain

-      separable from, or merely link (or bind by name) to the interfaces of,

-      the Work and Derivative Works thereof.

-

-      "Contribution" shall mean any work of authorship, including

-      the original version of the Work and any modifications or additions

-      to that Work or Derivative Works thereof, that is intentionally

-      submitted to Licensor for inclusion in the Work by the copyright owner

-      or by an individual or Legal Entity authorized to submit on behalf of

-      the copyright owner. For the purposes of this definition, "submitted"

-      means any form of electronic, verbal, or written communication sent

-      to the Licensor or its representatives, including but not limited to

-      communication on electronic mailing lists, source code control systems,

-      and issue tracking systems that are managed by, or on behalf of, the

-      Licensor for the purpose of discussing and improving the Work, but

-      excluding communication that is conspicuously marked or otherwise

-      designated in writing by the copyright owner as "Not a Contribution."

-

-      "Contributor" shall mean Licensor and any individual or Legal Entity

-      on behalf of whom a Contribution has been received by Licensor and

-      subsequently incorporated within the Work.

-

-   2. Grant of Copyright License. Subject to the terms and conditions of

-      this License, each Contributor hereby grants to You a perpetual,

-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable

-      copyright license to reproduce, prepare Derivative Works of,

-      publicly display, publicly perform, sublicense, and distribute the

-      Work and such Derivative Works in Source or Object form.

-

-   3. Grant of Patent License. Subject to the terms and conditions of

-      this License, each Contributor hereby grants to You a perpetual,

-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable

-      (except as stated in this section) patent license to make, have made,

-      use, offer to sell, sell, import, and otherwise transfer the Work,

-      where such license applies only to those patent claims licensable

-      by such Contributor that are necessarily infringed by their

-      Contribution(s) alone or by combination of their Contribution(s)

-      with the Work to which such Contribution(s) was submitted. If You

-      institute patent litigation against any entity (including a

-      cross-claim or counterclaim in a lawsuit) alleging that the Work

-      or a Contribution incorporated within the Work constitutes direct

-      or contributory patent infringement, then any patent licenses

-      granted to You under this License for that Work shall terminate

-      as of the date such litigation is filed.

-

-   4. Redistribution. You may reproduce and distribute copies of the

-      Work or Derivative Works thereof in any medium, with or without

-      modifications, and in Source or Object form, provided that You

-      meet the following conditions:

-

-      (a) You must give any other recipients of the Work or

-          Derivative Works a copy of this License; and

-

-      (b) You must cause any modified files to carry prominent notices

-          stating that You changed the files; and

-

-      (c) You must retain, in the Source form of any Derivative Works

-          that You distribute, all copyright, patent, trademark, and

-          attribution notices from the Source form of the Work,

-          excluding those notices that do not pertain to any part of

-          the Derivative Works; and

-

-      (d) If the Work includes a "NOTICE" text file as part of its

-          distribution, then any Derivative Works that You distribute must

-          include a readable copy of the attribution notices contained

-          within such NOTICE file, excluding those notices that do not

-          pertain to any part of the Derivative Works, in at least one

-          of the following places: within a NOTICE text file distributed

-          as part of the Derivative Works; within the Source form or

-          documentation, if provided along with the Derivative Works; or,

-          within a display generated by the Derivative Works, if and

-          wherever such third-party notices normally appear. The contents

-          of the NOTICE file are for informational purposes only and

-          do not modify the License. You may add Your own attribution

-          notices within Derivative Works that You distribute, alongside

-          or as an addendum to the NOTICE text from the Work, provided

-          that such additional attribution notices cannot be construed

-          as modifying the License.

-

-      You may add Your own copyright statement to Your modifications and

-      may provide additional or different license terms and conditions

-      for use, reproduction, or distribution of Your modifications, or

-      for any such Derivative Works as a whole, provided Your use,

-      reproduction, and distribution of the Work otherwise complies with

-      the conditions stated in this License.

-

-   5. Submission of Contributions. Unless You explicitly state otherwise,

-      any Contribution intentionally submitted for inclusion in the Work

-      by You to the Licensor shall be under the terms and conditions of

-      this License, without any additional terms or conditions.

-      Notwithstanding the above, nothing herein shall supersede or modify

-      the terms of any separate license agreement you may have executed

-      with Licensor regarding such Contributions.

-

-   6. Trademarks. This License does not grant permission to use the trade

-      names, trademarks, service marks, or product names of the Licensor,

-      except as required for reasonable and customary use in describing the

-      origin of the Work and reproducing the content of the NOTICE file.

-

-   7. Disclaimer of Warranty. Unless required by applicable law or

-      agreed to in writing, Licensor provides the Work (and each

-      Contributor provides its Contributions) on an "AS IS" BASIS,

-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or

-      implied, including, without limitation, any warranties or conditions

-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A

-      PARTICULAR PURPOSE. You are solely responsible for determining the

-      appropriateness of using or redistributing the Work and assume any

-      risks associated with Your exercise of permissions under this License.

-

-   8. Limitation of Liability. In no event and under no legal theory,

-      whether in tort (including negligence), contract, or otherwise,

-      unless required by applicable law (such as deliberate and grossly

-      negligent acts) or agreed to in writing, shall any Contributor be

-      liable to You for damages, including any direct, indirect, special,

-      incidental, or consequential damages of any character arising as a

-      result of this License or out of the use or inability to use the

-      Work (including but not limited to damages for loss of goodwill,

-      work stoppage, computer failure or malfunction, or any and all

-      other commercial damages or losses), even if such Contributor

-      has been advised of the possibility of such damages.

-

-   9. Accepting Warranty or Additional Liability. While redistributing

-      the Work or Derivative Works thereof, You may choose to offer,

-      and charge a fee for, acceptance of support, warranty, indemnity,

-      or other liability obligations and/or rights consistent with this

-      License. However, in accepting such obligations, You may act only

-      on Your own behalf and on Your sole responsibility, not on behalf

-      of any other Contributor, and only if You agree to indemnify,

-      defend, and hold each Contributor harmless for any liability

-      incurred by, or claims asserted against, such Contributor by reason

-      of your accepting any such warranty or additional liability.

diff --git a/trunk/backport/XWORK-LICENSE.txt b/trunk/backport/XWORK-LICENSE.txt
deleted file mode 100755
index ccae169..0000000
--- a/trunk/backport/XWORK-LICENSE.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-/* ====================================================================

- * The OpenSymphony Software License, Version 1.1

- *

- * (this license is derived and fully compatible with the Apache Software

- * License - see http://www.apache.org/LICENSE.txt)

- *

- * Copyright (c) 2001-2004 The OpenSymphony Group. All rights reserved.

- *

- * Redistribution and use in source and binary forms, with or without

- * modification, are permitted provided that the following conditions

- * are met:

- *

- * 1. Redistributions of source code must retain the above copyright

- *    notice, this list of conditions and the following disclaimer.

- *

- * 2. Redistributions in binary form must reproduce the above copyright

- *    notice, this list of conditions and the following disclaimer in

- *    the documentation and/or other materials provided with the

- *    distribution.

- *

- * 3. The end-user documentation included with the redistribution,

- *    if any, must include the following acknowledgment:

- *       "This product includes software developed by the

- *        OpenSymphony Group (http://www.opensymphony.com/)."

- *    Alternately, this acknowledgment may appear in the software itself,

- *    if and wherever such third-party acknowledgments normally appear.

- *

- * 4. The names "OpenSymphony" and "The OpenSymphony Group"

- *    must not be used to endorse or promote products derived from this

- *    software without prior written permission. For written

- *    permission, please contact license@opensymphony.com .

- *

- * 5. Products derived from this software may not be called "OpenSymphony"

- *    or "XWork", nor may "OpenSymphony" or "XWork" appear in their

- *    name, without prior written permission of the OpenSymphony Group.

- *

- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED

- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES

- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR

- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF

- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,

- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT

- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF

- * SUCH DAMAGE.

- * ====================================================================

- */
\ No newline at end of file
diff --git a/trunk/backport/backport-util-concurrent.jar b/trunk/backport/backport-util-concurrent.jar
deleted file mode 100755
index 20a1687..0000000
--- a/trunk/backport/backport-util-concurrent.jar
+++ /dev/null
Binary files differ
diff --git a/trunk/backport/readme.html b/trunk/backport/readme.html
deleted file mode 100644
index d4cafcf..0000000
--- a/trunk/backport/readme.html
+++ /dev/null
@@ -1,549 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

-<html>

-<head>

-    <title>Retrotranslator</title>

-</head>

-

-<body>

-<table border="0" width="98%">

-    <tr>

-        <td><h2>Retrotranslator</h2></td>

-        <td width="125" align="left"><a href="http://sourceforge.net"><img

-                src="http://sflogo.sourceforge.net/sflogo.php?group_id=153566&amp;type=2"

-                width="125" height="37" border="0" alt="SourceForge.net Logo"/></a>

-        </td>

-    </tr>

-</table>

-

-<h4>Contents</h4>

-<ol>

-    <li><a href="#what">What is Retrotranslator?</a></li>

-    <li><a href="#features">What Java 5 features are supported?</a></li>

-    <li><a href="#commandline">How to use Retrotranslator from a command line?</a></li>

-    <li><a href="#ant">How to use Retrotranslator from Apache Ant or Maven?</a></li>

-    <li><a href="#idea">How to use Retrotranslator from IntelliJ IDEA?</a></li>

-    <li><a href="#jit">How to use Just-in-Time Retrotranslator?</a></li>

-    <li><a href="#supported">What Java 5 classes and methods are supported?</a></li>

-    <li><a href="#extension">How to write an extension for Retrotranslator?</a></li>

-    <li><a href="#limitations">What are the limitations?</a></li>

-    <li><a href="#alternative">Alternative tools</a></li>

-    <li><a href="#contact">Contact</a></li>

-    <li><a href="#license">License</a></li>

-</ol>

-

-<h4><a name="what">What is Retrotranslator?</a></h4>

-<a href="http://sourceforge.net/projects/retrotranslator">Retrotranslator</a> is a Java bytecode transformer

-that translates Java classes compiled with JDK 5.0 into classes that can be run on JVM 1.4.

-It is a free, open-source tool based on the <a href="http://asm.objectweb.org/">ASM bytecode manipulation framework</a>

-and concurrency utilities

-<a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php">backported to Java 1.4</a>.

-

-<h4><a name="features">What Java 5 features are supported?</a></h4>

-<ul>

-    <li>Generics (generic types)</li>

-    <li>Annotations (metadata)</li>

-    <li>Reflection on generics and annotations</li>

-    <li>Typesafe enums (enumerated types)</li>

-    <li>Autoboxing/unboxing</li>

-    <li>Enhanced for loop (for-each loop)</li>

-    <li>Varargs (variable arguments)</li>

-    <li>Covariant return types</li>

-    <li>Static import</li>

-    <li>Concurrency utilities</li>

-    <li>Collections framework enhancements</li>

-</ul>

-

-<h4><a name="commandline">How to use Retrotranslator from a command line?</a></h4>

-<ol>

-    <li><a href="http://sourceforge.net/project/showfiles.php?group_id=153566">Download</a>

-        and unzip the binary distribution file <code>Retrotranslator-<i>n.n.n</i>-bin.zip</code>,

-        where <i>n.n.n</i> is the latest Retrotranslator release number.

-    </li>

-    <li>

-        Compile your classes with JDK 5.0 and put them into some directory, e.g. <code>myclasses</code>.

-    </li>

-    <li>

-        Go to the unzipped directory <code>Retrotranslator-<i>n.n.n</i>-bin</code> and execute:<br>

-        <code>java -jar retrotranslator-transformer-<i>n.n.n</i>.jar -srcdir myclasses</code>

-    </li>

-    <li>

-        If you use Java 5 API put <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code> and

-        <code>backport-util-concurrent.jar</code> into the classpath of your application.

-    </li>

-    <li>

-        Run or debug the application as usual on any JVM 1.4, preferably JRE 1.4.2.

-    </li>

-</ol>

-

-<p>The full command line syntax:<br>

-    <code>java -jar retrotranslator-transformer-<i>n.n.n</i>.jar &lt;options&gt;</code>

-    <br>or<br>

-    <code>java -cp retrotranslator-transformer-<i>n.n.n</i>.jar net.sf.retrotranslator.transformer.Retrotranslator &lt;options&gt;</code></p>

-<table border="1" cellspacing="0" cellpadding="5">

-    <tr><th>Option</th><th>Description</th><th>Default</th></tr>

-    <tr>

-        <td nowrap><code>-srcdir</code></td>

-        <td>Directory with classes compiled using JDK 5.0 (may be specified several times).</td>

-        <td>-</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-srcjar</code></td>

-        <td>JAR file with classes compiled using JDK 5.0 (may be specified several times).</td>

-        <td>-</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-destdir</code></td>

-        <td>Directory to place classes compatible with J2SE 1.4.</td>

-        <td>Location of sources</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-destjar</code></td>

-        <td>JAR file to place classes compatible with J2SE 1.4.</td>

-        <td>Location of sources</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-stripsign</code></td>

-        <td>Asks the translator to strip signature (generics) information.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-verbose</code></td>

-        <td>Asks the translator for verbose output.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-lazy</code></td>

-        <td>Asks the translator to transform only Java 5 classes.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-advanced</code></td>

-        <td>Allows to override Java 1.4 methods for better Java 5 compatibility.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-verify</code></td>

-        <td>Asks the translator for warnings when references to unknown classes, methods, or fields are found.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-classpath</code></td>

-        <td>The classpath to use for verification including <code>rt.jar</code>, <code>jce.jar</code>,

-            <code>jsse.jar</code> (from JRE 1.4), <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code>,

-            and <code>backport-util-concurrent.jar</code>.</td>

-        <td>Current classpath</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-srcmask</code></td>

-        <td>Files to translate (either bytecode or UTF-8 text) , e.g. "<code>*.class;*.tld</code>".

-            Only three special characters are supported: "<code>*?;</code>".</td>

-        <td>*.class</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-embed</code></td>

-        <td>Package name for a private copy of <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code> and

-            <code>backport-util-concurrent.jar</code> to be put into <code>-destdir</code> or <code>-destjar</code>.

-            This makes your application independent of other versions of Retrotranslator present in the classpath.

-            </td>

-        <td>-</td>

-    </tr>

-    <tr>

-        <td nowrap><code>-retainapi</code></td>

-        <td>Asks the translator to modify classes for JVM 1.4 compatibility but keep use of Java 5 API.

-            References introduced by a compiler will also remain unchanged,

-            like the use of <code>java.lang.StringBuilder</code> for string concatenation

-            or the implicit <code>valueOf</code> method call for autoboxing.</td>

-        <td>Off</td>

-    </tr>

-</table>

-<p>

-    For example, if you have a Java 5 application <code>myapplication5.jar</code> you can use the following command

-    to produce <code>myapplication4.jar</code> that will run on J2SE 1.4 and is independent of Retrotranslator,

-    since required classes are added to the translated application with a different package name:

-</p>

-<p>

-    <code>java -jar retrotranslator-transformer-<i>n.n.n</i>.jar

-    -srcjar myapplication5.jar -destjar myapplication4.jar -embed com.mycompany.internal</code><br>

-</p>

-

-<h4><a name="ant">How to use Retrotranslator from Apache Ant or Maven?</a></h4>

-

-<p>The distribution contains an integrated <a href="http://ant.apache.org/">Apache Ant</a> task

-    <code>net.sf.retrotranslator.transformer.RetrotranslatorTask</code>. It has the following syntax:</p>

-<table border="1" cellspacing="0" cellpadding="5">

-    <tr><th>Attribute</th><th>Description</th><th>Default</th></tr>

-    <tr>

-        <td><code>srcdir</code></td>

-        <td>Directory with classes compiled using JDK 5.0.</td>

-        <td>-</td>

-    </tr>

-    <tr>

-        <td><code>srcjar</code></td>

-        <td>JAR file with classes compiled using JDK 5.0.</td>

-        <td>-</td>

-    </tr>

-    <tr>

-        <td><code>destdir</code></td>

-        <td>Directory to place classes compatible with J2SE 1.4.</td>

-        <td>Location of sources</td>

-    </tr>

-    <tr>

-        <td><code>destjar</code></td>

-        <td>JAR file to place classes compatible with J2SE 1.4.</td>

-        <td>Location of sources</td>

-    </tr>

-    <tr>

-        <td><code>stripsign</code></td>

-        <td>Asks the translator to strip signature (generics) information.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td><code>verbose</code></td>

-        <td>Asks the translator for verbose output.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td><code>lazy</code></td>

-        <td>Asks the translator to transform only Java 5 classes.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td><code>advanced</code></td>

-        <td>Allows to override Java 1.4 methods for better Java 5 compatibility.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td><code>verify</code></td>

-        <td>Asks the translator for warnings when references to unknown classes, methods, or fields are found.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td><code>classpath</code></td>

-        <td>The classpath to use for verification including <code>rt.jar</code>, <code>jce.jar</code>,

-            <code>jsse.jar</code> (from JRE 1.4), <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code>,

-            and <code>backport-util-concurrent.jar</code>.

-        </td>

-        <td>Current classpath</td>

-    </tr>

-    <tr>

-        <td><code>srcmask</code></td>

-        <td>Files to translate (either bytecode or UTF-8 text) , e.g. "<code>*.class;*.tld</code>".

-            Only three special characters are supported: "<code>*?;</code>".</td>

-        <td>*.class</td>

-    </tr>

-    <tr>

-        <td><code>embed</code></td>

-        <td>Package name for a private copy of <code>retrotranslator-runtime-<i>n.n.n</i>.jar</code> and

-            <code>backport-util-concurrent.jar</code> to be put into <code>-destdir</code> or <code>-destjar</code>.

-            This makes your application independent of other versions of Retrotranslator present in the classpath.

-            </td>

-        <td>-</td>

-    </tr>

-    <tr>

-        <td><code>retainapi</code></td>

-        <td>Asks the translator to modify classes for JVM 1.4 compatibility but keep use of Java 5 API.

-            References introduced by a compiler will also remain unchanged,

-            like the use of <code>java.lang.StringBuilder</code> for string concatenation

-            or the implicit <code>valueOf</code> method call for autoboxing.</td>

-        <td>Off</td>

-    </tr>

-    <tr>

-        <td><code>failonwarning</code></td>

-        <td>Indicates whether the build will fail when there are verification warnings.</td>

-        <td>On</td>

-    </tr>

-</table>

-<p>

-    You may use nested <code>src</code> elements to specify source directories or JAR files, and nested

-    <code>classpath</code> elements to specify classpath for verification. For example:

-</p>

-<pre>

-    &lt;path id="classpath"&gt;

-        &lt;fileset dir="lib" includes="**/*.jar"/&gt;

-    &lt;/path&gt;

-    &lt;taskdef name="retrotranslator" classpathref="classpath"

-             classname="net.sf.retrotranslator.transformer.RetrotranslatorTask" /&gt;

-    &lt;retrotranslator destdir="build/classes14" verify="true"&gt;

-        &lt;src path="build/classes15"/&gt;

-        &lt;classpath location="${java14_home}/jre/lib/rt.jar"/&gt;

-        &lt;classpath refid="classpath"/&gt;

-    &lt;/retrotranslator&gt;

-</pre>

-<p>

-    For <a href="http://maven.apache.org/">Maven</a> there is a

-    <a href="http://mojo.codehaus.org/retrotranslator-maven-plugin/">Retrotranslator plugin</a>

-    from the <a href="http://mojo.codehaus.org/">Mojo Project</a>.

-</p>

-<h4><a name="idea">How to use Retrotranslator from IntelliJ IDEA?</a></h4>

-<p>

-    To automatically translate and verify classes compiled by <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>

-    you may <a href="http://plugins.intellij.net/plugin/?id=145">download a plugin</a>

-    that generates classes compatible with 1.4 virtual machines from your Java 5 source code.

-</p>

-

-<h4><a name="jit">How to use Just-in-Time Retrotranslator?</a></h4>

-

-<p>

-    JIT Retrotranslator is able to translate at runtime Java classes loaded with any classloader.

-    It works on J2SE 1.4 from Sun, IBM, BEA, and Apple, but does nothing on J2SE 5.0 and other platforms.

-    However translation at runtime consumes additional memory and processing resources and it will not

-	work if your classes make use of Java 5 API but were compiled with "<code>-target 1.4</code>".

-</p>

-<ul>

-    <li>

-        If you want to run a JAR file with the JIT, execute:<br>

-        <code>java -cp retrotranslator-transformer-<i>n.n.n</i>.jar

-            net.sf.retrotranslator.transformer.JITRetrotranslator -jar &lt;jarfile&gt; [&lt;args...&gt;]</code>

-    </li>

-    <li>

-        When the first option does not work or if you just want to run a class from your classpath, execute:<br>

-        <code>java -cp retrotranslator-transformer-<i>n.n.n</i>.jar:&lt;classpath&gt;

-            net.sf.retrotranslator.transformer.JITRetrotranslator &lt;class&gt; [&lt;args...&gt;]</code>

-    </li>

-    <li>

-        Alternatively you may simply call <code>JITRetrotranslator.install()</code> from some JVM 1.4 compatible class

-        before Java 5 classes are loaded.

-    </li>

-</ul>

-

-<h4><a name="supported">What Java 5 classes and methods are supported?</a></h4>

-<table border="1" cellspacing="0" cellpadding="5">

-    <tr><th>Package</th><th>Class</th><th>Methods and fields</th><th>Compatibility notes</th></tr>

-    <tr><td><code>java.lang.annotation</code></td><td>* (all classes)</td><td>* (all methods)</td><td>&nbsp;</td></tr>

-    <tr><td><code>java.util.concurrent,<br>java.util.concurrent.atomic,<br>java.util.concurrent.locks</code></td>

-        <td>almost all classes</td><td>almost all methods</td>

-        <td>

-            <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a><br>

-            <code>Condition.awaitNanos(long)</code> method is supported but with

-        <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/doc/api/edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils.html#awaitNanos(edu.emory.mathcs.backport.java.util.concurrent.locks.Condition, long)">

-        very little</a> accuracy guarantees.

-        </td></tr>

-    <tr><td rowspan="6"><code>java.io</code></td><td><code>Closeable</code></td><td><code>*</code></td><td>

-            <code>new Closeable[...]</code> is replaced with <code>new Object[...]</code>

-        </td></tr>

-    <tr><td><code>Flushable</code></td><td><code>*</code></td><td>

-            <code>new Flushable[...]</code> is replaced with <code>new Object[...]</code>

-        </td></tr>

-    <tr><td><code>PrintStream</code></td><td>

-        <code>append(CharSequence), append(CharSequence, int, int), append(char)</code>

-        </td><td>&nbsp;</td></tr>

-    <tr><td><code>PrintWriter</code></td><td>

-        <code>PrintWriter(File), PrintWriter(File, String), PrintWriter(String), PrintWriter(String, String)</code>

-        </td><td>&nbsp;</td></tr>

-    <tr><td><code>Reader</code></td><td><code>read(CharBuffer)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>Writer</code></td><td>

-        <code>append(CharSequence), append(CharSequence, int, int), append(char)</code>

-        </td><td>&nbsp;</td></tr>

-    <tr><td rowspan="24"><code>java.lang</code></td><td><code>Appendable</code></td><td>*

-    </td><td>

-        <code>new Appendable[...]</code> is replaced with <code>new Object[...]</code>

-    </td></tr>

-    <tr><td><code>Boolean</code></td><td><code>parseBoolean(String), compareTo(Boolean)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>Byte</code></td><td><code>valueOf(byte)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>Character</code></td><td><code>valueOf(char)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>Class</code></td><td>* (21 new methods)</td><td>

-        <code>Class.getMethod(String, Class...)</code> and <code>Class.getDeclaredMethod(String, Class...)</code> are

-        intercepted in advanced mode to better support generics and covariant return types on several JVM implementations.

-    </td></tr>

-    <tr><td><code>Deprecated</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>Double</code></td><td><code>valueOf(double)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>Enum</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>Float</code></td><td><code>valueOf(float)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>IllegalArgumentException</code></td><td><code>IllegalArgumentException(String, Throwable),<br>

-        IllegalArgumentException(Throwable)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>IllegalStateException</code></td><td><code>IllegalStateException(String, Throwable),<br>

-        IllegalStateException(Throwable)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>Integer</code></td><td><code>valueOf(int)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>Iterable</code></td><td>*</td><td>

-        <code>new Iterable[...]</code> is replaced with <code>new Object[...]</code>

-    </td></tr>

-    <tr><td><code>Long</code></td><td><code>valueOf(long)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>Package</code></td><td>* (4 new methods)</td><td>&nbsp;</td></tr>

-    <tr><td><code>Readable</code></td><td>*</td><td>

-        <code>new Readable[...]</code> is replaced with <code>new Object[...]</code>

-    </td></tr>

-    <tr><td><code>Short</code></td><td><code>valueOf(short)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>String</code></td><td><code>contains(CharSequence),<br> contentEquals(CharSequence),<br>

-        replace(CharSequence, CharSequence)</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>StringBuffer</code></td><td><code>

-        StringBuffer(CharSequence), append(CharSequence), append(CharSequence, int, int),

-        insert(int, CharSequence), insert(int, CharSequence, int, int)

-    </code></td><td>&nbsp;</td></tr>

-    <tr><td><code>StringBuilder</code></td><td>

-        All methods supported in <code>StringBuffer</code>

-    </td><td><code>StringBuilder</code> is replaced with <code>StringBuffer</code></td></tr>

-    <tr><td><code>SuppressWarnings</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>System</code></td><td><code>nanoTime(), clearProperty(String)</code></td><td>

-        <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a><br>

-        <code>System.nanoTime()</code> method precision

-        <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/doc/api/edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils.html#nanoTime()">

-            may vary</a> on different platforms.

-    </td></tr>

-    <tr><td><code>Thread</code></td><td><code>getStackTrace(), getId()

-    </code></td><td><code>Thread.getStackTrace()</code> returns non-empty stack trace only for the current thread;<br>

-        <code>Thread.getId()</code> does not reflect the order in which threads are created.</td></tr>

-    <tr><td><code>TypeNotPresentException</code></td><td>*</td><td>&nbsp;</td></tr>

-

-    <tr><td rowspan="12"><code>java.lang.reflect</code></td><td><code>AnnotatedElement</code></td><td>*</td><td>

-        <code>new AnnotatedElement[...]</code> is replaced with <code>new Object[...]</code>

-    </td></tr>

-    <tr><td><code>Constructor</code></td><td>* (11 new methods)</td><td>&nbsp;</td></tr>

-    <tr><td><code>Field</code></td><td>* (8 new methods)</td><td>&nbsp;</td></tr>

-    <tr><td><code>GenericArrayType</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>GenericDeclaration</code></td><td>*</td><td>

-        <code>new GenericDeclaration[...]</code> is replaced with <code>new Object[...]</code>

-    </td></tr>

-    <tr><td><code>GenericSignatureFormatError</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>MalformedParameterizedTypeException</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>Method</code></td><td>* (14 new methods)</td><td>&nbsp;</td></tr>

-    <tr><td><code>ParameterizedType</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>Type</code></td><td>*</td><td>

-        <code>new Type[...]</code> is replaced with <code>new Object[...]</code>

-    </td></tr>

-    <tr><td><code>TypeVariable</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>WildcardType</code></td><td>*</td><td>&nbsp;</td></tr>

-

-    <tr><td ><code>java.math</code></td><td><code>BigDecimal</code></td><td>

-        <code>BigDecimal(int), BigDecimal(long), ZERO, ONE, TEN, divideAndRemainder(BigDecimal),

-            divideToIntegralValue(BigDecimal), pow(int), remainder(BigDecimal), toPlainString(), valueOf(double),

-            valueOf(long)</code></td><td><code>BigDecimal.setScale(int, int)</code> supports negative scales in advanced mode.</td></tr>

-

-    <tr><td ><code>java.rmi.server</code></td><td><code>RemoteObjectInvocationHandler</code></td>

-        <td>*</td><td>&nbsp;</td></tr>

-

-    <tr><td><code>java.util.nio</code></td><td><code>CharBuffer</code></td><td>

-        <code>append(CharSequence), append(CharSequence, int, int), append(char), read(CharBuffer)</code>

-        </td><td>&nbsp;</td></tr>

-

-    <tr><td rowspan="9"><code>java.util</code></td><td><code>AbstractQueue</code></td><td>*</td><td>

-        &nbsp;</td></tr>

-    <tr><td><code>Arrays</code></td><td>* (21 new methods)</td><td>&nbsp;</td></tr>

-    <tr><td><code>Collections</code></td><td>* (13 new methods)</td><td>

-        <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"> Backport of JSR 166</a>

-    </td></tr>

-    <tr><td><code>EnumMap</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>EnumSet</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>LinkedList</code></td><td>* (5 new methods)</td><td>&nbsp;</td></tr>

-    <tr><td><code>PriorityQueue</code></td><td>*</td><td>&nbsp;</td></tr>

-    <tr><td><code>Queue</code></td><td>*</td><td>

-        <code>new Queue[...]</code> is replaced with <code>new Object[...]</code>

-    </td></tr>

-    <tr><td><code>UUID</code></td><td>*</td><td>&nbsp;</td></tr>

-

-    <tr><td rowspan="3"><code>java.util.regex</code></td><td><code>Matcher</code></td><td>

-        <code>quoteReplacement(String), toMatchResult()</code></td><td>&nbsp;</td></tr>

-    <tr><td><code>MatchResult</code></td><td>*</td><td>

-        <code>new MatchResult[...]</code> is replaced with <code>new Object[...]</code>

-    </td></tr>

-    <tr><td><code>Pattern</code></td><td><code>quote(String)</code></td><td>&nbsp;</td></tr>

-</table>

-

-<h4><a name="extension">How to write an extension for Retrotranslator?</a></h4>

-

-<p>

-    Since most backported classes are discovered by Retrotranslator at translation time,

-    you may write an extension and simply put it into the Retrotranslator classpath to make it work.

-    For example, all references to

-    <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/EnumSet.html"><code>java.util.EnumSet</code></a>

-    are replaced with references to

-    <a href="http://cvs.sourceforge.net/viewcvs.py/retrotranslator/Retrotranslator/src/net/sf/retrotranslator/runtime/java/util/EnumSet_.java?view=markup">

-    <code>net.sf.retrotranslator.runtime.java.util.EnumSet<b>_</b></code></a> (trailing underscore) if the latter can be found.

-    But if you replace a whole class that exists in J2SE 1.4 you may encounter interoperability issues with other libraries.

-    So, for example, support for Java 5 fields, methods, and constructors of

-    <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html"><code>java.math.BigDecimal</code></a> is placed into

-

-    <a href="http://cvs.sourceforge.net/viewcvs.py/retrotranslator/Retrotranslator/src/net/sf/retrotranslator/runtime/java/math/_BigDecimal.java?view=markup">

-    <code>net.sf.retrotranslator.runtime.java.math.<b>_</b>BigDecimal</code></a> (leading underscore):

-</p>

-    <ul>

-        <li>For a static field there is a public static field with the same name and type.</li>

-        <li>For a static method there is a public static method with the same signature.</li>

-        <li>For an instance method there is a public static method with the same signature

-            but with an additional first parameter representing an instance.</li>

-        <li>For a constructor there is a public static <code>convertConstructorArguments</code> method that

-            accepts constructor's arguments an returns an argument for a Java 1.4 constuctor.</li>

-   </ul>

-<p>

-    However, if the backported methods require access

-    to non-public methods or fields of the instance, they cannot be fully handled by Retrotranslator.

-    While you can use reflection to access any data, translated code generally should not depend on security settings.

-    For example, it is impossible to write an implementation for methods <code>getSource()</code>

-    and <code>setSource()</code> of <code>java.beans.PropertyEditorSupport</code> that will work in any environment.

-    Also this approach cannot be used to replace instance field references.

-</p>

-<p>

-    If you have written an extension that does not contain copyrighted code, you may send

-    a <a href="http://sourceforge.net/tracker/?group_id=153566&atid=788281">patch</a>

-    under the <a href="#license">Retrotranslator license</a>.

-</p>

-

-<h4><a name="limitations">What are the limitations?</a></h4>

-

-<p>

-    Basically, only classes, methods, and fields listed <a href="#supported">above</a> should work, and other features,

-    like formatted input/output, are not supported. Known issues:

-</p>

-<ul>

-    <li>Reflection-based tools may be unable to discover additional classes and methods introduced in Java 5 when running on JRE 1.4.</li>

-    <li>Translated code running on JRE 5.0 may be incompatible with other Java 5 code when Java 5 API is used.</li>

-    <li>Reflection on generics and metadata may return incomplete information for dynamically generated classes.</li>

-    <li>Access modifiers and constants inlined by a compiler are ignored during the verification.</li>

-    <li>Upcasting may help to translate invocations of inherited methods introduced in Java 5: <br>

-        <code>&nbsp;((Writer) new FileWriter("file.tmp")).append("Hello").close();</code></li>

-    <li>Serialized objects produced by translated code may be incompatible with JRE 5.0.</li>

-</ul>

-

-<h4><a name="alternative">Alternative tools</a></h4>

-<ul>

-    <li><a href="http://retroweaver.sourceforge.net/">Retroweaver</a>

-        - a Java bytecode weaver that enables you to take advantage

-        of the new 1.5 language features in your source code,

-        while still retaining compatibility with 1.4 virtual machines.</li>

-    <li><a href="http://tinyurl.com/r8xba">Declawer</a>

-        - a customized Java compiler which reduces 1.5 Generics to equivalent 1.4 syntax.</li>

-</ul>

-

-<h4><a name="contact">Contact</a></h4>

-<ul>

-    <li><a href="http://retrotranslator.sourceforge.net/">Latest documentation</a></li>

-    <li><a href="http://sourceforge.net/forum/forum.php?forum_id=513539">Open discussion</a></li>

-    <li><a href="http://sourceforge.net/forum/forum.php?forum_id=513540">Help</a></li>

-    <li><a href="http://sourceforge.net/tracker/?group_id=153566&atid=788279">Bugs</a></li>

-    <li><a href="http://sourceforge.net/tracker/?group_id=153566&atid=788282">Feature requests</a></li>

-    <li><a href="http://sourceforge.net/users/tarasp/">Author</a></li>

-</ul>

-

-<h4><a name="license">License</a></h4>

-<pre>

-    Retrotranslator: a Java bytecode transformer that translates Java classes

-    compiled with JDK 5.0 into classes that can be run on JVM 1.4.

-

-    Copyright (c) 2005, 2006 Taras Puchko

-    All rights reserved.

-

-    Redistribution and use in source and binary forms, with or without

-    modification, are permitted provided that the following conditions

-    are met:

-    1. Redistributions of source code must retain the above copyright

-       notice, this list of conditions and the following disclaimer.

-    2. Redistributions in binary form must reproduce the above copyright

-       notice, this list of conditions and the following disclaimer in the

-       documentation and/or other materials provided with the distribution.

-    3. Neither the name of the copyright holders nor the names of its

-       contributors may be used to endorse or promote products derived from

-       this software without specific prior written permission.

-

-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

-    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE

-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

-    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

-    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

-    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

-    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

-    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF

-    THE POSSIBILITY OF SUCH DAMAGE.

-</pre>

-</body>

-</html>

diff --git a/trunk/backport/retrotranslator-runtime-1.0.7.jar b/trunk/backport/retrotranslator-runtime-1.0.7.jar
deleted file mode 100755
index 38a587e..0000000
--- a/trunk/backport/retrotranslator-runtime-1.0.7.jar
+++ /dev/null
Binary files differ
diff --git a/trunk/backport/retrotranslator-runtime-1.0.8.jar b/trunk/backport/retrotranslator-runtime-1.0.8.jar
deleted file mode 100644
index e6472d4..0000000
--- a/trunk/backport/retrotranslator-runtime-1.0.8.jar
+++ /dev/null
Binary files differ
diff --git a/trunk/backport/retrotranslator-transformer-1.0.8.jar b/trunk/backport/retrotranslator-transformer-1.0.8.jar
deleted file mode 100644
index 499fa68..0000000
--- a/trunk/backport/retrotranslator-transformer-1.0.8.jar
+++ /dev/null
Binary files differ
diff --git a/trunk/backport/translate.bat b/trunk/backport/translate.bat
deleted file mode 100644
index 3348b95..0000000
--- a/trunk/backport/translate.bat
+++ /dev/null
@@ -1,4 +0,0 @@
-java -jar retrotranslator-transformer-1.0.8.jar -srcjar ../lib/struts2-core-2.0.0.jar -destjar struts2-core-j4-2.0.0.jar 

-java -jar retrotranslator-transformer-1.0.8.jar -srcjar ../lib/struts2-api-2.0.0.jar -destjar struts2-api-j4-2.0.0.jar 

-java -jar retrotranslator-transformer-1.0.8.jar -srcjar ../lib/struts2-extras-2.0.0.jar -destjar struts2-extras-j4-2.0.0.jar 

-java -jar retrotranslator-transformer-1.0.8.jar -srcjar ../lib/xwork-2.0-SNAPSHOT.jar -destjar xwork-j4-2.0-SNAPSHOT.jar 

diff --git a/trunk/core/pom.xml b/trunk/core/pom.xml
deleted file mode 100644
index 76c20c6..0000000
--- a/trunk/core/pom.xml
+++ /dev/null
@@ -1,275 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-parent</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-core</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 Core</name>
-    
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <version>2.0</version>
-                <configuration>
-                    <sourcepath>src/main/java;../../xwork/src/java</sourcepath>
-                    <groups>
-                        <group>
-                            <title>Struts Packages</title>
-                            <packages>org.apache.struts2*</packages>
-                        </group>
-                        <group>
-                            <title>XWork Packages</title>
-                            <packages>com.opensymphony.xwork2*</packages>
-                        </group>
-                    </groups>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
- 
-    
-    <dependencies>
-        <dependency>
-            <groupId>opensymphony</groupId>
-            <artifactId>xwork</artifactId>
-            <version>2.0-beta-1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-api</artifactId>
-            <version>${pom.version}</version>
-        </dependency>
-        
-        <dependency>
-            <groupId>freemarker</groupId>
-            <artifactId>freemarker</artifactId>
-            <version>2.3.4</version>
-        </dependency>
-
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>jsp-api</artifactId>
-            <version>2.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>ognl</groupId>
-            <artifactId>ognl</artifactId>
-            <version>2.6.7</version>
-        </dependency>
- 
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-            <version>1.0.4</version>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.0</version>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- Ajax -->
-        <dependency>
-            <groupId>uk.ltd.getahead</groupId>
-            <artifactId>dwr</artifactId>
-            <version>1.1-beta-3</version>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- Velocity -->
-        <dependency>
-            <groupId>velocity</groupId>
-            <artifactId>velocity</artifactId>
-            <version>1.4</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>velocity-tools</groupId>
-            <artifactId>velocity-tools</artifactId>
-            <version>1.1</version>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- File upload -->
-        <dependency>
-            <groupId>commons-fileupload</groupId>
-            <artifactId>commons-fileupload</artifactId>
-            <version>1.1.1</version>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>1.0</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.1</version>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- Portlet -->
-        <dependency>
-            <groupId>portlet-api</groupId>
-            <artifactId>portlet-api</artifactId>
-            <version>1.0</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.pluto</groupId>
-            <artifactId>pluto</artifactId>
-            <version>1.0.1-rc4</version>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- Spring -->
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-            <version>1.2.8</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>1.2.8</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>1.2.8</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-            <version>1.2.8</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-mock</artifactId>
-            <version>1.2.8</version>
-            <optional>true</optional>
-        </dependency>
-        
-        <!-- Test dependencies -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>compile</scope>
-            <version>3.8.1</version>
-            <!-- has to be compile for StrutsTestCase, which is part of the base package so others can write unit tests -->
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>jmock</groupId>
-            <artifactId>jmock</artifactId>
-            <version>1.0.1</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <version>2.0</version>
-            <scope>test</scope>
-        </dependency>
-        <!--dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymockclassextension</artifactId>
-            <version>1.1</version>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.easymock</groupId>
-                    <artifactId>easymock</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency-->
-      <dependency>
-         <groupId>org.rifers</groupId>
-         <artifactId>rife-continuations</artifactId>
-         <version>0.0.2</version>
-         <optional>true</optional>
-     </dependency>
- 
-        <dependency>
-            <groupId>jmock</groupId>
-            <artifactId>jmock-cglib</artifactId>
-            <version>1.0.1</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>mockobjects</groupId>
-            <artifactId>mockobjects-core</artifactId>
-            <version>0.09</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>mockobjects</groupId>
-            <artifactId>mockobjects-jdk1.3</artifactId>
-            <version>0.09</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>mockobjects</groupId>
-            <artifactId>mockobjects-alt-jdk1.3</artifactId>
-            <version>0.09</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>mockobjects</groupId>
-            <artifactId>mockobjects-alt-jdk1.3-j2ee1.3</artifactId>
-            <version>0.09</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>mockobjects</groupId>
-            <artifactId>mockobjects-jdk1.3-j2ee1.3</artifactId>
-            <version>0.09</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.9</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/core/src/main/etc/taglib-settings.xml b/trunk/core/src/main/etc/taglib-settings.xml
deleted file mode 100644
index cd2bd2e..0000000
--- a/trunk/core/src/main/etc/taglib-settings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-   <tlibversion>1.1</tlibversion>
-   <jspversion>1.2</jspversion>
-   <shortname>struts-tags</shortname>
-   <uri>/tags</uri>
-   <info>A tag library for processing Model-2 command results</info>
diff --git a/trunk/core/src/main/java/org/apache/struts2/RequestUtils.java b/trunk/core/src/main/java/org/apache/struts2/RequestUtils.java
deleted file mode 100644
index 70a9591..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/RequestUtils.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import javax.servlet.http.HttpServletRequest;
-
-
-/**
- * Request handling utility class.
- */
-public class RequestUtils {
-
-    /**
-     * Retrieves the current request servlet path.
-     * Deals with differences between servlet specs (2.2 vs 2.3+)
-     * 
-     * @param request the request
-     * @return the servlet path
-     */
-    public static String getServletPath(HttpServletRequest request) {
-        String servletPath = request.getServletPath();
-        
-        if (null != servletPath && !"".equals(servletPath)) {
-            return servletPath;
-        }
-        
-        String requestUri = request.getRequestURI();
-        int startIndex = request.getContextPath().equals("") ? 0 : request.getContextPath().length();
-        int endIndex = request.getPathInfo() == null ? requestUri.length() : requestUri.lastIndexOf(request.getPathInfo());
-        
-        if (startIndex > endIndex) { // this should not happen
-            endIndex = startIndex;
-        }
-        
-        return requestUri.substring(startIndex, endIndex);
-    }
-    
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/ServletActionContext.java b/trunk/core/src/main/java/org/apache/struts2/ServletActionContext.java
deleted file mode 100644
index 4a618d9..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/ServletActionContext.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * Web-specific context information for actions. This class subclasses <tt>ActionContext</tt> which
- * provides access to things like the action name, value stack, etc. This class adds access to
- * web objects like servlet parameters, request attributes and things like the HTTP session.
- */
-public class ServletActionContext extends ActionContext implements StrutsStatics {
-	
-	private static final long serialVersionUID = -666854718275106687L;
-	
-	public static final String STRUTS_VALUESTACK_KEY = "struts.valueStack";
-    public static final String ACTION_MAPPING = "struts.actionMapping";
-
-    @SuppressWarnings("unused")
-    private ServletActionContext(Map context) {
-        super(context);
-    }
-
-    /**
-     * Gets the current action context
-     * 
-     * @param req The request
-     * @return The current action context
-     */
-    public static ActionContext getActionContext(HttpServletRequest req) {
-        ValueStack vs = getValueStack(req);
-        if (vs != null) {
-            return new ActionContext(vs.getContext());
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Gets the current value stack for this request
-     *
-     * @param req The request
-     * @return The value stack
-     */
-    public static ValueStack getValueStack(HttpServletRequest req) {
-        return (ValueStack) req.getAttribute(STRUTS_VALUESTACK_KEY);
-    }
-    
-    /**
-     * Gets the action mapping for this context
-     * 
-     * @return The action mapping
-     */
-    public static ActionMapping getActionMapping() {
-        return (ActionMapping) ActionContext.getContext().get(ACTION_MAPPING);
-    }
-
-    /**
-     * Returns the HTTP page context.
-     *
-     * @return the HTTP page context.
-     */
-    public static PageContext getPageContext() {
-        return (PageContext) ActionContext.getContext().get(PAGE_CONTEXT);
-    }
-
-    /**
-     * Sets the HTTP servlet request object.
-     *
-     * @param request the HTTP servlet request object.
-     */
-    public static void setRequest(HttpServletRequest request) {
-        ActionContext.getContext().put(HTTP_REQUEST, request);
-    }
-
-    /**
-     * Gets the HTTP servlet request object.
-     *
-     * @return the HTTP servlet request object.
-     */
-    public static HttpServletRequest getRequest() {
-        return (HttpServletRequest) ActionContext.getContext().get(HTTP_REQUEST);
-    }
-
-    /**
-     * Sets the HTTP servlet response object.
-     *
-     * @param response the HTTP servlet response object.
-     */
-    public static void setResponse(HttpServletResponse response) {
-        ActionContext.getContext().put(HTTP_RESPONSE, response);
-    }
-
-    /**
-     * Gets the HTTP servlet response object.
-     *
-     * @return the HTTP servlet response object.
-     */
-    public static HttpServletResponse getResponse() {
-        return (HttpServletResponse) ActionContext.getContext().get(HTTP_RESPONSE);
-    }
-
-    /**
-     * Gets the servlet context.
-     *
-     * @return the servlet context.
-     */
-    public static ServletContext getServletContext() {
-        return (ServletContext) ActionContext.getContext().get(SERVLET_CONTEXT);
-    }
-
-    /**
-     * Sets the current servlet context object
-     * 
-     * @param servletContext The servlet context to use
-     */
-    public static void setServletContext(ServletContext servletContext) {
-        ActionContext.getContext().put(SERVLET_CONTEXT, servletContext);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java b/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
deleted file mode 100644
index 6cd0108..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-/**
- * This class provides a central location for framework configuration keys
- * used to retrieve and store Struts configuration settings.
- */
-public final class StrutsConstants {
-
-    /** Whether Struts is in development mode or not */
-    public static final String STRUTS_DEVMODE = "struts.devMode";
-
-    /** Whether the localization messages should automatically be reloaded */
-    public static final String STRUTS_I18N_RELOAD = "struts.i18n.reload";
-    
-    /** The encoding to use for localization messages */
-    public static final String STRUTS_I18N_ENCODING = "struts.i18n.encoding";
-
-    /** Whether to reload the XML configuration or not */
-    public static final String STRUTS_CONFIGURATION_XML_RELOAD = "struts.configuration.xml.reload";
-
-    /** The URL extension to use to determine if the request is meant for a Struts action */
-    public static final String STRUTS_ACTION_EXTENSION = "struts.action.extension";
-
-    /** Whether to use the alterative syntax for the tags or not */
-    public static final String STRUTS_TAG_ALTSYNTAX = "struts.tag.altSyntax";
-
-    /** The HTTP port used by Struts URLs */
-    public static final String STRUTS_URL_HTTP_PORT = "struts.url.http.port";
-    
-    /** The HTTPS port used by Struts URLs */
-    public static final String STRUTS_URL_HTTPS_PORT = "struts.url.https.port";
-
-    /** The default includeParams method to generate Struts URLs */
-    public static final String STRUTS_URL_INCLUDEPARAMS = "struts.url.includeParams";
-
-    /** The com.opensymphony.xwork2.ObjectFactory implementation class */
-    public static final String STRUTS_OBJECTFACTORY = "struts.objectFactory";
-    
-    /** The com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation class */
-    public static final String STRUTS_OBJECTTYPEDETERMINER = "struts.objectTypeDeterminer";
-
-    /** The package containing actions that use Rife continuations */
-    public static final String STRUTS_CONTINUATIONS_PACKAGE = "struts.continuations.package";
-
-    /** The org.apache.struts2.config.Configuration implementation class */
-    public static final String STRUTS_CONFIGURATION = "struts.configuration";
-
-    /** The default locale for the Struts application */
-    public static final String STRUTS_LOCALE = "struts.locale";
-
-    /** Whether to use a Servlet request parameter workaround necessary for some versions of WebLogic */
-    public static final String STRUTS_DISPATCHER_PARAMETERSWORKAROUND = "struts.dispatcher.parametersWorkaround";
-
-    /** The org.apache.struts2.views.freemarker.FreemarkerManager implementation class */
-    public static final String STRUTS_FREEMARKER_MANAGER_CLASSNAME = "struts.freemarker.manager.classname";
-
-    /** org.apache.struts2.views.velocity.VelocityManager implementation class */
-    public static final String STRUTS_VELOCITY_MANAGER_CLASSNAME = "struts.velocity.manager.classname";
-    
-    /** The Velocity configuration file path */
-    public static final String STRUTS_VELOCITY_CONFIGFILE = "struts.velocity.configfile";
-    
-    /** The location of the Velocity toolbox */
-    public static final String STRUTS_VELOCITY_TOOLBOXLOCATION = "struts.velocity.toolboxlocation";
-    
-    /** List of Velocity context names */
-    public static final String STRUTS_VELOCITY_CONTEXTS = "struts.velocity.contexts";
-
-    /** The directory containing UI templates */
-    public static final String STRUTS_UI_TEMPLATEDIR = "struts.ui.templateDir";
-    
-    /** The default UI template theme */
-    public static final String STRUTS_UI_THEME = "struts.ui.theme";
-
-    /** The maximize size of a multipart request (file upload) */
-    public static final String STRUTS_MULTIPART_MAXSIZE = "struts.multipart.maxSize";
-    
-    /** The directory to use for storing uploaded files */
-    public static final String STRUTS_MULTIPART_SAVEDIR = "struts.multipart.saveDir";
-    
-    /** 
-     * The org.apache.struts2.dispatcher.multipart.MultiPartRequest parser implementation 
-     * for a multipart request (file upload) 
-     */
-    public static final String STRUTS_MULTIPART_PARSER = "struts.multipart.parser";
-
-    /** Whether Spring should autoWire or not */
-    public static final String STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE = "struts.objectFactory.spring.autoWire";
-    
-    /** Whether Spring should use its class cache or not */
-    public static final String STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE = "struts.objectFactory.spring.useClassCache";
-
-    /** Whether or not XSLT templates should not be cached */
-    public static final String STRUTS_XSLT_NOCACHE = "struts.xslt.nocache";
-
-    /** Location of additional configuration properties files to load */
-    public static final String STRUTS_CUSTOM_PROPERTIES = "struts.custom.properties";
-    
-    /** Location of additional localization properties files to load */
-    public static final String STRUTS_CUSTOM_I18N_RESOURCES = "struts.custom.i18n.resources";
-    
-    /** The org.apache.struts2.dispatcher.mapper.ActionMapper implementation class */
-    public static final String STRUTS_MAPPER_CLASS = "struts.mapper.class";
-
-    /** Whether the Struts filter should serve static content or not */
-    public static final String STRUTS_SERVE_STATIC_CONTENT = "struts.serve.static";
-    
-    /** If static content served by the Struts filter should set browser caching header properties or not */
-    public static final String STRUTS_SERVE_STATIC_BROWSER_CACHE = "struts.serve.static.browserCache";
-
-    /** Allows one to disable dynamic method invocation from the URL */
-    public static final String STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION = "struts.enable.DynamicMethodInvocation";
-
-    /** A list of configuration files automatically loaded by Struts */
-    public static final String STRUTS_CONFIGURATION_FILES = "struts.configuration.files";
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/StrutsException.java b/trunk/core/src/main/java/org/apache/struts2/StrutsException.java
deleted file mode 100644
index b89ad73..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/StrutsException.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import com.opensymphony.xwork2.XWorkException;
-import com.opensymphony.xwork2.util.location.Locatable;
-
-
-/**
- * A generic runtime exception that optionally contains Location information 
- */
-public class StrutsException extends XWorkException implements Locatable {
-
-    private static final long serialVersionUID = 888724366243600135L;
-
-
-    /**
-     * Constructs a <code>StrutsException</code> with no detail message.
-     */
-    public StrutsException() {
-    }
-
-    /**
-     * Constructs a <code>StrutsException</code> with the specified
-     * detail message.
-     *
-     * @param s the detail message.
-     */
-    public StrutsException(String s) {
-        this(s, null, null);
-    }
-    
-    /**
-     * Constructs a <code>StrutsException</code> with the specified
-     * detail message and target.
-     *
-     * @param s the detail message.
-     * @param target the target of the exception.
-     */
-    public StrutsException(String s, Object target) {
-        this(s, (Throwable) null, target);
-    }
-
-    /**
-     * Constructs a <code>StrutsException</code> with the root cause
-     *
-     * @param cause The wrapped exception
-     */
-    public StrutsException(Throwable cause) {
-        this(null, cause, null);
-    }
-    
-    /**
-     * Constructs a <code>StrutsException</code> with the root cause and target
-     *
-     * @param cause The wrapped exception
-     * @param target The target of the exception
-     */
-    public StrutsException(Throwable cause, Object target) {
-        this(null, cause, target);
-    }
-
-    /**
-     * Constructs a <code>StrutsException</code> with the specified
-     * detail message and exception cause.
-     *
-     * @param s the detail message.
-     * @param cause the wrapped exception
-     */
-    public StrutsException(String s, Throwable cause) {
-        this(s, cause, null);
-    }
-    
-    
-     /**
-     * Constructs a <code>StrutsException</code> with the specified
-     * detail message, cause, and target
-     *
-     * @param s the detail message.
-     * @param cause The wrapped exception
-     * @param target The target of the exception
-     */
-    public StrutsException(String s, Throwable cause, Object target) {
-        super(s, cause, target);
-    }
-}
\ No newline at end of file
diff --git a/trunk/core/src/main/java/org/apache/struts2/StrutsStatics.java b/trunk/core/src/main/java/org/apache/struts2/StrutsStatics.java
deleted file mode 100644
index 5290d21..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/StrutsStatics.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-
-/**
- * Constants used by Struts. The constants can be used to get or set objects 
- * out of the action context or other collections.
- * 
- * <p/>
- * 
- * Example:
- * <ul><code>ActionContext.getContext().put(HTTP_REQUEST, request);</code></ul>
- * <p/>
- * or
- * <p/>
- * <ul><code>
- * ActionContext context = ActionContext.getContext();<br>
- * HttpServletRequest request = (HttpServletRequest)context.get(HTTP_REQUEST);</code></ul>
- */
-public interface StrutsStatics {
-
-    /**
-     * Constant for the HTTP request object.
-     */
-    public static final String HTTP_REQUEST = "com.opensymphony.xwork2.dispatcher.HttpServletRequest";
-
-    /**
-     * Constant for the HTTP response object.
-     */
-    public static final String HTTP_RESPONSE = "com.opensymphony.xwork2.dispatcher.HttpServletResponse";
-
-    /**
-     * Constant for an HTTP {@link javax.servlet.RequestDispatcher request dispatcher}.
-     */
-    public static final String SERVLET_DISPATCHER = "com.opensymphony.xwork2.dispatcher.ServletDispatcher";
-
-    /**
-     * Constant for the {@link javax.servlet.ServletContext servlet context} object.
-     */
-    public static final String SERVLET_CONTEXT = "com.opensymphony.xwork2.dispatcher.ServletContext";
-
-    /**
-     * Constant for the JSP {@link javax.servlet.jsp.PageContext page context}.
-     */
-    public static final String PAGE_CONTEXT = "com.opensymphony.xwork2.dispatcher.PageContext";
-    
-    /** Constant for the PortletContext object */
-    public static final String STRUTS_PORTLET_CONTEXT = "struts.portlet.context";
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/StrutsTestCase.java b/trunk/core/src/main/java/org/apache/struts2/StrutsTestCase.java
deleted file mode 100644
index 988c068..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/StrutsTestCase.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.config.StrutsXmlConfigurationProvider;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.springframework.mock.web.MockServletContext;
-
-import com.opensymphony.xwork2.XWorkTestCase;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-
-/**
- * Base test case for unit testing Struts.
- */
-public abstract class StrutsTestCase extends XWorkTestCase {
-
-
-    /**
-     * Sets up the configuration settings, XWork configuration, and
-     * message resources
-     */
-    protected void setUp() throws Exception {
-        super.setUp();
-        Settings.reset();
-        LocalizedTextUtil.clearDefaultResourceBundles();
-        Dispatcher du = new Dispatcher(new MockServletContext());
-        Dispatcher.setInstance(du);
-        configurationManager = new ConfigurationManager();
-        configurationManager.addConfigurationProvider(
-                new StrutsXmlConfigurationProvider("struts-default.xml", false));
-        configurationManager.addConfigurationProvider(
-                new StrutsXmlConfigurationProvider("struts-plugin.xml", false));
-        configurationManager.addConfigurationProvider(
-                new StrutsXmlConfigurationProvider("struts.xml", false));
-        du.setConfigurationManager(configurationManager);
-        
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java b/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java
deleted file mode 100644
index 4adf500..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.dispatcher.RequestMap;
-import org.apache.struts2.views.jsp.TagUtils;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ActionProxyFactory;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p>This tag enables developers to call actions directly from a JSP page by specifying the action name and an optional
- * namespace.  The body content of the tag is used to render the results from the Action.  Any result processor defined
- * for this action in struts.xml will be ignored, <i>unless</i> the executeResult parameter is specified.</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <!-- START SNIPPET: params -->
- * <ul>
- *      <li>id (String) - the id (if specified) to put the action under stack's context.
- * 		<li>name* (String) - name of the action to be executed (without the extension suffix eg. .action)</li>
- * 		<li>namespace (String) - default to the namespace where this action tag is invoked</li>
- *      <li>executeResult (Boolean) -  default is false. Decides wheather the result of this action is to be executed or not</li>
- *      <li>ignoreContextParams (Boolean) - default to false. Decides wheather the request parameters are to be included when the action is invoked</li>
- * </ul>
- * <!-- END SNIPPET: params -->
- *
- * <pre>
- * <!-- START SNIPPET: javacode -->
- * public class ActionTagAction extends ActionSupport {
- *
- *	public String execute() throws Exception {
- *		return "done";
- *	}
- *
- *	public String doDefault() throws Exception {
- *		ServletActionContext.getRequest().setAttribute("stringByAction", "This is a String put in by the action's doDefault()");
- *		return "done";
- *	}
- * }
- * <!-- END SNIPPET: javacode -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: strutsxml -->
- *   <xwork>
- *      ....
- *     <action name="actionTagAction1" class="tmjee.testing.ActionTagAction">
- *         <result name="done">success.jsp</result>
- *     </action>
- *      <action name="actionTagAction2" class="tmjee.testing.ActionTagAction" method="default">
- *         <result name="done">success.jsp</result>
- *     </action>
- *      ....
- *   </xwork>
- * <!-- END SNIPPET: strutsxml -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- *  <div>The following action tag will execute result and include it in this page</div>
- *	<br />
- *	<s:action name="actionTagAction" executeResult="true" />
- *  <br />
- *  <div>The following action tag will do the same as above, but invokes method specialMethod in action</div>
- *	<br />
- *	<s:action name="actionTagAction!specialMethod" executeResult="true" />
- *  <br />
- *  <div>The following action tag will not execute result, but put a String in request scope
- *       under an id "stringByAction" which will be retrieved using property tag</div>
- *  <s:action name="actionTagAction!default" executeResult="false" />
- *  <s:property value="#attr.stringByAction" />
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="action" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ActionTag"
- * description="Execute an action from within a view"
- */
-public class ActionComponent extends Component {
-    private static final Log LOG = LogFactory.getLog(ActionComponent.class);
-
-    protected HttpServletResponse res;
-    protected HttpServletRequest req;
-
-    protected ActionProxy proxy;
-    protected String name;
-    protected String namespace;
-    protected boolean executeResult;
-    protected boolean ignoreContextParams;
-
-    public ActionComponent(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack);
-        this.req = req;
-        this.res = res;
-    }
-
-    public boolean end(Writer writer, String body) {
-    	boolean end = super.end(writer, "", false);
-		try {
-			try {
-				writer.flush();
-			} catch (IOException e) {
-				LOG.warn("error while trying to flush writer ", e);
-			}
-			executeAction();
-
-			if ((getId() != null) && (proxy != null)) {
-				getStack().setValue("#attr['" + getId() + "']",
-						proxy.getAction());
-			}
-		} finally {
-			popComponentStack();
-		}
-        return end;
-    }
-
-    private Map createExtraContext() {
-        Map parentParams = null;
-
-        if (!ignoreContextParams) {
-            parentParams = new ActionContext(getStack().getContext()).getParameters();
-        }
-
-        Map newParams = (parentParams != null) ? new HashMap(parentParams) : new HashMap();
-
-        if (parameters != null) {
-            newParams.putAll(parameters);
-        }
-
-        ActionContext ctx = new ActionContext(stack.getContext());
-        ServletContext servletContext = (ServletContext) ctx.get(ServletActionContext.SERVLET_CONTEXT);
-        PageContext pageContext = (PageContext) ctx.get(ServletActionContext.PAGE_CONTEXT);
-        Map session = ctx.getSession();
-        Map application = ctx.getApplication();
-
-        Dispatcher du = Dispatcher.getInstance();
-        Map extraContext = du.createContextMap(new RequestMap(req),
-                newParams,
-                session,
-                application,
-                req,
-                res,
-                servletContext);
-
-        ValueStack newStack = ValueStackFactory.getFactory().createValueStack(stack);
-        extraContext.put(ActionContext.VALUE_STACK, newStack);
-
-        // add page context, such that ServletDispatcherResult will do an include
-        extraContext.put(ServletActionContext.PAGE_CONTEXT, pageContext);
-
-        return extraContext;
-    }
-
-    public ActionProxy getProxy() {
-        return proxy;
-    }
-
-    /**
-     * Execute the requested action.  If no namespace is provided, we'll
-     * attempt to derive a namespace using buildNamespace().  The ActionProxy
-     * and the namespace will be saved into the instance variables proxy and
-     * namespace respectively.
-     *
-     * @see org.apache.struts2.views.jsp.TagUtils#buildNamespace
-     */
-    private void executeAction() {
-        String actualName = findString(name, "name", "Action name is required. Example: updatePerson");
-
-        if (actualName == null) {
-            throw new StrutsException("Unable to find value for name " + name);
-        }
-
-        // handle "name!method" convention.
-        final String actionName;
-        final String methodName;
-
-        int exclamation = actualName.lastIndexOf("!");
-        if (exclamation != -1) {
-            actionName = actualName.substring(0, exclamation);
-            methodName = actualName.substring(exclamation + 1);
-        } else {
-            actionName = actualName;
-            methodName = null;
-        }
-
-        String namespace;
-
-        if (this.namespace == null) {
-            namespace = TagUtils.buildNamespace(getStack(), req);
-        } else {
-            namespace = findString(this.namespace);
-        }
-
-        // get the old value stack from the request
-        ValueStack stack = getStack();
-        // execute at this point, after params have been set
-        try {
-            Configuration config = Dispatcher.getInstance().getConfigurationManager().getConfiguration();
-            proxy = ActionProxyFactory.getFactory().createActionProxy(config, namespace, actionName, createExtraContext(), executeResult, true);
-            if (null != methodName) {
-                proxy.setMethod(methodName);
-            }
-            // set the new stack into the request for the taglib to use
-            req.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, proxy.getInvocation().getStack());
-            proxy.execute();
-
-        } catch (Exception e) {
-            String message = "Could not execute action: " + namespace + "/" + actualName;
-            LOG.error(message, e);
-        } finally {
-            // set the old stack back on the request
-            req.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
-        }
-
-        if ((getId() != null) && (proxy != null)) {
-            final Map context = stack.getContext();
-            context.put(getId(), proxy.getAction());
-        }
-    }
-
-    /**
-     * the id (if speficied) to put the action under stack's context.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setId(String id) {
-        super.setId(id);
-    }
-
-    /**
-     * name of the action to be executed (without the extension suffix eg. .action)
-     * @s.tagattribute required="true" type="String"
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * namespace for action to call
-     * @s.tagattribute required="false" type="String" default="namespace from where tag is used"
-     */
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    /**
-     * whether the result of this action (probably a view) should be executed/rendered
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setExecuteResult(boolean executeResult) {
-        this.executeResult = executeResult;
-    }
-
-    /**
-     * whether the request parameters are to be included when the action is invoked
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setIgnoreContextParams(boolean ignoreContextParams) {
-        this.ignoreContextParams = ignoreContextParams;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/ActionError.java b/trunk/core/src/main/java/org/apache/struts2/components/ActionError.java
deleted file mode 100644
index a37fa4e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/ActionError.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Render action errors if they exists the specific layout of the rendering depends on
- * the theme itself.
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- *
- *    &lt;s:actionerror /&gt;
- *    &lt;s:form .... &gt;>
- *       ....
- *    &lt;/s:form&gt;
- *
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="actionerror" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.ui.ActionErrorTag"
- * description="Render action errors if they exists"
- */
-public class ActionError extends UIBean {
-
-    public static final String TEMPLATE = "actionerror";
-
-
-    public ActionError(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/ActionMessage.java b/trunk/core/src/main/java/org/apache/struts2/components/ActionMessage.java
deleted file mode 100644
index c614d44..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/ActionMessage.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Render action messages if they exists, specific rendering layout depends on the 
- * theme itself.
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- *    &lt;s:actionmessage /&gt;
- *    &lt;s:form .... &gt;
- *       ....
- *    &lt;/s:form&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="actionmessage" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.ui.ActionMessageTag"
- * description="Render action messages if they exists"
- */
-public class ActionMessage extends UIBean {
-
-    private static final String TEMPLATE = "actionmessage";
-
-    public ActionMessage(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Anchor.java b/trunk/core/src/main/java/org/apache/struts2/components/Anchor.java
deleted file mode 100644
index 789aa3c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Anchor.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * A tag that creates a HTML &lt;a href='' /&gt; that when clicked calls a URL remote XMLHttpRequest call via the dojo
- * framework. The result from the URL is executed as JavaScript. If a "listenTopics" is supplied, it will publish a
- * 'click' message to that topic when the result is returned.
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example1 -->
- * &lt;s:a id="link1" theme="ajax" href="/DoIt.action" errorText="An error ocurred" showErrorTransportText="true"&gt;
- *     &lt;img border="none" src="&lt;%=request.getContextPath()%&gt;/images/delete.gif"/&gt;
- *     &lt;s:param name="id" value="1"/&gt;
- * &lt;/s:a&gt;
- * <!-- END SNIPPET: example1 -->
- * </pre>
- *
- * </p>
- *
- * <!-- START SNIPPET: exampledescription1 -->
- *
- * Results in
- *
- * <!-- END SNIPPET: exampledescription1 -->
- *
- * </p>
- *
- * <pre>
- * <!-- START SNIPPET: example2 -->
- * &lt;a dojoType="BindAnchor" evalResult="true" id="link1" href="/DoIt.action?id=1" errorHtml="An error ocurred"
- * showTransportError="true"&gt;&lt;/a&gt;
- * <!-- END SNIPPET: example2 -->
- * </pre>
- *
- * </p>
- *
- * <!-- START SNIPPET: exampledescription2 -->
- *
- * Here is an example that uses the postInvokeJS. This example is in altSyntax=true:
- *
- * <!-- END SNIPPET: exampledescription2 -->
- *
- * </p>
- *
- * <pre>
- * <!-- START SNIPPET: example3 -->
- * &lt;s:a id="test" theme="ajax" href="/simpeResult.action" preInvokeJS="confirm(\'You sure\')"&gt;
- * 	A
- * &lt;/s:a&gt;
- * <!-- END SNIPPET: example3 -->
- * </pre>
- *
- * @s.tag name="a" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.AnchorTag"
- * description="Render a HTML href element that when clicked calls a URL via remote XMLHttpRequest"
- * 
- */
-public class Anchor extends RemoteCallUIBean {
-    final public static String OPEN_TEMPLATE = "a";
-    final public static String TEMPLATE = "a-close";
-    final public static String COMPONENT_NAME = Anchor.class.getName();
-
-    protected String notifyTopics;
-    protected String preInvokeJS;
-
-    public Anchor(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    public String getDefaultOpenTemplate() {
-        return OPEN_TEMPLATE;
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        if (notifyTopics != null) {
-            addParameter("notifyTopics", findString(notifyTopics));
-        }
-
-        if (preInvokeJS != null) {
-            addParameter("preInvokeJS", findString(preInvokeJS));
-        }
-    }
-
-    /**
-     * The id to assign the component
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setId(String id) {
-        super.setId(id);
-    }
-
-    /**
-     * Topic names to post an event to after the remote call has been made
-     * @s.tagattribute required="false"
-     */
-    public void setNotifyTopics(String notifyTopics) {
-        this.notifyTopics = notifyTopics;
-    }
-
-    /**
-     * A javascript snippet that will be invoked prior to the execution of the target href. If provided must return true or false. True indicates to continue executing target, false says do not execute link target. Possible uses are for confirm dialogs.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setPreInvokeJS(String preInvokeJS) {
-        this.preInvokeJS = preInvokeJS;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/AppendIterator.java b/trunk/core/src/main/java/org/apache/struts2/components/AppendIterator.java
deleted file mode 100644
index 3f04b7b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/AppendIterator.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.components.Param.UnnamedParametric;
-import org.apache.struts2.util.AppendIteratorFilter;
-import org.apache.struts2.util.MakeIterator;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p>Component for AppendIteratorTag, which jobs is to append iterators to form an
- * appended iterator whereby entries goes from one iterator to another after each
- * respective iterator is exhausted of entries.</p>
- *
- * <p>For example, if there are 3 iterator appended (each iterator has 3 entries),
- * the following will be how the appended iterator entries will be arranged:</p>
- *
- * <ol>
- * 		<li>First Entry of the First Iterator</li>
- * 		<li>Second Entry of the First Iterator</li>
- * 		<li>Third Entry of the First Iterator</li>
- *      <li>First Entry of the Second Iterator</li>
- *      <li>Second Entry of the Second Iterator</li>
- *      <li>Third Entry of the Second Iterator</li>
- *      <li>First Entry of the Third Iterator</li>
- *      <li>Second Entry of the Third Iterator</li>
- *      <li>Third Entry of the Third ITerator</li>
- * </ol>
- * <!-- END SNIPPET: javadoc -->
- *
- * <!-- START SNIPPET: params -->
- * <ul>
- * 		<li>id (String) - the id of which if supplied will have the resultant
- *                        appended iterator stored under in the stack's context</li>
- * </ul>
- * <!-- END SNIPPET: params -->
- *
- *
- * <!-- START SNIPPET: code -->
- * public class AppendIteratorTagAction extends ActionSupport {
- *
- *	private List myList1;
- *	private List myList2;
- *	private List myList3;
- *
- *
- *	public String execute() throws Exception {
- *
- *		myList1 = new ArrayList();
- *		myList1.add("1");
- *		myList1.add("2");
- *		myList1.add("3");
- *
- *		myList2 = new ArrayList();
- *		myList2.add("a");
- *		myList2.add("b");
- *		myList2.add("c");
- *
- *		myList3 = new ArrayList();
- *		myList3.add("A");
- *		myList3.add("B");
- *		myList3.add("C");
- *
- *		return "done";
- *	}
- *
- *	public List getMyList1() { return myList1; }
- *	public List getMyList2() { return myList2; }
- *	public List getMyList3() { return myList3; }
- *}
- * <!-- END SNIPPET: code -->
- *
- * <!-- START SNIPPET: example -->
- * &lt;s:append id="myAppendIterator"&gt;
- *		&lt;s:param value="%{myList1}" /&gt;
- *		&lt;s:param value="%{myList2}" /&gt;
- *		&lt;s:param value="%{myList3}" /&gt;
- * &lt;/s:append&gt;
- * &lt;s:iterator value="%{#myAppendIterator}"&gt;
- *		&lt;s:property /&gt;
- * &lt;/s:iterator&gt;
- * <!-- END SNIPPET: example -->
- *
- *
- * @see org.apache.struts2.util.AppendIteratorFilter
- * @see org.apache.struts2.views.jsp.iterator.AppendIteratorTag
- *
- * @s.tag name="append" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.iterator.AppendIteratorTag"
- * description="Append the values of a list of iterators to one iterator"
- */
-public class AppendIterator extends Component implements UnnamedParametric {
-
-	private static final Log _log = LogFactory.getLog(AppendIterator.class);
-	
-	private AppendIteratorFilter appendIteratorFilter= null;
-	private List _parameters;
-	
-	public AppendIterator(ValueStack stack) {
-		super(stack);
-	}
-	
-	public boolean start(Writer writer) {
-		_parameters = new ArrayList();
-		appendIteratorFilter = new AppendIteratorFilter();
-
-        return super.start(writer);
-    }
-	
-	public boolean end(Writer writer, String body) {
-		
-		for (Iterator paramEntries = _parameters.iterator(); paramEntries.hasNext(); ) {
-				
-			Object iteratorEntryObj = paramEntries.next();
-			if (! MakeIterator.isIterable(iteratorEntryObj)) {
-				_log.warn("param with value resolved as "+iteratorEntryObj+" cannot be make as iterator, it will be ignored and hence will not appear in the merged iterator");
-				continue;
-			}
-			appendIteratorFilter.setSource(MakeIterator.convert(iteratorEntryObj));
-		}
-		
-		appendIteratorFilter.execute();
-		
-		if (getId() != null && getId().length() > 0) {
-			getStack().getContext().put(getId(), appendIteratorFilter);
-		}
-		
-		appendIteratorFilter = null;
-
-        return super.end(writer, body);
-    }
-
-	// UnnamedParametric implementation --------------------------------------
-	public void addParameter(Object value) {
-		_parameters.add(value);
-	}
-
-    /**
-     * the id of which if supplied will have the resultant appended iterator stored under in the stack's context
-     * @s.tagattribute required="false"
-     */
-    public void setId(String id) {
-        super.setId(id);
-    }
-}
-
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Bean.java b/trunk/core/src/main/java/org/apache/struts2/components/Bean.java
deleted file mode 100644
index b1dcaff..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Bean.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.util.OgnlUtil;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p>Instantiates a class that conforms to the JavaBeans specification. This tag has a body which can contain
- * a number of {@link Param} elements to set any mutator methods on that class.</p>
- * <p/>
- * <p>If the id attribute is set on the BeanTag, it will place the instantiated bean into the
- * stack's Context.</p>
- * <p/>
- * <!-- END SNIPPET: javadoc -->
- *
- *
- * <!-- START SNIPPET: params -->
- * <ul>
- * 		<li>id - the stack's context id (if supplied) that the created bean will be store under</li>
- * 		<li>name* - the class name of the bean to be instantiated (must respect JavaBean specification)</li>
- * </ul>
- * <!-- END SNIPPET: params -->
- *
- *
- * <p>Examples:</p>
- * <p/>
- * <pre>
- * <!-- START SNIPPET: examples -->
- * &lt;-- in freemarker form --&gt;
- * [@s.bean name="org.apache.struts2.example.counter.SimpleCounter" id="counter"]
- *   [s:param name="foo" value="BAR"/]
- *   The value of foo is : [s:property value="foo"/], when inside the bean tag.<br />
- * [/s:bean]
- *
- * &lt;-- in jsp form --&gt;
- * &lt;s:bean name="org.apache.struts2.example.counter.SimpleCounter" id="counter"&gt;
- * 	 &lt;s:param name="foo" value="BAR" /&gt;
- *   The value of foot is : &lt;s:property value="foo"/&gt;, when inside the bean tag &lt;br /&gt;
- * &lt;/s:bean&gt;
- * <!-- END SNIPPET: examples -->
- * </pre>
- * <p/>
- *
- * <!-- START SNIPPET: examplesdescription -->
- * <p>This example instantiates a bean called SimpleCounter and sets the foo property (setFoo('BAR')). The
- * SimpleCounter object is then pushed onto the Valuestack, which means that we can called its accessor methods (getFoo())
- * with the Property tag and get their values.</p>
- * <p/>
- * <p>In the above example, the id has been set to a value of <i>counter</i>. This means that the SimpleCounter class
- * will be placed into the stack's context. You can access the SimpleCounter class using a Struts tag:</p>
- * <p/>
- * <pre>
- * &lt;-- jsp form --&gt;
- * &lt;s:property value="#counter" /&gt;
- *
- * &lt;-- freemarker form --&gt;
- * [s:property value="#counter.foo"/]
- * </pre>
- * <p/>
- * <p>In the property tag example, the <i>#</i> tells Ognl to search the context for the SimpleCounter class which has
- * an id(key) of <i>counter</i></p>
- * <!-- END SNIPPET: examplesdescription -->
- *
- * @see Param
- *
- * @s.tag name="bean" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.BeanTag"
- * description="Instantiate a JavaBean and place it in the context."
- */
-public class Bean extends Component {
-    protected static Log log = LogFactory.getLog(Bean.class);
-
-    protected Object bean;
-    protected String name;
-
-    public Bean(ValueStack stack) {
-        super(stack);
-    }
-
-    public boolean start(Writer writer) {
-        boolean result = super.start(writer);
-
-        ValueStack stack = getStack();
-
-        try {
-            String beanName = findString(name, "name", "Bean name is required. Example: com.acme.FooBean");
-            bean = ObjectFactory.getObjectFactory().buildBean(ClassLoaderUtil.loadClass(beanName, getClass()), stack.getContext());
-        } catch (Exception e) {
-            log.error("Could not instantiate bean", e);
-
-            return false;
-        }
-
-        // push bean on stack
-        stack.push(bean);
-
-        // store for reference later
-        if (getId() != null) {
-            getStack().getContext().put(getId(), bean);
-        }
-
-        return result;
-    }
-
-    public boolean end(Writer writer, String body) {
-        ValueStack stack = getStack();
-        stack.pop();
-
-        return super.end(writer, body);
-    }
-
-    public void addParameter(String key, Object value) {
-        OgnlUtil.setProperty(key, value, bean, getStack().getContext());
-    }
-
-    /**
-     * the class name of the bean to be instantiated (must respect JavaBean specification)
-     * @s.tagattribute required="true" type="String"
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Checkbox.java b/trunk/core/src/main/java/org/apache/struts2/components/Checkbox.java
deleted file mode 100644
index 5f080f3..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Checkbox.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Renders an HTML input element of type checkbox, populated by the specified property from the ValueStack.
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * JSP:
- * &lt;s:checkbox label="checkbox test" name="checkboxField1" value="aBoolean" fieldValue="true"/&gt;
- *
- * Velocity:
- * #tag( Checkbox "label=checkbox test" "name=checkboxField1" "value=aBoolean" )
- *
- * Resulting HTML (simple template, aBoolean == true):
- * &lt;input type="checkbox" name="checkboxField1" value="true" checked="checked" /&gt;
- *
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="checkbox" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.CheckboxTag"
- * description="Render a checkbox input field"
-  */
-public class Checkbox extends UIBean {
-    final public static String TEMPLATE = "checkbox";
-
-    protected String fieldValue;
-
-    public Checkbox(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    protected void evaluateExtraParams() {
-        if (fieldValue != null) {
-            addParameter("fieldValue", findString(fieldValue));
-        } else {
-            addParameter("fieldValue", "true");
-        }
-    }
-
-    protected Class getValueClassType() {
-        return Boolean.class; // for checkboxes, everything needs to end up as a Boolean
-    }
-
-    /**
-     * The actual HTML value attribute of the checkbox.
-     * @s.tagattribute required="false" default="'true'"
-     */
-    public void setFieldValue(String fieldValue) {
-        this.fieldValue = fieldValue;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/CheckboxList.java b/trunk/core/src/main/java/org/apache/struts2/components/CheckboxList.java
deleted file mode 100644
index 86101b5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/CheckboxList.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Creates a series of checkboxes from a list. Setup is like &lt;s:select /&gt; or &lt;s:radio /&gt;, but creates checkbox tags.
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:checkboxlist name="foo" list="bar"/&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="checkboxlist" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.CheckboxListTag"
- * description="Render a list of checkboxes"
-  */
-public class CheckboxList extends ListUIBean {
-    final public static String TEMPLATE = "checkboxlist";
-
-    public CheckboxList(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/ClosingUIBean.java b/trunk/core/src/main/java/org/apache/struts2/components/ClosingUIBean.java
deleted file mode 100644
index 466a63a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/ClosingUIBean.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * ClosingUIBean is the standard superclass for UI components such as div etc.
- */
-public abstract class ClosingUIBean extends UIBean {
-    private static final Log LOG = LogFactory.getLog(ClosingUIBean.class);
-
-    protected ClosingUIBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    String openTemplate;
-
-    public abstract String getDefaultOpenTemplate();
-
-    /**
-     * Set template to use for opening the rendered html.
-     * @s.tagattribute required="false"
-     */
-    public void setOpenTemplate(String openTemplate) {
-        this.openTemplate = openTemplate;
-    }
-
-    public boolean start(Writer writer) {
-        boolean result = super.start(writer);
-        try {
-            evaluateParams();
-
-            mergeTemplate(writer, buildTemplateName(openTemplate, getDefaultOpenTemplate()));
-        } catch (Exception e) {
-            LOG.error("Could not open template", e);
-            e.printStackTrace();
-        }
-
-        return result;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/ComboBox.java b/trunk/core/src/main/java/org/apache/struts2/components/ComboBox.java
deleted file mode 100644
index 1b31cd4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/ComboBox.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.util.MakeIterator;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * The combo box is basically an HTML INPUT of type text and HTML SELECT grouped together to give you a combo box
- * functionality. You can place text in the INPUT control by using the SELECT control or type it in directly in
- * the text field.<p/>
- *
- * In this example, the SELECT will be populated from id=year attribute. Counter is itself an Iterator. It will
- * span from first to last. The population is done via javascript, and requires that this tag be surrounded by a
- * &lt;form&gt;.<p/>
- *
- * Note that unlike the &lt;s:select/&gt; tag, there is no ability to define the individual &lt;option&gt; tags' id attribute
- * or content separately. Each of these is simply populated from the toString() method of the list item. Presumably
- * this is because the select box isn't intended to actually submit useful data, but to assist the user in filling
- * out the text field.<p/>
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * JSP:
- * &lt;-- Example One --&gt;
- * &lt;s:bean name="struts.util.Counter" id="year"&gt;
- *   &lt;s:param name="first" value="text('firstBirthYear')"/&gt;
- *   &lt;s:param name="last" value="2000"/&gt;
- *
- *   &lt;s:combobox label="Birth year" size="6" maxlength="4" name="birthYear" list="#year"/&gt;
- * &lt;/s:bean&gt;
- * 
- * &lt;-- Example Two --&gt;
- * <s:combobox
- *     label="My Favourite Fruit"
- *     name="myFavouriteFruit"
- *     list="{'apple','banana','grape','pear'}"
- *     headerKey="-1"
- *     headerValue="--- Please Select ---"
- *     emptyOption="true"
- *     value="banana" />
- *     
- * &lt;-- Example Two --&gt;
- * <s:combobox
- *    label="My Favourite Color"
- *    name="myFavouriteColor"
- *    list="#{'red':'red','green':'green','blue':'blue'}"
- *    headerKey="-1"
- *    headerValue="--- Please Select ---"
- *    emptyOption="true"
- *    value="green" />
- *
- * Velocity:
- * #tag( ComboBox "label=Birth year" "size=6" "maxlength=4" "name=birthYear" "list=#year" )
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="combobox" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.ComboBoxTag"
- * description="Widget that fills a text box from a select"
-  */
-public class ComboBox extends TextField {
-    final public static String TEMPLATE = "combobox";
-
-    protected String list;
-    protected String listKey;
-    protected String listValue;
-    protected String headerKey;
-    protected String headerValue;
-    protected String emptyOption;
-    
-
-    public ComboBox(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        Object value = findValue(list, "list", 
-        		"You must specify a collection/array/map/enumeration/iterator. " +
-                "Example: people or people.{name}");
-        
-        if (headerKey != null) {
-        	addParameter("headerKey", findString(headerKey));
-        }
-        if (headerValue != null) {
-        	addParameter("headerValue", findString(headerValue));
-        }
-        if (emptyOption != null) {
-        	addParameter("emptyOption", findValue(emptyOption, Boolean.class));
-        }
-        
-        if (value instanceof Collection) {
-        	Collection tmp = (Collection) value;
-        	addParameter("list", tmp);
-        	if (listKey != null) {
-        		addParameter("listKey", listKey);
-        	}
-        	if (listValue != null) {
-        		addParameter("listValue", listValue);
-        	}
-        }
-        else if (value instanceof Map) {
-        	Map tmp = (Map) value;
-        	addParameter("list", MakeIterator.convert(tmp));
-        	addParameter("listKey", "key");
-        	addParameter("listValue", "value");
-        }
-        else if (value.getClass().isArray()) {
-        	Iterator i = MakeIterator.convert(value);
-        	addParameter("list", i);
-        	if (listKey != null) {
-        		addParameter("listKey", listKey);
-        	}
-        	if (listValue != null) {
-        		addParameter("listValue", listValue);
-        	}
-        }
-        else {
-        	Iterator i = MakeIterator.convert(value);
-        	addParameter("list", i);
-        	if (listKey != null) {
-        		addParameter("listKey", listKey);
-        	}
-        	if (listValue != null) {
-        		addParameter("listValue", listValue);
-        	}
-        }
-    }
-
-    /**
-     * Iteratable source to populate from. If this is missing, the select widget is simply not displayed.
-     * @s.tagattribute required="true"
-      */
-    public void setList(String list) {
-        this.list = list;
-    }
-
-    /**
-     * Decide if an empty option is to be inserted. Default false.
-     * @s.tagattribute required="false"
-     */
-	public void setEmptyOption(String emptyOption) {
-		this.emptyOption = emptyOption;
-	}
-
-	/**
-	 * set the header key for the header option. 
-	 * @s.tagattribute required="false"
-	 */
-	public void setHeaderKey(String headerKey) {
-		this.headerKey = headerKey;
-	}
-
-	/**
-	 * set the header value for the header option.
-	 * @s.tagattribute required="false"
-	 */
-	public void setHeaderValue(String headerValue) {
-		this.headerValue = headerValue;
-	}
-
-	/**
-	 * set the key used to retrive the option key.
-	 * @s.tagattribute required="false"
-	 */
-	public void setListKey(String listKey) {
-		this.listKey = listKey;
-	}
-
-	/**
-	 * set the value used to retrive the option value.
-	 * @s.tagattribute required="false"
-	 */
-	public void setListValue(String listValue) {
-		this.listValue = listValue;
-	}
-    
-    
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Component.java b/trunk/core/src/main/java/org/apache/struts2/components/Component.java
deleted file mode 100644
index 3a61841..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Component.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Stack;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.dispatcher.mapper.ActionMapper;
-import org.apache.struts2.dispatcher.mapper.ActionMapperFactory;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-import org.apache.struts2.util.FastByteArrayOutputStream;
-import org.apache.struts2.views.jsp.TagUtils;
-import org.apache.struts2.views.util.ContextUtil;
-import org.apache.struts2.views.util.UrlHelper;
-
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.TextParseUtil;
-
-/**
- * Base class to extend for UI components.
- * <p/>
- * This class is a good extension point when building reuseable UI components.
- *
- */
-public class Component {
-    public static final String COMPONENT_STACK = "__component_stack";
-
-    protected ValueStack stack;
-    protected Map parameters;
-    protected String id;
-
-    /**
-     * Constructor.
-     *
-     * @param stack  OGNL value stack.
-     */
-    public Component(ValueStack stack) {
-        this.stack = stack;
-        this.parameters = new HashMap();
-        getComponentStack().push(this);
-    }
-
-    /**
-     * Get's the name of this component.
-     * @return the name of this component.
-     */
-    private String getComponentName() {
-        Class c = getClass();
-        String name = c.getName();
-        int dot = name.lastIndexOf('.');
-
-        return name.substring(dot + 1).toLowerCase();
-    }
-
-    /**
-     * Get's the OGNL value stack assoicated with this component.
-     * @return the OGNL value stack assoicated with this component.
-     */
-    public ValueStack getStack() {
-        return stack;
-    }
-
-    /**
-     * Get's the component stack of this component.
-     * @return the component stack of this component, never <tt>null</tt>.
-     */
-    public Stack getComponentStack() {
-        Stack componentStack = (Stack) stack.getContext().get(COMPONENT_STACK);
-        if (componentStack == null) {
-            componentStack = new Stack();
-            stack.getContext().put(COMPONENT_STACK, componentStack);
-        }
-        return componentStack;
-    }
-
-    /**
-     * Callback for the start tag of this component.
-     * Should the body be evaluated?
-     *
-     * @param writer  the output writer.
-     * @return true if the body should be evaluated
-     */
-    public boolean start(Writer writer) {
-        return true;
-    }
-
-    /**
-     * Callback for the end tag of this component.
-     * Should the body be evaluated again?
-     * <p/>
-     * <b>NOTE:</b> will pop component stack.
-     * @param writer  the output writer.
-     * @param body    the rendered body.
-     * @return true if the body should be evaluated again
-     */
-    public boolean end(Writer writer, String body) {
-        return end(writer, body, true);
-    }
-
-    /**
-     * Callback for the start tag of this component.
-     * Should the body be evaluated again?
-     * <p/>
-     * <b>NOTE:</b> has a parameter to determine to pop the component stack.
-     * @param writer  the output writer.
-     * @param body    the rendered body.
-     * @param popComponentStack  should the component stack be popped?
-     * @return true if the body should be evaluated again
-     */
-    protected boolean end(Writer writer, String body, boolean popComponentStack) {
-    	assert(body != null);
-
-        try {
-            writer.write(body);
-        } catch (IOException e) {
-            throw new StrutsException("IOError while writing the body: " + e.getMessage(), e);
-        }
-        if (popComponentStack) {
-        	popComponentStack();
-        }
-        return false;
-    }
-
-    /**
-     * Pops the component stack.
-     */
-    protected void popComponentStack() {
-    	getComponentStack().pop();
-    }
-
-    /**
-     * Finds the nearest ancestor of this component stack.
-     * @param clazz the class to look for, or if assignable from.
-     * @return  the component if found, <tt>null</tt> if not.
-     */
-    protected Component findAncestor(Class clazz) {
-        Stack componentStack = getComponentStack();
-        int currPosition = componentStack.search(this);
-        if (currPosition >= 0) {
-        	int start = componentStack.size() - currPosition - 1;
-
-        	//for (int i = componentStack.size() - 2; i >= 0; i--) {
-        	for (int i = start; i >=0; i--) {
-            	Component component = (Component) componentStack.get(i);
-            	if (clazz.isAssignableFrom(component.getClass()) && component != this) {
-            		return component;
-            	}
-        	}
-        }
-
-        return null;
-    }
-
-    /**
-     * Evaluates the OGNL stack to find a String value.
-     * @param expr  OGNL expression.
-     * @return  the String value found.
-     */
-    protected String findString(String expr) {
-        return (String) findValue(expr, String.class);
-    }
-
-    /**
-     * Evaluates the OGNL stack to find a String value.
-     * <p/>
-     * If the given expression is <tt>null</tt/> a error is logged and a <code>RuntimeException</code> is thrown
-     * constructed with a messaged based on the given field and errorMsg paramter.
-     *
-     * @param expr  OGNL expression.
-     * @param field   field name used when throwing <code>RuntimeException</code>.
-     * @param errorMsg  error message used when throwing <code>RuntimeException</code>.
-     * @return  the String value found.
-     * @throws StrutsException is thrown in case of expression is <tt>null</tt>.
-     */
-    protected String findString(String expr, String field, String errorMsg) {
-        if (expr == null) {
-            throw fieldError(field, errorMsg, null);
-        } else {
-            return findString(expr);
-        }
-    }
-
-    /**
-     * Constructs?a <code>RuntimeException</code> based on the given information.
-     * <p/>
-     * A message is constructed and logged at ERROR level before being returned
-     * as a <code>RuntimeException</code>.
-     * @param field   field name used when throwing <code>RuntimeException</code>.
-     * @param errorMsg  error message used when throwing <code>RuntimeException</code>.
-     * @param e  the caused exception, can be <tt>null</tt>.
-     * @return  the constructed <code>StrutsException</code>.
-     */
-    protected StrutsException fieldError(String field, String errorMsg, Exception e) {
-        String msg = "tag '" + getComponentName() + "', field '" + field + ( id != null ?"', id '" + id:"") +
-                ( parameters != null && parameters.containsKey("name")?"', name '" + parameters.get("name"):"") +
-                "': " + errorMsg;
-        throw new StrutsException(msg, e);
-    }
-
-    /**
-     * Finds a value from the OGNL stack based on the given expression.
-     * Will always evaluate <code>expr</code> against stack except when <code>expr</code>
-     * is null. If altsyntax (%{...}) is applied, simply strip it off.
-     *
-     * @param expr  the expression. Returns <tt>null</tt> if expr is null.
-     * @return the value, <tt>null</tt> if not found.
-     */
-    protected Object findValue(String expr) {
-        if (expr == null) {
-            return null;
-        }
-
-        if (altSyntax()) {
-            // does the expression start with %{ and end with }? if so, just cut it off!
-            if (expr.startsWith("%{") && expr.endsWith("}")) {
-                expr = expr.substring(2, expr.length() - 1);
-            }
-        }
-
-        return getStack().findValue(expr);
-    }
-
-    /**
-     * Is the altSyntax enabled? [TRUE]
-     * <p/>
-     * See <code>struts.properties</code> where the altSyntax flag is defined.
-     */
-    public boolean altSyntax() {
-        return ContextUtil.isUseAltSyntax(stack.getContext());
-    }
-
-    /**
-     * Evaluates the OGNL stack to find an Object value.
-     * <p/>
-     * Function just like <code>findValue(String)</code> except that if the
-     * given expression is <tt>null</tt/> a error is logged and
-     * a <code>RuntimeException</code> is thrown constructed with a
-     * messaged based on the given field and errorMsg paramter.
-     *
-     * @param expr  OGNL expression.
-     * @param field   field name used when throwing <code>RuntimeException</code>.
-     * @param errorMsg  error message used when throwing <code>RuntimeException</code>.
-     * @return  the Object found, is never <tt>null</tt>.
-     * @throws StrutsException is thrown in case of not found in the OGNL stack, or expression is <tt>null</tt>.
-     */
-    protected Object findValue(String expr, String field, String errorMsg) {
-        if (expr == null) {
-            throw fieldError(field, errorMsg, null);
-        } else {
-            Object value = null;
-            Exception problem = null;
-            try {
-                value = findValue(expr);
-            } catch (Exception e) {
-                problem = e;
-            }
-
-            if (value == null) {
-                throw fieldError(field, errorMsg, problem);
-            }
-
-            return value;
-        }
-    }
-
-    /**
-     * Evaluates the OGNL stack to find an Object of the given type. Will evaluate
-     * <code>expr</code> the portion wrapped with altSyntax (%{...})
-     * against stack when altSyntax is on, else the whole <code>expr</code>
-     * is evaluated against the stack.
-     * <p/>
-     * This method only supports the altSyntax. So this should be set to true.
-     * @param expr  OGNL expression.
-     * @param toType  the type expected to find.
-     * @return  the Object found, or <tt>null</tt> if not found.
-     */
-    protected Object findValue(String expr, Class toType) {
-        if (altSyntax() && toType == String.class) {
-            return TextParseUtil.translateVariables('%', expr, stack);
-        } else {
-            if (altSyntax()) {
-                // does the expression start with %{ and end with }? if so, just cut it off!
-                if (expr.startsWith("%{") && expr.endsWith("}")) {
-                    expr = expr.substring(2, expr.length() - 1);
-                }
-            }
-
-            return getStack().findValue(expr, toType);
-        }
-    }
-
-    /**
-     * Renders an action URL by consulting the {@link org.apache.struts2.dispatcher.mapper.ActionMapper}.
-     * @param action      the action
-     * @param namespace   the namespace
-     * @param method      the method
-     * @param req         HTTP request
-     * @param res         HTTP response
-     * @param parameters  parameters
-     * @param scheme      http or https
-     * @param includeContext  should the context path be included or not
-     * @param encodeResult    should the url be encoded
-     * @return the action url.
-     */
-    protected String determineActionURL(String action, String namespace, String method,
-                                        HttpServletRequest req, HttpServletResponse res, Map parameters, String scheme,
-                                        boolean includeContext, boolean encodeResult) {
-        String finalAction = findString(action);
-        String finalNamespace = determineNamespace(namespace, getStack(), req);
-        ActionMapping mapping = new ActionMapping(finalAction, finalNamespace, method, parameters);
-        ActionMapper mapper = ActionMapperFactory.getMapper();
-        String uri = mapper.getUriFromActionMapping(mapping);
-        return UrlHelper.buildUrl(uri, req, res, parameters, scheme, includeContext, encodeResult);
-    }
-
-    /**
-     * Determines the namespace of the current page being renderdd. Useful for Form, URL, and href generations.
-     * @param namespace  the namespace
-     * @param stack      OGNL value stack
-     * @param req        HTTP request
-     * @return  the namepsace of the current page being rendered, is never <tt>null</tt>.
-     */
-    protected String determineNamespace(String namespace, ValueStack stack, HttpServletRequest req) {
-        String result;
-
-        if (namespace == null) {
-            result = TagUtils.buildNamespace(stack, req);
-        } else {
-            result = findString(namespace);
-        }
-
-        if (result == null) {
-            result = "";
-        }
-
-        return result;
-    }
-
-    /**
-     * Pushes this component's parameter Map as well as the component itself on to the stack
-     * and then copies the supplied parameters over. Because the component's parameter Map is
-     * pushed before the component itself, any key-value pair that can't be assigned to componet
-     * will be set in the parameters Map.
-     *
-     * @param params  the parameters to copy.
-     */
-    public void copyParams(Map params) {
-        stack.push(parameters);
-        stack.push(this);
-        try {
-            for (Iterator iterator = params.entrySet().iterator(); iterator.hasNext();) {
-                Map.Entry entry = (Map.Entry) iterator.next();
-                String key = (String) entry.getKey();
-                stack.setValue(key, entry.getValue());
-            }
-        } finally {
-            stack.pop();
-            stack.pop();
-        }
-    }
-
-    /**
-     * Constructs a string representation of the given exception.
-     * @param t  the exception
-     * @return the exception as a string.
-     */
-    protected String toString(Throwable t) {
-        FastByteArrayOutputStream bout = new FastByteArrayOutputStream();
-        PrintWriter wrt = new PrintWriter(bout);
-        t.printStackTrace(wrt);
-        wrt.close();
-
-        return bout.toString();
-    }
-
-    /**
-     * Get's the parameters.
-     * @return the parameters. Is never <tt>null</tt>.
-     */
-    public Map getParameters() {
-        return parameters;
-    }
-
-    /**
-     * Add's all the given parameters to this componenets own parameters.
-     * @param params the parameters to add.
-     */
-    public void addAllParameters(Map params) {
-        parameters.putAll(params);
-    }
-
-    /**
-     * Add's the given key and value to this components own parameter.
-     * <p/>
-     * If the provided key is <tt>null</tt> nothing happends.
-     * If the provided value is <tt>null</tt> any existing parameter with
-     * the given key name is removed.
-     * @param key  the key of the new parameter to add.
-     * @param value the value assoicated with the key.
-     */
-    public void addParameter(String key, Object value) {
-        if (key != null) {
-            Map params = getParameters();
-
-            if (value == null) {
-                params.remove(key);
-            } else {
-                params.put(key, value);
-            }
-        }
-    }
-
-    /**
-     * Get's the id for referencing element.
-     * @return the id for referencing element.
-     */
-    public String getId() {
-        return id;
-    }
-
-    /**
-     * id for referencing element. For UI and form tags it will be used as HTML id attribute
-     * @s.tagattribute required="false"
-     */
-    public void setId(String id) {
-    	if (id != null) {
-    		this.id = findString(id);
-    	}
-    }
-
-    /**
-     * Overwrite to set if body shold be used.
-     * @return always false for this component.
-     */
-    public boolean usesBody() {
-        return false;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Date.java b/trunk/core/src/main/java/org/apache/struts2/components/Date.java
deleted file mode 100644
index cec6a6c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Date.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.TextProvider;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * 
- * Format Date object in different ways.
- * <p>
- * The date tag will allow you to format a Date in a quick and easy way.
- * You can specify a <b>custom format</b> (eg. "dd/MM/yyyy hh:mm"), you can generate
- * <b>easy readable notations</b> (like "in 2 hours, 14 minutes"), or you can just fall back
- * on a <b>predefined format</b> with key 'struts.date.format' in your properties file.
- *
- * If that key is not defined, it will finally fall back to the default DateFormat.MEDIUM
- * formatting.
- *
- * <b>Note</b>: If the requested Date object isn't found on the stack, a blank will be returned.
- * </p>
- * 
- * Configurable attributes are :-
- * <ul>
- *    <li>name</li>
- *    <li>nice</li>
- *    <li>format</li>
- * </ul>
- * 
- * <p/>
- * 
- * Following how the date component will work, depending on the value of nice attribute 
- * (which by default is false) and the format attribute.
- * 
- * <p/>
- * 
- * <b><u>Condition 1: With nice attribute as true</u></b>
- * <table border="1">
- *   <tr>
- *      <td>i18n key</td>
- *      <td>default</td>
- *   </tr>	
- *   <tr>
- *   	<td>struts.date.format.past</td>
- *   	<td>{0} ago</td>
- *   </tr>
- *   <tr>
- *   	<td>struts.date.format.future</td>
- *      <td>in {0}</td>
- *   </tr>
- *   <tr>
- *   	<td>struts.date.format.seconds</td>
- *      <td>an instant</td>
- *   </tr>
- *   <tr>
- *   	<td>struts.date.format.minutes</td>
- *      <td>{0,choice,1#one minute|1<{0} minutes}</td>
- *   </tr>
- *   <tr>
- *   	<td>struts.date.format.hours</td>
- *   	<td>{0,choice,1#one hour|1<{0} hours}{1,choice,0#|1#, one minute|1<, {1} minutes}</td>
- *   </tr>
- *   <tr>
- *   	<td>struts.date.format.days</td>
- *   	<td>{0,choice,1#one day|1<{0} days}{1,choice,0#|1#, one hour|1<, {1} hours}</td>
- *   </tr>
- *   <tr>
- *   	<td>struts.date.format.years</td>
- *   	<td>{0,choice,1#one year|1<{0} years}{1,choice,0#|1#, one day|1<, {1} days}</td>
- *   </tr>
- * </table>
- * 
- * <p/>
- * 
- * <b><u>Condition 2: With nice attribute as false and format attribute is specified eg. dd/MM/yyyyy </u></b>
- * <p>In this case the format attribute will be used.</p>
- * 
- * <p/>
- * 
- * <b><u>Condition 3: With nice attribute as false and no format attribute is specified </u></b>
- * <table border="1">
- *    <tr>
- *      <td>i18n key</td>
- *      <td>default</td>
- *   </tr>	
- *   <tr>
- *   	<td>struts.date.format</td>
- *      <td>if one is not found DateFormat.MEDIUM format will be used</td>
- *   </tr>
- * </table>
- * 
- * 
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- * <pre>
- *  <!-- START SNIPPET: example -->
- *  &lt;s:date name="person.birthday" format="dd/MM/yyyy" /&gt;
- *  &lt;s:date name="person.birthday" format="%{getText('some.i18n.key')}" /&gt;
- *  &lt;s:date name="person.birthday" nice="true" /&gt;
- *  &lt;s:date name="person.birthday" /&gt;
- *  <!-- END SNIPPET: example -->
- * </pre>
- *
- * <code>Date</code>
- *
- * @s.tag name="date" tld-body-content="empty"
- *         tld-tag-class="org.apache.struts2.views.jsp.DateTag"
- *         description="Render a formatted date."
- */
-public class Date extends Component {
-
-    private static final Log LOG = LogFactory.getLog(Date.class);
-    /**
-     * Property name to fall back when no format is specified
-     */
-    public static final String DATETAG_PROPERTY = "struts.date.format";
-    /**
-     * Property name that defines the past notation (default: {0} ago)
-     */
-    public static final String DATETAG_PROPERTY_PAST = "struts.date.format.past";
-    private static final String DATETAG_DEFAULT_PAST = "{0} ago";
-    /**
-     * Property name that defines the future notation (default: in {0})
-     */
-    public static final String DATETAG_PROPERTY_FUTURE = "struts.date.format.future";
-    private static final String DATETAG_DEFAULT_FUTURE = "in {0}";
-    /**
-     * Property name that defines the seconds notation (default: in instant)
-     */
-    public static final String DATETAG_PROPERTY_SECONDS = "struts.date.format.seconds";
-    private static final String DATETAG_DEFAULT_SECONDS = "an instant";
-    /**
-     * Property name that defines the minutes notation (default: {0,choice,1#one minute|1<{0} minutes})
-     */
-    public static final String DATETAG_PROPERTY_MINUTES = "struts.date.format.minutes";
-    private static final String DATETAG_DEFAULT_MINUTES = "{0,choice,1#one minute|1<{0} minutes}";
-    /**
-     * Property name that defines the hours notation (default: {0,choice,1#one hour|1<{0} hours}{1,choice,0#|1#, one
-     * minute|1<, {1} minutes})
-     */
-    public static final String DATETAG_PROPERTY_HOURS = "struts.date.format.hours";
-    private static final String DATETAG_DEFAULT_HOURS = "{0,choice,1#one hour|1<{0} hours}{1,choice,0#|1#, one minute|1<, {1} minutes}";
-    /**
-     * Property name that defines the days notation (default: {0,choice,1#one day|1<{0} days}{1,choice,0#|1#, one hour|1<,
-     * {1} hours})
-     */
-    public static final String DATETAG_PROPERTY_DAYS = "struts.date.format.days";
-    private static final String DATETAG_DEFAULT_DAYS = "{0,choice,1#one day|1<{0} days}{1,choice,0#|1#, one hour|1<, {1} hours}";
-    /**
-     * Property name that defines the years notation (default: {0,choice,1#one year|1<{0} years}{1,choice,0#|1#, one
-     * day|1<, {1} days})
-     */
-    public static final String DATETAG_PROPERTY_YEARS = "struts.date.format.years";
-    private static final String DATETAG_DEFAULT_YEARS = "{0,choice,1#one year|1<{0} years}{1,choice,0#|1#, one day|1<, {1} days}";
-
-    private String name;
-
-    private String format;
-
-    private boolean nice;
-
-    public Date(ValueStack stack) {
-        super(stack);
-    }
-
-    private TextProvider findProviderInStack() {
-        for (Iterator iterator = getStack().getRoot().iterator(); iterator
-                .hasNext();) {
-            Object o = iterator.next();
-
-            if (o instanceof TextProvider) {
-                return (TextProvider) o;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Calculates the difference in time from now to the given date, and outputs it nicely. <p/> An example: <br/>Now =
-     * 2006/03/12 13:38:00, date = 2006/03/12 15:50:00 will output "in 1 hour, 12 minutes".
-     *
-     * @param tp   text provider
-     * @param date the date
-     * @return the date nicely
-     */
-    public String formatTime(TextProvider tp, java.util.Date date) {
-        java.util.Date now = new java.util.Date();
-        StringBuffer sb = new StringBuffer();
-        List args = new ArrayList();
-        long secs = Math.abs((now.getTime() - date.getTime()) / 1000);
-        long mins = secs / 60;
-        long sec = secs % 60;
-        int min = (int) mins % 60;
-        long hours = mins / 60;
-        int hour = (int) hours % 24;
-        int days = (int) hours / 24;
-        int day = days % 365;
-        int years = days / 365;
-
-        if (years > 0) {
-            args.add(new Long(years));
-            args.add(new Long(day));
-            args.add(sb);
-            args.add(null);
-            sb.append(tp.getText(DATETAG_PROPERTY_YEARS, DATETAG_DEFAULT_YEARS, args));
-        } else if (day > 0) {
-            args.add(new Long(day));
-            args.add(new Long(hour));
-            args.add(sb);
-            args.add(null);
-            sb.append(tp.getText(DATETAG_PROPERTY_DAYS, DATETAG_DEFAULT_DAYS, args));
-        } else if (hour > 0) {
-            args.add(new Long(hour));
-            args.add(new Long(min));
-            args.add(sb);
-            args.add(null);
-            sb.append(tp.getText(DATETAG_PROPERTY_HOURS, DATETAG_DEFAULT_HOURS, args));
-        } else if (min > 0) {
-            args.add(new Long(min));
-            args.add(new Long(sec));
-            args.add(sb);
-            args.add(null);
-            sb.append(tp.getText(DATETAG_PROPERTY_MINUTES, DATETAG_DEFAULT_MINUTES, args));
-        } else {
-            args.add(new Long(sec));
-            args.add(sb);
-            args.add(null);
-            sb.append(tp.getText(DATETAG_PROPERTY_SECONDS, DATETAG_DEFAULT_SECONDS, args));
-        }
-
-        args.clear();
-        args.add(sb.toString());
-        if (date.before(now)) {
-            // looks like this date is passed
-            return tp.getText(DATETAG_PROPERTY_PAST, DATETAG_DEFAULT_PAST, args);
-        } else {
-            return tp.getText(DATETAG_PROPERTY_FUTURE, DATETAG_DEFAULT_FUTURE, args);
-        }
-    }
-
-    public boolean end(Writer writer, String body) {
-        String msg = null;
-        ValueStack stack = getStack();
-        java.util.Date date = null;
-        // find the name on the valueStack, and cast it to a date
-        try {
-            date = (java.util.Date) findValue(name);
-        } catch (Exception e) {
-            LOG.error("Could not convert object with key '" + name
-                    + "' to a java.util.Date instance");
-            // bad date, return a blank instead ?
-            msg = "";
-        }
-
-        //try to find the format on the stack
-        if (format != null) {
-            format = findString(format);
-        }
-        if (date != null) {
-            TextProvider tp = findProviderInStack();
-            if (tp != null) {
-                if (nice) {
-                    msg = formatTime(tp, date);
-                } else {
-                    if (format == null) {
-                        String globalFormat = null;
-
-                        // if the format is not specified, fall back using the
-                        // defined property DATETAG_PROPERTY
-                        globalFormat = tp.getText(DATETAG_PROPERTY);
-
-                        // if tp.getText can not find the property then the
-                        // returned string is the same as input =
-                        // DATETAG_PROPERTY
-                        if (globalFormat != null
-                                && !DATETAG_PROPERTY.equals(globalFormat)) {
-                            msg = new SimpleDateFormat(globalFormat,
-                                    ActionContext.getContext().getLocale())
-                                    .format(date);
-                        } else {
-                            msg = DateFormat.getDateTimeInstance(
-                                    DateFormat.MEDIUM, DateFormat.MEDIUM,
-                                    ActionContext.getContext().getLocale())
-                                    .format(date);
-                        }
-                    } else {
-                        msg = new SimpleDateFormat(format, ActionContext
-                                .getContext().getLocale()).format(date);
-                    }
-                }
-                if (msg != null) {
-                    try {
-                        if (getId() == null) {
-                            writer.write(msg);
-                        } else {
-                            stack.getContext().put(getId(), msg);
-                        }
-                    } catch (IOException e) {
-                        LOG.error("Could not write out Date tag", e);
-                    }
-                }
-            }
-        }
-        return super.end(writer, "");
-    }
-
-    /**
-     * Date or DateTime format pattern
-     *
-     * @s.tagattribute required="false" rtexprvalue="false"
-     */
-    public void setFormat(String format) {
-        this.format = format;
-    }
-
-    /**
-     * Whether to print out the date nicely
-     *
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setNice(boolean nice) {
-        this.nice = nice;
-    }
-
-    /**
-     * @return Returns the name.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * The date value to format
-     *
-     * @s.tagattribute required="true" type="String"
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * @return Returns the format.
-     */
-    public String getFormat() {
-        return format;
-    }
-
-    /**
-     * @return Returns the nice.
-     */
-    public boolean isNice() {
-        return nice;
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/DatePicker.java b/trunk/core/src/main/java/org/apache/struts2/components/DatePicker.java
deleted file mode 100644
index 6e59b93..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/DatePicker.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Renders datepicker element.</p>
- * Format supported by this component are:-
- * <table border="1">
- *   <tr>
- *   	<td>Format</td>
- *    	<td>Description</td>
- *   </tr>
- *   <tr>
- *   	<td>#dd</td>
- *   	<td>Display day in two digits format</td>
- *   </tr>	
- *   <tr>
- *   	<td>#d</td>
- *   	<td>Try to display day in one digit format, if cannot use 2 digit format</td>
- *   </tr>
- *   <tr>
- *   	<td>#MM</td>
- *      <td>Display month in two digits format</td>
- *   </tr>
- *   <tr>
- *   	<td>#M</td>
- *   	<td>Try to display month in one digits format, if cannot use 2 digit format</td>
- *   </tr>
- *   <tr>
- *   	<td>#yyyy</td>
- *      <td>Display year in four digits format</td>
- *   </tr>
- *   <tr>
- *   	<td>#yy</td>
- *      <td>Display the last two digits of the yaer</td>
- *   </tr>
- *   <tr>
- *   	<td>#y</td>
- *      <td>Display the last digits of the year</td>
- *   </tr>
- * </table>
- *
- * <p/>
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: expl1 -->
- *
- * Example 1:
- *     &lt;s:datepicker name="order.date" label="Order Date" /&gt;
- * Example 2:
- *     &lt;s:datepicker name="delivery.date" label="Delivery Date" format="#yyyy-#MM-#dd"  /&gt;
- *     
- * <!-- END SNIPPET: expl1 -->
- * </pre>
- * <p/>
- *
- * <!-- START SNIPPET: expldesc2 -->
- *
- * The css could be changed by using the following :-
- *
- * <!-- END SNIPPET: expldesc2 -->
- * 
- * <pre>
- * <!-- START SNIPPET: expl2 -->
- * 
- * &lt;s:datepicker name="birthday" label="Birthday" templateCss="...." /&gt;
- * 
- * <!-- END SNIPPET: expl2 -->
- * </pre>
- *
- * @s.tag name="datepicker" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DatePickerTag"
- * description="Render datepicker"
- */
-public class DatePicker extends TextField {
-
-    final public static String TEMPLATE = "datepicker";
-
-    protected String format;
-    protected String dateIconPath;
-    protected String templatePath;
-    protected String templateCssPath;
-    protected String size;
-
-    public DatePicker(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void evaluateParams() {
-        super.evaluateParams();
-
-        if (format != null) {
-            addParameter("format", findString(format));
-        }
-        if (dateIconPath != null) {
-        	addParameter("dateIconPath", dateIconPath);
-        }
-        if (templatePath != null) {
-        	addParameter("templatePath", templatePath);
-        }
-        if (templateCssPath != null) {
-        	addParameter("templateCssPath", templateCssPath);
-        }
-        if (size != null) {
-        	addParameter("size", findValue(size, Integer.class));
-        }
-    }
-
-    /**
-     * The format to use for date field.
-     * @s.tagattribute required="false" type="String" default="Dateformat specified by language preset (%Y/%m/%d for en)"
-     */
-    public void setFormat(String format) {
-        this.format = format;
-    }
-    
-    /**
-     * The date picker icon path
-     * @s.tagattribute required="false" type="String" default="/struts/dojo/struts/widgets/dateIcon.gif"
-     */
-    public void setDateIconPath(String dateIconPath) {
-    	this.dateIconPath = dateIconPath;
-    }
-    
-    /**
-     * The datepicker template path.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setTemplatePath(String templatePath) {
-    	this.templatePath = templatePath;
-    }
-    
-    /**
-     * The datepicker template css path.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setTemplateCssPath(String templateCssPath) {
-    	this.templateCssPath = templateCssPath;
-    }
-    
-    /**
-     * The datepicker text field size.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setSize(String size) {
-    	this.size = size;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Debug.java b/trunk/core/src/main/java/org/apache/struts2/components/Debug.java
deleted file mode 100644
index 4f1220b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Debug.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.apache.struts2.components;
-
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.StrutsException;
-
-import com.opensymphony.xwork2.util.OgnlUtil;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p>Renders an debug tag.</P>
- *
- * The debug information contain mostly stack information:
- * <ul>
- *    <li>Value Stack Contents</li>
- *    <li>Stack Context</li>
- * </ul>
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;ww:debug/&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="debug" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DebugTag"
- * description="Render debug tag"
-  */
-public class Debug extends UIBean {
-    public static final String TEMPLATE = "debug";
-
-    public Debug(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public boolean start(Writer writer) {
-        boolean result = super.start(writer);
-
-        ValueStack stack = getStack();
-        Iterator iter = stack.getRoot().iterator();
-        List stackValues = new ArrayList(stack.getRoot().size());
-        while (iter.hasNext()) {
-            Object o = iter.next();
-            Map values;
-            try {
-                values = OgnlUtil.getBeanMap(o);
-            } catch (Exception e) {
-                throw new StrutsException("Caught an exception while getting the property values of " + o, e);
-            }
-            stackValues.add(new DebugMapEntry(o.getClass().getName(), values));
-        }
-
-        addParameter("stackValues", stackValues);
-
-        return result;
-    }
-
-    private class DebugMapEntry implements Map.Entry {
-        private Object key;
-        private Object value;
-
-        DebugMapEntry(Object key, Object value) {
-            this.key = key;
-            this.value = value;
-        }
-
-        public Object getKey() {
-            return key;
-        }
-
-        public Object getValue() {
-            return value;
-        }
-
-        public Object setValue(Object newVal) {
-            Object oldVal = value;
-            value = newVal;
-            return oldVal;
-        }
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Div.java b/trunk/core/src/main/java/org/apache/struts2/components/Div.java
deleted file mode 100644
index 8b54216..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Div.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.views.util.UrlHelper;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * The div tag is primarily an AJAX tag, providing a remote call from the current page to update a section
- * of content without having to refresh the entire page.<p/>
- *
- * It creates a HTML &lt;DIV /&gt; that obtains it's content via a remote XMLHttpRequest call
- * via the dojo framework.<p/>
- *
- * If a "listenTopics" is supplied, it will listen to that topic and refresh it's content when any message
- * is received.<p/>
- * <!-- END SNIPPET: javadoc -->
- *
- * <b>Important:</b> Be sure to setup the page containing this tag to be Configured for AJAX</p>
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:div ... /&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="div" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DivTag"
- * description="Render HTML div providing content from remote call via AJAX"
-  */
-public class Div extends RemoteCallUIBean {
-	
-	private static final Log _log = LogFactory.getLog(Div.class);
-	
-
-    public static final String TEMPLATE = "div";
-    public static final String TEMPLATE_CLOSE = "div-close";
-    public static final String COMPONENT_NAME = Div.class.getName();
-
-    protected String updateFreq;
-    protected String delay;
-    protected String loadingText;
-    protected String listenTopics;
-
-    public Div(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    public String getDefaultOpenTemplate() {
-        return TEMPLATE;
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE_CLOSE;
-    }
-
-    public void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        if (null != updateFreq && !"".equals(updateFreq)) {
-            addParameter("updateFreq", findString(updateFreq));
-        } else {
-            addParameter("updateFreq", "0");
-        }
-
-        if (null != delay && !"".equals(delay)) {
-            addParameter("delay", findString(delay));
-        } else {
-            addParameter("delay", "0");
-        }
-        
-        String tmpUpdateFreq = (String) getParameters().get("delay");
-        String tmpDelay = (String) getParameters().get("updateFreq");
-        try {
-        	int _updateFreq = Integer.parseInt(tmpUpdateFreq);
-        	int _delay = Integer.parseInt(tmpDelay);
-        	
-        	if (_updateFreq <= 0 && _delay <= 0) {
-        		addParameter("autoStart", "false");
-        	}
-        }
-        catch(NumberFormatException e) {
-        	// too bad, invalid updateFreq or delay provided, we
-        	// can't determine autoStart mode.
-        	_log.info("error while parsing updateFreq ["+tmpUpdateFreq+"] or delay ["+tmpDelay+"] to integer, cannot determine autoStart mode", e);
-        }
-
-        if (loadingText != null) {
-            addParameter("loadingText", findString(loadingText));
-        }
-
-        if (listenTopics != null) {
-            addParameter("listenTopics", findString(listenTopics));
-        }
-
-        if (href != null) {
-
-            // This is needed for portal and DOJO ajax stuff!
-            addParameter("href", null);
-            addParameter("href", UrlHelper.buildUrl(findString(href), request, response, null));
-        }
-    }
-
-    /**
-     * How often to re-fetch the content (in milliseconds)
-     * @s.tagattribute required="false" type="Integer" default="0"
-     */
-    public void setUpdateFreq(String updateFreq) {
-        this.updateFreq = updateFreq;
-    }
-
-    /**
-     * How long to wait before fetching the content (in milliseconds)
-     * @s.tagattribute required="false" type="Integer" default="0"
-     */
-    public void setDelay(String delay) {
-        this.delay = delay;
-    }
-
-    /**
-     * The text to display to the user while the new content is being fetched (especially good if the content will take awhile)
-     * @s.tagattribute required="false" rtexprvalue="true"
-     */
-    public void setLoadingText(String loadingText) {
-        this.loadingText = loadingText;
-    }
-
-    /**
-     * Topic name to listen to (comma delimited), that will cause the DIV's content to be re-fetched
-     * @s.tagattribute required="false"
-     */
-    public void setListenTopics(String listenTopics) {
-        this.listenTopics = listenTopics;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java b/trunk/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java
deleted file mode 100644
index dde415b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java
+++ /dev/null
@@ -1,667 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * DoubleListUIBean is the standard superclass of all Struts double list handling components.
- *
- * <p/>
- *
- * <!-- START SNIPPET: javadoc -->
- * 
- * Note that the doublelistkey and doublelistvalue attribute will default to "key" and "value"
- * respectively only when the doublelist attribute is evaluated to a Map or its decendant.
- * Other thing else, will result in doublelistkey and doublelistvalue to be null and not used.
- * 
- * <!-- END SNIPPET: javadoc -->
- *
- */
-public abstract class DoubleListUIBean extends ListUIBean {
-	
-	protected String emptyOption;
-    protected String headerKey;
-    protected String headerValue;
-    protected String multiple;
-    protected String size;
-	
-    protected String doubleList;
-    protected String doubleListKey;
-    protected String doubleListValue;
-    protected String doubleName;
-    protected String doubleValue;
-    protected String formName;
-    
-    protected String doubleId;
-    protected String doubleDisabled;
-    protected String doubleMultiple;
-    protected String doubleSize;
-    protected String doubleHeaderKey;
-    protected String doubleHeaderValue;
-    protected String doubleEmptyOption;
-    
-    protected String doubleCssClass;
-    protected String doubleCssStyle;
-    
-    protected String doubleOnclick;
-    protected String doubleOndblclick;
-    protected String doubleOnmousedown;
-    protected String doubleOnmouseup;
-    protected String doubleOnmouseover;
-    protected String doubleOnmousemove;
-    protected String doubleOnmouseout;
-    protected String doubleOnfocus;
-    protected String doubleOnblur;
-    protected String doubleOnkeypress;
-    protected String doubleOnkeydown;
-    protected String doubleOnkeyup;
-    protected String doubleOnselect;
-    protected String doubleOnchange;
-    
-    protected String doubleAccesskey;
-    
-
-    public DoubleListUIBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    public void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        //Object doubleName = null;
-        
-        if (emptyOption != null) {
-            addParameter("emptyOption", findValue(emptyOption, Boolean.class));
-        }
-
-        if (multiple != null) {
-            addParameter("multiple", findValue(multiple, Boolean.class));
-        }
-
-        if (size != null) {
-            addParameter("size", findString(size));
-        }
-
-        if ((headerKey != null) && (headerValue != null)) {
-            addParameter("headerKey", findString(headerKey));
-            addParameter("headerValue", findString(headerValue));
-        }
-        
-        
-        if (doubleMultiple != null) {
-        	addParameter("doubleMultiple", findValue(doubleMultiple, Boolean.class));
-        }
-        
-        if (doubleSize != null) {
-        	addParameter("doubleSize", findString(doubleSize));
-        }
-        
-        if (doubleDisabled != null) {
-        	addParameter("doubleDisabled", findValue(doubleDisabled, Boolean.class));
-        }
-
-        if (doubleName != null) {
-            addParameter("doubleName", findString(this.doubleName));
-        }
-
-        if (doubleList != null) {
-            addParameter("doubleList", doubleList);
-        }
-        
-        Object tmpDoubleList = findValue(doubleList);
-        if (doubleListKey != null) {
-            addParameter("doubleListKey", doubleListKey);
-        }else if (tmpDoubleList instanceof Map) {
-        	addParameter("doubleListKey", "key");
-        }
-        
-        if (doubleListValue != null) {
-            if (altSyntax()) {
-                // the same logic as with findValue(String)
-                // if value start with %{ and end with }, just cut it off!
-                if (doubleListValue.startsWith("%{") && doubleListValue.endsWith("}")) {
-                    doubleListValue = doubleListValue.substring(2, doubleListValue.length() - 1);
-                }
-            }
-
-            addParameter("doubleListValue", doubleListValue);
-        }else if (tmpDoubleList instanceof Map) {
-        	addParameter("doubleListValue", "value");
-        }
-
-
-        if (formName != null) {
-            addParameter("formName", findString(formName));
-        } else {
-            // ok, let's look it up
-            Component form = findAncestor(Form.class);
-            if (form != null) {
-                addParameter("formName", form.getParameters().get("name"));
-            }
-        }
-
-        Class valueClazz = getValueClassType();
-
-        if (valueClazz != null) {
-            if (doubleValue != null) {
-                addParameter("doubleNameValue", findValue(doubleValue, valueClazz));
-            } else if (doubleName != null) {
-                addParameter("doubleNameValue", findValue(doubleName.toString(), valueClazz));
-            }
-        } else {
-            if (doubleValue != null) {
-                addParameter("doubleNameValue", findValue(doubleValue));
-            } else if (doubleName != null) {
-                addParameter("doubleNameValue", findValue(doubleName.toString()));
-            }
-        }
-        
-        Form form = (Form) findAncestor(Form.class);
-        if (doubleId != null) {
-            // this check is needed for backwards compatibility with 2.1.x
-            if (altSyntax()) {
-                addParameter("doubleId", findString(doubleId));
-            } else {
-                addParameter("doubleId", doubleId);
-            }
-        } else if (form != null) {
-            addParameter("doubleId", form.getParameters().get("id") + "_" +escape(this.doubleName));
-        }
-        
-        if (doubleOnclick != null) {
-        	addParameter("doubleOnclick", findString(doubleOnclick));
-        }
-        
-        if (doubleOndblclick != null) {
-        	addParameter("doubleOndblclick", findString(doubleOndblclick));
-        }
-        
-        if (doubleOnmousedown != null) {
-        	addParameter("doubleOnmousedown", findString(doubleOnmousedown));
-        }
-        
-        if (doubleOnmouseup != null) {
-        	addParameter("doubleOnmouseup", findString(doubleOnmouseup));
-        }
-        
-        if (doubleOnmouseover != null) {
-        	addParameter("doubleOnmouseover", findString(doubleOnmouseover));
-        }
-        
-        if (doubleOnmousemove != null) {
-        	addParameter("doubleOnmousemove", findString(doubleOnmousemove));
-        }
-        
-        if (doubleOnmouseout != null) {
-        	addParameter("doubleOnmouseout", findString(doubleOnmouseout));
-        }
-        
-        if (doubleOnfocus != null) {
-        	addParameter("doubleOnfocus", findString(doubleOnfocus));
-        }
-        
-        if (doubleOnblur != null) {
-        	addParameter("doubleOnblur", findString(doubleOnblur));
-        }
-        
-        if (doubleOnkeypress != null) {
-        	addParameter("doubleOnkeypress", findString(doubleOnkeypress));
-        }
-        
-        if (doubleOnkeydown != null) {
-        	addParameter("doubleOnkeydown", findString(doubleOnkeydown));
-        }
-        
-        if (doubleOnselect != null) {
-        	addParameter("doubleOnselect", findString(doubleOnselect));
-        }
-        
-        if (doubleOnchange != null) {
-        	addParameter("doubleOnchange", findString(doubleOnchange));
-        }
-        
-        if (doubleCssClass != null) {
-        	addParameter("doubleCss", findString(doubleCssClass));
-        }
-        
-        if (doubleCssStyle != null) {
-        	addParameter("doubleStyle", findString(doubleCssStyle));
-        }
-        
-        if (doubleHeaderKey != null && doubleHeaderValue != null) {
-        	addParameter("doubleHeaderKey", findString(doubleHeaderKey));
-        	addParameter("doubleHeaderValue", findString(doubleHeaderValue));
-        }
-        
-        if (doubleEmptyOption != null) {
-        	addParameter("doubleEmptyOption", findValue(doubleEmptyOption, Boolean.class));
-        }
-        
-        if (doubleAccesskey != null) {
-        	addParameter("doubleAccesskey", findString(doubleAccesskey));
-        }
-    }
-
-    /**
-     * The second iterable source to populate from.
-     * @s.tagattribute required="true"
-     */
-    public void setDoubleList(String doubleList) {
-        this.doubleList = doubleList;
-    }
-
-    /**
-     * The key expression to use for second list
-     * @s.tagattribute required="false"
-     */
-    public void setDoubleListKey(String doubleListKey) {
-        this.doubleListKey = doubleListKey;
-    }
-
-    /**
-     * The value expression to use for second list
-     * @s.tagattribute required="false"
-     */
-    public void setDoubleListValue(String doubleListValue) {
-        this.doubleListValue = doubleListValue;
-    }
-
-    /**
-     * The name for complete component
-     * @s.tagattribute required="true"
-     */
-    public void setDoubleName(String doubleName) {
-        this.doubleName = doubleName;
-    }
-
-    /**
-     * The value expression for complete component
-     * @s.tagattribute required="false"
-     */
-    public void setDoubleValue(String doubleValue) {
-        this.doubleValue = doubleValue;
-    }
-
-    /**
-     * The form name this component resides in and populates to
-     * @s.tagattribute required="false"
-     */
-    public void setFormName(String formName) {
-        this.formName = formName;
-    }
-    
-    public String getFormName() {
-    	return formName;
-    }
-    
-    /**
-     * The css class for the second list
-     * @s.tagattribute required="false"
-     */
-    public void setDoubleCssClass(String doubleCssClass) {
-    	this.doubleCssClass = doubleCssClass;
-    }
-    
-    public String getDoubleCssClass() {
-    	return doubleCssClass;
-    }
-    
-    /**
-     * The css style for the second list
-     * @s.tagattribute required="false"
-     */
-    public void setDoubleCssStyle(String doubleCssStyle) {
-    	this.doubleCssStyle = doubleCssStyle;
-    }
-    
-    public String getDoubleCssStyle() {
-    	return doubleCssStyle;
-    }
-    
-    /**
-     * The header key for the second list
-     * @s.tagattribute required="false"
-     */
-    public void setDoubleHeaderKey(String doubleHeaderKey) {
-    	this.doubleHeaderKey = doubleHeaderKey;
-    }
-    
-    public String getDoubleHeaderKey() {
-    	return doubleHeaderKey;
-    }
-    
-    /**
-     * The header value for the second list
-     * @s.tagattribute required="false"
-     */
-    public void setDoubleHeaderValue(String doubleHeaderValue) {
-    	this.doubleHeaderValue = doubleHeaderValue;
-    }
-    
-    public String getDoubleHeaderValue() {
-    	return doubleHeaderValue;
-    }
-
-    /**
-     * Decides if the second list will add an empty option
-     * @s.tagattribute required="false"
-     */
-    public void setDoubleEmptyOption(String doubleEmptyOption) {
-    	this.doubleEmptyOption = doubleEmptyOption;
-    }
-    
-    public String getDoubleEmptyOption() {
-    	return this.doubleEmptyOption;
-    }
-
-    
-	public String getDoubleDisabled() {
-		return doubleDisabled;
-	}
-
-	/**
-     * Decides if a disable attribute should be added to the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleDisabled(String doubleDisabled) {
-		this.doubleDisabled = doubleDisabled;
-	}
-
-	public String getDoubleId() {
-		return doubleId;
-	}
-
-	/**
-     * The id of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleId(String doubleId) {
-		this.doubleId = doubleId;
-	}
-
-	public String getDoubleMultiple() {
-		return doubleMultiple;
-	}
-
-	/**
-     * Decides if multiple attribute should be set on the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleMultiple(String doubleMultiple) {
-		this.doubleMultiple = doubleMultiple;
-	}
-
-	public String getDoubleOnblur() {
-		return doubleOnblur;
-	}
-
-	/**
-     * Set the onblur attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnblur(String doubleOnblur) {
-		this.doubleOnblur = doubleOnblur;
-	}
-
-	public String getDoubleOnchange() {
-		return doubleOnchange;
-	}
-
-	/**
-     * Set the onchange attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnchange(String doubleOnchange) {
-		this.doubleOnchange = doubleOnchange;
-	}
-
-	public String getDoubleOnclick() {
-		return doubleOnclick;
-	}
-
-	/**
-     * Set the onclick attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnclick(String doubleOnclick) {
-		this.doubleOnclick = doubleOnclick;
-	}
-
-	public String getDoubleOndblclick() {
-		return doubleOndblclick;
-	}
-
-	/**
-     * Set the ondbclick attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOndblclick(String doubleOndblclick) {
-		this.doubleOndblclick = doubleOndblclick;
-	}
-
-	public String getDoubleOnfocus() {
-		return doubleOnfocus;
-	}
-
-	/**
-     * Set the onfocus attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnfocus(String doubleOnfocus) {
-		this.doubleOnfocus = doubleOnfocus;
-	}
-
-	public String getDoubleOnkeydown() {
-		return doubleOnkeydown;
-	}
-
-	/**
-     * Set the onkeydown attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnkeydown(String doubleOnkeydown) {
-		this.doubleOnkeydown = doubleOnkeydown;
-	}
-
-	public String getDoubleOnkeypress() {
-		return doubleOnkeypress;
-	}
-
-	/**
-     * Set the onkeypress attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnkeypress(String doubleOnkeypress) {
-		this.doubleOnkeypress = doubleOnkeypress;
-	}
-
-	public String getDoubleOnkeyup() {
-		return doubleOnkeyup;
-	}
-
-	/**
-     * Set the onkeyup attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnkeyup(String doubleOnkeyup) {
-		this.doubleOnkeyup = doubleOnkeyup;
-	}
-
-	public String getDoubleOnmousedown() {
-		return doubleOnmousedown;
-	}
-
-	/**
-     * Set the onmousedown attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnmousedown(String doubleOnmousedown) {
-		this.doubleOnmousedown = doubleOnmousedown;
-	}
-
-	public String getDoubleOnmousemove() {
-		return doubleOnmousemove;
-	}
-
-	/**
-     * Set the onmousemove attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnmousemove(String doubleOnmousemove) {
-		this.doubleOnmousemove = doubleOnmousemove;
-	}
-
-	public String getDoubleOnmouseout() {
-		return doubleOnmouseout;
-	}
-
-	/**
-     * Set the onmouseout attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnmouseout(String doubleOnmouseout) {
-		this.doubleOnmouseout = doubleOnmouseout;
-	}
-
-	public String getDoubleOnmouseover() {
-		return doubleOnmouseover;
-	}
-
-	/**
-     * Set the onmouseover attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnmouseover(String doubleOnmouseover) {
-		this.doubleOnmouseover = doubleOnmouseover;
-	}
-
-	public String getDoubleOnmouseup() {
-		return doubleOnmouseup;
-	}
-
-	/**
-     * Set the onmouseup attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnmouseup(String doubleOnmouseup) {
-		this.doubleOnmouseup = doubleOnmouseup;
-	}
-
-	public String getDoubleOnselect() {
-		return doubleOnselect;
-	}
-
-	/**
-     * Set the onselect attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleOnselect(String doubleOnselect) {
-		this.doubleOnselect = doubleOnselect;
-	}
-
-	public String getDoubleSize() {
-		return doubleSize;
-	}
-
-	/**
-     * Set the size attribute of the second list
-     * @s.tagattribute required="false"
-     */
-	public void setDoubleSize(String doubleSize) {
-		this.doubleSize = doubleSize;
-	}
-
-	public String getDoubleList() {
-		return doubleList;
-	}
-
-	/**
-     * Set the list key of the second attribute
-     * @s.tagattribute required="false"
-     */
-	public String getDoubleListKey() {
-		return doubleListKey;
-	}
-
-	public String getDoubleListValue() {
-		return doubleListValue;
-	}
-
-	public String getDoubleName() {
-		return doubleName;
-	}
-
-	public String getDoubleValue() {
-		return doubleValue;
-	}
-	
-	/**
-     * Decides of an empty option is to be inserted in the second list
-     * @s.tagattribute required="false" default="false" type="Boolean"
-     */
-    public void setEmptyOption(String emptyOption) {
-        this.emptyOption = emptyOption;
-    }
-
-    /**
-     * Set the header key of the second list. Must not be empty! "'-1'" and "''" is correct, "" is bad.
-     * @s.tagattribute required="false"
-     */
-    public void setHeaderKey(String headerKey) {
-        this.headerKey = headerKey;
-    }
-
-    /**
-     * Set the header value of the second list
-     * @s.tagattribute required="false"
-     */
-    public void setHeaderValue(String headerValue) {
-        this.headerValue = headerValue;
-    }
-
-    /**
-     * Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute.
-     * @s.tagattribute required="false"
-     */
-    public void setMultiple(String multiple) {
-        // TODO: Passing a Collection may work too?
-        this.multiple = multiple;
-    }
-
-    /**
-     * Size of the element box (# of elements to show)
-     * @s.tagattribute required="false" type="Integer"
-     */
-    public void setSize(String size) {
-        this.size = size;
-    }
-    
-    /**
-     * Set the html accesskey attribute.
-     * @s.tagattribute required="false"
-     */
-    public void setDoubleAccesskey(String doubleAccesskey) {
-    	this.doubleAccesskey = doubleAccesskey;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/DoubleSelect.java b/trunk/core/src/main/java/org/apache/struts2/components/DoubleSelect.java
deleted file mode 100644
index d7d9eba..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/DoubleSelect.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Renders two HTML select elements with second one changing displayed values depending on selected entry of first one.
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:doubleselect label="doubleselect test1" name="menu" list="{'fruit','other'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" /&gt;
- * &lt;s:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruits', 'other':'Other Dishes'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" /&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="doubleselect" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DoubleSelectTag"
- * description="Renders two HTML select elements with second one changing displayed values depending on selected entry of first one."
- */
-public class DoubleSelect extends DoubleListUIBean {
-    final public static String TEMPLATE = "doubleselect";
-
-
-    public DoubleSelect(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        // force the onchange parameter
-        addParameter("onchange", getParameters().get("name") + "Redirect(this.options.selectedIndex)");
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Else.java b/trunk/core/src/main/java/org/apache/struts2/components/Else.java
deleted file mode 100644
index 128e22c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Else.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-import java.util.Map;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * <p>Perform basic condition flow. 'If' tag could be used by itself or with 'Else If' Tag and/or single/multiple 'Else'
- * Tag.</p>
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <!-- START SNIPPET: params -->
- *
- * no params
- *
- * <!-- END SNIPPET: params -->
- *
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- *  &lt;s:if test="%{false}"&gt;
- * 	    &lt;div&gt;Will Not Be Executed&lt;/div&gt;
- *  &lt;/s:if&gt;
- * 	&lt;s:elseif test="%{true}"&gt;
- * 	    &lt;div&gt;Will Be Executed&lt;/div&gt;
- *  &lt;/s:elseif&gt;
- *  &lt;s:else&gt;
- * 	    &lt;div&gt;Will Not Be Executed&lt;/div&gt;
- *  &lt;/s:else&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="else" bodycontent="JSP" description="Else tag"  tld-tag-class="org.apache.struts2.views.jsp.ElseTag"
- */
-public class Else extends Component {
-    public Else(ValueStack stack) {
-        super(stack);
-    }
-
-    public boolean start(Writer writer) {
-        Map context = stack.getContext();
-        Boolean ifResult = (Boolean) context.get(If.ANSWER);
-
-        context.remove(If.ANSWER);
-
-        return !((ifResult == null) || (ifResult.booleanValue()));
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/ElseIf.java b/trunk/core/src/main/java/org/apache/struts2/components/ElseIf.java
deleted file mode 100644
index de49686..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/ElseIf.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * <p>Perform basic condition flow. 'If' tag could be used by itself or with 'Else If' Tag and/or single/multiple 'Else'
- * Tag.</p>
- *
- * <!-- END SNIPPET: javadoc -->
- *
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li>test* (Boolean) - Logic to determined if body of tag is to be displayed</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- *  &lt;s:if test="%{false}"&gt;
- * 	    &lt;div&gt;Will Not Be Executed&lt;/div&gt;
- *  &lt;/s:if&gt;
- * 	&lt;s:elseif test="%{true}"&gt;
- * 	    &lt;div&gt;Will Be Executed&lt;/div&gt;
- *  &lt;/s:elseif&gt;
- *  &lt;s:else&gt;
- * 	    &lt;div&gt;Will Not Be Executed&lt;/div&gt;
- *  &lt;/s:else&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="elseif" tld-body-content="JSP" description="Elseif tag"  tld-tag-class="org.apache.struts2.views.jsp.ElseIfTag"
- */
-public class ElseIf extends Component {
-    public ElseIf(ValueStack stack) {
-        super(stack);
-    }
-
-    protected Boolean answer;
-    protected String test;
-
-    public boolean start(Writer writer) {
-        Boolean ifResult = (Boolean) stack.getContext().get(If.ANSWER);
-        
-        if ((ifResult == null) || (ifResult.booleanValue())) {
-            return false;
-        }
-
-        //make the comparision
-        answer = (Boolean) findValue(test, Boolean.class);
-
-        if (answer == null) {
-            answer = Boolean.FALSE;
-        }
-        if (answer.booleanValue()) {
-            stack.getContext().put(If.ANSWER, answer);
-        }
-        return answer != null && answer.booleanValue();
-    }
-
-    public boolean end(Writer writer, String body) {
-        if (answer == null) {
-            answer = Boolean.FALSE;
-        }
-        if (answer.booleanValue()) {
-            stack.getContext().put(If.ANSWER, answer);
-        }
-        return super.end(writer, "");
-    }
-
-    /**
-     * Expression to determine if body of tag is to be displayed
-     * @s.tagattribute required="true" type="Boolean"
-     */
-    public void setTest(String test) {
-        this.test = test;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/FieldError.java b/trunk/core/src/main/java/org/apache/struts2/components/FieldError.java
deleted file mode 100644
index 72f8111..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/FieldError.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Param.UnnamedParametric;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Render field errors if they exists. Specific layout depends on the particular theme.
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- *    &lt;!-- example 1 --&gt;
- *    &lt;s:fielderror /&gt;
- *
- *    &lt;!-- example 2 --&gt;
- *    &lt;s:fielderror&gt;
- *         &lt;s:param&gt;field1&lt;/s:param&gt;
- *         &lt;s:param&gt;field2&lt;/s:param&gt;
- *    &lt;/s:fielderror&gt;
- *    &lt;s:form .... &gt;>
- *       ....
- *    &lt;/s:form&gt;
- *
- *    OR
- *
- *    &lt;s:fielderror&gt;
- *    		&lt;s:param value="%{'field1'}" /&gt;
- *    		&lt;s:param value="%{'field2'}" /&gt;
- *    &lt;/s:fielderror&gt;
- *    &lt;s:form .... &gt;>
- *       ....
- *    &lt;/s:form&gt;
- *    
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- *
- * <p/> <b>Description</b><p/>
- *
- * 
- * <pre>
- * <!-- START SNIPPET: description -->
- *
- * Example 1: display all field errors<p/> 
- * Example 2: display field errors only for 'field1' and 'field2'<p/>
- *
- * <!-- END SNIPPET: description -->
- * </pre>
- *
- * @s.tag name="fielderror" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.FieldErrorTag"
- * description="Render field error (all or partial depending on param tag nested)if they exists"
- */
-public class FieldError extends UIBean implements UnnamedParametric {
-
-    private List errorFieldNames = new ArrayList();
-
-    public FieldError(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    private static final String TEMPLATE = "fielderror";
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void addParameter(Object value) {
-        if (value != null) {
-            errorFieldNames.add(value.toString());
-        }
-    }
-
-    public List getFieldErrorFieldNames() {
-        return errorFieldNames;
-    }
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/File.java b/trunk/core/src/main/java/org/apache/struts2/components/File.java
deleted file mode 100644
index a1e2e6a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/File.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Renders an HTML file input element.
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:file name="anUploadFile" accept="text/*" /&gt;
- * &lt;s:file name="anohterUploadFIle" accept="text/html,text/plain" /&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="file" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.FileTag"
- * description="Render a file input field"
- */
-public class File extends UIBean {
-    private final static Log log = LogFactory.getLog(File.class);
-
-    final public static String TEMPLATE = "file";
-
-    protected String accept;
-    protected String size;
-
-    public File(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void evaluateParams() {
-        super.evaluateParams();
-
-        Form form = (Form) findAncestor(Form.class);
-        if (form != null) {
-            String encType = (String) form.getParameters().get("enctype");
-            if (!"multipart/form-data".equals(encType)) {
-                // uh oh, this isn't good! Let's warn the developer
-                log.warn("Struts has detected a file upload UI tag (s:file) being used without a form set to enctype 'multipart/form-data'. This is probably an error!");
-            }
-
-            String method = (String) form.getParameters().get("method");
-            if (!"post".equalsIgnoreCase(method)) {
-                // uh oh, this isn't good! Let's warn the developer
-                log.warn("Struts has detected a file upload UI tag (s:file) being used without a form set to method 'POST'. This is probably an error!");
-            }
-        }
-
-        if (accept != null) {
-            addParameter("accept", findString(accept));
-        }
-
-        if (size != null) {
-            addParameter("size", findString(size));
-        }
-    }
-
-    /**
-     * HTML accept attribute to indicate accepted file mimetypes
-     * @s.tagattribute required="false"
-     */
-    public void setAccept(String accept) {
-        this.accept = accept;
-    }
-
-    /**
-     * HTML size attribute
-     * @s.tagattribute required="false" type="Integer"
-     */
-    public void setSize(String size) {
-        this.size = size;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Form.java b/trunk/core/src/main/java/org/apache/struts2/components/Form.java
deleted file mode 100644
index 996aa59..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Form.java
+++ /dev/null
@@ -1,509 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.dispatcher.mapper.ActionMapperFactory;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-import org.apache.struts2.portlet.context.PortletActionContext;
-import org.apache.struts2.portlet.util.PortletUrlHelper;
-import org.apache.struts2.views.util.UrlHelper;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.RuntimeConfiguration;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.InterceptorMapping;
-import com.opensymphony.xwork2.interceptor.MethodFilterInterceptorUtil;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.validator.ActionValidatorManagerFactory;
-import com.opensymphony.xwork2.validator.FieldValidator;
-import com.opensymphony.xwork2.validator.ValidationInterceptor;
-import com.opensymphony.xwork2.validator.Validator;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p/>
- * Renders HTML an input form.<p/>
- * <p/>
- * The remote form allows the form to be submitted without the page being refreshed. The results from the form
- * can be inserted into any HTML element on the page.<p/>
- * <p/>
- * NOTE:<p/>
- * The order / logic in determining the posting url of the generated HTML form is as follows:-
- * <ol>
- * <li>
- * If the action attribute is not specified, then the current request will be used to
- * determine the posting url
- * </li>
- * <li>
- * If the action is given, Struts will try to obtain an ActionConfig. This will be
- * successfull if the action attribute is a valid action alias defined struts.xml.
- * </li>
- * <li>
- * If the action is given and is not an action alias defined in struts.xml, Struts
- * will used the action attribute as if it is the posting url, separting the namespace
- * from it and using UrlHelper to generate the final url.
- * </li>
- * </ol>
- * <p/>
- * <!-- END SNIPPET: javadoc -->
- * <p/>
- * <p/> <b>Examples</b>
- * <p/>
- * <pre>
- * <!-- START SNIPPET: example -->
- * <p/>
- * &lt;s:form ... /&gt;
- * <p/>
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="form" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.FormTag"
- * description="Renders an input form"
- */
-public class Form extends ClosingUIBean {
-    public static final String OPEN_TEMPLATE = "form";
-    public static final String TEMPLATE = "form-close";
-
-    private int sequence = 0;
-    
-    protected String onsubmit;
-    protected String action;
-    protected String target;
-    protected String enctype;
-    protected String method;
-    protected String namespace;
-    protected String validate;
-    protected String portletMode;
-    protected String windowState;
-    protected String acceptcharset;
-
-    public Form(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected boolean evaluateNameValue() {
-        return false;
-    }
-
-    public String getDefaultOpenTemplate() {
-        return OPEN_TEMPLATE;
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-
-    /*
-    * Revised for Portlet actionURL as form action, and add wwAction as hidden
-    * field. Refer to template.simple/form.vm
-    */
-    protected void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        //boolean isAjax = "ajax".equalsIgnoreCase(this.theme);
-
-        if (validate != null) {
-            addParameter("validate", findValue(validate, Boolean.class));
-        }
-
-        // calculate the action and namespace
-        /*String action = null;
-        if (this.action != null) {
-            // if it isn't specified, we'll make somethig up
-            action = findString(this.action);
-        }
-
-        if (Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest()) {
-            evaluateExtraParamsPortletRequest(namespace, action);
-        } else {
-            String namespace = determineNamespace(this.namespace, getStack(),
-                    request);
-            evaluateExtraParamsServletRequest(action, namespace, isAjax);
-        }*/
-
-        if (onsubmit != null) {
-            addParameter("onsubmit", findString(onsubmit));
-        }
-
-        if (target != null) {
-            addParameter("target", findString(target));
-        }
-
-        if (enctype != null) {
-            addParameter("enctype", findString(enctype));
-        }
-
-        if (method != null) {
-            addParameter("method", findString(method));
-        }
-
-        if (acceptcharset != null) {
-            addParameter("acceptcharset", findString(acceptcharset));
-        }
-
-        // keep a collection of the tag names for anything special the templates might want to do (such as pure client
-        // side validation)
-        if (!parameters.containsKey("tagNames")) {
-            // we have this if check so we don't do this twice (on open and close of the template)
-            addParameter("tagNames", new ArrayList());
-        }
-    }
-    
-    /**
-     * Form component determine the its HTML element id as follows:-
-     * <ol>
-     *    <li>if an 'id' attribute is specified.</li>
-     *    <li>if an 'action' attribute is specified, it will be used as the id.</li>
-     * </ol>
-     */
-    protected void populateComponentHtmlId(Form form) {
-    	boolean isAjax = "ajax".equalsIgnoreCase(this.theme);
-    	
-    	String action = null;
-        if (this.action != null) {
-            // if it isn't specified, we'll make somethig up
-            action = findString(this.action);
-        }
-
-        if (id != null) {
-        	addParameter("id", escape(id));
-        }
-        if (Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest()) {
-            evaluateExtraParamsPortletRequest(namespace, action);
-        } else {
-            String namespace = determineNamespace(this.namespace, getStack(),
-                    request);
-            evaluateExtraParamsServletRequest(action, namespace, isAjax);
-        }
-    }
-
-    /**
-     * @param isAjax
-     * @param namespace
-     * @param action
-     */
-    private void evaluateExtraParamsServletRequest(String action, String namespace, boolean isAjax) {
-        if (action == null) {
-            // no action supplied? ok, then default to the current request (action or general URL)
-            ActionInvocation ai = (ActionInvocation) getStack().getContext().get(ActionContext.ACTION_INVOCATION);
-            if (ai != null) {
-                action = ai.getProxy().getActionName();
-                namespace = ai.getProxy().getNamespace();
-            } else {
-                // hmm, ok, we need to just assume the current URL cut down
-                String uri = request.getRequestURI();
-                action = uri.substring(uri.lastIndexOf('/'));
-            }
-        }
-
-        String actionMethod = "";
-        // FIXME: our implementation is flawed - the only concept of ! should be in DefaultActionMapper
-        boolean allowDynamicMethodCalls = "true".equals(Settings.get(StrutsConstants.STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION));
-
-        // handle "name!method" convention.
-        if (allowDynamicMethodCalls) {
-            if (action.indexOf("!") != -1) {
-                int endIdx = action.lastIndexOf("!");
-                actionMethod = action.substring(endIdx + 1, action.length());
-                action = action.substring(0, endIdx);
-            }
-        }
-
-        Configuration config = Dispatcher.getInstance().getConfigurationManager().getConfiguration();
-        final ActionConfig actionConfig = config.getRuntimeConfiguration().getActionConfig(namespace, action);
-        String actionName = action;
-        if (actionConfig != null) {
-
-            ActionMapping mapping = new ActionMapping(action, namespace, actionMethod, parameters);
-            String result = UrlHelper.buildUrl(ActionMapperFactory.getMapper().getUriFromActionMapping(mapping), request, response, null);
-            addParameter("action", result);
-
-            // let's try to get the actual action class and name
-            // this can be used for getting the list of validators
-            addParameter("actionName", actionName);
-            try {
-                Class clazz = ObjectFactory.getObjectFactory().getClassInstance(actionConfig.getClassName());
-                addParameter("actionClass", clazz);
-            } catch (ClassNotFoundException e) {
-                // this is OK, we'll just move on
-            }
-
-            addParameter("namespace", namespace);
-
-            // if the name isn't specified, use the action name
-            if (name == null) {
-                addParameter("name", action);
-            }
-
-            // if the id isn't specified, use the action name
-            if (id == null) {
-                addParameter("id", action);
-            }
-        } else if (action != null) {
-            // Since we can't find an action alias in the configuration, we just assume
-            // the action attribute supplied is the path to be used as the uri this
-            // form is submitting to.
-
-            String result = UrlHelper.buildUrl(action, request, response, null);
-            addParameter("action", result);
-
-            // namespace: cut out anything between the start and the last /
-            int slash = result.lastIndexOf('/');
-            if (slash != -1) {
-                addParameter("namespace", result.substring(0, slash));
-            } else {
-                addParameter("namespace", "");
-            }
-
-            // name/id: cut out anything between / and . should be the id and name
-            if (id == null) {
-                slash = result.lastIndexOf('/');
-                int dot = result.indexOf('.', slash);
-                if (dot != -1) {
-                    id = result.substring(slash + 1, dot);
-                } else {
-                    id = result.substring(slash + 1);
-                }
-                addParameter("id", escape(id));
-            }
-        }
-
-        // WW-1284
-        // evaluate if client-side js is to be enabled. (if validation interceptor 
-        // does allow validation eg. method is not filtered out)
-        evaluateClientSideJsEnablement(actionName, namespace, actionMethod);
-    }
-
-    private void evaluateClientSideJsEnablement(String actionName, String namespace, String actionMethod) {
-
-        // Only evaluate if Client-Side js is to be enable when validate=true
-        Boolean validate = (Boolean) getParameters().get("validate");
-        if (validate != null && validate.booleanValue()) {
-
-            addParameter("performValidation", Boolean.FALSE);
-
-            RuntimeConfiguration runtimeConfiguration = Dispatcher.getInstance().getConfigurationManager().getConfiguration().getRuntimeConfiguration();
-            ActionConfig actionConfig = runtimeConfiguration.getActionConfig(namespace, actionName);
-
-            if (actionConfig != null) {
-                List interceptors = actionConfig.getInterceptors();
-                for (Iterator i = interceptors.iterator(); i.hasNext();) {
-                    InterceptorMapping interceptorMapping = (InterceptorMapping) i.next();
-                    if (ValidationInterceptor.class.isInstance(interceptorMapping.getInterceptor())) {
-                        ValidationInterceptor validationInterceptor = (ValidationInterceptor) interceptorMapping.getInterceptor();
-
-                        Set excludeMethods = validationInterceptor.getExcludeMethodsSet();
-                        Set includeMethods = validationInterceptor.getIncludeMethodsSet();
-
-                        if (MethodFilterInterceptorUtil.applyMethod(excludeMethods, includeMethods, actionMethod)) {
-                            addParameter("performValidation", Boolean.TRUE);
-                        }
-                        return;
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Constructs the action url adapted to a portal environment.
-     *
-     * @param action The action to create the URL for.
-     */
-    private void evaluateExtraParamsPortletRequest(String namespace, String action) {
-
-        if (this.action != null) {
-            // if it isn't specified, we'll make somethig up
-            action = findString(this.action);
-        }
-
-        String type = "action";
-        if (StringUtils.isNotEmpty(method)) {
-            if ("GET".equalsIgnoreCase(method.trim())) {
-                type = "render";
-            }
-        }
-        if (action != null) {
-            String result = PortletUrlHelper.buildUrl(action, namespace,
-                    getParameters(), type, portletMode, windowState);
-            addParameter("action", result);
-
-            // namespace: cut out anything between the start and the last /
-            int slash = result.lastIndexOf('/');
-            if (slash != -1) {
-                addParameter("namespace", result.substring(0, slash));
-            } else {
-                addParameter("namespace", "");
-            }
-
-            // name/id: cut out anything between / and . should be the id and
-            // name
-            if (id == null) {
-                slash = action.lastIndexOf('/');
-                int dot = action.indexOf('.', slash);
-                if (dot != -1) {
-                    id = action.substring(slash + 1, dot);
-                } else {
-                    id = action.substring(slash + 1);
-                }
-                addParameter("id", escape(id));
-            }
-        }
-
-    }
-
-    public List getValidators(String name) {
-        Class actionClass = (Class) getParameters().get("actionClass");
-        if (actionClass == null) {
-            return Collections.EMPTY_LIST;
-        }
-
-        List all = ActionValidatorManagerFactory.getInstance().getValidators(actionClass, (String) getParameters().get("actionName"));
-        List validators = new ArrayList();
-        for (Iterator iterator = all.iterator(); iterator.hasNext();) {
-            Validator validator = (Validator) iterator.next();
-            if (validator instanceof FieldValidator) {
-                FieldValidator fieldValidator = (FieldValidator) validator;
-                if (fieldValidator.getFieldName().equals(name)) {
-                    validators.add(fieldValidator);
-                }
-            }
-        }
-
-        return validators;
-    }
-    
-    /**
-     * Get a incrementing sequence unique to this <code>Form</code> component.
-     * It is used by <code>Form</code> component's child that might need a 
-     * sequence to make them unique.
-     * 
-     * @return int
-     */
-    protected int getSequence() {
-    	return sequence++;
-    }
-
-
-    /**
-     * HTML onsubmit attribute
-     *
-     * @s.tagattribute required="false"
-     */
-    public void setOnsubmit(String onsubmit) {
-        this.onsubmit = onsubmit;
-    }
-
-    /**
-     * Set action nane to submit to, without .action suffix
-     *
-     * @s.tagattribute required="false" default="current action"
-     */
-    public void setAction(String action) {
-        this.action = action;
-    }
-
-    /**
-     * HTML form target attribute
-     *
-     * @s.tagattribute required="false"
-     */
-    public void setTarget(String target) {
-        this.target = target;
-    }
-
-    /**
-     * HTML form enctype attribute
-     *
-     * @s.tagattribute required="false"
-     */
-    public void setEnctype(String enctype) {
-        this.enctype = enctype;
-    }
-
-    /**
-     * HTML form method attribute
-     *
-     * @s.tagattribute required="false"
-     */
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-    /**
-     * namespace for action to submit to
-     *
-     * @s.tagattribute required="false" default="current namespace"
-     */
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    /**
-     * Whether client side/remote validation should be performed. Only useful with theme xhtml/ajax
-     *
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setValidate(String validate) {
-        this.validate = validate;
-    }
-
-    /**
-     * The portlet mode to display after the form submit
-     *
-     * @s.tagattribute required="false"
-     */
-    public void setPortletMode(String portletMode) {
-        this.portletMode = portletMode;
-    }
-
-    /**
-     * The window state to display after the form submit
-     *
-     * @s.tagattribute required="false"
-     */
-    public void setWindowState(String windowState) {
-        this.windowState = windowState;
-    }
-
-    /**
-     * The accepted charsets for this form. The values may be comma or blank delimited.
-     *
-     * @s.tagattribute required="false"
-     */
-    public void setAcceptcharset(String acceptcharset) {
-        this.acceptcharset = acceptcharset;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java b/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java
deleted file mode 100644
index c9cc084..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * FormButton.
- */
-public abstract class FormButton extends UIBean {
-
-    static final String BUTTONTYPE_INPUT = "input";
-    static final String BUTTONTYPE_BUTTON = "button";
-    static final String BUTTONTYPE_IMAGE = "image";
-
-    protected String action;
-    protected String method;
-    protected String align;
-    protected String type;
-
-    public FormButton(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    //public void evaluateParams() {
-    public void evaluateExtraParams() {
-    	super.evaluateExtraParams();
-        if (align == null) {
-            align = "right";
-        }
-
-        String submitType = BUTTONTYPE_INPUT;
-        if (type != null && (BUTTONTYPE_BUTTON.equalsIgnoreCase(type) || (supportsImageType() && BUTTONTYPE_IMAGE.equalsIgnoreCase(type))))
-        {
-            submitType = type;
-        }
-
-        //super.evaluateParams();
-
-        addParameter("type", submitType);
-
-        if (!BUTTONTYPE_INPUT.equals(submitType) && (label == null)) {
-            addParameter("label", getParameters().get("nameValue"));
-        }
-
-        if (action != null || method != null) {
-            String name;
-
-            if (action != null) {
-                name = "action:" + findString(action);
-
-                if (method != null) {
-                    name += "!" + findString(method);
-                }
-            } else {
-                name = "method:" + findString(method);
-            }
-
-            addParameter("name", name);
-        }
-
-        addParameter("align", findString(align));
-
-    }
-    
-    /**
-     * Override UIBean's implementation, such that component Html id is determined
-     * in the following order :-
-     * <ol>
-     * 	 <li>This component id attribute</li>
-     *   <li>[containing_form_id]_[this_component_name]</li>
-     *   <li>[containing_form_id]_[this_component_action]_[this_component_method]</li>
-     *   <li>[containing_form_id]_[this_component_method]</li>
-     *   <li>[this_component_name]</li>
-     *   <li>[this_component_action]_[this_component_method]</li>
-     *   <li>[this_component_method]</li>
-     *   <li>[an increasing sequential number unique to the form starting with 0]</li>
-     * </ol>
-     */
-    protected void populateComponentHtmlId(Form form) {
-        String _tmp_id = "";
-        if (id != null) {
-            // this check is needed for backwards compatibility with 2.1.x
-            if (altSyntax()) {
-            	_tmp_id = findString(id);
-            } else {
-            	_tmp_id = id;
-            }
-        }
-        else {
-        	if (form != null && form.getParameters().get("id") != null) {
-				_tmp_id = _tmp_id + form.getParameters().get("id").toString() + "_";
-        	}
-			if (name != null) {
-				_tmp_id = _tmp_id + escape(name);
-			} else if (action != null || method != null){
-				if (action != null) {
-					_tmp_id = _tmp_id + escape(action);
-				}
-				if (method != null) {
-					_tmp_id = _tmp_id + "_" + escape(method);
-				}
-			} else {
-				// if form is null, this component is used, without a form, i guess
-				// there's not much we could do then.
-				if (form != null) {
-					_tmp_id = _tmp_id + form.getSequence();
-				}
-			}
-        }
-		addParameter("id", _tmp_id);
-    }
-
-    /**
-	 * Indicate whether the concrete button supports the type "image".
-	 * 
-	 * @return <tt>true</tt> if type image is supported.
-	 */
-    protected abstract boolean supportsImageType();
-
-    /**
-     * Set action attribute.
-     *
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setAction(String action) {
-        this.action = action;
-    }
-
-    /**
-     * Set method attribute.
-     *
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-    /**
-     * HTML align attribute.
-     *
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setAlign(String align) {
-        this.align = align;
-    }
-
-    /**
-     * The type of submit to use. Valid values are <i>input</i>, <i>button</i> and <i>image</i>.
-     *
-     * @s.tagattribute required="false" type="String" default="input"
-     */
-    public void setType(String type) {
-        this.type = type;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/GenericUIBean.java b/trunk/core/src/main/java/org/apache/struts2/components/GenericUIBean.java
deleted file mode 100644
index 0221742..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/GenericUIBean.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.util.ContainUtil;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * 
- * Renders an custom UI widget using the specified templates. Additional objects can be passed in to the template
- * using the param tags.<p/>
- * 
- * <b>Freemarker:</b><p/>
- * Objects provided can be retrieve from within the template via $parameters._paramname_.<p/>
- * 
- * <b>Jsp:</b><p/>
- * Objects provided can be retrieve from within the template via &lt;s:property value="%{parameters._paramname_}" /&gt;<p/>
- *
- *
- * In the bottom JSP and Velocity samples, two parameters are being passed in to the component. From within the
- * component, they can be accessed as:- <p/>
- * 
- * <b>Freemarker:</b><p/>
- * $parameters.get('key1') and $parameters.get('key2') or $parameters.key1 and $parameters.key2<p/>
- * 
- * <b>Jsp:</b><p/>
- * &lt;s:property value="%{parameters.key1}" /&gt; and &lt;s:property value="%{'parameters.key2'}" /&gt; or
- * &lt;s:property value="%{parameters.get('key1')}" /&gt; and &lt;s:property value="%{parameters.get('key2')}" /&gt;<p/>
- *
- * Currently, your custom UI components can be written in Velocity, JSP, or Freemarker, and the correct rendering
- * engine will be found based on file extension.<p/>
- *
- * <b>Remember:</b> the value params will always be resolved against the ValueStack so if you mean to pass a
- * string literal to your component, make sure to wrap it in quotes i.e. value="'value1'" otherwise, the the value
- * stack will search for an Object on the stack with a method of getValue1(). (now that i've written this, i'm not
- * entirely sure this is the case. i should verify this manana)<p/>
- * 
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * JSP
- *     &lt;s:component template="/my/custom/component.vm"/&gt;
- *     
- *       or
- *
- *     &lt;s:component template="/my/custom/component.vm"&gt;
- *       &lt;s:param name="key1" value="value1"/&gt;
- *       &lt;s:param name="key2" value="value2"/&gt;
- *     &lt;/s:component&gt;
- *
- * Velocity
- *     #s-component( "template=/my/custom/component.vm" )
- *
- *       or
- *
- *     #s-component( "template=/my/custom/component.vm" )
- *       #s-param( "name=key1" "value=value1" )
- *       #s-param( "name=key2" "value=value2" )
- *     #end
- *     
- * Freemarker
- *    &lt;@s..component template="/my/custom/component.ftl" />
- *    
- *      or
- *      
- *    &lt;@s..component template="/my/custom/component.ftl"&gt;
- *       &lt;@s..param name="key1" value="%{'value1'}" /&gt;
- *       &lt;@s..param name="key2" value="%{'value2'}" /&gt;
- *    &lt;/@s..component&gt;
- *     
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * <p/>
- * 
- * <b>NOTE:</b>
- * <!-- START SNIPPET: note -->
- * 
- * If Jsp is used as the template, the jsp template itself must lie within the 
- * webapp itself and not the classpath. Unlike Freemarker or Velocity, JSP template
- * could not be picked up from the classpath.
- * 
- * <!-- END SNIPPET: note -->
- *
- * @s.tag name="component" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.ComponentTag"
- * description="Render a custom ui widget"
- */
-public class GenericUIBean extends UIBean {
-    private final static String TEMPLATE = "empty";
-
-    public GenericUIBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    public boolean contains(Object obj1, Object obj2) {
-        return ContainUtil.contains(obj1, obj2);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Head.java b/trunk/core/src/main/java/org/apache/struts2/components/Head.java
deleted file mode 100644
index 1c29db8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Head.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Renders parts of the HEAD section for an HTML file. This is useful as some themes require certain CSS and JavaScript
- * includes.<p/>
- *
- * If, for example, your page has ajax components integrated, without having the default theme set to ajax, you might
- * want to use the head tag with <b>theme="ajax"</b> so that the typical ajax header setup will be included in the
- * page.<p/>
- *
- * The tag also includes the option to set a custom datepicker theme if needed. See calendarcss parameter for
- * description for details.<p/>
- *
- * If you use the ajax theme you can turn a debug flag on by setting the debug parameter to <tt>true</tt>.
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example1 -->
- * &lt;head&gt;
- *   &lt;title&gt;My page&lt;/title&gt;
- *   &lt;s:head/&gt;
- * &lt;/head&gt;
- * <!-- END SNIPPET: example1 -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: example2 -->
- * &lt;head&gt;
- *   &lt;title&gt;My page&lt;/title&gt;
- *   &lt;s:head theme="ajax" calendarcss="calendar-green"/&gt;
- * &lt;/head&gt;
- * <!-- END SNIPPET: example2 -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: example3 -->
- * &lt;head&gt;
- *   &lt;title&gt;My page&lt;/title&gt;
- *   &lt;s:head theme="ajax" debug="true"/&gt;
- * &lt;/head&gt;
- * <!-- END SNIPPET: example3 -->
- * </pre>
- *
- * @s.tag name="head" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.ui.HeadTag"
- * description="Render a chunk of HEAD for your HTML file"
- */
-public class Head extends UIBean {
-    public static final String TEMPLATE = "head";
-
-    private String calendarcss = "calendar-blue.css";
-    private boolean debug;
-
-    public Head(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void evaluateParams() {
-        super.evaluateParams();
-
-        if (calendarcss != null) {
-            String css = findString(calendarcss);
-            if (css != null && css.trim().length() > 0) {
-                if (css.lastIndexOf(".css") < 0) {
-                    addParameter("calendarcss", css + ".css");
-                } else {
-                    addParameter("calendarcss", css);
-                }
-            }
-        }
-
-        addParameter("encoding", Settings.get(StrutsConstants.STRUTS_I18N_ENCODING));
-        addParameter("debug", Boolean.valueOf(debug).toString());
-    }
-
-    public String getCalendarcss() {
-        return calendarcss;
-    }
-
-    /**
-     * The jscalendar css theme to use" default="calendar-blue.css
-     * @s.tagattribute required="false"
-     */
-    public void setCalendarcss(String calendarcss) {
-        this.calendarcss = calendarcss;
-    }
-
-    public boolean isDebug() {
-        return debug;
-    }
-
-    /**
-     * Set to true to enable debugging mode for AJAX themes
-     * @s.tagattribute required="false"
-     */
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-    }
-
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Hidden.java b/trunk/core/src/main/java/org/apache/struts2/components/Hidden.java
deleted file mode 100644
index 3d1f1c9..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Hidden.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Renders an HTML input element of type hidden, populated by the specified property from the ValueStack.
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;-- example one --&gt;
- * &lt;s:hidden name="foo" /&gt;
- * &lt;-- example two --&gt;
- * &lt;s:hidden name="foo" value="bar" /&gt;
- *
- * Example One Resulting HTML (if foo evaluates to bar):
- * &lt;input type="hidden" name="foo" value="bar" /&gt;
- * Example Two Resulting HTML (if getBar method of the action returns 'bar')
- * &lt;input type="hidden" name="foo" value="bar" /&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="hidden" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.HiddenTag"
- * description="Render a hidden input field"
-  */
-public class Hidden extends UIBean {
-    final public static String TEMPLATE = "hidden";
-
-    public Hidden(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/I18n.java b/trunk/core/src/main/java/org/apache/struts2/components/I18n.java
deleted file mode 100644
index 8320521..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/I18n.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-import org.apache.struts2.StrutsException;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.LocaleProvider;
-import com.opensymphony.xwork2.TextProviderSupport;
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * 
- * Gets a resource bundle and place it on the value stack. This allows
- * the text tag to access messages from any bundle, and not just the bundle
- * associated with the current action.
- * 
- * <!-- END SNIPPET: javadoc -->
- * 
- * <p/>
- * 
- * <!-- START SNIPPET: params-->
- * 
- * <ul>
- * 		<li>name* - the resource bundle's name (eg foo/bar/customBundle)</li>
- * </ul>
- * 
- * <!-- END SNIPPET: params -->
- * 
- * <p/>
- * 
- * Example:
- * 
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;s:i18n name="myCustomBundle"&gt;
- *    The i18n value for key aaa.bbb.ccc in myCustomBundle is &lt;s:property value="text('aaa.bbb.ccc')" /&gt;
- * &lt;/s:i18n&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * 
- * <pre>
- * <!-- START SNIPPET: i18nExample -->
- * 
- * &lt;s:i18n name="some.package.bundle" &gt;
- *      &lt;s:text name="some.key" /&gt;
- * &lt;/s:i18n&gt;
- * 
- * <!-- END SNIPPET: i18nExample -->
- * </pre>
- * 
- * @s.tag name="i18n" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.I18nTag"
- * description="Get a resource bundle and place it on the value stack"
- */
-public class I18n extends Component {
-    protected boolean pushed;
-    protected String name;
-
-    public I18n(ValueStack stack) {
-        super(stack);
-    }
-
-    public boolean start(Writer writer) {
-        boolean result = super.start(writer);
-
-        try {
-            String name = this.findString(this.name, "name", "Resource bundle name is required. Example: foo or foo_en");
-            ResourceBundle bundle = (ResourceBundle) findValue("texts('" + name + "')");
-
-            if (bundle == null) {
-                bundle = LocalizedTextUtil.findResourceBundle(name, (Locale) getStack().getContext().get(ActionContext.LOCALE));
-            }
-
-            if (bundle != null) {
-                final Locale locale = (Locale) getStack().getContext().get(ActionContext.LOCALE);
-                getStack().push(new TextProviderSupport(bundle, new LocaleProvider() {
-                    public Locale getLocale() {
-                        return locale;
-                    }
-                }));
-                pushed = true;
-            }
-        } catch (Exception e) {
-            String msg = "Could not find the bundle " + name;
-            throw new StrutsException(msg, e);
-        }
-
-        return result;
-    }
-
-    public boolean end(Writer writer, String body) {
-        if (pushed) {
-            getStack().pop();
-        }
-
-        return super.end(writer, body);
-    }
-
-    /**
-     * Name of ressource bundle to use (eg foo/bar/customBundle)
-     * @s.tagattribute required="true" default="String"
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/If.java b/trunk/core/src/main/java/org/apache/struts2/components/If.java
deleted file mode 100644
index 3232228..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/If.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * <p>Perform basic condition flow. 'If' tag could be used by itself or
- * with 'Else If' Tag and/or single/multiple 'Else' Tag.</p>
- *
- * <!-- END SNIPPET: javadoc -->
- *
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- *  <li>test* (Boolean) - Logic to determined if body of tag is to be displayed</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- *  &lt;s:if test="%{false}"&gt;
- *	    &lt;div&gt;Will Not Be Executed&lt;/div&gt;
- *  &lt;/s:if&gt;
- * 	&lt;s:elseif test="%{true}"&gt;
- *	    &lt;div&gt;Will Be Executed&lt;/div&gt;
- *  &lt;s:else&gt;
- *  &lt;/s:elseif&gt;
- *	    &lt;div&gt;Will Not Be Executed&lt;/div&gt;
- *  &lt;/s:else&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @see Else
- * @see ElseIf
- *
- * @s.tag name="if" tld-body-content="JSP" description="If tag" tld-tag-class="org.apache.struts2.views.jsp.IfTag"
- */
-public class If extends Component {
-    public static final String ANSWER = "struts.if.answer";
-
-    Boolean answer;
-    String test;
-
-    /**
-     * Expression to determine if body of tag is to be displayed
-     * @s.tagattribute required="true" type="Boolean"
-     */
-    public void setTest(String test) {
-        this.test = test;
-    }
-
-    public If(ValueStack stack) {
-        super(stack);
-    }
-
-    public boolean start(Writer writer) {
-        answer = (Boolean) findValue(test, Boolean.class);
-
-        if (answer == null) {
-            answer = Boolean.FALSE;
-        }
-        stack.getContext().put(ANSWER, answer);
-        return answer.booleanValue();
-    }
-
-    public boolean end(Writer writer, String body) {
-    	stack.getContext().put(ANSWER, answer);
-        return super.end(writer, body);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Include.java b/trunk/core/src/main/java/org/apache/struts2/components/Include.java
deleted file mode 100644
index 0d2099e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Include.java
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-import java.util.StringTokenizer;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.RequestUtils;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.util.FastByteArrayOutputStream;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p>Include a servlet's output (result of servlet or a JSP page).</p>
- * <p>Note: Any additional params supplied to the included page are <b>not</b> accessible within the rendered page
- * through the &lt;s:property...&gt; tag!</p>
- * <!-- END SNIPPET: javadoc -->
- *
- *
- * <!-- START SNIPPET: params -->
- * <ul>
- * 		<li>value* (String) - jsp page to be included</li>
- * </ul>
- * <!-- END SNIPPET: params -->
- *
- *
- * <p/> <b>Examples</b>
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;-- One: --&gt;
- * &lt;s:include value="myJsp.jsp" /&gt;
- *
- * &lt;-- Two: --&gt;
- * &lt;s:include value="myJsp.jsp"&gt;
- *    &lt;s:param name="param1" value="value2" /&gt;
- *    &lt;s:param name="param2" value="value2" /&gt;
- * &lt;/s:include&gt;
- *
- * &lt;-- Three: --&gt;
- * &lt;s:include value="myJsp.jsp"&gt;
- *    &lt;s:param name="param1"&gt;value1&lt;/s:param&gt;
- *    &lt;s:param name="param2"&gt;value2&lt;s:param&gt;
- * &lt;/s:include&gt;
- * <!-- END SNIPPET: example -->
- *
- * <!-- START SNIPPET: exampledescription -->
- * Example one - do an include myJsp.jsp page
- * Example two - do an include to myJsp.jsp page with parameters param1=value1 and param2=value2
- * Example three - do an include to myJsp.jsp page with parameters param1=value1 and param2=value2
- * <!-- END SNIPPET: exampledescription -->
- * </pre>
- *
- * @s.tag name="include" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.IncludeTag"
- * description="Include a servlet's output (result of servlet or a JSP page)"
- */
-public class Include extends Component {
-
-	private static final Log _log = LogFactory.getLog(Include.class);
-
-    private static String encoding;
-    private static boolean encodingDefined = true;
-
-    protected String value;
-    private HttpServletRequest req;
-    private HttpServletResponse res;
-
-    public Include(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack);
-        this.req = req;
-        this.res = res;
-    }
-
-    public boolean end(Writer writer, String body) {
-        String page = findString(value, "value", "You must specify the URL to include. Example: /foo.jsp");
-        StringBuffer urlBuf = new StringBuffer();
-
-        // Add URL
-        urlBuf.append(page);
-
-        // Add request parameters
-        if (parameters.size() > 0) {
-            urlBuf.append('?');
-
-            String concat = "";
-
-            // Set parameters
-            Iterator iter = parameters.entrySet().iterator();
-
-            while (iter.hasNext()) {
-                Map.Entry entry = (Map.Entry) iter.next();
-                Object name = entry.getKey();
-                List values = (List) entry.getValue();
-
-                for (int i = 0; i < values.size(); i++) {
-                    urlBuf.append(concat);
-                    urlBuf.append(name);
-                    urlBuf.append('=');
-
-                    try {
-                        urlBuf.append(URLEncoder.encode(values.get(i).toString(), "UTF-8"));
-                    } catch (Exception e) {
-                    	_log.warn("unable to url-encode "+values.get(i).toString()+", it will be ignored");
-                    }
-
-                    concat = "&";
-                }
-            }
-        }
-
-        String result = urlBuf.toString();
-
-        // Include
-        try {
-            include(result, writer, req, res);
-        } catch (Exception e) {
-            LogFactory.getLog(getClass()).warn("Exception thrown during include of " + result, e);
-        }
-
-        return super.end(writer, body);
-    }
-
-    /**
-     * The jsp/servlet output to include
-     * @s.tagattribute required="true" type="String"
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public static String getContextRelativePath(ServletRequest request, String relativePath) {
-        String returnValue;
-
-        if (relativePath.startsWith("/")) {
-            returnValue = relativePath;
-        } else if (!(request instanceof HttpServletRequest)) {
-            returnValue = relativePath;
-        } else {
-            HttpServletRequest hrequest = (HttpServletRequest) request;
-            String uri = (String) request.getAttribute("javax.servlet.include.servlet_path");
-
-            if (uri == null) {
-                uri = RequestUtils.getServletPath(hrequest);
-            }
-
-            returnValue = uri.substring(0, uri.lastIndexOf('/')) + '/' + relativePath;
-        }
-
-        // .. is illegal in an absolute path according to the Servlet Spec and will cause
-        // known problems on Orion application servers.
-        if (returnValue.indexOf("..") != -1) {
-            Stack stack = new Stack();
-            StringTokenizer pathParts = new StringTokenizer(returnValue.replace('\\', '/'), "/");
-
-            while (pathParts.hasMoreTokens()) {
-                String part = pathParts.nextToken();
-
-                if (!part.equals(".")) {
-                    if (part.equals("..")) {
-                        stack.pop();
-                    } else {
-                        stack.push(part);
-                    }
-                }
-            }
-
-            StringBuffer flatPathBuffer = new StringBuffer();
-
-            for (int i = 0; i < stack.size(); i++) {
-                flatPathBuffer.append("/").append(stack.elementAt(i));
-            }
-
-            returnValue = flatPathBuffer.toString();
-        }
-
-        return returnValue;
-    }
-
-    public void addParameter(String key, Object value) {
-        // don't use the default implementation of addParameter,
-        // instead, include tag requires that each parameter be a list of objects,
-        // just like the HTTP servlet interfaces are (String[]) 
-        if (value != null) {
-            List currentValues = (List) parameters.get(key);
-
-            if (currentValues == null) {
-                currentValues = new ArrayList();
-                parameters.put(key, currentValues);
-            }
-
-            currentValues.add(value);
-        }
-    }
-
-    public static void include(String aResult, Writer writer, ServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        String resourcePath = getContextRelativePath(request, aResult);
-        RequestDispatcher rd = request.getRequestDispatcher(resourcePath);
-
-        if (rd == null) {
-            throw new ServletException("Not a valid resource path:" + resourcePath);
-        }
-
-        PageResponse pageResponse = new PageResponse(response);
-
-        // Include the resource
-        rd.include((HttpServletRequest) request, pageResponse);
-
-        //write the response back to the JspWriter, using the correct encoding.
-        String encoding = getEncoding();
-
-        if (encoding != null) {
-            //use the encoding specified in the property file
-            pageResponse.getContent().writeTo(writer, encoding);
-        } else {
-            //use the platform specific encoding
-            pageResponse.getContent().writeTo(writer, null);
-        }
-    }
-
-    /**
-     * Get the encoding specified by the property 'struts.i18n.encoding' in struts.properties,
-     * or return the default platform encoding if not specified.
-     * <p/>
-     * Note that if the property is not initially defined, this will return the system default,
-     * even if the property is later defined.  This is mainly for performance reasons.  Undefined
-     * properties throw exceptions, which are a costly operation.
-     * <p/>
-     * If the property is initially defined, it is read every time, until is is undefined, and then
-     * the system default is used.
-     * <p/>
-     * Why not cache it completely?  Some applications will wish to be able to dynamically set the
-     * encoding at runtime.
-     *
-     * @return The encoding to be used.
-     */
-    private static String getEncoding() {
-        if (encodingDefined) {
-            try {
-                encoding = Settings.get(StrutsConstants.STRUTS_I18N_ENCODING);
-            } catch (IllegalArgumentException e) {
-                encoding = System.getProperty("file.encoding");
-                encodingDefined = false;
-            }
-        }
-
-        return encoding;
-    }
-
-
-    /**
-     * Implementation of ServletOutputStream that stores all data written
-     * to it in a temporary buffer accessible from {@link #getBuffer()} .
-     *
-     * @author <a href="joe@truemesh.com">Joe Walnes</a>
-     * @author <a href="mailto:scott@atlassian.com">Scott Farquhar</a>
-     */
-    static final class PageOutputStream extends ServletOutputStream {
-
-        private FastByteArrayOutputStream buffer;
-
-
-        public PageOutputStream() {
-            buffer = new FastByteArrayOutputStream();
-        }
-
-
-        /**
-         * Return all data that has been written to this OutputStream.
-         */
-        public FastByteArrayOutputStream getBuffer() throws IOException {
-            flush();
-
-            return buffer;
-        }
-
-        public void close() throws IOException {
-            buffer.close();
-        }
-
-        public void flush() throws IOException {
-            buffer.flush();
-        }
-
-        public void write(byte[] b, int o, int l) throws IOException {
-            buffer.write(b, o, l);
-        }
-
-        public void write(int i) throws IOException {
-            buffer.write(i);
-        }
-
-        public void write(byte[] b) throws IOException {
-            buffer.write(b);
-        }
-    }
-
-
-    /**
-     * Simple wrapper to HTTPServletResponse that will allow getWriter()
-     * and getResponse() to be called as many times as needed without
-     * causing conflicts.
-     * <p/>
-     * The underlying outputStream is a wrapper around
-     * {@link PageOutputStream} which will store
-     * the written content to a buffer.
-     * <p/>
-     * This buffer can later be retrieved by calling {@link #getContent}.
-     *
-     * @author <a href="mailto:joe@truemesh.com">Joe Walnes</a>
-     * @author <a href="mailto:scott@atlassian.com">Scott Farquhar</a>
-     */
-    static final class PageResponse extends HttpServletResponseWrapper {
-
-        protected PrintWriter pagePrintWriter;
-        protected ServletOutputStream outputStream;
-        private PageOutputStream pageOutputStream = null;
-
-
-        /**
-         * Create PageResponse wrapped around an existing HttpServletResponse.
-         */
-        public PageResponse(HttpServletResponse response) {
-            super(response);
-        }
-
-
-        /**
-         * Return the content buffered inside the {@link PageOutputStream}.
-         *
-         * @return
-         * @throws IOException
-         */
-        public FastByteArrayOutputStream getContent() throws IOException {
-            //if we are using a writer, we need to flush the
-            //data to the underlying outputstream.
-            //most containers do this - but it seems Jetty 4.0.5 doesn't
-            if (pagePrintWriter != null) {
-                pagePrintWriter.flush();
-            }
-
-            return ((PageOutputStream) getOutputStream()).getBuffer();
-        }
-
-        /**
-         * Return instance of {@link PageOutputStream}
-         * allowing all data written to stream to be stored in temporary buffer.
-         */
-        public ServletOutputStream getOutputStream() throws IOException {
-            if (pageOutputStream == null) {
-                pageOutputStream = new PageOutputStream();
-            }
-
-            return pageOutputStream;
-        }
-
-        /**
-         * Return PrintWriter wrapper around PageOutputStream.
-         */
-        public PrintWriter getWriter() throws IOException {
-            if (pagePrintWriter == null) {
-                pagePrintWriter = new PrintWriter(new OutputStreamWriter(getOutputStream(), getCharacterEncoding()));
-            }
-
-            return pagePrintWriter;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/IteratorComponent.java b/trunk/core/src/main/java/org/apache/struts2/components/IteratorComponent.java
deleted file mode 100644
index 6b50da7..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/IteratorComponent.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-import java.util.Iterator;
-
-import org.apache.struts2.util.MakeIterator;
-import org.apache.struts2.views.jsp.IteratorStatus;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * <p>Iterator will iterate over a value. An iterable value can be either of: java.util.Collection, java.util.Iterator,
- * java.util.Enumeration, java.util.Map, array.</p> <p/> <!-- END SNIPPET: javadoc -->
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li>status (String) - if specified, an instanceof IteratorStatus will be pushed into stack upon each iteration</li>
- *
- * <li>value (Object) - the source to iterate over, must be iteratable, else an the object itself will be put into a
- * newly created List (see MakeIterator#convert(Object)</li>
- *
- * <li>id (String) - if specified the current iteration object will be place with this id in Struts stack's context
- * scope</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- * <!-- START SNIPPET: example1description -->
- *
- * <p>The following example retrieves the value of the getDays() method of the current object on the value stack and
- * uses it to iterate over. The &lt;s:property/&gt; tag prints out the current value of the iterator.</p>
- *
- * <!-- END SNIPPET: example1description -->
- *
- * <pre>
- * <!-- START SNIPPET: example1code -->
- * &lt;s:iterator value="days"&gt;
- *   &lt;p&gt;day is: &lt;s:property/&gt;&lt;/p&gt;
- * &lt;/s:iterator&gt;
- * <!-- END SNIPPET: example1code -->
- * </pre>
- *
- *
- * <!-- START SNIPPET: example2description -->
- *
- * <p>The following example uses a {@link Bean} tag and places it into the ActionContext. The iterator tag will retrieve
- * that object from the ActionContext and then calls its getDays() method as above. The status attribute is also used to
- * create a {@link IteratorStatus} object, which in this example, its odd() method is used to alternate row
- * colours:</p>
- *
- * <!-- END SNIPPET: example2description -->
- * 
- * 
- * <pre>
- * <!-- START SNIPPET: example2code -->
- * 
- * &lt;s:bean name="org.apache.struts2.example.IteratorExample" id="it"&gt;
- *   &lt;s:param name="day" value="'foo'"/&gt;
- *   &lt;s:param name="day" value="'bar'"/&gt;
- * &lt;/s:bean&gt;
- * <p/>
- * &lt;table border="0" cellspacing="0" cellpadding="1"&gt;
- * &lt;tr&gt;
- *   &lt;th&gt;Days of the week&lt;/th&gt;
- * &lt;/tr&gt;
- * <p/>
- * &lt;s:iterator value="#it.days" status="rowstatus"&gt;
- *   &lt;tr&gt;
- *     &lt;s:if test="#rowstatus.odd == true"&gt;
- *       &lt;td style="background: grey"&gt;&lt;s:property/&gt;&lt;/td&gt;
- *     &lt;/s:if&gt;
- *     &lt;s:else&gt;
- *       &lt;td&gt;&lt;s:property/&gt;&lt;/td&gt;
- *     &lt;/s:else&gt;
- *   &lt;/tr&gt;
- * &lt;/s:iterator&gt;
- * &lt;/table&gt;
- * 
- * <!-- END SNIPPET: example2code -->
- * </pre>
- *
- * <!--START SNIPPET: example3description -->
- *
- * <p> The next example will further demonstrate the use of the status attribute, using a DAO obtained from the action
- * class through OGNL, iterating over groups and their users (in a security context). The last() method indicates if the
- * current object is the last available in the iteration, and if not, we need to seperate the users using a comma: </p>
- *
- * <!-- END SNIPPET: example3description -->
- *
- * <pre>
- * <!-- START SNIPPET: example3code -->
- * 
- * 	&lt;s:iterator value="groupDao.groups" status="groupStatus"&gt;
- * 		&lt;tr class="&lt;s:if test="#groupStatus.odd == true "&gt;odd&lt;/s:if&gt;&lt;s:else&gt;even&lt;/s:else&gt;"&gt;
- * 			&lt;td&gt;&lt;s:property value="name" /&gt;&lt;/td&gt;
- * 			&lt;td&gt;&lt;s:property value="description" /&gt;&lt;/td&gt;
- * 			&lt;td&gt;
- * 				&lt;s:iterator value="users" status="userStatus"&gt;
- * 					&lt;s:property value="fullName" /&gt;&lt;s:if test="!#userStatus.last"&gt;,&lt;/s:if&gt;
- * 				&lt;/s:iterator&gt;
- * 			&lt;/td&gt;
- * 		&lt;/tr&gt;
- * 	&lt;/s:iterator&gt;
- * 
- * <!-- END SNIPPET: example3code -->
- * </pre>
- * <p>
- *
- * <!-- START SNIPPET: example4description -->
- *
- * </p> The next example iterates over a an action collection and passes every iterator value to another action. The
- * trick here lies in the use of the '[0]' operator. It takes the current iterator value and passes it on to the edit
- * action. Using the '[0]' operator has the same effect as using &gt;s:property /&gt;. (The latter, however, does not
- * work from inside the param tag). </p>
- *
- * <!-- END SNIPPET: example4description -->
- *
- * <pre>
- * <!-- START SNIPPET: example4code -->
- * 
- * 		&lt;s:action name="entries" id="entries"/&gt;
- * 		&lt;s:iterator value="#entries.entries" &gt;
- * 			&lt;s:property value="name" /&gt;
- * 			&lt;s:property /&gt;
- * 			&lt;s:push value="..."&gt;
- * 				&lt;s:action name="edit" id="edit" &gt;
- * 					&lt;s:param name="entry" value="[0]" /&gt;
- * 				&lt;/s:action&gt;
- * 			&lt;/push&gt;
- * 		&lt;/s:iterator&gt;
- * 
- * <!-- END SNIPPET: example4code -->
- * </pre>
- * 
- * <!-- START SNIPPET: example5description -->
- * 
- * </p>To simulate a simple loop with iterator tag, the following could be done. 
- * It does the loop 5 times.
- * 
- * <!-- END SNIPPET: example5description -->
- * 
- * <pre>
- * <!-- START SNIPPET: example5code -->
- * 
- * &lt;s:iterator status="stat" value="{1,2,3,4,5}" &gt;
- *    &lt;!-- grab the index (start with 0 ... ) --&gt;
- *    &lt;s:property value="#stat.index" /&gt;
- *    
- *    &lt;!-- grab the top of the stack which should be the --&gt;
- *    &lt;!-- current iteration value (0, 1, ... 5) --&gt;
- *    &lt;s:property value="top" /&gt;
- * &lt;/s:iterator&gt;
- * 
- * <!-- END SNIPPET: example5code -->
- * </pre>
- * 
- * @s.tag name="iterator" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.IteratorTag"
- * description="Iterate over a iterable value"
- */
-public class IteratorComponent extends Component {
-    protected Iterator iterator;
-    protected IteratorStatus status;
-    protected Object oldStatus;
-    protected IteratorStatus.StatusState statusState;
-    protected String statusAttr;
-    protected String value;
-
-    public IteratorComponent(ValueStack stack) {
-        super(stack);
-    }
-
-    public boolean start(Writer writer) {
-        //Create an iterator status if the status attribute was set.
-        if (statusAttr != null) {
-            statusState = new IteratorStatus.StatusState();
-            status = new IteratorStatus(statusState);
-        }
-
-        ValueStack stack = getStack();
-
-        if (value == null) {
-            value = "top";
-        }
-        iterator = MakeIterator.convert(findValue(value));
-        
-        // get the first
-        if ((iterator != null) && iterator.hasNext()) {
-            Object currentValue = iterator.next();
-            stack.push(currentValue);
-
-            String id = getId();
-            
-            if ((id != null) && (currentValue != null)) {
-                //pageContext.setAttribute(id, currentValue);
-                //pageContext.setAttribute(id, currentValue, PageContext.REQUEST_SCOPE);
-            	stack.getContext().put(id, currentValue);
-            }
-
-            // Status object
-            if (statusAttr != null) {
-                statusState.setLast(!iterator.hasNext());
-                oldStatus = stack.getContext().get(statusAttr);
-                stack.getContext().put(statusAttr, status);
-            }
-
-            return true;
-        } else {
-        	super.end(writer, "");
-            return false;
-        }
-    }
-
-    public boolean end(Writer writer, String body) {
-        ValueStack stack = getStack();
-        if (iterator != null) {
-            stack.pop();
-        }
-
-        if (iterator!=null && iterator.hasNext()) {
-            Object currentValue = iterator.next();
-            stack.push(currentValue);
-
-            String id = getId();
-
-            if ((id != null) && (currentValue != null)) {
-                //pageContext.setAttribute(id, currentValue);
-                //pageContext.setAttribute(id, currentValue, PageContext.REQUEST_SCOPE);
-            	stack.getContext().put(id, currentValue);
-            }
-
-            // Update status
-            if (status != null) {
-                statusState.next(); // Increase counter
-                statusState.setLast(!iterator.hasNext());
-            }
-
-            return true;
-        } else {
-            // Reset status object in case someone else uses the same name in another iterator tag instance
-            if (status != null) {
-                if (oldStatus == null) {
-                    stack.getContext().put(statusAttr, null);
-                } else {
-                    stack.getContext().put(statusAttr, oldStatus);
-                }
-            }
-            super.end(writer, "");
-            return false;
-        }
-    }
-
-    /**
-     * if specified, an instanceof IteratorStatus will be pushed into stack upon each iteration
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setStatus(String status) {
-        this.statusAttr = status;
-    }
-
-    /**
-     * the iteratable source to iterate over, else an the object itself will be put into a newly created List
-     * @s.tagattribute required="false"
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Label.java b/trunk/core/src/main/java/org/apache/struts2/components/Label.java
deleted file mode 100644
index f964e51..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Label.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Renders an HTML LABEL that will allow you to output label:name combination that has the same format treatment as
- * the rest of your UI controls.</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- * <p/>
- * <!-- START SNIPPET: exdescription -->
- * In this example, a label is rendered. The label is retrieved from a ResourceBundle by calling ActionSupport's
- * getText() method giving you an output of 'User Name:tm_jee'. Assuming that i18n message user_name corresponds
- * to 'User Name' and the action's getUserName() method returns 'tm_jee'<p/>
- * <!-- END SNIPPET: exdescription -->
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:label label="%{text('user_name')}" name="userName" /&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="label" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.LabelTag"
- * description="Render a label that displays read-only information"
- */
-public class Label extends UIBean {
-    final public static String TEMPLATE = "label";
-
-    protected String forAttr;
-
-    public Label(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    protected void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        if (forAttr != null) {
-            addParameter("for", findString(forAttr));
-        }
-
-        // try value first, then name (this overrides the default behavior in the superclass)
-        if (value != null) {
-            addParameter("nameValue", findString(value));
-        } else if (name != null) {
-            String expr = name;
-            if (altSyntax()) {
-                expr = "%{" + expr + "}";
-            }
-
-            addParameter("nameValue", findString(expr));
-        }
-    }
-
-    /**
-     * HTML for attribute
-     * @s.tagattribute required="false"
-     */
-    public void setFor(String forAttr) {
-        this.forAttr = forAttr;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/ListUIBean.java b/trunk/core/src/main/java/org/apache/struts2/components/ListUIBean.java
deleted file mode 100644
index 9497a4e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/ListUIBean.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.lang.reflect.Array;
-import java.util.Collection;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.util.ContainUtil;
-import org.apache.struts2.util.MakeIterator;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * DoubleListUIBean is the standard superclass of all Struts list handling components.
- *
- * <p/>
- * 
- * <!-- START SNIPPET: javadoc -->
- * 
- * Note that the listkey and listvalue attribute will default to "key" and "value"
- * respectively only when the list attribute is evaluated to a Map or its decendant.
- * Other thing else, will result in listkey and listvalue to be null and not used.
- * 
- * <!-- END SNIPPET: javadoc -->
- *
- */
-public abstract class ListUIBean extends UIBean {
-    protected Object list;
-    protected String listKey;
-    protected String listValue;
-    
-    // indicate if an exception is to be thrown when value attribute is null
-    protected boolean throwExceptionOnNullValueAttribute = false; 
-
-    protected ListUIBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    public void evaluateExtraParams() {
-        Object value = null;
-
-        if (list == null) {
-            list = parameters.get("list");
-        }
-
-        if (list instanceof String) {
-            value = findValue((String) list);
-        } else if (list instanceof Collection) {
-            value = list;
-        } else if (MakeIterator.isIterable(list)) {
-            value = MakeIterator.convert(list);
-        }
-        if (value == null) {
-        	if (throwExceptionOnNullValueAttribute) {
-        		// will throw an exception if not found
-        		value = findValue((list == null) ? (String) list : list.toString(), "list",
-                    "The requested list key '" + list + "' could not be resolved as a collection/array/map/enumeration/iterator type. " +
-                    "Example: people or people.{name}");
-        	}
-        	else {
-        		// ww-1010, allows value with null value to be compatible with ww 
-        		// 2.1.7 behaviour
-        		value = findValue((list == null)?(String) list:list.toString());
-        	}
-        }
-
-        if (value instanceof Collection) {
-            addParameter("list", value);
-        } else {
-            addParameter("list", MakeIterator.convert(value));
-        }
-
-        if (value instanceof Collection) {
-            addParameter("listSize", new Integer(((Collection) value).size()));
-        } else if (value instanceof Map) {
-            addParameter("listSize", new Integer(((Map) value).size()));
-        } else if (value != null && value.getClass().isArray()) {
-            addParameter("listSize", new Integer(Array.getLength(value)));
-        }
-
-        if (listKey != null) {
-            addParameter("listKey", listKey);
-        } else if (value instanceof Map) {
-            addParameter("listKey", "key");
-        }
-
-        if (listValue != null) {
-            if (altSyntax()) {
-                // the same logic as with findValue(String)
-                // if value start with %{ and end with }, just cut it off!
-                if (listValue.startsWith("%{") && listValue.endsWith("}")) {
-                    listValue = listValue.substring(2, listValue.length() - 1);
-                }
-            }
-            addParameter("listValue", listValue);
-        } else if (value instanceof Map) {
-            addParameter("listValue", "value");
-        }
-    }
-
-    public boolean contains(Object obj1, Object obj2) {
-        return ContainUtil.contains(obj1, obj2);
-    }
-
-    protected Class getValueClassType() {
-        return null; // don't convert nameValue to anything, we need the raw value
-    }
-
-    /**
-     * Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.
-     * @s.tagattribute required="true"
-     */
-    public void setList(Object list) {
-        this.list = list;
-    }
-
-    /**
-     * Property of list objects to get field value from
-     * @s.tagattribute required="false"
-     */
-    public void setListKey(String listKey) {
-        this.listKey = listKey;
-    }
-
-    /**
-     * Property of list objects to get field content from
-     * @s.tagattribute required="false"
-      */
-    public void setListValue(String listValue) {
-        this.listValue = listValue;
-    }
-    
-    
-    public void setThrowExceptionOnNullValueAttribute(boolean throwExceptionOnNullValueAttribute) {
-    	this.throwExceptionOnNullValueAttribute = throwExceptionOnNullValueAttribute;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/MergeIterator.java b/trunk/core/src/main/java/org/apache/struts2/components/MergeIterator.java
deleted file mode 100644
index 1468bc2..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/MergeIterator.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.components.Param.UnnamedParametric;
-import org.apache.struts2.util.MakeIterator;
-import org.apache.struts2.util.MergeIteratorFilter;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p>Component for MergeIteratorTag, which job is to merge iterators and successive 
- * call to the merged iterator will cause each merge iterator to have a chance to 
- * expose its element, subsequently next call will allow the next iterator to expose 
- * its element. Once the last iterator is done exposing its element, the first iterator
- * is allowed to do so again (unless it is exhausted of entries).</P>
- * 
- * <p>Internally the task are delegated to MergeIteratorFilter</p>
- * 
- * <p>Example if there are 3 lists being merged, each list have 3 entries, the following will
- * be the logic.</P>
- * <ol>
- * 		<li>Display first element of the first list</li>
- * 		<li>Display first element of the second list</li>
- * 		<li>Display first element of the third list</li>
- *      <li>Display second element of the first list</li>
- *      <li>Display second element of the second list</li>
- *      <li>Display second element of the third list</li>
- *      <li>Display third element of the first list</li>
- *      <li>Display thrid element of the second list</li>
- *      <li>Display third element of the thrid list</li>
- * </ol>
- * <!-- END SNIPPET: javadoc -->
- * 
- * <!-- START SNIPPET: params -->
- * <ul>
- * 			<li>id (String) - the id where the resultant merged iterator will be stored in the stack's context</li>
- * </ul>
- * <!-- END SNIPPET: params -->
- * 
- * 
- * <!-- START SNIPPET: javacode -->
- * public class MergeIteratorTagAction extends ActionSupport {
- *
- *	private List myList1;
- *	private List myList2;
- *	private List myList3;
- *	
- *	public List getMyList1() {
- *		return myList1;
- *	}
- *	
- *	public List getMyList2() {
- *		return myList2;
- *	}
- *	
- *	public List getMyList3() {
- *		return myList3;
- *	}
- *	
- *	
- *	public String execute() throws Exception {
- *		
- *		myList1 = new ArrayList();
- *		myList1.add("1");
- *		myList1.add("2");
- *		myList1.add("3");
- *		
- *		myList2 = new ArrayList();
- *		myList2.add("a");
- *		myList2.add("b");
- *		myList2.add("c");
- *		
- *		myList3 = new ArrayList();
- *		myList3.add("A");
- *		myList3.add("B");
- *		myList3.add("C");
- *		
- *		return "done";
- *	}
- * }
- * <!-- END SNIPPET: javacode -->
- *
- * <!-- START SNIPPET: example -->
- * &lt;s:merge id="myMergedIterator1"&gt;
- *		&lt;s:param value="%{myList1}" /&gt;
- *		&lt;s:param value="%{myList2}" /&gt;
- *		&lt;s:param value="%{myList3}" /&gt;
- * &lt;/s:merge&gt;
- * &lt;s:iterator value="%{#myMergedIterator1}"&gt;
- *		&lt;s:property /&gt;
- * &lt;/s:iterator&gt;
- * <!-- END SNIPPET: example -->
- *
- * <!-- START SNIPPET: description -->
- * This wil generate "1aA2bB3cC".
- * <!-- START SNIPPET: description -->
- *
- * @see org.apache.struts2.util.MergeIteratorFilter
- * @see org.apache.struts2.views.jsp.iterator.MergeIteratorTag
- *
- * @s.tag name="merge" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.iterator.MergeIteratorTag"
- * description="Merge the values of a list of iterators into one iterator"
- */
-public class MergeIterator extends Component implements UnnamedParametric {
-	
-	private static final Log _log = LogFactory.getLog(MergeIterator.class);
-	
-	private MergeIteratorFilter mergeIteratorFilter = null;
-	private List _parameters;
-
-	public MergeIterator(ValueStack stack) {
-		super(stack);
-	}
-	
-	public boolean start(Writer writer) {
-		
-		mergeIteratorFilter = new MergeIteratorFilter();
-		_parameters = new ArrayList();
-
-        return super.start(writer);
-    }
-	
-	public boolean end(Writer writer, String body) {
-		
-		for (Iterator parametersIterator = _parameters.iterator(); parametersIterator.hasNext(); ) {
-			Object iteratorEntryObj = parametersIterator.next();
-			if (! MakeIterator.isIterable(iteratorEntryObj)) {
-				_log.warn("param with value resolved as "+iteratorEntryObj+" cannot be make as iterator, it will be ignored and hence will not appear in the merged iterator");
-				continue;
-			}
-			mergeIteratorFilter.setSource(MakeIterator.convert(iteratorEntryObj));
-		}
-		
-		mergeIteratorFilter.execute();
-
-		// if id exists, we put it in the stack's context
-		if (getId() != null && getId().length() > 0) {
-			getStack().getContext().put(getId(), mergeIteratorFilter);
-		}
-		
-		mergeIteratorFilter = null;
-
-        return super.end(writer, body);
-    }
-
-    /**
-     * the id where the resultant merged iterator will be stored in the stack's context
-     * @s.tagattribute required="false"
-     */
-    public void setId(String id) {
-        super.setId(id);
-    }
-
-    // == UnnamedParametric interface implementation ---------------------
-	public void addParameter(Object value) {
-		_parameters.add(value);
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/OptGroup.java b/trunk/core/src/main/java/org/apache/struts2/components/OptGroup.java
deleted file mode 100644
index d16c6fe..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/OptGroup.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Create a optgroup component which needs to resides within a select tag.
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/>
- *
- * <!-- START SNIPPET: notice -->
- *
- * This component is to be used within a  Select component.
- *
- * <!-- END SNIPPET: notice -->
- *
- * <p/>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- *
- * &lt;s:select label="My Selection"
- *            name="mySelection"
- *            value="%{'POPEYE'}"
- *            list="%{#{'SUPERMAN':'Superman', 'SPIDERMAN':'spiderman'}}"&gt;
- *    &lt;s:optgroup label="Adult"
- *                 list="%{#{'SOUTH_PARK':'South Park'}}" /&gt;
- *    &lt;s:optgroup label="Japanese"
- *                 list="%{#{'POKEMON':'pokemon','DIGIMON':'digimon','SAILORMOON':'Sailormoon'}}" /&gt;
- * &lt;/s:select&gt;
- *
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="optgroup" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.OptGroupTag"
- * description="Renders a Select Tag's OptGroup Tag"
- */
-public class OptGroup extends Component {
-
-	public static final String INTERNAL_LIST_UI_BEAN_LIST_PARAMETER_KEY = "optGroupInternalListUiBeanList";
-
-	private static Log _log = LogFactory.getLog(OptGroup.class);
-
-	protected HttpServletRequest req;
-	protected HttpServletResponse res;
-
-	protected ListUIBean internalUiBean;
-
-	public OptGroup(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		super(stack);
-		this.req = req;
-		this.res = res;
-		internalUiBean = new ListUIBean(stack, req, res) {
-			protected String getDefaultTemplate() {
-				return "empty";
-			}
-		};
-	}
-
-	public boolean end(Writer writer, String body) {
-		Select select = (Select) findAncestor(Select.class);
-		if (select == null) {
-			_log.error("incorrect use of OptGroup component, this component must be used within a Select component",
-					new IllegalStateException("incorrect use of OptGroup component, this component must be used within a Select component"));
-			return false;
-		}
-		internalUiBean.start(writer);
-		internalUiBean.end(writer, body);
-
-		List listUiBeans = (List) select.getParameters().get(INTERNAL_LIST_UI_BEAN_LIST_PARAMETER_KEY);
-		if (listUiBeans == null) {
-			listUiBeans = new ArrayList();
-		}
-		listUiBeans.add(internalUiBean);
-		select.addParameter(INTERNAL_LIST_UI_BEAN_LIST_PARAMETER_KEY, listUiBeans);
-
-		return false;
-	}
-
-	/**
-	 * Set the label attribute.
-	 * @s.tagattribute required="false"
-	 */
-	public void setLabel(String label) {
-		internalUiBean.setLabel(label);
-	}
-
-	/**
-	 * Set the disable attribute.
-	 * @s.tagattribute required="false"
-	 */
-	public void setDisabled(String disabled) {
-		internalUiBean.setDisabled(disabled);
-	}
-
-	/**
-	 * Set the list attribute.
-	 * @s.tagattribute required="false"
-	 */
-	public void setList(String list) {
-		internalUiBean.setList(list);
-	}
-
-	/**
-	 * Set the listKey attribute.
-	 * @s.tagattribute required="false"
-	 */
-	public void setListKey(String listKey) {
-		internalUiBean.setListKey(listKey);
-	}
-
-	/**
-	 * Set the listValue attribute.
-	 * @s.tagattribute required="false"
-	 */
-	public void setListValue(String listValue) {
-		internalUiBean.setListValue(listValue);
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/OptionTransferSelect.java b/trunk/core/src/main/java/org/apache/struts2/components/OptionTransferSelect.java
deleted file mode 100644
index 0cba451..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/OptionTransferSelect.java
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * 
- * Create a option transfer select component which is basically two &lt;select ...&gt;
- * tag with buttons in the middle of them allowing options in each of the 
- * &lt;select ...&gt; to be moved between themselves. Will auto-select all its 
- * elements upon its containing form submision.
- * 
- * <!-- END SNIPPET: javadoc -->
- * 
- * <p/>
- * 
- * 
- * <!-- START SNIPPET: notice -->
- * 
- * NOTE: The id and doubleId need not be supplied as they will generated provided
- * that the optiontransferselect tag is being used in a form tag. The generated id 
- * and doubleId will be &lt;form_id&gt;_&lt;optiontransferselect_doubleName&gt; and 
- * &lt;form_id&gt;_&lt;optiontransferselect_doubleName&gt; respectively.
- * 
- * <!-- END SNIPPET: notice -->
- * 
- * <p/>
- * 
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;-- minimum configuration --&gt;
- * &lt;s:optiontransferselect
- *   	label="Favourite Cartoons Characters"
- *		name="leftSideCartoonCharacters" 
- *		list="{'Popeye', 'He-Man', 'Spiderman'}" 
- *		doubleName="rightSideCartoonCharacters"
- *		doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}" 
- *	/&gt;
- *
- *  &lt;-- possible configuration --&gt;
- *  &lt;s:optiontransferselect
- *   	label="Favourite Cartoons Characters"
- *		name="leftSideCartoonCharacters" 
- *		leftTitle="Left Title"
- *		rightTitle="Right Title"
- *		list="{'Popeye', 'He-Man', 'Spiderman'}" 
- *		multiple="true"
- *		headerKey="headerKey"
- *		headerValue="--- Please Select ---"
- *		emptyOption="true"
- *		doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}" 
- *		doubleName="rightSideCartoonCharacters"
- *		doubleHeaderKey="doubleHeaderKey"
- *		doubleHeaderValue="--- Please Select ---" 
- *		doubleEmptyOption="true"
- *		doubleMultiple="true"
- *	/&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * @s.tag name="optiontransferselect" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.OptionTransferSelectTag"
- * description="Renders an input form"
- */
-public class OptionTransferSelect extends DoubleListUIBean {
-	
-	private static final Log _log = LogFactory.getLog(OptionTransferSelect.class);
-
-	private static final String TEMPLATE = "optiontransferselect";
-	
-	protected String allowAddToLeft;
-	protected String allowAddToRight;
-	protected String allowAddAllToLeft;
-	protected String allowAddAllToRight;
-	protected String allowSelectAll;
-	protected String allowUpDownOnLeft;
-	protected String allowUpDownOnRight;
-	
-	protected String leftTitle;
-	protected String rightTitle;
-	
-	protected String buttonCssClass;
-	protected String buttonCssStyle;
-
-	protected String addToLeftLabel;
-	protected String addToRightLabel;
-	protected String addAllToLeftLabel;
-	protected String addAllToRightLabel;
-	protected String selectAllLabel;
-	protected String leftUpLabel;
-	protected String leftDownlabel;
-	protected String rightUpLabel;
-	protected String rightDownLabel;
-	
-	
-	public OptionTransferSelect(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-		super(stack, request, response);
-	}
-
-	protected String getDefaultTemplate() {
-		return TEMPLATE;
-	}
-	
-	
-	public void evaluateExtraParams() {
-		super.evaluateExtraParams();
-		
-		Object doubleValue = null;
-		
-		// override DoubleListUIBean's 
-        if (doubleList != null) {
-            doubleValue = findValue(doubleList);
-            addParameter("doubleList", doubleValue);
-        }
-        if (size == null || size.trim().length() <= 0) {
-        	addParameter("size", "15");
-        }
-        if (doubleSize == null || doubleSize.trim().length() <= 0) {
-        	addParameter("doubleSize", "15");
-        }
-        if (multiple == null || multiple.trim().length() <= 0) {
-        	addParameter("multiple", Boolean.TRUE);
-        }
-        if (doubleMultiple == null || doubleMultiple.trim().length() <= 0) {
-        	addParameter("doubleMultiple", Boolean.TRUE);
-        }
-        
-        
-        
-        
-        
-        // buttonCssClass 
-        if (buttonCssClass != null && buttonCssClass.trim().length() > 0) {
-        	addParameter("buttonCssClass", buttonCssClass);
-        }
-        
-        // buttonCssStyle
-        if (buttonCssStyle != null && buttonCssStyle.trim().length() > 0) {
-        	addParameter("buttonCssStyle", buttonCssStyle);
-        }
-        
-        
-
-        // allowSelectAll
-        addParameter("allowSelectAll", 
-        		allowSelectAll != null ? findValue(allowSelectAll, Boolean.class) : Boolean.TRUE);
-		
-		// allowAddToLeft
-		addParameter("allowAddToLeft", 
-				allowAddToLeft != null ? findValue(allowAddToLeft, Boolean.class) : Boolean.TRUE);
-		
-		// allowAddToRight
-		addParameter("allowAddToRight",
-				allowAddToRight != null ? findValue(allowAddToRight, Boolean.class) : Boolean.TRUE);
-		
-		// allowAddAllToLeft
-		addParameter("allowAddAllToLeft",
-				allowAddAllToLeft != null ? findValue(allowAddAllToLeft, Boolean.class) : Boolean.TRUE);
-		
-		// allowAddAllToRight
-		addParameter("allowAddAllToRight", 
-				allowAddAllToRight != null ? findValue(allowAddAllToRight, Boolean.class) : Boolean.TRUE);
-		
-		// allowUpDownOnLeft
-		addParameter("allowUpDownOnLeft", 
-				allowUpDownOnLeft != null ? findValue(allowUpDownOnLeft, Boolean.class) : Boolean.TRUE);
-		
-		// allowUpDownOnRight
-		addParameter("allowUpDownOnRight", 
-				allowUpDownOnRight != null ? findValue(allowUpDownOnRight, Boolean.class) : Boolean.TRUE);
-		
-		
-		// leftTitle
-		if (leftTitle != null) {
-			addParameter("leftTitle", findValue(leftTitle, String.class));
-		}
-		
-		// rightTitle
-		if (rightTitle != null) {
-			addParameter("rightTitle", findValue(rightTitle, String.class));
-		}
-		
-		
-		// addToLeftLabel
-		addParameter("addToLeftLabel", 
-				addToLeftLabel != null ? findValue(addToLeftLabel, String.class) : "<-" );
-		
-		// addToRightLabel
-		addParameter("addToRightLabel", 
-				addToRightLabel != null ? findValue(addToRightLabel, String.class) : "->");
-		
-		// addAllToLeftLabel
-		addParameter("addAllToLeftLabel", 
-				addAllToLeftLabel != null ? findValue(addAllToLeftLabel, String.class) : "<<--");
-		
-		// addAllToRightLabel
-		addParameter("addAllToRightLabel", 
-				addAllToRightLabel != null ? findValue(addAllToRightLabel, String.class) : "-->>");
-		
-		// selectAllLabel
-		addParameter("selectAllLabel",
-				selectAllLabel != null ? findValue(selectAllLabel, String.class) : "<*>");
-		
-		// leftUpLabel
-		addParameter("leftUpLabel", 
-				leftUpLabel != null ? findValue(leftUpLabel, String.class) : "^");
-		
-		
-		// leftDownLabel
-		addParameter("leftDownLabel", 
-				leftDownlabel != null ? findValue(leftDownlabel, String.class) : "v");
-		
-		
-		// rightUpLabel
-		addParameter("rightUpLabel", 
-				rightUpLabel != null ? findValue(rightUpLabel, String.class) : "^");
-		
-		
-		// rightDownlabel
-		addParameter("rightDownLabel", 
-				rightDownLabel != null ? findValue(rightDownLabel, String.class) : "v");
-		
-		
-		
-		// inform the form component our select tag infos, so they know how to select 
-		// its elements upon onsubmit
-		Form formAncestor = (Form) findAncestor(Form.class);
-		if (formAncestor != null) {
-			
-			// inform ancestor form that we are having a customOnsubmit (see form-close.ftl [simple theme])
-			enableAncestorFormCustomOnsubmit();
-			
-			
-			// key -> select tag id, value -> headerKey (if exists)
-			Map formOptiontransferselectIds = (Map) formAncestor.getParameters().get("optiontransferselectIds");
-			Map formOptiontransferselectDoubleIds = (Map) formAncestor.getParameters().get("optiontransferselectDoubleIds");
-
-			// init lists
-			if (formOptiontransferselectIds == null) {
-				formOptiontransferselectIds = new LinkedHashMap();
-			}
-			if (formOptiontransferselectDoubleIds == null) {
-				formOptiontransferselectDoubleIds = new LinkedHashMap();
-			}
-			
-			
-			// id
-			String tmpId = (String) getParameters().get("id");
-			String tmpHeaderKey = (String) getParameters().get("headerKey");
-			if (tmpId != null && (! formOptiontransferselectIds.containsKey(tmpId))) {
-				formOptiontransferselectIds.put(tmpId, tmpHeaderKey);
-			}
-			
-			// doubleId
-			String tmpDoubleId = (String) getParameters().get("doubleId");
-			String tmpDoubleHeaderKey = (String) getParameters().get("doubleHeaderKey");
-			if (tmpDoubleId != null && (! formOptiontransferselectDoubleIds.containsKey(tmpDoubleId))) {
-				formOptiontransferselectDoubleIds.put(tmpDoubleId, tmpDoubleHeaderKey);
-			}
-			
-			formAncestor.getParameters().put("optiontransferselectIds", formOptiontransferselectIds);
-			formAncestor.getParameters().put("optiontransferselectDoubleIds", formOptiontransferselectDoubleIds);
-			
-		}
-		else {
-			_log.warn("form enclosing optiontransferselect "+this+" not found, auto select upon form submit of optiontransferselect will not work");
-		}
-	}
-	
-	
-	
-	public String getAddAllToLeftLabel() {
-		return addAllToLeftLabel;
-	}
-
-	/**
-     * set Add To Left button label
-	 * @s.tagattribute required="false"
-	 */
-	public void setAddAllToLeftLabel(String addAllToLeftLabel) {
-		this.addAllToLeftLabel = addAllToLeftLabel;
-	}
-
-	public String getAddAllToRightLabel() {
-		return addAllToRightLabel;
-	}
-
-	/**
-     * set Add All To Right button label
-	 * @s.tagattribute required="false"
-	 */
-	public void setAddAllToRightLabel(String addAllToRightLabel) {
-		this.addAllToRightLabel = addAllToRightLabel;
-	}
-
-	public String getAddToLeftLabel() {
-		return addToLeftLabel;
-	}
-
-	/**
-     * set Add To Left button label
-	 * @s.tagattribute required="false"
-	 */
-	public void setAddToLeftLabel(String addToLeftLabel) {
-		this.addToLeftLabel = addToLeftLabel;
-	}
-
-	public String getAddToRightLabel() {
-		return addToRightLabel;
-	}
-
-	/**
-     * set Add To Right button label
-	 * @s.tagattribute required="false"
-	 */
-	public void setAddToRightLabel(String addToRightLabel) {
-		this.addToRightLabel = addToRightLabel;
-	}
-
-	public String getAllowAddAllToLeft() {
-		return allowAddAllToLeft;
-	}
-
-	/**
-     * enable Add All To Left button
-	 * @s.tagattribute required="false"
-	 */
-	public void setAllowAddAllToLeft(String allowAddAllToLeft) {
-		this.allowAddAllToLeft = allowAddAllToLeft;
-	}
-
-	public String getAllowAddAllToRight() {
-		return allowAddAllToRight;
-	}
-
-	/**
-     * enable Add All To Right button
-	 * @s.tagattribute required="false"
-	 */
-	public void setAllowAddAllToRight(String allowAddAllToRight) {
-		this.allowAddAllToRight = allowAddAllToRight;
-	}
-
-	public String getAllowAddToLeft() {
-		return allowAddToLeft;
-	}
-
-	/**
-     * enable Add To Left button
-	 * @s.tagattribute required="false"
-	 */
-	public void setAllowAddToLeft(String allowAddToLeft) {
-		this.allowAddToLeft = allowAddToLeft;
-	}
-
-	public String getAllowAddToRight() {
-		return allowAddToRight;
-	}
-
-	/**
-     * enable Add To Right button
-	 * @s.tagattribute required="false"
-	 */
-	public void setAllowAddToRight(String allowAddToRight) {
-		this.allowAddToRight = allowAddToRight;
-	}
-
-	public String getLeftTitle() {
-		return leftTitle;
-	}
-	
-	
-	/**
-	 * enable up / down on the left side
-	 * @a2 tagattribute required="false" 
-	 */
-	public void setAllowUpDownOnLeft(String allowUpDownOnLeft) {
-		this.allowUpDownOnLeft = allowUpDownOnLeft;
-	}
-	
-	public String getAllowUpDownOnLeft() {
-		return this.allowUpDownOnLeft;
-	}
-	
-	
-	/**
-	 * enable up / down on the right side
-	 * @a2 tagattribute required="false"
-	 */
-	public void setAllowUpDownOnRight(String allowUpDownOnRight) {
-		this.allowUpDownOnRight = allowUpDownOnRight;
-	}
-	
-	public String getAllowUpDownOnRight() {
-		return this.allowUpDownOnRight;
-	}
-	
-
-	/**
-     * set Left title
-	 * @s.tagattribute required="false"
-	 */
-	public void setLeftTitle(String leftTitle) {
-		this.leftTitle = leftTitle;
-	}
-
-	public String getRightTitle() {
-		return rightTitle;
-	}
-
-	/**
-     * set Right title
-	 * @s.tagattribute required="false"
-	 */
-	public void setRightTitle(String rightTitle) {
-		this.rightTitle = rightTitle;
-	}
-	
-	
-	/**
-     * enable Select All button
-	 * @s.tagattribute required="false"
-	 */
-	public void setAllowSelectAll(String allowSelectAll) {
-		this.allowSelectAll = allowSelectAll;
-	}
-
-    public String getAllowSelectAll() {
-		return this.allowSelectAll;
-	}
-	
-	
-	/**
-     * set Select All button label
-	 * @s.tagattribute required="false"
-	 */
-	public void setSelectAllLabel(String selectAllLabel) {
-		this.selectAllLabel = selectAllLabel;
-	}
-
-    public String getSelectAllLabel() {
-		return this.selectAllLabel;
-	}
-
-
-    /**
-     * set buttons css class
-	 * @s.tagattribute required="false"
-	 */
-	public void setButtonCssClass(String buttonCssClass) {
-		this.buttonCssClass = buttonCssClass;
-	}
-
-    public String getButtonCssClass() {
-		return buttonCssClass;
-	}
-	
-	
-	/**
-     * set button css style
-	 * @s.tagattribute required="false"
-	 */
-	public void setButtonCssStyle(String buttonCssStyle) {
-		this.buttonCssStyle = buttonCssStyle;
-	}
-
-    public String getButtonCssStyle() {
-		return this.buttonCssStyle;
-	}
-    
-    
-    /**
-     * Up label for the left side
-     * @a2 tagattribute required="false"
-     */
-    public void setLeftUpLabel(String leftUpLabel) {
-    	this.leftUpLabel = leftUpLabel;
-    }
-    public String getLeftUpLabel() {
-    	return this.leftUpLabel;
-    }
-    
-    /**
-     * Down label for the left side.
-     * @a2 tagattribute required="false"
-     */
-    public void setLeftDownLabel(String leftDownLabel) {
-    	this.leftDownlabel = leftDownLabel;
-    }
-    public String getLeftDownLabel() {
-    	return this.leftDownlabel;
-    }
-    
-    /**
-     * Up label for the right side.
-     * @a2 tagattribute required="false"
-     */
-    public void setRightUpLabel(String rightUpLabel) {
-    	this.rightUpLabel = rightUpLabel;
-    }
-    public String getRightUpLabel() {
-    	return this.rightUpLabel;
-    }
-    
-    
-    /**
-     * Down label for the left side.
-     * @a2 tagattribute required="false"
-     */
-    public void setRightDownLabel(String rightDownlabel) {
-    	this.rightDownLabel = rightDownlabel;
-    }
-    public String getRightDownLabel() {
-    	return rightDownLabel;
-    }
-    
-    
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Panel.java b/trunk/core/src/main/java/org/apache/struts2/components/Panel.java
deleted file mode 100644
index f329877..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Panel.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Render a panel for tabbedPanel.</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- * See the example in {@link TabbedPanel}.
- * <p/>
- *
- * @see TabbedPanel
- *
- * @s.tag name="panel" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.PanelTag"
- * description="Render a panel for tabbedPanel"
- */
-public class Panel extends Div {
-
-    public static final String TEMPLATE = "tab";
-    public static final String TEMPLATE_CLOSE = "tab-close";
-    public static final String COMPONENT_NAME = Panel.class.getName();
-
-    protected String tabName;
-    protected String subscribeTopicName;
-    protected String remote;
-
-    public Panel(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    public String getDefaultOpenTemplate() {
-        return TEMPLATE;
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE_CLOSE;
-    }
-
-    public boolean end(Writer writer, String body) {
-        TabbedPanel tabbedPanel = ((TabbedPanel) findAncestor(TabbedPanel.class));
-        subscribeTopicName = tabbedPanel.getTopicName();
-        tabbedPanel.addTab(this);
-
-        return super.end(writer, body);
-    }
-
-    public void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        if (tabName != null) {
-            addParameter("tabName", findString(tabName));
-        }
-
-        if (subscribeTopicName != null) {
-            addParameter("subscribeTopicName", subscribeTopicName);
-        }
-
-        if (remote != null && "true".equalsIgnoreCase(remote)) {
-            addParameter("remote", "true");
-        } else {
-            addParameter("remote", "false");
-        }
-    }
-
-    public String getTabName() {
-        return findString(tabName);
-    }
-
-    public String getComponentName() {
-        return COMPONENT_NAME;
-    }
-
-    /**
-     * The text of the tab to display in the header tab list
-     * @s.tagattribute required="true"
-     */
-    public void setTabName(String tabName) {
-        this.tabName = tabName;
-    }
-
-    /**
-     * Set subscribeTopicName attribute
-     * @s.tagattribute required="false"
-     */
-    public void setSubscribeTopicName(String subscribeTopicName) {
-        this.subscribeTopicName = subscribeTopicName;
-    }
-
-    /**
-     * determines whether this is a remote panel (ajax) or a local panel (content loaded into visible/hidden containers)
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setRemote(String remote) {
-        this.remote = remote;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Param.java b/trunk/core/src/main/java/org/apache/struts2/components/Param.java
deleted file mode 100644
index e48c8bf..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Param.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-
-import org.apache.struts2.StrutsException;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p>This tag can be used to parameterize other tags.</p>
- * The include tag and bean tag are examples of such tags.
- * <p/>
- * The parameters can be added with or without a name as key.
- * If the tag provides a name attribute the parameters are added using the
- * {@link Component#addParameter(String, Object) addParamter} method.
- * For unnamed parameters the Tag must implement the {@link UnnamedParametric} interface defined in
- * this class (e.g. The TextTag does this).
- * <p/>
- * This tag has the following two paramters.
- * <!-- START SNIPPET: params -->
- * <ul>
- * 		<li>name (String) - the name of the parameter</li>
- *      <li>value (Object) - the value of the parameter</li>
- * </ul>
- * <!-- END SNIPPET: params -->
- * <p/>
- * <b>Note:</b>
- * When you declare the param tag, the value can be defined in either a <tt>value</tt> attribute or
- * as text between the start and end tag. Struts behaves a bit different according to these two situations.
- * This is best illustrated using an example:
- * <br/>&lt;param name="color"&gt;blue&lt;/param&gt; &lt;-- (A) --&gt;
- * <br/>&lt;param name="color" value="blue"/&gt; &lt;-- (B) --&gt;
- * <br/>In the first situation (A) the value would be evaluated to the stack as a <tt>java.lang.String</tt> object.
- * And in situation (B) the value would be evaluated to the stack as a <tt>java.lang.Object</tt> object.
- * <br/>For more information see <a href="http://jira.opensymphony.com/browse/WW-808">WW-808</a>.
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- * <!-- START SNIPPET: example -->
- * <pre>
- * &lt;ui:component&gt;
- *  &lt;ui:param name="key"     value="[0]"/&gt;
- *  &lt;ui:param name="value"   value="[1]"/&gt;
- *  &lt;ui:param name="context" value="[2]"/&gt;
- * &lt;/ui:component&gt;
- * </pre>
- * <!-- END SNIPPET: example -->
- * <p/>
- * <!-- START SNIPPET: exampledescription -->
- * where the key will be the identifier and the value the result of an OGNL expression run against the current
- * ValueStack.
- * <!-- END SNIPPET: exampledescription -->
- * <p/>
- * This second example demonstrates how the text tag can use parameters from this param tag.
- * <!-- START SNIPPET: example2 -->
- * <pre>
- * &lt;s:text name="cart.total.cost"&gt;
- *     &lt;s:param value="#session.cartTotal"/&gt;
- * &lt;/s:text&gt;
- * </pre>
- * <!-- END SNIPPET: example2 -->
- * <p/>
- *
- * @see Include
- * @see Bean
- * @see Text
- *
- * @s.tag name="param" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ParamTag"
- * description="Parametrize other tags"
- */
-public class Param extends Component {
-    protected String name;
-    protected String value;
-
-    public Param(ValueStack stack) {
-        super(stack);
-    }
-
-    public boolean end(Writer writer, String body) {
-        Component component = findAncestor(Component.class);
-        if (value != null) {
-            if (component instanceof UnnamedParametric) {
-                ((UnnamedParametric) component).addParameter(findValue(value));
-            } else {
-                String name = findString(this.name);
-
-                if (name == null) {
-                    throw new StrutsException("No name found for following expression: " + name);
-                }
-
-                Object value = findValue(this.value);
-                component.addParameter(name, value);
-            }
-        } else {
-            if (component instanceof UnnamedParametric) {
-                ((UnnamedParametric) component).addParameter(body);
-            } else {
-                component.addParameter(findString(name), body);
-            }
-        }
-
-        return super.end(writer, "");
-    }
-
-    public boolean usesBody() {
-        return true;
-    }
-
-    /**
-     * Name of Parameter to set
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Value expression for Parameter to set
-     * @s.tagattribute required="false" default="The value of evaluating provided name against stack"
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-
-    /**
-     * Tags can implement this to support nested param tags without the <tt>name</tt> attribute.
-     * <p/>
-     * The {@link Text TextTag} uses this approach. For unnamed parameters an example is given in the class
-     * javadoc for {@link Param ParamTag}.
-     */
-    public interface UnnamedParametric {
-
-        /**
-         * Adds the given value as a parameter to the outer tag.
-         * @param value  the value
-         */
-        public void addParameter(Object value);
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Password.java b/trunk/core/src/main/java/org/apache/struts2/components/Password.java
deleted file mode 100644
index 3b2b92a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Password.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Render an HTML input tag of type password.</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- * <p/>
- * <!-- START SNIPPET: exdescription -->
- * In this example, a password control is displayed. For the label, we are calling ActionSupport's getText() to
- * retrieve password label from a resource bundle.<p/>
- * <!-- END SNIPPET: exdescription -->
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:password label="%{text('password')}" name="password" size="10" maxlength="15" /&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="password" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.PasswordTag"
- * description="Render an HTML input tag of type password"
- */
-public class Password extends TextField {
-    final public static String TEMPLATE = "password";
-
-    protected String showPassword;
-
-    public Password(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        if (showPassword != null) {
-            addParameter("showPassword", findValue(showPassword, Boolean.class));
-        }
-    }
-
-    /**
-     * Whether to show input
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setShowPassword(String showPassword) {
-        this.showPassword = showPassword;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Property.java b/trunk/core/src/main/java/org/apache/struts2/components/Property.java
deleted file mode 100644
index 56b413f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Property.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.IOException;
-import java.io.Writer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.TextUtils;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * 
- * Used to get the property of a <i>value</i>, which will default to the top of
- * the stack if none is specified.
- * 
- * <!-- END SNIPPET: javadoc -->
- * 
- * <p/>
- * 
- *
- * <!-- START SNIPPET: params -->
- * 
- * <ul>
- *      <li>default (String) - The default value to be used if <u>value</u> attribute is null</li>
- *      <li>escape (Boolean) - Escape HTML. Default to true</li>
- *      <li>value (Object) - value to be displayed</li>
- * </ul>
- * 
- * <!-- END SNIPPET: params -->
- *
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * <s:push value="myBean">
- *     <!-- Example 1: -->
- *     <s:property value="myBeanProperty" />
- *
- *     <!-- Example 2: -->TextUtils
- *     <s:property value="myBeanProperty" default="a default value" />
- * </s:push>
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * <pre>
- * <!-- START SNIPPET: exampledescription -->
- * 
- * Example 1 prints the result of myBean's getMyBeanProperty() method.
- * Example 2 prints the result of myBean's getMyBeanProperty() method and if it is null, print 'a default value' instead.
- * 
- * <!-- END SNIPPET: exampledescription -->
- * </pre>
- * 
- * 
- * <pre>
- * <!-- START SNIPPET: i18nExample -->
- * 
- * &lt;s:property value="getText('some.key')" /&gt;
- * 
- * <!-- END SNIPPET: i18nExample -->
- * </pre>
- *
- * @s.tag name="property" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.PropertyTag"
- * description="Print out expression which evaluates against the stack"
- */
-public class Property extends Component {
-    private static final Log LOG = LogFactory.getLog(Property.class);
-
-    public Property(ValueStack stack) {
-        super(stack);
-    }
-
-    private String defaultValue;
-    private String value;
-    private boolean escape = true;
-
-    /**
-     * The default value to be used if <u>value</u> attribute is null
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setDefault(String defaultValue) {
-        this.defaultValue = defaultValue;
-    }
-
-    /**
-     * Whether to escape HTML
-     * @s.tagattribute required="false" type="Boolean" default="true"
-     */
-    public void setEscape(boolean escape) {
-        this.escape = escape;
-    }
-
-    /**
-     * value to be displayed
-     * @s.tagattribute required="false" type="Object" default="&lt;top of stack&gt;"
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public boolean start(Writer writer) {
-        boolean result = super.start(writer);
-
-        String actualValue = null;
-
-        if (value == null) {
-            value = "top";
-        }
-        else if (altSyntax()) {
-            // the same logic as with findValue(String)
-            // if value start with %{ and end with }, just cut it off!
-            if (value.startsWith("%{") && value.endsWith("}")) {
-                value = value.substring(2, value.length() - 1);
-            }
-        }
-
-        // exception: don't call findString(), since we don't want the
-        //            expression parsed in this one case. it really
-        //            doesn't make sense, in fact.
-        actualValue = (String) getStack().findValue(value, String.class);
-
-        try {
-            if (actualValue != null) {
-                writer.write(prepare(actualValue));
-            } else if (defaultValue != null) {
-                writer.write(prepare(defaultValue));
-            }
-        } catch (IOException e) {
-            LOG.info("Could not print out value '" + value + "'", e);
-        }
-
-        return result;
-    }
-
-    private String prepare(String value) {
-        if (escape) {
-            return TextUtils.htmlEncode(value);
-        } else {
-            return value;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Push.java b/trunk/core/src/main/java/org/apache/struts2/components/Push.java
deleted file mode 100644
index 378baee..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Push.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p>Push value on stack for simplified usage.</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <!-- START SNIPPET: params -->
- * <ul>
- * 		<li>value* (Object) - value to be pushed into the top of the stack</li>
- * </ul>
- * <!-- END SNIPPET: params -->
- *
- *
- * <p/> <b>Examples</b>
- * <pre>
- * <!-- START SNIPPET: example1 -->
- * &lt;s:push value="user"&gt;
- *     &lt;s:propery value="firstName" /&gt;
- *     &lt;s:propery value="lastName" /&gt;
- * &lt;/s:push&gt;
- * <!-- END SNIPPET: example1 -->
- * </pre>
- * 
- * <!-- START SNIPPET: example1description -->
- * Pushed user into the stack, and hence property tag could access user's properties 
- * (firstName, lastName etc) since user is not at the top of the stack
- * <!-- END SNIPPET: example1description -->
- * 
- * <pre>
- * <!-- START SNIPPET: example2 -->
- *  &lt;s:push value="myObject"&gt;                              ----- (1)
- *       &lt;s:bean name="jp.SomeBean" id="myBean"/&gt;        ----- (2)
- * 		    &lt;s:param name="myParam" value="top"/&gt;        ----- (3)
- *       &lt;/s:bean&gt;
- *   &lt;/s:push&gt;
- * <!-- END SNIPPET: example2 -->
- * </pre>
- * 
- * <pre>
- * <!-- START SNIPPET: example2description -->
- * when in (1), myObject is at the top of the stack
- * when in (2), jp.SomeBean is in the top of stack, also in stack's context with key myBean
- * when in (3), top will get the jp.SomeBean instance
- * <!-- END SNIPPET: example2description -->
- * </pre>
- * 
- * <pre>
- * <!-- START SNIPPET: example3 -->
- * &lt;s:push value="myObject"&gt;                                       ---(A)
- *    &lt;s:bean name="jp.SomeBean" id="myBean"/&gt;                   ---(B)
- *       &lt;s:param name="myParam" value="top.mySomeOtherValue"/&gt;  ---(C)
- *    &lt;/s:bean&gt;
- * &lt;/s:push&gt;
- * <!-- END SNIPPET: example3 -->
- * </pre>
- * 
- * <pre>
- * <!-- START SNIPPET: example3description -->
- * when in (A), myObject is at the top of the stack
- * when in (B), jp.SomeBean is at the top of the stack, also in context with key myBean
- * when in (C), top refers to jp.SomeBean instance. so top.mySomeOtherValue would invoke SomeBean's mySomeOtherValue() method
- * <!-- END SNIPPET: example3description -->
- * </pre>
- * 
- * <pre>
- * <!-- START SNIPPET: example4 -->       
- * &lt;s:push value="myObject"&gt;                                 ---- (i)
- *    &lt;s:bean name="jp.SomeBean" id="myBean"/&gt;             ---- (ii)
- *       &lt;s:param name="myParam" value="[1].top"/&gt;         -----(iii)
- *    &lt;/s:bean&gt;
- * &lt;/s:push&gt;
- * <!-- END SNIPPET: example4 -->
- * </pre>
- * 
- * <pre>
- * <!-- START SNIPPET: example4description -->
- * when in (i), myObject is at the top of the stack
- * when in (ii), jp.SomeBean is at the top of the stack, followed by myObject
- * when in (iii), [1].top will returned top of the cut of stack starting from myObject, namely myObject itself 
- * <!-- END SNIPPET: example4description -->
- * </pre>
- * 
- * @s.tag name="push" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.PushTag"
- * description="Push value on stack for simplified usage."
- */
-public class Push extends Component {
-    protected String value;
-    protected boolean pushed;
-
-    public Push(ValueStack stack) {
-        super(stack);
-    }
-
-    public boolean start(Writer writer) {
-        boolean result = super.start(writer);
-
-        ValueStack stack = getStack();
-
-        if (stack != null) {
-            stack.push(findValue(value, "value", "You must specify a value to push on the stack. Example: person"));
-            pushed = true;
-        } else {
-            pushed = false; // need to ensure push is assigned, otherwise we may have a leftover value
-        }
-
-        return result;
-    }
-
-    public boolean end(Writer writer, String body) {
-        ValueStack stack = getStack();
-
-        if (pushed && (stack != null)) {
-            stack.pop();
-        }
-
-        return super.end(writer, body);
-    }
-
-    /**
-     * Value to push on stack
-     * @s.tagattribute required="true"
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Radio.java b/trunk/core/src/main/java/org/apache/struts2/components/Radio.java
deleted file mode 100644
index f48e252..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Radio.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Render a radio button input field.</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- * <p/>
- * <!-- START SNIPPET: exdescription -->
- * In this example, a radio control is displayed with a list of genders. The gender list is built from attribute
- * id=genders. The framework calls getGenders() which will return a Map. For examples using listKey and listValue attributes,
- * see the section select tag. The default selected one will be determined (in this case) by the getMale() method 
- * in the action class which should retun a value similar to the key of the getGenters() map if that particular 
- * gender is to be selected.<p/>
- * <!-- END SNIPPET: exdescription -->
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:action name="GenderMap" id="genders"/&gt;
- * &lt;s:radio label="Gender" name="male" list="#genders.genders"/&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="radio" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.RadioTag"
- * description="Renders a radio button input field"
- */
-public class Radio extends ListUIBean {
-    final public static String TEMPLATE = "radiomap";
-
-    public Radio(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/RemoteCallUIBean.java b/trunk/core/src/main/java/org/apache/struts2/components/RemoteCallUIBean.java
deleted file mode 100644
index 5d5f858..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/RemoteCallUIBean.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * RemoteCallUIBean is superclass for all components dealing with remote calls.
- *
- */
-public abstract class RemoteCallUIBean extends ClosingUIBean {
-
-    protected String href;
-    protected String errorText;
-    protected String showErrorTransportText;
-    protected String afterLoading;
-
-    public RemoteCallUIBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    public void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        if (href != null) {
-            addParameter("href", findString(href));
-        }
-
-        if (showErrorTransportText != null) {
-            addParameter("showErrorTransportText", findValue(showErrorTransportText, Boolean.class));
-        }
-
-        if (errorText != null) {
-            addParameter("errorText", findString(errorText));
-        }
-
-        if (afterLoading != null) {
-            addParameter("afterLoading", findString(afterLoading));
-        }
-    }
-
-    /**
-     * The theme to use for the element. <b>This tag will usually use the ajax theme.</b>
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setTheme(String theme) {
-        super.setTheme(theme);
-    }
-
-    /**
-     * The URL to call to obtain the content
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setHref(String href) {
-        this.href = href;
-    }
-
-    /**
-     * The text to display to the user if the is an error fetching the content
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setErrorText(String errorText) {
-        this.errorText = errorText;
-    }
-
-    /**
-     * when to show the error message as content when the URL had problems
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setShowErrorTransportText(String showErrorTransportText) {
-        this.showErrorTransportText = showErrorTransportText;
-    }
-
-    /**
-     * Javascript code that will be executed after the content has been fetched
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setAfterLoading(String afterLoading) {
-        this.afterLoading = afterLoading;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Reset.java b/trunk/core/src/main/java/org/apache/struts2/components/Reset.java
deleted file mode 100644
index db96b85..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Reset.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Render a reset button. The reset tag is used together with the form tag to provide form resetting.
- * The reset can have two different types of rendering:
- * <ul>
- * <li>input: renders as html &lt;input type="reset"...&gt;</li>
- * <li>button: renders as html &lt;button type="reset"...&gt;</li>
- * </ul>
- * Please note that the button type has advantages by adding the possibility to seperate the submitted value from the
- * text shown on the button face, but has issues with Microsoft Internet Explorer at least up to 6.0
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:reset value="%{'Reset'}" /&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: example2 -->
- * Render an button reset:
- * &lt;s:reset type="button" value="%{'Reset'}" label="Reset the form"/&gt;
- * <!-- END SNIPPET: example2 -->
- * </pre>
- *
- * @s.tag name="reset" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.ResetTag"
- * description="Render a reset button"
- */
-public class Reset extends FormButton {
-    final public static String TEMPLATE = "reset";
-
-    protected String action;
-    protected String method;
-    protected String align;
-    protected String type;
-
-    public Reset(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return Reset.TEMPLATE;
-    }
-
-    public void evaluateParams() {
-
-        if (value == null) {
-            value = "Reset";
-        }
-
-        super.evaluateParams();
-    }
-
-    /**
-     * Indicate whether the concrete button supports the type "image".
-     *
-     * @return <tt>false</tt> to indicate type image is supported.
-     */
-    protected boolean supportsImageType() {
-        return false;
-    }
-
-    /**
-     * Supply a reset button text apart from reset value. Will have no effect for <i>input</i> type reset, since button
-     * text will always be the value parameter.
-     *
-     * @s.tagattribute required="false"
-     */
-    public void setLabel(String label) {
-        super.setLabel(label);
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Select.java b/trunk/core/src/main/java/org/apache/struts2/components/Select.java
deleted file mode 100644
index 0335b6f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Select.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * 
- * Render an HTML input tag of type select. 
- * 
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;s:select label="Pets"
- *        name="petIds"
- *        list="petDao.pets"
- *        listKey="id"
- *        listValue="name"
- *        multiple="true"
- *        size="3"
- *        required="true"
- * /&gt;
- *
- * &lt;s:select label="Months"
- *        name="months"
- *        headerKey="-1" headerValue="Select Month"
- *        list="#{'01':'Jan', '02':'Feb', [...]}"
- *        value="selectedMonth"
- *        required="true"
- * /&gt;
- *
- * // The month id (01, 02, ...) returned by the getSelectedMonth() call
- * // against the stack will be auto-selected
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * <p/>
- * 
- * <!-- START SNIPPET: exnote -->
- * 
- * Note: For any of the tags that use lists (select probably being the most ubiquitous), which uses the OGNL list
- * notation (see the "months" example above), it should be noted that the map key created (in the months example,
- * the '01', '02', etc.) is typed. '1' is a char, '01' is a String, "1" is a String. This is important since if
- * the value returned by your "value" attribute is NOT the same type as the key in the "list" attribute, they
- * WILL NOT MATCH, even though their String values may be equivalent. If they don't match, nothing in your list
- * will be auto-selected.<p/>
- * 
- * <!-- END SNIPPET: exnote -->
- *
- * @s.tag name="select" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.SelectTag"
- * description="Render a select element"
- */
-public class Select extends ListUIBean {
-    final public static String TEMPLATE = "select";
-
-    protected String emptyOption;
-    protected String headerKey;
-    protected String headerValue;
-    protected String multiple;
-    protected String size;
-
-    public Select(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        if (emptyOption != null) {
-            addParameter("emptyOption", findValue(emptyOption, Boolean.class));
-        }
-
-        if (multiple != null) {
-            addParameter("multiple", findValue(multiple, Boolean.class));
-        }
-
-        if (size != null) {
-            addParameter("size", findString(size));
-        }
-
-        if ((headerKey != null) && (headerValue != null)) {
-            addParameter("headerKey", findString(headerKey));
-            addParameter("headerValue", findString(headerValue));
-        }
-    }
-
-    /**
-     * Whether or not to add an empty (--) option after the header option
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setEmptyOption(String emptyOption) {
-        this.emptyOption = emptyOption;
-    }
-
-    /**
-     * Key for first item in list. Must not be empty! "'-1'" and "''" is correct, "" is bad.
-     * @s.tagattribute required="false"
-     */
-    public void setHeaderKey(String headerKey) {
-        this.headerKey = headerKey;
-    }
-
-    /**
-     * Value expression for first item in list
-     * @s.tagattribute required="false"
-     */
-    public void setHeaderValue(String headerValue) {
-        this.headerValue = headerValue;
-    }
-
-    /**
-     * Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute. Passing a Collection may work too? Haven't tested this.
-     * @s.tagattribute required="false"  type="Boolean" default="false"
-     */
-    public void setMultiple(String multiple) {
-        this.multiple = multiple;
-    }
-
-    /**
-     * Size of the element box (# of elements to show)
-     * @s.tagattribute required="false" type="Integer"
-     */
-    public void setSize(String size) {
-        this.size = size;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Set.java b/trunk/core/src/main/java/org/apache/struts2/components/Set.java
deleted file mode 100644
index a8c8c3e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Set.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p>The set tag assigns a value to a variable in a specified scope. It is useful when you wish to assign a variable to a
- * complex expression and then simply reference that variable each time rather than the complex expression. This is
- * useful in both cases: when the complex expression takes time (performance improvement) or is hard to read (code
- * readability improvement).</P>
- * 
- * The scopes available are as follows :-
- * <ul>
- *   <li>application - the value will be set in application scope according to servlet spec. using the name as its key</li>
- *   <li>session - the value will be set in session scope according to servlet spec. using the name as key </li>
- *   <li>request - the value will be set in request scope according to servlet spec. using the name as key </li>
- *   <li>page - the value will be set in request scope according to servlet sepc. using the name as key</li>
- *   <li>action - the value will be set in the request scope and Struts' action context using the name as key</li>
- * </ul>
- * 
- * NOTE:<p/>
- * If no scope is specified, it will default to action scope.
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Parameters</b>
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li>name* (String): The name of the new variable that is assigned the value of <i>value</i></li>
- *
- * <li>value (Object): The value that is assigned to the variable named <i>name</i></li>
- *
- * <li>scope (String): The scope in which to assign the variable. Can be <b>application</b>, <b>session</b>,
- * <b>request</b>, <b>page</b>, or <b>action</b>. By default it is <b>action</b>.</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:set name="personName" value="person.name"/&gt;
- * Hello, &lt;s:property value="#personName"/&gt;. How are you?
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="set" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.SetTag"
- * description="Assigns a value to a variable in a specified scope"
- */
-public class Set extends Component {
-    protected String name;
-    protected String scope;
-    protected String value;
-
-    public Set(ValueStack stack) {
-        super(stack);
-    }
-
-    public boolean end(Writer writer, String body) {
-        ValueStack stack = getStack();
-
-        if (value == null) {
-            value = "top";
-        }
-
-        Object o = findValue(value);
-
-        String name;
-        if (altSyntax()) {
-            name = findString(this.name, "name", "Name is required");
-        } else {
-            name = this.name;
-
-            if (this.name == null) {
-                throw fieldError("name", "Name is required", null);
-            }
-        }
-
-        if ("application".equalsIgnoreCase(scope)) {
-            stack.setValue("#application['" + name + "']", o);
-        } else if ("session".equalsIgnoreCase(scope)) {
-            stack.setValue("#session['" + name + "']", o);
-        } else if ("request".equalsIgnoreCase(scope)) {
-            stack.setValue("#request['" + name + "']", o);
-        } else if ("page".equalsIgnoreCase(scope)) {
-            stack.setValue("#attr['" + name + "']", o, false);
-        } else {
-            stack.getContext().put(name, o);
-            stack.setValue("#attr['" + name + "']", o, false);
-        }
-
-        return super.end(writer, body);
-    }
-
-    /**
-     * The name of the new variable that is assigned the value of <i>value</i>
-     * @s.tagattribute required="true" type="String"
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * The scope in which to assign the variable. Can be <b>application</b>, <b>session</b>, <b>request</b>, <b>page</b>, or <b>action</b>.
-     * @s.tagattribute required="false" type="String" default="action"
-     */
-    public void setScope(String scope) {
-        this.scope = scope;
-    }
-
-    /**
-     * The value that is assigned to the variable named <i>name</i>
-     * @s.tagattribute required="false"
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Submit.java b/trunk/core/src/main/java/org/apache/struts2/components/Submit.java
deleted file mode 100644
index f173caf..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Submit.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Render a submit button. The submit tag is used together with the form tag to provide asynchronous form submissions.
- * The submit can have three different types of rendering:
- * <ul>
- * <li>input: renders as html &lt;input type="submit"...&gt;</li>
- * <li>image: renders as html &lt;input type="image"...&gt;</li>
- * <li>button: renders as html &lt;button type="submit"...&gt;</li>
- * </ul>
- * Please note that the button type has advantages by adding the possibility to seperate the submitted value from the
- * text shown on the button face, but has issues with Microsoft Internet Explorer at least up to 6.0
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:submit value="%{'Submit'}" /&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * <pre>
- * <!-- START SNIPPET: example2 -->
- * Render an image submit:
- * &lt;s:submit type="image" value="%{'Submit'}" label="Submit the form" src="submit.gif"/&gt;
- * <!-- END SNIPPET: example2 -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: example3 -->
- * Render an button submit:
- * &lt;s:submit type="button" value="%{'Submit'}" label="Submit the form"/&gt;
- * <!-- END SNIPPET: example3 -->
- * </pre>
- *
- * <!-- START SNIPPET: ajaxJavadoc -->
- * <B>THE FOLLOWING IS ONLY VALID WHEN AJAX IS CONFIGURED</B>
- * <ul>
- * 		<li>resultDivId</li>
- * 		<li>notifyTopics</li>
- * 		<li>onLoadJS</li>
- * 		<li>preInvokeJS</li>
- * </ul>
- * The remote form has three basic modes of use, using the resultDivId, 
- * the notifyTopics, or the onLoadJS. You can mix and match any combination of 
- * them to get your desired result. All of these examples are contained in the 
- * Ajax example webapp. Lets go through some scenarios to see how you might use it:
- * <!-- END SNIPPET: ajaxJavadoc -->
- * 
- * <!-- START SNIPPET: ajxExDescription1 -->
- * Show the results in another div. If you want your results to be shown in 
- * a div, use the resultDivId where the id is the id of the div you want them 
- * shown in. This is an inner HTML approah. Your results get jammed into 
- * the div for you. Here is a sample of this approach:
- * <!-- END SNIPPET: ajxExDescription1 -->
- * 
- * <pre>
- * <!-- START SNIPPET: ajxExample1 -->
- * Remote form replacing another div:
- * &lt;div id='two' style="border: 1px solid yellow;"&gt;Initial content&lt;/div&gt;
- * &lt;s:form
- *       id='theForm2'
- *       cssStyle="border: 1px solid green;"
- *       action='/AjaxRemoteForm.action'
- *       method='post'
- *       theme="ajax"&gt;
- *
- *   &lt;input type='text' name='data' value='Struts User' /&gt;
- *   &lt;s:submit value="GO2" theme="ajax" resultDivId="two" /&gt;
- *
- * &lt;/s:form &gt;
- * <!-- END SNIPPET: ajxExample1 -->
- * </pre>
- * 
- * 
- * <!-- START SNIPPET: ajxExDescription2 -->
- * Notify other controls(divs) of a change. Using an pub-sub model you can 
- * notify others that your control changed and they can take the appropriate action. 
- * Most likely they will execute some action to refresh. The notifyTopics does this 
- * for you. You can have many topic names in a comma delimited list. 
- * eg: notifyTopics="newPerson, dataChanged" .
- * Here is an example of this approach:
- * <!-- END SNIPPET: ajxExDescription2 -->
- * 
- * <pre>
- * <!-- START SNIPPET: ajxExample2 -->
- * &lt;s:form id="frm1" action="newPersonWithXMLResult" theme="ajax"  &gt;
- *     &lt;s:textfield label="Name" name="person.name" value="person.name" size="20" required="true" /&gt;
- *     &lt;s:submit id="submitBtn" value="Save" theme="ajax"  cssClass="primary"  notifyTopics="personUpdated, systemWorking" /&gt;
- * &lt;/s:form &gt;
- * 
- * &lt;s:div href="/listPeople.action" theme="ajax" errorText="error opps"
- *         loadingText="loading..." id="cart-body" &gt;
- *     &lt;s:action namespace="" name="listPeople" executeResult="true" /&gt;
- * &lt;/s:div&gt;
- * <!-- END SNIPPET: ajxExample2 -->
- * </pre>
- *
- * <!-- START SNIPPET: ajxExDescription3 -->
- * Massage the results with JavaScript. Say that your result returns some h
- * appy XML and you want to parse it and do lots of cool things with it. 
- * The way to do this is with a onLoadJS handler. Here you provide the name of
- * a JavaScript function to be called back with the result and the event type.
- * The only key is that you must use the variable names 'data' and 'type' when 
- * defining the callback. For example: onLoadJS="myFancyDancyFunction(data, type)".
- * While I talked about XML in this example, your not limited to XML, the data in 
- * the callback will be exactly whats returned as your result.
- * Here is an example of this approach:
- * <!-- END SNIPPET: ajxExDescription3 -->
- *
- * <pre>
- * <!-- START SNIPPET: ajxExample3 -->
- * &lt;script language="JavaScript" type="text/javascript"&gt;
- *     function doGreatThings(data, type) {
- *         //Do whatever with your returned fragment... 
- *         //Perhapps.... if xml...
- *               var xml = dojo.xml.domUtil.createDocumentFromText(data);
- *               var people = xml.getElementsByTagName("person");
- *               for(var i = 0;i < people.length; i ++){
- *                   var person = people[i];
- *                   var name = person.getAttribute("name")
- *                   var id = person.getAttribute("id")
- *                   alert('Thanks dude. Person: ' + name + ' saved great!!!');
- *               }
- *
- *     }
- * &lt;/script&gt;
- *
- * &lt;s:form id="frm1" action="newPersonWithXMLResult" theme="ajax"  &gt;
- *     &lt;s:textfield label="Name" name="person.name" value="person.name" size="20" required="true" /&gt;
- *     &lt;s:submit id="submitBtn" value="Save" theme="ajax"  cssClass="primary"  onLoadJS="doGreatThings(data, type)" /&gt;
- * &lt;/s:form&gt;
- * <!-- END SNIPPET: ajxExample3 -->
- * </pre>
- *
- * @s.tag name="submit" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.SubmitTag"
- * description="Render a submit button"
- */
-public class Submit extends FormButton {
-    final public static String TEMPLATE = "submit";
-
-    protected String resultDivId;
-    protected String onLoadJS;
-    protected String notifyTopics;
-    protected String listenTopics;
-    protected String preInvokeJS;
-    protected String src;
-
-    public Submit(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void evaluateParams() {
-    	if (value == null) {
-            value = "Submit";
-        }
-    	super.evaluateParams();
-    }
-    
-    public void evaluateExtraParams() {
-    	super.evaluateExtraParams();
-
-       /* if (value == null) {
-            value = "Submit";
-        }*/
-
-        //super.evaluateParams();
-
-        if (null != src) {
-            addParameter("src", findString(src));
-        }
-
-        if (null != resultDivId) {
-            addParameter("resultDivId", findString(resultDivId));
-        }
-
-        if (null != onLoadJS) {
-            addParameter("onLoadJS", findString(onLoadJS));
-        }
-
-        if (null != notifyTopics) {
-            addParameter("notifyTopics", findString(notifyTopics));
-        }
-
-        if (null != listenTopics) {
-            addParameter("listenTopics", findString(listenTopics));
-        }
-
-        if (preInvokeJS != null) {
-            addParameter("preInvokeJS", findString(preInvokeJS));
-        }
-
-    }
-
-    /**
-     * Indicate whether the concrete button supports the type "image".
-     *
-     * @return <tt>true</tt> to indicate type image is supported.
-     */
-    protected boolean supportsImageType() {
-        return true;
-    }
-
-    /**
-     * The id of the HTML element to place the result (this can the the form's id or any id on the page.
-     * @s.tagattribute required="false"  type="String"
-     */
-    public void setResultDivId(String resultDivId) {
-        this.resultDivId = resultDivId;
-    }
-
-    /**
-     * Javascript code that will be executed after the form has been submitted. The format is onLoadJS='yourMethodName(data,type)'. NOTE: the words data and type must be left like that if you want the event type and the returned data.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setOnLoadJS(String onLoadJS) {
-        this.onLoadJS = onLoadJS;
-    }
-
-    /**
-     * Topic names to post an event to after the form has been submitted.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setNotifyTopics(String notifyTopics) {
-        this.notifyTopics = notifyTopics;
-    }
-
-    /**
-     * Set listenTopics attribute.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setListenTopics(String listenTopics) {
-        this.listenTopics = listenTopics;
-    }
-
-    /**
-     * Javascript code that will be executed before invokation. The format is preInvokeJS='yourMethodName(data,type)'.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setPreInvokeJS(String preInvokeJS) {
-        this.preInvokeJS = preInvokeJS;
-    }
-
-    /**
-     * Supply a submit button text apart from submit value. Will have no effect for <i>input</i> type submit, since button text will always be the value parameter. For the type <i>image</i>, alt parameter will be set to this value.
-     * @s.tagattribute required="false"
-     */
-    public void setLabel(String label) {
-        super.setLabel(label);
-    }
-
-    /**
-     * Supply an image src for <i>image</i> type submit button. Will have no effect for types <i>input</i> and <i>button</i>.
-     * @s.tagattribute required="false"
-     */
-    public void setSrc(String src) {
-        this.src = src;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/TabbedPanel.java b/trunk/core/src/main/java/org/apache/struts2/components/TabbedPanel.java
deleted file mode 100644
index 750c3f5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/TabbedPanel.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * The tabbedpanel widget is primarily an AJAX component, where each tab can either be local content or remote
- * content (refreshed each time the user selects that tab).</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- * <p/>
- * <!-- START SNIPPET: exdesc -->
- * The following is an example of a tabbedpanel and panel tag utilizing local and remote content.<p/>
- * <!-- END SNIPPET: exdesc -->
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:tabbedPanel id="test2" theme="simple" &gt;
- *     &lt;s:panel id="left" tabName="left" theme="ajax"&gt;
- *         This is the left pane&lt;br/&gt;
- *         &lt;s:form &gt;
- *             &lt;s:textfield name="tt" label="Test Text" /&gt;  &lt;br/&gt;
- *             &lt;s:textfield name="tt2" label="Test Text2" /&gt;
- *         &lt;/s:form&gt;
- *     &lt;/s:panel&gt;
- *     &lt;s:panel remote="true" href="/AjaxTest.action" id="ryh1" theme="ajax" tabName="remote one" /&gt;
- *     &lt;s:panel id="middle" tabName="middle" theme="ajax"&gt;
- *         middle tab&lt;br/&gt;
- *         &lt;s:form &gt;
- *             &lt;s:textfield name="tt" label="Test Text44" /&gt;  &lt;br/&gt;
- *             &lt;s:textfield name="tt2" label="Test Text442" /&gt;
- *         &lt;/s:form&gt;
- *     &lt;/s:panel&gt;
- *     &lt;s:panel remote="true" href="/AjaxTest.action"  id="ryh21" theme="ajax" tabName="remote right" /&gt;
- * &lt;/s:tabbedPanel&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * <p/> <b>Additional Configuration</b>
- *
- * <!-- START SNIPPET: exdesc2 -->
- * If you are looking for the "nifty" rounded corner look, there is additional configuration. This assumes
- * that the background color of the tabs is white. If you are using a different color, please modify the
- * parameter in the Rounded() method.<p/>
- * <!-- END SNIPPET: exdesc2 -->
- *
- * <pre>
- * <!-- START SNIPPET: example2 -->
- * &lt;link rel="stylesheet" type="text/css" href="&lt;s:url value="/struts/tabs.css"/&gt;"&gt;
- * &lt;link rel="stylesheet" type="text/css" href="&lt;s:url value="/struts/niftycorners/niftyCorners.css"/&gt;"&gt;
- * &lt;link rel="stylesheet" type="text/css" href="&lt;s:url value="/struts/niftycorners/niftyPrint.css"/&gt;" media="print"&gt;
- * &lt;script type="text/javascript" src="&lt;s:url value="/struts/niftycorners/nifty.js"/&gt;"&gt;&lt;/script&gt;
- * &lt;script type="text/javascript"&gt;
- *     dojo.event.connect(window, "onload", function() {
- *         if (!NiftyCheck())
- *             return;
- *         Rounded("li.tab_selected", "top", "white", "transparent", "border #ffffffS");
- *         Rounded("li.tab_unselected", "top", "white", "transparent", "border #ffffffS");
- *         // "white" needs to be replaced with the background color
- *     });
- * &lt;/script&gt;
- * <!-- END SNIPPET: example2 -->
- * </pre>
- *
- * <b>Important:</b> Be sure to setup the page containing this tag to be Configured for AJAX
- *
- * @see Panel
- *
- * @s.tag name="tabbedPanel" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TabbedPanelTag"
- * description="Render a tabbedPanel widget."
- */
-public class TabbedPanel extends ClosingUIBean {
-    public static final String TEMPLATE = "tabbedpanel";
-    public static final String TEMPLATE_CLOSE = "tabbedpanel-close";
-    final private static String COMPONENT_NAME = TabbedPanel.class.getName();
-
-    protected List tabs = new ArrayList();
-
-    public TabbedPanel(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    /**
-     * Add a new panel to be rendered.
-     *
-     * @param pane a new panel to be rendered
-     */
-    public void addTab(Panel pane) {
-        tabs.add(pane);
-    }
-
-    /**
-     * Get the list of panel tabs for this tab panel.
-     *
-     * @return the list of panel tabs for this tab panel
-     */
-    public List getTabs() {
-        return tabs;
-    }
-
-    public String getTopicName() {
-        return "topic_tab_" + id + "_selected";
-    }
-
-    protected void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        addParameter("topicName", "topic_tab_" + id + "_selected");
-        addParameter("tabs", tabs);
-
-    }
-
-    public String getDefaultOpenTemplate() {
-        return TEMPLATE;
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE_CLOSE;
-    }
-
-    public String getComponentName() {
-        return COMPONENT_NAME;
-    }
-
-    /**
-     * The id to assign to the component.
-     * @s.tagattribute required="true" type="String"
-     */
-    public void setId(String id) {
-        // This is required to override tld generation attributes to required=true
-        super.setId(id);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Text.java b/trunk/core/src/main/java/org/apache/struts2/components/Text.java
deleted file mode 100644
index 7485b46..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Text.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.TextUtils;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.TextProvider;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Render a I18n text message. 
- * 
- * <p/>
- *
- * The message must be in a resource bundle
- * with the same name as the action that it is associated with. In practice
- * this means that you should create a properties file in the same package
- * as your Java class with the same name as your class, but with .properties
- * extension.
- *
- * <p/>
- *
- * If the named message is not found, then the body of the tag will be used as default message.
- * If no body is used, then the name of the message will be used.
- * 
- * <!-- END SNIPPET: javadoc -->
- *
- *
- *
- * <!-- START SNIPPET: params -->
- * 
- * <ul>
- *      <li>name* (String) - the i18n message key</li>
- * </ul>
- * 
- * <!-- END SNIPPET: params -->
- *
- * <p/>
- *
- * Example:
- * <pre>
- * <!-- START SNIPPET: exdescription -->
- * 
- * Accessing messages from a given bundle (the i18n Shop example bundle in the first example) and using bundle defined through the framework in the second example.</p>
- * 
- * <!-- END SNIPPET: exdescription -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;!-- First Example --&gt;
- * &lt;s:i18n name="struts.action.test.i18n.Shop"&gt;
- *     &lt;s:text name="main.title"/&gt;
- * &lt;/s:i18n&gt;
- *
- * &lt;!-- Second Example --&gt;
- * &lt;s:text name="main.title" /&gt;
- * 
- * &lt;!-- Third Examlpe --&gt;
- * &lt;s:text name="i18n.label.greetings"&gt;
- *    &lt;s:param &gt;Mr Smith&lt;/s:param&gt;
- * &lt;/s:text&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * 
- * <pre>
- * <!-- START SNIPPET: i18nExample -->
- * 
- * &lt;-- Fourth Example --&gt;
- * &lt;s:text name="some.key" /&gt;
- * 
- * &lt;-- Fifth Example --&gt;
- * &lt;s:text name="some.invalid.key" &gt;
- *    The Default Message That Will Be Displayed
- * &lt;/s:text&gt;
- * 
- * <!-- END SNIPPET: i18nExample -->
- * </pre>
- * 
- * @see Param
- *
- * @s.tag name="text" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.TextTag"
- * description="Render a I18n text message."
- */
-public class Text extends Component implements Param.UnnamedParametric {
-    private static final Log LOG = LogFactory.getLog(Text.class);
-
-    protected List values = Collections.EMPTY_LIST;
-    protected String actualName;
-    protected String name;
-
-    public Text(ValueStack stack) {
-        super(stack);
-    }
-
-    /**
-     *  Name of resource property to fetch
-     * @s.tagattribute required="true"
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-    
-    
-    public boolean usesBody() {
-    	// overriding this to true such that EVAL_BODY_BUFFERED is return and 
-    	// bodyContent will be valid hence, text between start & end tag will
-    	// be honoured as default message (WW-1268)
-    	return true;
-    }
-
-    public boolean end(Writer writer, String body) {
-        actualName = findString(name, "name", "You must specify the i18n key. Example: welcome.header");
-        String defaultMessage;
-        if (TextUtils.stringSet(body)) {
-            defaultMessage = body;
-        } else {
-            defaultMessage = actualName;
-        }
-        String msg = null;
-        ValueStack stack = getStack();
-
-        for (Iterator iterator = getStack().getRoot().iterator();
-             iterator.hasNext();) {
-            Object o = iterator.next();
-
-            if (o instanceof TextProvider) {
-                TextProvider tp = (TextProvider) o;
-                msg = tp.getText(actualName, defaultMessage, values, stack);
-
-                break;
-            }
-        }
-
-        if (msg != null) {
-            try {
-                if (getId() == null) {
-                    writer.write(msg);
-                } else {
-                    stack.getContext().put(getId(), msg);
-                }
-            } catch (IOException e) {
-                LOG.error("Could not write out Text tag", e);
-            }
-        }
-
-        return super.end(writer, "");
-    }
-
-    public void addParameter(String key, Object value) {
-        addParameter(value);
-    }
-
-    public void addParameter(Object value) {
-        if (values.isEmpty()) {
-            values = new ArrayList(4);
-        }
-
-        values.add(value);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/TextArea.java b/trunk/core/src/main/java/org/apache/struts2/components/TextArea.java
deleted file mode 100644
index 6d8e494..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/TextArea.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Render HTML textarea tag.</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:textarea label="Comments" name="comments" cols="30" rows="8"/&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @see TabbedPanel
- *
- * @s.tag name="textarea" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TextareaTag"
- * description="Render HTML textarea tag."
- */
-public class TextArea extends UIBean {
-    final public static String TEMPLATE = "textarea";
-
-    protected String cols;
-    protected String readonly;
-    protected String rows;
-    protected String wrap;
-
-    public TextArea(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        if (readonly != null) {
-            addParameter("readonly", findValue(readonly, Boolean.class));
-        }
-
-        if (cols != null) {
-            addParameter("cols", findString(cols));
-        }
-
-        if (rows != null) {
-            addParameter("rows", findString(rows));
-        }
-
-        if (wrap != null) {
-            addParameter("wrap", findString(wrap));
-        }
-    }
-
-    /**
-     * HTML cols attribute
-     * @s.tagattribute required="false" type="Integer"
-     */
-    public void setCols(String cols) {
-        this.cols = cols;
-    }
-
-    /**
-     * Whether the textarea is readonly
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setReadonly(String readonly) {
-        this.readonly = readonly;
-    }
-
-    /**
-     * HTML rows attribute
-     * @s.tagattribute required="false" type="Integer"
-     */
-    public void setRows(String rows) {
-        this.rows = rows;
-    }
-
-    /**
-     * HTML wrap attribute
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setWrap(String wrap) {
-        this.wrap = wrap;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/TextField.java b/trunk/core/src/main/java/org/apache/struts2/components/TextField.java
deleted file mode 100644
index d724983..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/TextField.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Render an HTML input field of type text</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- * <p/>
- * <!-- START SNIPPET: exdescription -->
- * In this example, a text control is rendered. The label is retrieved from a ResourceBundle by calling
- * ActionSupport's getText() method.<p/>
- * <!-- END SNIPPET: exdescription -->
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:textfield label="%{text('user_name')}" name="user" /&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @s.tag name="textfield" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TextFieldTag"
- * description="Render an HTML input field of type text"
- */
-public class TextField extends UIBean {
-    /**
-     * The name of the default template for the TextFieldTag
-     */
-    final public static String TEMPLATE = "text";
-
-
-    protected String maxlength;
-    protected String readonly;
-    protected String size;
-
-    public TextField(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    protected void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        if (size != null) {
-            addParameter("size", findString(size));
-        }
-
-        if (maxlength != null) {
-            addParameter("maxlength", findString(maxlength));
-        }
-
-        if (readonly != null) {
-            addParameter("readonly", findValue(readonly, Boolean.class));
-        }
-    }
-
-    /**
-     * HTML maxlength attribute
-     * @s.tagattribute required="false" type="Integer"
-     */
-    public void setMaxlength(String maxlength) {
-        this.maxlength = maxlength;
-    }
-
-    /**
-     * Deprecated. Use maxlength instead.
-     * @s.tagattribute required="false"
-     */
-    public void setMaxLength(String maxlength) {
-        this.maxlength = maxlength;
-    }
-
-    /**
-     * Whether the input is readonly
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setReadonly(String readonly) {
-        this.readonly = readonly;
-    }
-
-    /**
-     * HTML size attribute
-     * @s.tagattribute required="false" type="Integer"
-     */
-    public void setSize(String size) {
-        this.size = size;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/TimePicker.java b/trunk/core/src/main/java/org/apache/struts2/components/TimePicker.java
deleted file mode 100644
index edc995b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/TimePicker.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Renders timepicker element.</p>
- * Format supported by this component are:-
- * <table border="1">
- *   <tr>
- *   	<td>Format</td>
- *    	<td>Description</td>
- *   </tr>
- *   <tr>
- *   	<td>#HH</td>
- *   	<td>Display hour in two digit format</td>
- *   </tr>
- *   <tr>
- *   	<td>#H</td>
- *    	<td>Try to display hour in one digit format, if cannot use 2 digits</td>
- *   </tr>
- *   <tr>
- *   	<td>#hh</td>
- *   	<td>Display hour in two digit format</td>
- *   </tr>
- *   <tr>
- *   	<td>#h</td>
- *      <td>Try to display hour in one digit format, if cannot use 2 digits</td>
- *   </tr>
- *   <tr>
- *      <td>#mm</td>
- *      <td>Display minutes in 2 digits format</td>
- *   </tr>
- *   <tr>
- *   	<td>#m</td>
- *      <td>Try to display minutes in 2 digits fomrat, if cannot use 2 digits</td>
- *   </tr>
- * </table>
- * 
- * <!-- END SNIPPET: javadoc -->
- * 
- * 
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;s:timepicker label="Show Time" name="showTime" value="05:00" format="#hh:#mm" /&gt;
- * 
- * &lt;s:timepicker label="Dinner Time" name="dinnerTime" format="#hh-#mm" /&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * @version $Date$ $Id$
- */
-public class TimePicker extends TextField {
-
-	final public static String TEMPLATE = "timepicker";
-	
-	protected String format;
-	protected String templatePath;
-	protected String templateCssPath;
-	protected String timeIconPath;
-	protected String size;
-	
-	public TimePicker(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-		super(stack, request, response);
-	}
-
-	protected void evaluateExtraParams() {
-		super.evaluateExtraParams();
-		
-		if (format != null) {
-            addParameter("format", findString(format));
-        }
-        if (timeIconPath != null) {
-        	addParameter("timeIconPath", timeIconPath);
-        }
-        if (templatePath != null) {
-        	addParameter("templatePath", templatePath);
-        }
-        if (templateCssPath != null) {
-        	addParameter("templateCssPath", templateCssPath);
-        }
-        if (size != null) {
-        	addParameter("size", findValue(size, Integer.class));
-        }
-	}
-	
-	protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-	
-	/**
-     * The format to use for time field.
-     * @s.tagattribute required="false" type="String" default="Dateformat specified by language preset (%Y/%m/%d for en)"
-     */
-    public void setFormat(String format) {
-        this.format = format;
-    }
-    
-    /**
-     * The time picker icon path
-     * @s.tagattribute required="false" type="String" default="/struts/dojo/struts/widgets/dateIcon.gif"
-     */
-    public void setTimeIconPath(String timeIconPath) {
-    	this.timeIconPath = timeIconPath;
-    }
-    
-    /**
-     * The time picker template path.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setTemplatePath(String templatePath) {
-    	this.templatePath = templatePath;
-    }
-    
-    /**
-     * The time picker template css path.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setTemplateCssPath(String templateCssPath) {
-    	this.templateCssPath = templateCssPath;
-    }
-    
-    /**
-     * The time picker text field size.
-     * @s.tagattribute required="false" type="String"
-     */
-    public void setSize(String size) {
-    	this.size = size;
-    }
-	
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Token.java b/trunk/core/src/main/java/org/apache/struts2/components/Token.java
deleted file mode 100644
index 1b33f6e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Token.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.util.TokenHelper;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * Stop double-submission of forms.</p>
- *
- * The token tag is used to help with the "double click" submission problem. It is needed if you are using the
- * TokenInterceptor or the TokenSessionInterceptor. The s:token tag merely places a hidden element that contains
- * the unique token.</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;s:token /&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @see org.apache.struts2.interceptor.TokenInterceptor
- * @see org.apache.struts2.interceptor.TokenSessionStoreInterceptor
- *
- * @s.tag name="token" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TokenTag"
- * description="Stop double-submission of forms"
- */
-public class Token extends UIBean {
-    
-    public static final String TEMPLATE = "token";
-
-    public Token(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    /**
-     * First looks for the token in the PageContext using the supplied name (or {@link org.apache.struts2.util.TokenHelper#DEFAULT_TOKEN_NAME}
-     * if no name is provided) so that the same token can be re-used for the scope of a request for the same name. If
-     * the token is not in the PageContext, a new Token is created and set into the Session and the PageContext with
-     * the name.
-     */
-    protected void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        String tokenName;
-        Map parameters = getParameters();
-
-        if (parameters.containsKey("name")) {
-            tokenName = (String) parameters.get("name");
-        } else {
-            if (name == null) {
-                tokenName = TokenHelper.DEFAULT_TOKEN_NAME;
-            } else {
-                tokenName = findString(name);
-
-                if (tokenName == null) {
-                    tokenName = name;
-                }
-            }
-
-            addParameter("name", tokenName);
-        }
-
-        String token = buildToken(tokenName);
-        addParameter("token", token);
-        addParameter("tokenNameField", TokenHelper.TOKEN_NAME_FIELD);
-    }
-
-    /**
-     * This will be removed in a future version of Struts.
-     * @deprecated Templates should use $parameters from now on, not $tag.
-     */
-    public String getTokenNameField() {
-        return TokenHelper.TOKEN_NAME_FIELD;
-    }
-
-    private String buildToken(String name) {
-        Map context = stack.getContext();
-        Object myToken = context.get(name);
-
-        if (myToken == null) {
-            myToken = TokenHelper.setToken(name);
-            context.put(name, myToken);
-        }
-
-        return myToken.toString();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/Tree.java b/trunk/core/src/main/java/org/apache/struts2/components/Tree.java
deleted file mode 100644
index e76f162..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/Tree.java
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Renders a tree widget with AJAX support.<p/>
- * 
- * The id attribute is normally specified, such that it could be looked up using
- * javascript if necessary.<p/>
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt-- statically --&gt;
- * &lt;s:tree id="..." label="..."&gt;
- *    &lt;s:treenode id="..." label="..." /&gt;
- *    &lt;s:treenode id="..." label="..."&gt;
- *        &lt;s:treenode id="..." label="..." /&gt;
- *        &lt;s:treenode id="..." label="..." /&gt;
- *    &;lt;/s:treenode&gt;
- *    &lt;s:treenode id="..." label="..." /&gt;
- * &lt;/s:tree&gt;
- * 
- * &lt;-- dynamically --&gt;
- * &lt;s:tree
- * 			id="..."
- *          rootNode="..."
- *          nodeIdProperty="..."
- *          nodeTitleProperty="..."
- *          childCollectionProperty="..." /&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- *
- * @s.tag name="tree" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TreeTag"
- * description="Render a tree widget."
- */
-public class Tree extends ClosingUIBean {
-    
-	private static final String TEMPLATE = "tree-close";
-    private static final String OPEN_TEMPLATE = "tree";
-    
-    private String toggle = "fade";
-    private String treeSelectedTopic;
-    private String treeExpandedTopic;
-    private String treeCollapsedTopic;
-    protected String rootNodeAttr;
-    protected String childCollectionProperty;
-    protected String nodeTitleProperty;
-    protected String nodeIdProperty;
-    private String showRootGrid;
-    
-    private String showGrid;
-    private String blankIconSrc;
-	private String gridIconSrcL;
-	private String gridIconSrcV;
-	private String gridIconSrcP;
-	private String gridIconSrcC;
-	private String gridIconSrcX;
-	private String gridIconSrcY;
-	private String expandIconSrcPlus;
-	private String expandIconSrcMinus;
-	private String iconWidth;
-	private String iconHeight;
-	private String toggleDuration;
-    private String templateCssPath;
-
-    public Tree(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    public boolean start(Writer writer) {
-        boolean result = super.start(writer);
-
-        if (this.label == null) {
-            if ((rootNodeAttr == null)
-                    || (childCollectionProperty == null)
-                    || (nodeTitleProperty == null)
-                    || (nodeIdProperty == null)) {
-                fieldError("label","The TreeTag requires either a value for 'label' or ALL of 'rootNode', " +
-                        "'childCollectionProperty', 'nodeTitleProperty', and 'nodeIdProperty'", null);
-            }
-        }
-        return result;
-    }
-
-    protected void evaluateExtraParams() {
-        super.evaluateExtraParams();
-
-        if (toggle != null) {
-            addParameter("toggle", findString(toggle));
-        }
-
-        if (treeSelectedTopic != null) {
-            addParameter("treeSelectedTopic", findString(treeSelectedTopic));
-        }
-
-        if (treeExpandedTopic != null) {
-            addParameter("treeExpandedTopic", findString(treeExpandedTopic));
-        }
-
-        if (treeCollapsedTopic != null) {
-            addParameter("treeCollapsedTopic", findString(treeCollapsedTopic));
-        }
-
-        if (rootNodeAttr != null) {
-            addParameter("rootNode", findValue(rootNodeAttr));
-        }
-
-        if (childCollectionProperty != null) {
-            addParameter("childCollectionProperty", findString(childCollectionProperty));
-        }
-
-        if (nodeTitleProperty != null) {
-            addParameter("nodeTitleProperty", findString(nodeTitleProperty));
-        }
-
-        if (nodeIdProperty != null) {
-            addParameter("nodeIdProperty", findString(nodeIdProperty));
-        }
-        
-        if (showRootGrid != null) {
-        	addParameter("showRootGrid", findValue(showRootGrid, Boolean.class));
-        }
-        
-        
-        if (showGrid != null) {
-        	addParameter("showGrid", findValue(showGrid, Boolean.class));
-        }
-        
-        if (blankIconSrc != null) {
-        	addParameter("blankIconSrc", findString(blankIconSrc));
-        }
-        
-    	if (gridIconSrcL != null) {
-    		addParameter("gridIconSrcL", findString(gridIconSrcL));
-    	}
-    	
-    	if (gridIconSrcV != null) {
-    		addParameter("gridIconSrcV", findString(gridIconSrcV));
-    	}
-    	
-    	if (gridIconSrcP != null)  {
-    		addParameter("gridIconSrcP", findString(gridIconSrcP));
-    	}
-    	
-    	if (gridIconSrcC != null) {
-    		addParameter("gridIconSrcC", findString(gridIconSrcC));
-    	}
-    	
-    	if (gridIconSrcX != null) {
-    		addParameter("gridIconSrcX", findString(gridIconSrcX));
-    	}
-    	
-    	if (gridIconSrcY != null) {
-    		addParameter("gridIconSrcY", findString(gridIconSrcY));
-    	}
-    	
-    	if (expandIconSrcPlus != null) {
-    		addParameter("expandIconSrcPlus", findString(expandIconSrcPlus));
-    	}
-    	
-    	if (expandIconSrcMinus != null) {
-    		addParameter("expandIconSrcMinus", findString(expandIconSrcMinus));
-    	}
-    	
-    	if (iconWidth != null) {
-    		addParameter("iconWidth", findValue(iconWidth, Integer.class));
-    	}
-    	if (iconHeight != null) {
-    		addParameter("iconHeight", findValue(iconHeight, Integer.class));
-    	}
-    	if (toggleDuration != null) {
-    		addParameter("toggleDuration", findValue(toggleDuration, Integer.class));
-    	}
-        if (templateCssPath != null) {
-        	addParameter("templateCssPath", findString(templateCssPath));
-        }
-    }
-
-    public String getDefaultOpenTemplate() {
-        return OPEN_TEMPLATE;
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public String getToggle() {
-        return toggle;
-    }
-
-    /**
-     * The toggle property (either 'explode' or 'fade'). Default is 'fade'.
-     * @s.tagattribute required="false"
-     */
-    public void setToggle(String toggle) {
-        this.toggle = toggle;
-    }
-
-    public String getTreeSelectedTopic() {
-        return treeSelectedTopic;
-    }
-
-    /**
-     * The treeSelectedTopic property.
-     * @s.tagattribute required="false"
-     */
-    public void setTreeSelectedTopic(String treeSelectedTopic) {
-        this.treeSelectedTopic = treeSelectedTopic;
-    }
-
-    public String getTreeExpandedTopic() {
-        return treeExpandedTopic;
-    }
-
-    /**
-     * The treeExpandedTopic property.
-     * @s.tagattribute required="false"
-     */
-    public void setTreeExpandedTopic(String treeExpandedTopic) {
-        this.treeExpandedTopic = treeExpandedTopic;
-    }
-
-    public String getTreeCollapsedTopic() {
-        return treeCollapsedTopic;
-    }
-
-    /**
-     * The treeCollapsedTopic property.
-     * @s.tagattribute required="false"
-     */
-    public void setTreeCollapsedTopic(String treeCollapsedTopic) {
-        this.treeCollapsedTopic = treeCollapsedTopic;
-    }
-
-    public String getRootNode() {
-        return rootNodeAttr;
-    }
-
-    /**
-     * The rootNode property.
-     * @s.tagattribute required="false"
-     */
-    public void setRootNode(String rootNode) {
-        this.rootNodeAttr = rootNode;
-    }
-
-    public String getChildCollectionProperty() {
-        return childCollectionProperty;
-    }
-
-    /**
-     * The childCollectionProperty property.
-     * @s.tagattribute required="false"
-     */
-    public void setChildCollectionProperty(String childCollectionProperty) {
-        this.childCollectionProperty = childCollectionProperty;
-    }
-
-    public String getNodeTitleProperty() {
-        return nodeTitleProperty;
-    }
-
-    /**
-     * The nodeTitleProperty property.
-     * @s.tagattribute required="false"
-     */
-    public void setNodeTitleProperty(String nodeTitleProperty) {
-        this.nodeTitleProperty = nodeTitleProperty;
-    }
-
-    public String getNodeIdProperty() {
-        return nodeIdProperty;
-    }
-
-    /**
-     * The nodeIdProperty property.
-     * @s.tagattribute required="false"
-     */
-    public void setNodeIdProperty(String nodeIdProperty) {
-        this.nodeIdProperty = nodeIdProperty;
-    }
-    
-    /**
-     * The showRootGrid property (default true).
-     * @s.tagattribute required="false"
-     */
-    public void setShowRootGrid(String showRootGrid) {
-    	this.showRootGrid = showRootGrid;
-    }
-    
-    public String getShowRootGrid() {
-    	return showRootGrid;
-    }
-
-	public String getBlankIconSrc() {
-		return blankIconSrc;
-	}
-
-	/**
-	 * Blank icon image source.
-	 * @s.tagattribute required="false"
-	 */
-	public void setBlankIconSrc(String blankIconSrc) {
-		this.blankIconSrc = blankIconSrc;
-	}
-
-	public String getExpandIconSrcMinus() {
-		return expandIconSrcMinus;
-	}
-
-	/**
-	 * Expand icon (-) image source.
-	 * @s.tagattribute required="false"
-	 */
-	public void setExpandIconSrcMinus(String expandIconSrcMinus) {
-		this.expandIconSrcMinus = expandIconSrcMinus;
-	}
-
-	public String getExpandIconSrcPlus() {
-		return expandIconSrcPlus;
-	}
-
-	/**
-	 * Expand Icon (+) image source.
-	 * @s.tagattribute required="false"
-	 */
-	public void setExpandIconSrcPlus(String expandIconSrcPlus) {
-		this.expandIconSrcPlus = expandIconSrcPlus;
-	}
-
-	public String getGridIconSrcC() {
-		return gridIconSrcC;
-	}
-
-	/**
-	 * Image source for under child item child icons.
-	 * @s.tagattribute required="false"
-	 */
-	public void setGridIconSrcC(String gridIconSrcC) {
-		this.gridIconSrcC = gridIconSrcC;
-	}
-
-	public String getGridIconSrcL() {
-		return gridIconSrcL;
-	}
-
-	
-	/**
-	 * Image source for last child grid.
-	 * @s.tagattribute required="false"
-	 */
-	public void setGridIconSrcL(String gridIconSrcL) {
-		this.gridIconSrcL = gridIconSrcL;
-	}
-
-	public String getGridIconSrcP() {
-		return gridIconSrcP;
-	}
-
-	/**
-	 * Image source for under parent item child icons.
-	 * @s.tagattribute required="false"
-	 */
-	public void setGridIconSrcP(String gridIconSrcP) {
-		this.gridIconSrcP = gridIconSrcP;
-	}
-
-	public String getGridIconSrcV() {
-		return gridIconSrcV;
-	}
-
-	/**
-	 * Image source for vertical line.
-	 * @s.tagattribute required="false"
-	 */
-	public void setGridIconSrcV(String gridIconSrcV) {
-		this.gridIconSrcV = gridIconSrcV;
-	}
-
-	public String getGridIconSrcX() {
-		return gridIconSrcX;
-	}
-
-	/**
-	 * Image source for grid for sole root item.
-	 * @s.tagattribute required="false"
-	 */
-	public void setGridIconSrcX(String gridIconSrcX) {
-		this.gridIconSrcX = gridIconSrcX;
-	}
-
-	public String getGridIconSrcY() {
-		return gridIconSrcY;
-	}
-
-	/**
-	 * Image source for grid for last root item.
-	 * @s.tagattribute required="false"
-	 */
-	public void setGridIconSrcY(String gridIconSrcY) {
-		this.gridIconSrcY = gridIconSrcY;
-	}
-
-	public String getIconHeight() {
-		return iconHeight;
-	}
-
-	
-	/**
-	 * Icon height (default 18 pixels).
-	 * @s.tagattribute required="false"
-	 */
-	public void setIconHeight(String iconHeight) {
-		this.iconHeight = iconHeight;
-	}
-
-	public String getIconWidth() {
-		return iconWidth;
-	}
-
-	/**
-	 * Icon width (default 19 pixels).
-	 * @s.tagattribute required="false"
-	 */
-	public void setIconWidth(String iconWidth) {
-		this.iconWidth = iconWidth;
-	}
-
-	
-
-	public String getTemplateCssPath() {
-		return templateCssPath;
-	}
-
-	/**
-	 * Template css path (default {contextPath}/struts/tree.css.
-	 * @s.tagattribute required="false"
-	 */
-	public void setTemplateCssPath(String templateCssPath) {
-		this.templateCssPath = templateCssPath;
-	}
-
-	public String getToggleDuration() {
-		return toggleDuration;
-	}
-
-	/**
-	 * Toggle duration (default 150 ms)
-	 * @s.tagattribute required="false"
-	 */
-	public void setToggleDuration(String toggleDuration) {
-		this.toggleDuration = toggleDuration;
-	}
-
-	public String getShowGrid() {
-		return showGrid;
-	}
-
-	/**
-	 * Show grid (default true).
-	 * @s.tagattribute required="false"
-	 */
-	public void setShowGrid(String showGrid) {
-		this.showGrid = showGrid;
-	}
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/TreeNode.java b/trunk/core/src/main/java/org/apache/struts2/components/TreeNode.java
deleted file mode 100644
index a4ad9bc..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/TreeNode.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Renders a tree node within a tree widget with AJAX support.<p/>
- *
- * Either of the following combinations should be used depending on if the tree 
- * is to be constrcted dynamically or statically. <p/>
- * 
- * <b>Dynamically</b>
- * <ul>
- * 		<li>id - id of this tree node</li>
- * 		<li>title - label to be displayed for this tree node</li>
- * </ul>
- * 
- * <b>Statically</b>
- * <ul>
- * 		<li>rootNode - the parent node of which this tree is derived from</li>
- * 		<li>nodeIdProperty - property to obtained this current tree node's id</li>
- * 		<li>nodeTitleProperty - property to obtained this current tree node's title</li>
- * 		<li>childCollectionProperty - property that returnds this current tree node's children</li>
- * </ul>
- *
- * <!-- END SNIPPET: javadoc -->
- *
- * <p/> <b>Examples</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt-- statically --&gt;
- * &lt;s:tree id="..." label="..."&gt;
- *    &lt;s:treenode id="..." label="..." /&gt;
- *    &lt;s:treenode id="..." label="..."&gt;
- *        &lt;s:treenode id="..." label="..." /&gt;
- *        &lt;s:treenode id="..." label="..." /&gt;
- *    &;lt;/s:treenode&gt;
- *    &lt;s:treenode id="..." label="..." /&gt;
- * &lt;/s:tree&gt;
- * 
- * &lt;-- dynamically --&gt;
- * &lt;s:tree
- *          id="..."
- *          rootNode="..."
- *          nodeIdProperty="..."
- *          nodeTitleProperty="..."
- *          childCollectionProperty="..." /&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- *
- * @s.tag name="treenode" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TreeNodeTag"
- * description="Render a tree node within a tree widget."
- */
-public class TreeNode extends ClosingUIBean {
-    private static final String TEMPLATE = "treenode-close";
-    private static final String OPEN_TEMPLATE = "treenode";
-
-    public TreeNode(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    public String getDefaultOpenTemplate() {
-        return OPEN_TEMPLATE;
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    /**
-     * Label expression used for rendering tree node label.
-     * @s.tagattribute required="true"
-     */
-    public void setLabel(String label) {
-        super.setLabel(label);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java b/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
deleted file mode 100644
index 1e34ed3..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
+++ /dev/null
@@ -1,1090 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.components.template.Template;
-import org.apache.struts2.components.template.TemplateEngine;
-import org.apache.struts2.components.template.TemplateEngineManager;
-import org.apache.struts2.components.template.TemplateRenderingContext;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.views.util.ContextUtil;
-
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * UIBean is the standard superclass of all Struts UI componentns.
- * It defines common Struts and html properties all UI components should present for usage.
- *
- * <!-- START SNIPPET: templateRelatedAttributes -->
- *
- * <table border="1">
- *    <thead>
- *       <tr>
- *          <td>Attribute</td>
- *          <td>Theme</td>
- *          <td>Data Types</td>
- *          <td>Description</td>
- *       </tr>
- *    </thead>
- *    <tbody>
- *       <tr>
- *          <td>templateDir</td>
- *          <td>n/a</td>
- *          <td>String</td>
- *          <td>define the template directory</td>
- *       </td>
- *       <tr>
- *          <td>theme</td>
- *          <td>n/a</td>
- *          <td>String</td>
- *          <td>define the theme name</td>
- *       </td>
- *       <tr>
- *          <td>template</td>
- *          <td>n/a</td>
- *          <td>String</td>
- *          <td>define the template name</td>
- *       </td>
- *    </tbody>
- * </table>
- *
- * <!-- END SNIPPET: templateRelatedAttributes -->
- *
- * <p/>
- *
- * <!-- START SNIPPET: generalAttributes -->
- *
- * <table border="1">
- *    <thead>
- *       <tr>
- *          <td>Attribute</td>
- *          <td>Theme</td>
- *          <td>Data Types</td>
- *          <td>Description</td>
- *       </tr>
- *    </thead>
- *    <tbody>
- *       <tr>
- *          <td>cssClass</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>define html class attribute</td>
- *       </tr>
- *       <tr>
- *          <td>cssStyle</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>define html style attribute</td>
- *       </tr>
- *       <tr>
- *          <td>title</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>define html title attribute</td>
- *       </tr>
- *       <tr>
- *          <td>disabled</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>define html disabled attribute</td>
- *       </tr>
- *       <tr>
- *          <td>label</td>
- *          <td>xhtml</td>
- *          <td>String</td>
- *          <td>define label of form element</td>
- *       </tr>
- *       <tr>
- *          <td>labelPosition</td>
- *          <td>xhtml</td>
- *          <td>String</td>
- *          <td>define label position of form element (top/left), default to left</td>
- *       </tr>
- *       <tr>
- *          <td>requiredposition</td>
- *          <td>xhtml</td>
- *          <td>String</td>
- *          <td>define required label position of form element (left/right), default to right</td>
- *       </tr>
- *       <tr>
- *          <td>name</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>Form Element's field name mapping</td>
- *       </tr>
- *       <tr>
- *          <td>required</td>
- *          <td>xhtml</td>
- *          <td>Boolean</td>
- *          <td>add * to label (true to add false otherwise)</td>
- *       </tr>
- *       <tr>
- *          <td>tabIndex</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>define html tabindex attribute</td>
- *       </tr>
- *       <tr>
- *          <td>value</td>
- *          <td>simple</td>
- *          <td>Object</td>
- *          <td>define value of form element</td>
- *       </tr>
- *    </tbody>
- * </table>
- *
- * <!-- END SNIPPET: generalAttributes -->
- *
- * <p/>
- *
- * <!-- START SNIPPET: javascriptRelatedAttributes -->
- *
- * <table border="1">
- *    <thead>
- *       <tr>
- *          <td>Attribute</td>
- *          <td>Theme</td>
- *          <td>Data Types</td>
- *          <td>Description</td>
- *       </tr>
- *    </thead>
- *    <tbody>
- *       <tr>
- *          <td>onclick</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onclick attribute</td>
- *       </tr>
- *       <tr>
- *          <td>ondbclick</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript ondbclick attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onmousedown</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onmousedown attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onmouseup</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onmouseup attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onmouseover</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onmouseover attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onmouseout</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onmouseout attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onfocus</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onfocus attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onblur</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onblur attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onkeypress</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onkeypress attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onkeyup</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onkeyup attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onkeydown</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onkeydown attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onselect</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onselect attribute</td>
- *       </tr>
- *       <tr>
- *          <td>onchange</td>
- *          <td>simple</td>
- *          <td>String</td>
- *          <td>html javascript onchange attribute</td>
- *       </tr>
- *    </tbody>
- * </table>
- *
- * <!-- END SNIPPET: javascriptRelatedAttributes -->
- *
- * <p/>
- *
- * <!-- START SNIPPET: tooltipattributes -->
- *
- * <table border="1">
- *  <tr>
- *     <td>Attribute</td>
- *     <td>Data Type</td>
- *     <td>Default</td>
- *     <td>Description</td>
- *  </tr>
- *  <tr>
- *  	<td>tooltip</td>
- *  	<td>String</td>
- *  	<td>none</td>
- *  	<td>Set the tooltip of this particular component</td>
- *  </tr>
- *  <tr>
- *      <td>jsTooltipEnabled</td>
- *      <td>String</td>
- *      <td>false</td>
- *      <td>Enable js tooltip rendering</td>
- *  </tr>
- *    <tr>
- *   	<td>tooltipIcon</td>
- *   	<td>String</td>
- *   	<td>/struts/static/tooltip/tooltip.gif</td>
- *   	<td>The url to the tooltip icon</td>
- *   <tr>
- *   	<td>tooltipDelay</td>
- *   	<td>String</td>
- *   	<td>500</td>
- *   	<td>Tooltip shows up after the specified timeout (miliseconds). A behavior similar to that of OS based tooltips.</td>
- *   </tr>
- * </table>
- *
- * <!-- END SNIPPET: tooltipattributes -->
- *
- *
- * <!-- START SNIPPET: tooltipdescription -->
- *
- * Every Form UI component (in xhtml / css_xhtml or any others that extends of them) could
- * have tooltip assigned to a them. The Form component's tooltip related attribute once
- * defined will be applicable to all form UI component that is created under it unless
- * explicitly overriden by having the Form UI component itself defined that tooltip attribute.
- *
- * <p/>
- *
- * In Example 1, the textfield will inherit the tooltipDelay adn tooltipIcon attribte from
- * its containing form. In other words, although it doesn't defined a tooltipAboveMousePointer
- * attribute, it will have that attributes inherited from its containing form.
- *
- * <p/>
- *
- * In Example 2, the the textfield will inherite both the tooltipDelay and
- * tooltipIcon attribute from its containing form but tooltipDelay
- * attribute is overriden at the textfield itself. Hence, the textfield actually will
- * have tooltipIcon defined as /myImages/myIcon.gif, inherited from its containing form and
- * tooltipDelay defined as 5000, due to overriden at the textfield itself.
- *
- * <p/>
- *
- * Example 3, 4 and 5 shows different way of setting the tooltipConfig attribute.<br/>
- * <b>Example 3:</b>Set tooltip config through body of param tag<br/>
- * <b>Example 4:</b>Set tooltip config through value attribute of param tag<br/>
- * <b>Example 5:</b>Set tooltip config through tooltipConfig attribute of component tag<br/>
- *
- * <!-- END SNIPPET: tooltipdescription -->
- *
- *
- * <pre>
- * <!-- START SNIPPET: tooltipexample -->
- *
- * &lt;!-- Example 1: --&gt;
- * &lt;s:form
- * 			tooltipConfig="#{'tooltipDelay':'500',
- *                           'tooltipIcon='/myImages/myIcon.gif'}" .... &gt;
- *   ....
- *     &lt;s:textfield label="Customer Name" tooltip="Enter the customer name" .... /&gt;
- *   ....
- * &lt;/s:form&gt;
- *
- * &lt;!-- Example 2: --&gt;
- * &lt;s:form
- *         tooltipConfig="#{'tooltipDelay':'500',
- *          				'tooltipIcon':'/myImages/myIcon.gif'}" ... &gt;
- *   ....
- *     &lt;s:textfield label="Address"
- *          tooltip="Enter your address"
- *          tooltipConfig="#{'tooltipDelay':'5000'}" /&gt;
- *   ....
- * &lt;/s:form&gt;
- *
- *
- * &lt;-- Example 3: --&gt;
- * &lt;s:textfield
- *        label="Customer Name"
- *	      tooltip="One of our customer Details'"&gt;
- *        &lt;s:param name="tooltipConfig"&gt;
- *             tooltipDelay = 500 |
- *             tooltipIcon = /myImages/myIcon.gif 
- *        &lt;/s:param&gt;
- * &lt;/s:textfield&gt;
- *
- *
- * &lt;-- Example 4: --&gt;
- * &lt;s:textfield
- *	        label="Customer Address"
- *	        tooltip="Enter The Customer Address" &gt;
- *	        &lt;s:param
- *              name="tooltipConfig"
- *              value="#{'tooltipDelay':'500',
- *                       'tooltipIcon':'/myImages/myIcon.gif'}" /&gt;
- * &lt;/s:textfield&gt;
- *
- *
- * &lt;-- Example 5: --&gt;
- * &lt;s:textfield
- *          label="Customer Telephone Number"
- *          tooltip="Enter customer Telephone Number"
- *          tooltipConfig="#{'tooltipDelay':'500',
- *                           'tooltipIcon':'/myImages/myIcon.gif'}" /&gt;
- *
- * <!-- END SNIPPET: tooltipexample -->
- * </pre>
- *
- */
-public abstract class UIBean extends Component {
-    private static final Log LOG = LogFactory.getLog(UIBean.class);
-
-    protected HttpServletRequest request;
-    protected HttpServletResponse response;
-
-    public UIBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack);
-        this.request = request;
-        this.response = response;
-        this.templateSuffix = ContextUtil.getTemplateSuffix(stack.getContext());
-    }
-
-    // The templateSuffic to use, overrides the default one if not null.
-    protected String templateSuffix;
-
-    // The template to use, overrides the default one.
-    protected String template;
-
-    // templateDir and theme attributes
-    protected String templateDir;
-    protected String theme;
-
-    protected String cssClass;
-    protected String cssStyle;
-    protected String disabled;
-    protected String label;
-    protected String labelPosition;
-    protected String requiredposition;
-    protected String name;
-    protected String required;
-    protected String tabindex;
-    protected String value;
-    protected String title;
-
-    // HTML scripting events attributes
-    protected String onclick;
-    protected String ondblclick;
-    protected String onmousedown;
-    protected String onmouseup;
-    protected String onmouseover;
-    protected String onmousemove;
-    protected String onmouseout;
-    protected String onfocus;
-    protected String onblur;
-    protected String onkeypress;
-    protected String onkeydown;
-    protected String onkeyup;
-    protected String onselect;
-    protected String onchange;
-    
-    // common html attributes
-    protected String accesskey;
-
-    // javascript tooltip attribute
-    protected String tooltip;
-    protected String tooltipConfig;
-
-
-    public boolean end(Writer writer, String body) {
-        evaluateParams();
-        try {
-            super.end(writer, body, false);
-            mergeTemplate(writer, buildTemplateName(template, getDefaultTemplate()));
-        } catch (Exception e) {
-            LOG.error("error when rendering", e);
-        }
-        finally {
-        	popComponentStack();
-        }
-
-        return false;
-    }
-
-    /**
-     * A contract that requires each concrete UI Tag to specify which template should be used as a default.  For
-     * example, the CheckboxTab might return "checkbox.vm" while the RadioTag might return "radio.vm".  This value
-     * <strong>not</strong> begin with a '/' unless you intend to make the path absolute rather than relative to the
-     * current theme.
-     *
-     * @return The name of the template to be used as the default.
-     */
-    protected abstract String getDefaultTemplate();
-
-    protected Template buildTemplateName(String myTemplate, String myDefaultTemplate) {
-        String template = myDefaultTemplate;
-
-        if (myTemplate != null) {
-            template = findString(myTemplate);
-        }
-
-        String templateDir = getTemplateDir();
-        String theme = getTheme();
-
-        return new Template(templateDir, theme, template);
-
-    }
-
-    protected void mergeTemplate(Writer writer, Template template) throws Exception {
-        final TemplateEngine engine = TemplateEngineManager.getTemplateEngine(template, templateSuffix);
-        if (engine == null) {
-            throw new ConfigurationException("Unable to find a TemplateEngine for template " + template);
-        }
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Rendering template " + template);
-        }
-
-        final TemplateRenderingContext context = new TemplateRenderingContext(template, writer, getStack(), getParameters(), this);
-        engine.renderTemplate(context);
-    }
-
-    public String getTemplateDir() {
-        String templateDir = null;
-
-        if (this.templateDir != null) {
-            templateDir = findString(this.templateDir);
-        }
-
-        // If templateDir is not explicitly given,
-        // try to find attribute which states the dir set to use
-        if ((templateDir == null) || (templateDir.equals(""))) {
-            templateDir = (String) stack.findValue("#attr.templateDir");
-        }
-
-        // Default template set
-        if ((templateDir == null) || (templateDir.equals(""))) {
-            templateDir = Settings.get(StrutsConstants.STRUTS_UI_TEMPLATEDIR);
-        }
-
-        // Defaults to 'template'
-        if ((templateDir == null) || (templateDir.equals(""))) {
-            templateDir = "template";
-        }
-
-        return templateDir;
-    }
-
-    public String getTheme() {
-        String theme = null;
-
-        if (this.theme != null) {
-            theme = findString(this.theme);
-        }
-
-        if ( theme == null || theme.equals("") ) {
-            Form form = (Form) findAncestor(Form.class);
-            if (form != null) {
-                theme = form.getTheme();
-            }
-        }
-
-        // If theme set is not explicitly given,
-        // try to find attribute which states the theme set to use
-        if ((theme == null) || (theme.equals(""))) {
-            theme = (String) stack.findValue("#attr.theme");
-        }
-
-        // Default theme set
-        if ((theme == null) || (theme.equals(""))) {
-            theme = Settings.get(StrutsConstants.STRUTS_UI_THEME);
-        }
-
-        return theme;
-    }
-
-    public void evaluateParams() {
-        addParameter("templateDir", getTemplateDir());
-        addParameter("theme", getTheme());
-
-        String name = null;
-
-        if (this.name != null) {
-            name = findString(this.name);
-            addParameter("name", name);
-        }
-
-        if (label != null) {
-            addParameter("label", findString(label));
-        }
-
-        if (labelPosition != null) {
-            addParameter("labelposition", findString(labelPosition));
-        }
-
-        if (requiredposition != null) {
-            addParameter("requiredposition", findString(requiredposition));
-        }
-
-        if (required != null) {
-            addParameter("required", findValue(required, Boolean.class));
-        }
-
-        if (disabled != null) {
-            addParameter("disabled", findValue(disabled, Boolean.class));
-        }
-
-        if (tabindex != null) {
-            addParameter("tabindex", findString(tabindex));
-        }
-
-        if (onclick != null) {
-            addParameter("onclick", findString(onclick));
-        }
-
-        if (ondblclick != null) {
-            addParameter("ondblclick", findString(ondblclick));
-        }
-
-        if (onmousedown != null) {
-            addParameter("onmousedown", findString(onmousedown));
-        }
-
-        if (onmouseup != null) {
-            addParameter("onmouseup", findString(onmouseup));
-        }
-
-        if (onmouseover != null) {
-            addParameter("onmouseover", findString(onmouseover));
-        }
-
-        if (onmousemove != null) {
-            addParameter("onmousemove", findString(onmousemove));
-        }
-
-        if (onmouseout != null) {
-            addParameter("onmouseout", findString(onmouseout));
-        }
-
-        if (onfocus != null) {
-            addParameter("onfocus", findString(onfocus));
-        }
-
-        if (onblur != null) {
-            addParameter("onblur", findString(onblur));
-        }
-
-        if (onkeypress != null) {
-            addParameter("onkeypress", findString(onkeypress));
-        }
-
-        if (onkeydown != null) {
-            addParameter("onkeydown", findString(onkeydown));
-        }
-
-        if (onkeyup != null) {
-            addParameter("onkeyup", findString(onkeyup));
-        }
-
-        if (onselect != null) {
-            addParameter("onselect", findString(onselect));
-        }
-
-        if (onchange != null) {
-            addParameter("onchange", findString(onchange));
-        }
-
-        if (accesskey != null) {
-        	addParameter("accesskey", findString(accesskey));
-        }
-        
-        if (cssClass != null) {
-            addParameter("cssClass", findString(cssClass));
-        }
-
-        if (cssStyle != null) {
-            addParameter("cssStyle", findString(cssStyle));
-        }
-
-        if (title != null) {
-            addParameter("title", findString(title));
-        }
-
-
-        // see if the value was specified as a parameter already
-        if (parameters.containsKey("value")) {
-            parameters.put("nameValue", parameters.get("value"));
-        } else {
-            if (evaluateNameValue()) {
-                final Class valueClazz = getValueClassType();
-
-                if (valueClazz != null) {
-                    if (value != null) {
-                        addParameter("nameValue", findValue(value, valueClazz));
-                    } else if (name != null) {
-                        String expr = name;
-                        if (altSyntax()) {
-                            expr = "%{" + expr + "}";
-                        }
-
-                        addParameter("nameValue", findValue(expr, valueClazz));
-                    }
-                } else {
-                    if (value != null) {
-                        addParameter("nameValue", findValue(value));
-                    } else if (name != null) {
-                        addParameter("nameValue", findValue(name));
-                    }
-                }
-            }
-        }
-
-        final Form form = (Form) findAncestor(Form.class);
-
-        // create HTML id element
-        populateComponentHtmlId(form);
-
-        if (form != null ) {
-            addParameter("form", form.getParameters());
-
-            if ( name != null ) {
-            	// list should have been created by the form component
-                List tags = (List) form.getParameters().get("tagNames");
-                tags.add(name);
-            }
-        }
-
-
-
-
-
-        // tooltip & tooltipConfig
-        if (tooltipConfig != null) {
-    		addParameter("tooltipConfig", findValue(tooltipConfig));
-    	}
-        if (tooltip != null) {
-        	addParameter("tooltip", findString(tooltip));
-
-        	Map tooltipConfigMap = getTooltipConfig(this);
-
-        	if (form != null) { // inform the containing form that we need tooltip javascript included
-        		form.addParameter("hasTooltip", Boolean.TRUE);
-
-        		// tooltipConfig defined in component itseilf will take precedence
-        		// over those defined in the containing form
-        		Map overallTooltipConfigMap = getTooltipConfig(form);
-        		overallTooltipConfigMap.putAll(tooltipConfigMap); // override parent form's tooltip config
-
-        		for (Iterator i = overallTooltipConfigMap.entrySet().iterator(); i.hasNext(); ) {
-        			Map.Entry entry = (Map.Entry) i.next();
-        			addParameter((String) entry.getKey(), entry.getValue());
-        		}
-        	}
-        	else {
-        		LOG.warn("No ancestor Form found, javascript based tooltip will not work, however standard HTML tooltip using alt and title attribute will still work ");
-        	}
-        }
-        evaluateExtraParams();
-
-    }
-
-    protected String escape(String name) {
-        // escape any possible values that can make the ID painful to work with in JavaScript
-        if (name != null) {
-            return name.replaceAll("[\\.\\[\\]]", "_");
-        } else {
-            return "";
-        }
-    }
-
-    protected void evaluateExtraParams() {
-    }
-
-    protected boolean evaluateNameValue() {
-        return true;
-    }
-
-    protected Class getValueClassType() {
-        return String.class;
-    }
-
-    public void addFormParameter(String key, Object value) {
-        Form form = (Form) findAncestor(Form.class);
-        if (form != null) {
-            form.addParameter(key, value);
-        }
-    }
-
-    protected void enableAncestorFormCustomOnsubmit() {
-    	Form form = (Form) findAncestor(Form.class);
-    	if (form != null) {
-    		form.addParameter("customOnsubmitEnabled", Boolean.TRUE);
-    	} else {
-    		LOG.warn("Cannot find an Ancestor form, custom onsubmit is NOT enabled");
-    	}
-    }
-
-    protected Map getTooltipConfig(UIBean component) {
-    	Object tooltipConfigObj = component.getParameters().get("tooltipConfig");
-    	Map tooltipConfig = new LinkedHashMap();
-
-    	if (tooltipConfigObj instanceof Map) {
-    		// we get this if its configured using
-    		// 1] UI component's tooltipConfig attribute  OR
-    		// 2] <param name="tooltip" value="" /> param tag value attribute
-
-    		tooltipConfig = new LinkedHashMap((Map)tooltipConfigObj);
-    	} else if (tooltipConfigObj instanceof String) {
-
-    		// we get this if its configured using
-    		// <param name="tooltipConfig"> ... </param> tag's body
-    		String tooltipConfigStr = (String) tooltipConfigObj;
-    		String[] tooltipConfigArray = tooltipConfigStr.split("\\|");
-
-    		for (int a=0; a<tooltipConfigArray.length; a++) {
-    			String[] configEntry = ((String)tooltipConfigArray[a].trim()).split("=");
-    			String key = configEntry[0].trim();
-    			String value = null;
-    			if (configEntry.length > 1) {
-    				value = configEntry[1].trim();
-    				tooltipConfig.put(key, value.toString());
-    			}
-    			else {
-    				LOG.warn("component "+component+" tooltip config param "+key+" has no value defined, skipped");
-    			}
-    		}
-    	}
-    	return tooltipConfig;
-    }
-
-    /**
-     * Create HTML id element for the component and populate this component parmaeter
-     * map.
-     * 
-     * The order is as follows :-
-     * <ol>
-     *   <li>This component id attribute</li>
-     *   <li>[containing_form_id]_[this_component_name]</li>
-     *   <li>[this_component_name]</li>
-     * </ol>
-     * 
-     * @param form
-     */
-    protected void populateComponentHtmlId(Form form) {
-    	if (id != null) {
-            // this check is needed for backwards compatibility with 2.1.x
-            if (altSyntax()) {
-                addParameter("id", findString(id));
-            } else {
-                addParameter("id", id);
-            }
-        } else if (form != null) {
-            addParameter("id", form.getParameters().get("id") + "_" + escape(name));
-        } else {
-            addParameter("id", escape(name));
-        }
-    }
-    
-
-    /**
-     * The template directory.
-     * @s.tagattribute required="false"
-     */
-    public void setTemplateDir(String templateDir) {
-    	this.templateDir = templateDir;
-    }
-
-    /**
-     * The theme (other than default) to use for rendering the element
-     * @s.tagattribute required="false"
-      */
-    public void setTheme(String theme) {
-        this.theme = theme;
-    }
-
-    public String getTemplate() {
-        return template;
-    }
-
-    /**
-     * The template (other than default) to use for rendering the element
-     * @s.tagattribute required="false"
-     */
-    public void setTemplate(String template) {
-        this.template = template;
-    }
-
-    /**
-     * The css class to use for element
-     * @s.tagattribute required="false"
-     */
-    public void setCssClass(String cssClass) {
-        this.cssClass = cssClass;
-    }
-
-    /**
-     * The css style definitions for element ro use
-     * @s.tagattribute required="false"
-     */
-    public void setCssStyle(String cssStyle) {
-        this.cssStyle = cssStyle;
-    }
-
-    /**
-     * Set the html title attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    /**
-     * Set the html disabled attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setDisabled(String disabled) {
-        this.disabled = disabled;
-    }
-
-    /**
-     * Label expression used for rendering a element specific label
-     * @s.tagattribute required="false"
-     */
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    /**
-     * define label position of form element (top/left)
-     * @s.tagattribute required="false"
-     */
-    public void setLabelposition(String labelPosition) {
-        this.labelPosition = labelPosition;
-    }
-
-    /**
-     * define required position of required form element (left|right)
-     * @s.tagattribute required="false"
-     */
-    public void setRequiredposition(String requiredposition) {
-        this.requiredposition = requiredposition;
-    }
-
-    /**
-     * The name to set for element
-     * @s.tagattribute required="false"
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * If set to true, the rendered element will indicate that input is required
-     * @s.tagattribute  required="false" type="Boolean" default="false"
-     */
-    public void setRequired(String required) {
-        this.required = required;
-    }
-
-    /**
-     * Set the html tabindex attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setTabindex(String tabindex) {
-        this.tabindex = tabindex;
-    }
-
-    /**
-     * Preset the value of input element.
-     * @s.tagattribute required="false"
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * Set the html onclick attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnclick(String onclick) {
-        this.onclick = onclick;
-    }
-
-    /**
-     * Set the html ondblclick attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOndblclick(String ondblclick) {
-        this.ondblclick = ondblclick;
-    }
-
-    /**
-     * Set the html onmousedown attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnmousedown(String onmousedown) {
-        this.onmousedown = onmousedown;
-    }
-
-    /**
-     * Set the html onmouseup attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnmouseup(String onmouseup) {
-        this.onmouseup = onmouseup;
-    }
-
-    /**
-     * Set the html onmouseover attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnmouseover(String onmouseover) {
-        this.onmouseover = onmouseover;
-    }
-
-    /**
-     * Set the html onmousemove attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnmousemove(String onmousemove) {
-        this.onmousemove = onmousemove;
-    }
-
-    /**
-     * Set the html onmouseout attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnmouseout(String onmouseout) {
-        this.onmouseout = onmouseout;
-    }
-
-    /**
-     * Set the html onfocus attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnfocus(String onfocus) {
-        this.onfocus = onfocus;
-    }
-
-    /**
-     * Set the html onblur attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnblur(String onblur) {
-        this.onblur = onblur;
-    }
-
-    /**
-     * Set the html onkeypress attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnkeypress(String onkeypress) {
-        this.onkeypress = onkeypress;
-    }
-
-    /**
-     * Set the html onkeydown attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnkeydown(String onkeydown) {
-        this.onkeydown = onkeydown;
-    }
-
-    /**
-     * Set the html onkeyup attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnkeyup(String onkeyup) {
-        this.onkeyup = onkeyup;
-    }
-
-    /**
-     * Set the html onselect attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnselect(String onselect) {
-        this.onselect = onselect;
-    }
-
-    /**
-     * Set the html onchange attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setOnchange(String onchange) {
-        this.onchange = onchange;
-    }
-    
-    /**
-     * Set the html accesskey attribute on rendered html element
-     * @s.tagattribute required="false"
-     */
-    public void setAccesskey(String accesskey) {
-    	this.accesskey = accesskey;
-    }
-
-    /**
-     * Set the tooltip of this particular component
-     * @s.tagattribute required="false" type="String" default=""
-     */
-    public void setTooltip(String tooltip) {
-    	this.tooltip = tooltip;
-    }
-
-    /**
-     * Set the tooltip configuration
-     * @s.tagattribute required="false" type="String" default=""
-     */
-    public void setTooltipConfig(String tooltipConfig) {
-    	this.tooltipConfig = tooltipConfig;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/URL.java b/trunk/core/src/main/java/org/apache/struts2/components/URL.java
deleted file mode 100644
index 7a2e67b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/URL.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.portlet.context.PortletActionContext;
-import org.apache.struts2.portlet.util.PortletUrlHelper;
-import org.apache.struts2.views.util.UrlHelper;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.XWorkContinuationConfig;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * 
- * <p>This tag is used to create a URL.</p>
- *
- * <p>You can use the "param" tag inside the body to provide
- * additional request parameters.</p>
- * 
- * <b>NOTE:</b>
- * <p>When includeParams is 'all' or 'get', the parameter defined in param tag will take
- * precedence and will not be overriden if they exists in the parameter submitted. For 
- * example, in Example 3 below, if there is a id parameter in the url where the page this
- * tag is included like http://<host>:<port>/<context>/editUser.action?id=3333&name=John
- * the generated url will be http://<host>:<port>/context>/editUser.action?id=22&name=John
- * cause the parameter defined in the param tag will take precedence.</p>
- * 
- * <!-- END SNIPPET: javadoc -->
- *
- *
- * <!-- START SNIPPET: params -->
- * 
- * <ul>
- *      <li>action (String) - (value or action choose either one, if both exist value takes precedence) action's name (alias) <li>
- *      <li>value (String) - (value or action choose either one, if both exist value takes precedence) the url itself</li>
- *      <li>scheme (String) - http scheme (http, https) default to the scheme this request is in</li>
- *      <li>namespace - action's namespace</li>
- *      <li>method (String) - action's method, default to execute() </li>
- *      <li>encode (Boolean) - url encode the generated url. Default is true</li>
- *      <li>includeParams (String) - The includeParams attribute may have the value 'none', 'get' or 'all'. Default is 'get'.
- *                                   none - include no parameters in the URL
- *                                   get  - include only GET parameters in the URL (default)
- *                                   all  - include both GET and POST parameters in the URL
- *      </li>
- *      <li>includeContext (Boolean) - determine wheather to include the web app context path. Default is true.</li>
- * </ul>
- * 
- * <!-- END SNIPPET: params -->
- *
- * <p/> <b>Examples</b>
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;-- Example 1 --&gt;
- * &lt;s:url value="editGadget.action"&gt;
- *     &lt;s:param name="id" value="%{selected}" /&gt;
- * &lt;/s:url&gt;
- *
- * &lt;-- Example 2 --&gt;
- * &lt;s:url action="editGadget"&gt;
- *     &lt;s:param name="id" value="%{selected}" /&gt;
- * &lt;/s:url&gt;
- * 
- * &lt;-- Example 3--&gt;
- * &lt;s:url includeParams="get"  &gt;
- *     &lt:param name="id" value="%{'22'}" /&gt;
- * &lt;/s:url&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @see Param
- *
- * @s.tag name="url" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.URLTag"
- * description="This tag is used to create a URL"
- */
-public class URL extends Component {
-    private static final Log LOG = LogFactory.getLog(URL.class);
-
-    /**
-     * The includeParams attribute may have the value 'none', 'get' or 'all'.
-     * It is used when the url tag is used without a value attribute.
-     * Its value is looked up on the ValueStack
-     * If no includeParams is specified then 'get' is used.
-     * none - include no parameters in the URL
-     * get  - include only GET parameters in the URL (default)
-     * all  - include both GET and POST parameters in the URL
-     */
-    public static final String NONE = "none";
-    public static final String GET = "get";
-    public static final String ALL = "all";
-
-    private HttpServletRequest req;
-    private HttpServletResponse res;
-
-    protected String includeParams;
-    protected String scheme;
-    protected String value;
-    protected String action;
-    protected String namespace;
-    protected String method;
-    protected boolean encode = true;
-    protected boolean includeContext = true;
-    protected String portletMode;
-    protected String windowState;
-    protected String portletUrlType;
-    protected String anchor;
-
-    public URL(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack);
-        this.req = req;
-        this.res = res;
-    }
-
-    public boolean start(Writer writer) {
-        boolean result = super.start(writer);
-
-        if (value != null) {
-            value = findString(value);
-        }
-
-        // no explicit url set so attach params from current url, do
-        // this at start so body params can override any of these they wish.
-        try {
-        	// ww-1266
-            String includeParams =
-                    Settings.isSet(StrutsConstants.STRUTS_URL_INCLUDEPARAMS) ?
-                    Settings.get(StrutsConstants.STRUTS_URL_INCLUDEPARAMS).toLowerCase() : GET;
-
-
-            if (this.includeParams != null) {
-                includeParams = findString(this.includeParams);
-            }
-
-            if (NONE.equalsIgnoreCase(includeParams)) {
-            	mergeRequestParameters(value, parameters, Collections.EMPTY_MAP);
-                ActionContext.getContext().put(XWorkContinuationConfig.CONTINUE_KEY, null);
-            } else if (ALL.equalsIgnoreCase(includeParams)) {
-                mergeRequestParameters(value, parameters, req.getParameterMap());
-
-                // for ALL also include GET parameters
-                includeGetParameters();
-            } else if (GET.equalsIgnoreCase(includeParams) || (includeParams == null && value == null && action == null)) {
-                includeGetParameters();
-            } else if (includeParams != null) {
-                LOG.warn("Unknown value for includeParams parameter to URL tag: " + includeParams);
-            }
-        } catch (Exception e) {
-            LOG.warn("Unable to put request parameters (" + req.getQueryString() + ") into parameter map.", e);
-        }
-
-
-        return result;
-    }
-
-    private void includeGetParameters() {
-        if(!(Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest())) {
-            String query = extractQueryString();
-            mergeRequestParameters(value, parameters, UrlHelper.parseQueryString(query));
-        }
-    }
-
-    private String extractQueryString() {
-        // Parse the query string to make sure that the parameters come from the query, and not some posted data
-        String query = req.getQueryString();
-
-        if (query != null) {
-            // Remove possible #foobar suffix
-            int idx = query.lastIndexOf('#');
-
-            if (idx != -1) {
-                query = query.substring(0, idx);
-            }
-        }
-        return query;
-    }
-
-    public boolean end(Writer writer, String body) {
-        String scheme = req.getScheme();
-
-        if (this.scheme != null) {
-            scheme = this.scheme;
-        }
-
-        String result;
-        if (value == null && action != null) {
-            if(Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest()) {
-                result = PortletUrlHelper.buildUrl(action, namespace, parameters, portletUrlType, portletMode, windowState);
-            }
-            else {
-                result = determineActionURL(action, namespace, method, req, res, parameters, scheme, includeContext, encode);
-            }
-        } else {
-            if(Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest()) {
-                result = PortletUrlHelper.buildResourceUrl(value, parameters);
-            }
-            else {
-            	String _value = value;
-            	
-            	// We don't include the request parameters cause they would have been 
-            	// prioritised before this [in start(Writer) method]
-            	if (_value != null && _value.indexOf("?") > 0) {
-            		_value = _value.substring(0, _value.indexOf("?"));
-            	}
-                result = UrlHelper.buildUrl(_value, req, res, parameters, scheme, includeContext, encode);
-            }
-        }
-        if ( anchor != null && anchor.length() > 0 ) {
-            result += '#' + anchor;
-        }
-
-        String id = getId();
-
-        if (id != null) {
-            getStack().getContext().put(id, result);
-
-            // add to the request and page scopes as well
-            req.setAttribute(id, result);
-        } else {
-            try {
-                writer.write(result);
-            } catch (IOException e) {
-                throw new StrutsException("IOError: " + e.getMessage(), e);
-            }
-        }
-        return super.end(writer, body);
-    }
-
-    /**
-     * The includeParams attribute may have the value 'none', 'get' or 'all'.
-     * @s.tagattribute required="false" default="get"
-     */
-    public void setIncludeParams(String includeParams) {
-        this.includeParams = includeParams;
-    }
-
-    /**
-     * Set scheme attribute
-     * @s.tagattribute required="false"
-     */
-    public void setScheme(String scheme) {
-        this.scheme = scheme;
-    }
-
-    /**
-     * The target value to use, if not using action
-     * @s.tagattribute required="false"
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * The action generate url for, if not using value
-     * @s.tagattribute required="false"
-     */
-    public void setAction(String action) {
-        this.action = action;
-    }
-
-    /**
-     * The namespace to use
-     * @s.tagattribute required="false"
-     */
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    /**
-     * The method of action to use
-     * @s.tagattribute required="false"
-     */
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-    /**
-     * whether to encode parameters
-     * @s.tagattribute required="false" type="Boolean" default="true"
-     */
-    public void setEncode(boolean encode) {
-        this.encode = encode;
-    }
-
-    /**
-     * whether actual context should be included in url
-     * @s.tagattribute required="false" type="Boolean" default="true"
-     */
-    public void setIncludeContext(boolean includeContext) {
-        this.includeContext = includeContext;
-    }
-    
-    /**
-     * The resulting portlet mode
-     * @s.tagattribute required="false"
-     */
-    public void setPortletMode(String portletMode) {
-        this.portletMode = portletMode;
-    }
-
-    /**
-     * The resulting portlet window state
-     * @s.tagattribute required="false"
-     */
-    public void setWindowState(String windowState) {
-        this.windowState = windowState;
-    }
-
-    /**
-     * Specifies if this should be a portlet render or action url
-     * @s.tagattribute required="false"
-     */
-    public void setPortletUrlType(String portletUrlType) {
-        this.portletUrlType = portletUrlType;
-    }
-
-    /**
-     * The anchor for this URL
-     * @s.tagattribute required="false"
-     */
-    public void setAnchor(String anchor) {
-        this.anchor = anchor;
-    }
-
-
-    /**
-     * Merge request parameters into current parameters. If a parameter is
-     * already present, than the request parameter in the current request and value atrribute 
-     * will not override its value.
-     * 
-     * The priority is as follows:-
-     * <ul>
-     * 	<li>parameter from the current request (least priority)</li>
-     *  <li>parameter form the value attribute (more priority)</li>
-     *  <li>parameter from the param tag (most priority)</li>
-     * </ul>
-     * 
-     * @param value the value attribute (url to be generated by this component)
-     * @param parameters component parameters
-     * @param contextParameters request parameters
-     */
-    protected void mergeRequestParameters(String value, Map parameters, Map contextParameters){
-    	
-    	Map mergedParams = new LinkedHashMap(contextParameters);
-    	
-    	// Merge contextParameters (from current request) with parameters specified in value attribute
-    	// eg. value="someAction.action?id=someId&venue=someVenue" 
-    	// where the parameters specified in value attribute takes priority.
-    	
-    	if (value != null && value.trim().length() > 0 && value.indexOf("?") > 0) {
-    		mergedParams = new LinkedHashMap();
-    		
-    		String queryString = value.substring(value.indexOf("?")+1);
-    		
-    		mergedParams = UrlHelper.parseQueryString(queryString);
-    		for (Iterator iterator = contextParameters.entrySet().iterator(); iterator.hasNext();) {
-    			Map.Entry entry = (Map.Entry) iterator.next();
-    			Object key = entry.getKey();
-    			
-    			if (!mergedParams.containsKey(key)) {
-    				mergedParams.put(key, entry.getValue());
-    			}
-    		}
-    	}
-    	
-    	
-    	// Merge parameters specified in value attribute 
-    	// eg. value="someAction.action?id=someId&venue=someVenue" 
-    	// with parameters specified though param tag 
-    	// eg. <param name="id" value="%{'someId'}" />
-    	// where parameters specified through param tag takes priority.
-    	
-        for (Iterator iterator = mergedParams.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            Object key = entry.getKey();
-            
-            if (!parameters.containsKey(key)) {
-                parameters.put(key, entry.getValue());
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/UpDownSelect.java b/trunk/core/src/main/java/org/apache/struts2/components/UpDownSelect.java
deleted file mode 100644
index 8ece3cd..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/UpDownSelect.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * 
- * Create a Select component with buttons to move the elements in the select component
- * up and down. When the containing form is submited, its elements will be submitted in 
- * the order they are arranged (top to bottom).
- * 
- * <!-- END SNIPPET: javadoc -->
- * 
- * <p/>
- * 
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;!-- Example 1: simple example --&gt;
- * &lt;s:updownselect
- * list="#{'england':'England', 'america':'America', 'germany':'Germany'}" 
- * name="prioritisedFavouriteCountries" 
- * headerKey="-1" 
- * headerValue="--- Please Order Them Accordingly ---" 
- * emptyOption="true" /&gt;
- *
- * &lt;!-- Example 2: more complex example --&gt;
- * &lt;s:updownselect
- * list="defaultFavouriteCartoonCharacters" 
- * name="prioritisedFavouriteCartoonCharacters" 
- * headerKey="-1" 
- * headerValue="--- Please Order ---" 
- * emptyOption="true" 
- * allowMoveUp="true" 
- * allowMoveDown="true" 
- * allowSelectAll="true" 
- * moveUpLabel="Move Up"
- * moveDownLabel="Move Down" 
- * selectAllLabel="Select All" /&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * @version $Date$ $Id$
- * 
- * @s.tag name="updownselect" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.UpDownSelectTag"
- * description="Render a up down select element"
- */
-public class UpDownSelect extends Select {
-	
-	private static final Log _log = LogFactory.getLog(UpDownSelect.class);
-	
-
-	final public static String TEMPLATE = "updownselect";
-	
-	protected String allowMoveUp;
-	protected String allowMoveDown;
-	protected String allowSelectAll;
-	
-	protected String moveUpLabel;
-	protected String moveDownLabel;
-	protected String selectAllLabel;
-	
-	
-	public String getDefaultTemplate() {
-		return TEMPLATE;
-	}
-	
-	public UpDownSelect(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-		super(stack, request, response);
-	}
-	
-	public void evaluateParams() {
-		super.evaluateParams();
-		
-		
-		// override Select's default
-		if (size == null || size.trim().length() <= 0) {
-			addParameter("size", "5");
-		}
-		if (multiple == null || multiple.trim().length() <= 0) {
-			addParameter("multiple", Boolean.TRUE);
-		}
-		
-		
-		
-		if (allowMoveUp != null) {
-			addParameter("allowMoveUp", findValue(allowMoveUp, Boolean.class));
-		}
-		if (allowMoveDown != null) {
-			addParameter("allowMoveDown", findValue(allowMoveDown, Boolean.class));
-		}
-		if (allowSelectAll != null) {
-			addParameter("allowSelectAll", findValue(allowSelectAll, Boolean.class));
-		}
-		
-		if (moveUpLabel != null) {
-			addParameter("moveUpLabel", findString(moveUpLabel));
-		}
-		if (moveDownLabel != null) {
-			addParameter("moveDownLabel", findString(moveDownLabel));
-		}
-		if (selectAllLabel != null) {
-			addParameter("selectAllLabel", findString(selectAllLabel));
-		}
-		
-		
-		// inform our form ancestor about this UpDownSelect so the form knows how to 
-		// auto select all options upon it submission
-		Form ancestorForm = (Form) findAncestor(Form.class);
-		if (ancestorForm != null) {
-			
-			// inform form ancestor that we are using a custom onsubmit
-			enableAncestorFormCustomOnsubmit();
-			
-			Map m = (Map) ancestorForm.getParameters().get("updownselectIds");
-			if (m == null) {
-				// map with key -> id ,  value -> headerKey
-				m = new LinkedHashMap();
-			}
-			m.put(getParameters().get("id"), getParameters().get("headerKey"));
-			ancestorForm.getParameters().put("updownselectIds", m);
-		}
-		else {
-			_log.warn("no ancestor form found for updownselect "+this+", therefore autoselect of all elements upon form submission will not work ");
-		}
-	}
-
-	
-	public String getAllowMoveUp() { 
-		return allowMoveUp;
-	}
-	/**
-     * Whether move up button should be displayed
-	 * @s.tagattribute required="false" type="Boolean" default="true"
-	 */
-	public void setAllowMoveUp(String allowMoveUp) {
-		this.allowMoveUp = allowMoveUp;
-	}
-	
-	
-	
-	public String getAllowMoveDown() {
-		return allowMoveDown;
-	}
-	/**
-     * Whether move down button should be displayed
-	 * @s.tagattribute required="false" type="Boolean" default="true"
-	 */
-	public void setAllowMoveDown(String allowMoveDown) {
-		this.allowMoveDown = allowMoveDown;
-	}
-	
-	
-	
-	public String getAllowSelectAll() {
-		return allowSelectAll;
-	}
-	/**
-     * Whether or not select all button should be displayed
-	 * @s.tagattribute required="false" type="Boolean" default="true"
-	 */
-	public void setAllowSelectAll(String allowSelectAll) {
-		this.allowSelectAll = allowSelectAll;
-	}
-	
-	
-	public String getMoveUpLabel() {
-		return moveUpLabel;
-	}
-	/**
-     * Text to display on the move up button
-	 * @s.tagattribute required="false" type="String" default="^"
-	 */
-	public void setMoveUpLabel(String moveUpLabel) {
-		this.moveUpLabel = moveUpLabel;
-	}
-	
-	
-	
-	public String getMoveDownLabel() {
-		return moveDownLabel;
-	}
-	/**
-     * Text to display on the move down button
-	 * @s.tagattribute required="false" type="String" default="v"
-	 */
-	public void setMoveDownLabel(String moveDownLabel) {
-		this.moveDownLabel = moveDownLabel;
-	}
-	
-
-	
-	public String getSelectAllLabel() {
-		return selectAllLabel;
-	}
-	/**
-     * Text to display on the select all button
-	 * @s.tagattribute required="false" type="String" default="*"
-	 */
-	public void setSelectAllLabel(String selectAllLabel) {
-		this.selectAllLabel = selectAllLabel;
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/AbstractFilterModel.java b/trunk/core/src/main/java/org/apache/struts2/components/table/AbstractFilterModel.java
deleted file mode 100644
index e0fc5cb..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/AbstractFilterModel.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table;
-
-import java.util.Vector;
-
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableModel;
-
-
-/**
- */
-abstract public class AbstractFilterModel extends AbstractTableModel {
-
-    protected TableModel model;
-
-
-    public AbstractFilterModel(TableModel tm) {
-        model = tm;
-    }
-
-
-    public boolean isCellEditable(int par1, int par2) {
-        return model.isCellEditable(par1, par2);
-    }
-
-    public Class getColumnClass(int par1) {
-        return model.getColumnClass(par1);
-    }
-
-    public int getColumnCount() {
-        return model.getColumnCount();
-    }
-
-    public String getColumnName(int par1) {
-        return model.getColumnName(par1);
-    }
-
-    public void setModel(TableModel model) {
-        this.model = model;
-        this.fireTableDataChanged();
-    }
-
-    public TableModel getModel() {
-        return model;
-    }
-
-    public int getRowCount() {
-        return model.getRowCount();
-    }
-
-    public void setValueAt(Object par1, int par2, int par3) {
-        model.setValueAt(par1, par2, par3);
-    }
-
-    public Object getValueAt(int par1, int par2) {
-        return model.getValueAt(par1, par2);
-    }
-
-    public void addRow(Vector data) throws IllegalStateException {
-        if (model instanceof DefaultTableModel) {
-            ((DefaultTableModel) model).addRow(data);
-        } else if (model instanceof AbstractFilterModel) {
-            ((AbstractFilterModel) model).addRow(data);
-        } else {
-            throw (new IllegalStateException("Error attempting to add a row to an underlying model that is not a DefaultTableModel."));
-        }
-    }
-
-    public void removeAllRows() throws ArrayIndexOutOfBoundsException, IllegalStateException {
-        while (this.getRowCount() > 0) {
-            this.removeRow(0);
-        }
-    }
-
-    public void removeRow(int rowNum) throws ArrayIndexOutOfBoundsException, IllegalStateException {
-        if (model instanceof DefaultTableModel) {
-            ((DefaultTableModel) model).removeRow(rowNum);
-        } else if (model instanceof AbstractFilterModel) {
-            ((AbstractFilterModel) model).removeRow(rowNum);
-        } else {
-            throw (new IllegalStateException("Error attempting to remove a row from an underlying model that is not a DefaultTableModel."));
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/RenderFilterModel.java b/trunk/core/src/main/java/org/apache/struts2/components/table/RenderFilterModel.java
deleted file mode 100644
index c9b5469..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/RenderFilterModel.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table;
-
-import javax.swing.table.TableModel;
-
-
-/**
- */
-public class RenderFilterModel extends AbstractFilterModel {
-
-	private static final long serialVersionUID = -2501708467650344057L;
-	
-	private boolean rendered;
-
-
-    public RenderFilterModel(TableModel tm) {
-        super(tm);
-    }
-
-
-    public void setRendered(boolean rendered) {
-        this.rendered = rendered;
-    }
-
-    public boolean isRendered() {
-        return rendered;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/SortFilterModel.java b/trunk/core/src/main/java/org/apache/struts2/components/table/SortFilterModel.java
deleted file mode 100644
index 235d43c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/SortFilterModel.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table;
-
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.ArrayList;
-import java.util.Collections;
-
-import javax.swing.JTable;
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.TableModelListener;
-import javax.swing.table.TableModel;
-
-
-/**
- */
-public class SortFilterModel extends AbstractFilterModel implements TableModelListener, SortableTableModel {
-
-	private static final long serialVersionUID = 2214225803442793597L;
-
-	private ArrayList rows = new ArrayList();
-
-    /**
-     * These are just here to implement the interface
-     */
-    private String _sortDirection = NONE;
-    private boolean dirty = true;
-    private int sortColumn = -1;
-
-
-    public SortFilterModel(TableModel tm) {
-        super(tm);
-        setModel(tm);
-    }
-
-
-    public boolean isCellEditable(int r, int c) {
-        if ((rows.size() > 0) && (r < rows.size())) {
-            return model.isCellEditable(((Row) rows.get(r)).index, c);
-        }
-
-        return false;
-    }
-
-    public void setModel(TableModel tm) {
-        super.setModel(tm);
-        rows.ensureCapacity(model.getRowCount());
-        model.addTableModelListener(this);
-        sortColumn = -1;
-        dirty = true;
-        refresh();
-    }
-
-    public int getSortedColumnNumber() {
-        return sortColumn;
-    }
-
-    public String getSortedDirection(int columnNumber) {
-        if (getSortedColumnNumber() < 0) {
-            return NONE;
-        }
-
-        return _sortDirection;
-    }
-
-    public void setValueAt(Object aValue, int r, int c) {
-        if ((rows.size() > 0) && (r < rows.size())) {
-            model.setValueAt(aValue, ((Row) rows.get(r)).index, c);
-        }
-    }
-
-    /* compute the moved row for the three methods that access
-       model elements
-    */
-    public Object getValueAt(int r, int c) {
-        if ((rows.size() > 0) && (r < rows.size())) {
-            return model.getValueAt(((Row) rows.get(r)).index, c);
-        }
-
-        return null;
-    }
-
-    public void addMouseListener(final JTable table) {
-        table.getTableHeader().addMouseListener(new MouseAdapter() {
-            public void mouseClicked(MouseEvent event) {
-                // check for double click
-                if (event.getClickCount() < 2) {
-                    return;
-                }
-
-                // find column of click and
-                int tableColumn = table.columnAtPoint(event.getPoint());
-
-                // translate to table model index and sort
-                int modelColumn = table.convertColumnIndexToModel(tableColumn);
-                sort(modelColumn);
-            }
-        });
-    }
-
-    public void removeRow(int rowNum) throws ArrayIndexOutOfBoundsException, IllegalStateException {
-        int mappedRow = ((Row) rows.get(rowNum)).index;
-        super.removeRow(mappedRow);
-    }
-
-    public void sort(int columnNumber, String direction) {
-        _sortDirection = ASC;
-        dirty = true;
-        sort(columnNumber);
-
-        if (DESC.equals(direction)) {
-            sort(columnNumber);
-            _sortDirection = DESC;
-        }
-    }
-
-    /**
-     * Implements the TableModelListener interface to receive
-     * notifications of * changes to the table model. SortFilterModel needs
-     * to receive events for adding and removing rows.
-     */
-    public void tableChanged(TableModelEvent e) {
-        dirty = true;
-        refresh();
-        fireTableChanged(e);
-    }
-
-    protected void refresh() {
-        rows.clear();
-
-        for (int i = 0; i < model.getRowCount(); i++) {
-            rows.add(new Row(i));
-        }
-
-        if (dirty && (sortColumn > -1)) {
-            sort(sortColumn);
-        }
-    }
-
-    protected void sort(int c) {
-        boolean sorted = (sortColumn == c);
-        sortColumn = c;
-
-        if (dirty || !sorted) {
-            Collections.sort(rows);
-            dirty = false;
-        } else {
-            Collections.reverse(rows);
-        }
-
-        fireTableDataChanged();
-    }
-
-
-    /* this inner class holds the index of the model row
-     * Rows are compared by looking at the model row entries
-     * in the sort column
-     */
-    private class Row implements Comparable {
-        public int index;
-
-        public Row(int index) {
-            this.index = index;
-        }
-
-        public int compareTo(Object other) {
-            Row otherRow = (Row) other;
-            Object a = model.getValueAt(index, sortColumn);
-            Object b = model.getValueAt(otherRow.index, sortColumn);
-
-            boolean areTheyCompareable = (a instanceof Comparable && b instanceof Comparable && (a.getClass() == b.getClass()));
-
-            if (areTheyCompareable) {
-                return ((Comparable) a).compareTo((Comparable) b);
-            } else {
-                return a.toString().compareTo(b.toString());
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/SortableTableModel.java b/trunk/core/src/main/java/org/apache/struts2/components/table/SortableTableModel.java
deleted file mode 100644
index fbbdf7d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/SortableTableModel.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table;
-
-import javax.swing.table.TableModel;
-
-
-/**
- */
-public interface SortableTableModel extends TableModel {
-
-    final static public String NONE = "NONE";
-    final static public String ASC = "ASC";
-    final static public String DESC = "DESC";
-
-
-    public int getSortedColumnNumber();
-
-    public String getSortedDirection(int columnNumber);
-
-    public void sort(int columnNumber, String direction);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/WebTable.java b/trunk/core/src/main/java/org/apache/struts2/components/table/WebTable.java
deleted file mode 100644
index ea13cc0..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/WebTable.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table;
-
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.swing.table.TableModel;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.components.GenericUIBean;
-import org.apache.struts2.components.table.renderer.CellRenderer;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @s.tag name="table" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.table.WebTableTag"
- * description="Instantiate a JavaBean and place it in the context."
- */
-public class WebTable extends GenericUIBean {
-    private static final Log LOG = LogFactory.getLog(WebTable.class);
-
-    final public static String TEMPLATE = "table";
-
-    protected String sortOrder = SortableTableModel.NONE;
-    protected String modelName = null;
-    protected TableModel model = null;
-    protected WebTableColumn[] columns = null;
-    protected boolean sortableAttr = false;
-    protected int sortColumn = -1;
-    protected int curRow = 0;
-
-    public WebTable(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-    }
-
-    protected String getDefaultTemplate() {
-        return TEMPLATE;
-    }
-
-    public boolean end(Writer writer, String body) {
-        if (sortableAttr && model instanceof SortableTableModel) {
-            LOG.debug("we are looking for " + getSortColumnLinkName());
-
-            String sortColumn = request.getParameter(getSortColumnLinkName());
-            String sortOrder = request.getParameter(getSortOrderLinkName());
-
-            try {
-                if ((sortColumn != null) || (sortOrder != null)) {
-                    if (sortColumn != null) {
-                        try {
-                            this.sortColumn = Integer.parseInt(sortColumn);
-                        } catch (Exception ex) {
-                            if (LOG.isDebugEnabled()) {
-                                LOG.debug("coudn't convert column, take default");
-                            }
-                        }
-                    }
-
-                    if (sortOrder != null) {
-                        this.sortOrder = sortOrder;
-                    }
-                } else {
-                    LOG.debug("no sorting info in the request");
-                }
-
-                if (this.sortColumn >= 0) {
-                    LOG.debug("we have the sortColumn " + Integer.toString(this.sortColumn));
-                    LOG.debug("we have the sortOrder " + this.sortOrder);
-
-                    try {
-                        ((SortableTableModel) model).sort(this.sortColumn, this.sortOrder);
-                    } catch (Exception ex) {
-                        if (LOG.isDebugEnabled()) {
-                            LOG.debug("couldn't sort the data");
-                        }
-                    }
-
-                    LOG.debug("we just sorted the data");
-                }
-            } catch (Exception e) {
-                throw new StrutsException("Error with WebTable: " + toString(e), e);
-            }
-        }
-
-        return super.end(writer, body);
-    }
-
-    public WebTableColumn getColumn(int index) {
-        try {
-            return (columns[index]);
-        } catch (Exception E) {
-            //blank
-        }
-
-        return null;
-    }
-
-    protected void evaluateExtraParams() {
-        if (modelName != null) {
-            modelName = findString(modelName);
-
-            Object obj = stack.findValue(this.modelName);
-
-            if (obj instanceof TableModel) {
-                setModel((TableModel) obj);
-            }
-        }
-
-        super.evaluateExtraParams();
-    }
-
-    protected int getNumberOfVisibleColumns() {
-        int count = 0;
-
-        for (int i = 0; i < columns.length; ++i) {
-            if (!columns[i].isHidden()) {
-                ++count;
-            }
-        }
-
-        return count;
-    }
-
-    public int getColumnCount() {
-        return (columns.length);
-    }
-
-    public void setColumnDisplayName(int column, String displayName) {
-        columns[column].setDisplayName(displayName);
-    }
-
-    public void getColumnDisplayName(int column) {
-        columns[column].getDisplayName();
-    }
-
-    public void setColumnHidden(int column, boolean hide) {
-        columns[column].setHidden(hide);
-    }
-
-    public boolean isColumnHidden(int column) {
-        return columns[column].isHidden();
-    }
-
-    public void setColumnRenderer(int column, CellRenderer renderer) {
-        columns[column].setRenderer(renderer);
-    }
-
-    public CellRenderer getColumnRenderer(int column) {
-        return columns[column].getRenderer();
-    }
-
-    public WebTableColumn[] getColumns() {
-        return columns;
-    }
-
-    public String[] getFormattedRow(int row) {
-        ArrayList data = new ArrayList(getNumberOfVisibleColumns());
-
-        for (int i = 0; i < getColumnCount(); ++i) {
-            if (columns[i].isVisible()) {
-                data.add(columns[i].getRenderer().renderCell(this, model.getValueAt(row, i), row, i));
-            }
-        }
-
-        return (String[]) data.toArray(new String[0]);
-    }
-
-    public void setModel(TableModel model) {
-        this.model = model;
-        columns = new WebTableColumn[this.model.getColumnCount()];
-
-        for (int i = 0; i < columns.length; ++i) {
-            columns[i] = new WebTableColumn(this.model.getColumnName(i), i);
-        }
-
-        if ((sortableAttr) && !(this.model instanceof SortableTableModel)) {
-            this.model = new SortFilterModel(this.model);
-        }
-    }
-
-    public TableModel getModel() {
-        return (model);
-    }
-
-    /**
-     * The name of model to use
-     * @s.tagattribute required="true" type="String"
-     */
-    public void setModelName(String modelName) {
-        this.modelName = modelName;
-    }
-
-    public String getModelName() {
-        return modelName;
-    }
-
-    public Object getRawData(int row, int column) {
-        return model.getValueAt(row, column);
-    }
-
-    public Iterator getRawDataRowIterator() {
-        return new WebTableRowIterator(this, WebTableRowIterator.RAW_DATA);
-    }
-
-    public Object[] getRow(int row) {
-        ArrayList data = new ArrayList(getNumberOfVisibleColumns());
-
-        for (int i = 0; i < getColumnCount(); ++i) {
-            if (columns[i].isVisible()) {
-                data.add(model.getValueAt(row, i));
-            }
-        }
-
-        return data.toArray(new Object[0]);
-    }
-
-    public int getRowCount() {
-        return model.getRowCount();
-    }
-
-    public Iterator getRowIterator() {
-        return new WebTableRowIterator(this);
-    }
-
-    /**
-     * Index of column to sort data by
-     * @s.tagattribute required="false" type="Integer"
-     */
-    public void setSortColumn(int sortColumn) {
-        this.sortColumn = sortColumn;
-    }
-
-    public int getSortColumn() {
-        if (model instanceof SortableTableModel) {
-            return ((SortableTableModel) model).getSortedColumnNumber();
-        }
-
-        return -1;
-    }
-
-    public String getSortColumnLinkName() {
-        return "WEBTABLE_" + modelName + "_SORT_COLUMN";
-    }
-
-    /**
-     * Set sort order. Allowed values are NONE, ASC and DESC
-     * @s.tagattribute required="false" type="String" default="NONE"
-     */
-    public void setSortOrder(String sortOrder) {
-        if (sortOrder.equals(SortableTableModel.NONE)) {
-            this.sortOrder = SortableTableModel.NONE;
-        } else if (sortOrder.equals(SortableTableModel.DESC)) {
-            this.sortOrder = SortableTableModel.DESC;
-        } else if (sortOrder.equals(SortableTableModel.ASC)) {
-            this.sortOrder = SortableTableModel.ASC;
-        } else {
-            this.sortOrder = SortableTableModel.NONE;
-        }
-    }
-
-    public String getSortOrder() {
-        if ((model instanceof SortableTableModel) && (getSortColumn() >= 0)) {
-            return ((SortableTableModel) model).getSortedDirection(getSortColumn());
-        }
-
-        return SortableTableModel.NONE;
-    }
-
-    public String getSortOrderLinkName() {
-        return "WEBTABLE_" + modelName + "_SORT_ORDER";
-    }
-
-    /**
-     * Whether the table should be sortable. Requires that model implements org.apache.struts2.components.table.SortableTableModel if set to true.
-     * @s.tagattribute required="false" type="Boolean" default="false"
-     */
-    public void setSortable(boolean sortable) {
-        sortableAttr = sortable;
-
-        if ((sortableAttr) && (model != null) && !(model instanceof SortableTableModel)) {
-            model = new SortFilterModel(model);
-        }
-    }
-
-    public boolean isSortable() {
-        return sortableAttr;
-    }
-
-    /**
-     * inner class to iteratoe over a row of the table.
-     * It can return formatted data, using the columnRenderer
-     * for the column or it can return the raw data.
-     */
-    public class WebTableRowIterator implements Iterator {
-        public static final int FORMATTED_DATA = 0;
-        public static final int RAW_DATA = 1;
-        protected WebTable _table;
-        protected int _curRow = 0;
-        protected int _mode = 0;
-
-        protected WebTableRowIterator(WebTable table) {
-            this(table, FORMATTED_DATA);
-        }
-
-        protected WebTableRowIterator(WebTable table, int mode) {
-            _table = table;
-            _mode = mode;
-        }
-
-        public boolean hasNext() {
-            if (_table == null) {
-                return false;
-            }
-
-            return (_table.getRowCount() > _curRow);
-        }
-
-        public Object next() throws NoSuchElementException {
-            if (_table == null) {
-                throw new NoSuchElementException("WebTable is null");
-            }
-
-            if (!hasNext()) {
-                throw new NoSuchElementException("Beyond end of WebTable");
-            }
-
-            if (_mode == RAW_DATA) {
-                return _table.getRow(_curRow++);
-            }
-
-            return _table.getFormattedRow(_curRow++);
-        }
-
-        public void remove() throws UnsupportedOperationException, IllegalStateException {
-            throw new UnsupportedOperationException("Remove not supported in WebTable");
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/WebTableColumn.java b/trunk/core/src/main/java/org/apache/struts2/components/table/WebTableColumn.java
deleted file mode 100644
index 0406959..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/WebTableColumn.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table;
-
-import org.apache.struts2.components.table.renderer.CellRenderer;
-import org.apache.struts2.components.table.renderer.DefaultCellRenderer;
-
-
-/**
- */
-public class WebTableColumn {
-
-    static final private CellRenderer DEFAULT_RENDERER = new DefaultCellRenderer();
-
-
-    CellRenderer _renderer = null;
-    String _displayName = null;
-    String _name = null;
-    boolean _hidden = false;
-    int _offset = -1;
-
-
-    public WebTableColumn(String name, int offset) {
-        _name = name;
-        _offset = offset;
-        _displayName = name;
-        _renderer = DEFAULT_RENDERER;
-    }
-
-
-    public void setDisplayName(String displayName) {
-        _displayName = displayName;
-    }
-
-    public String getDisplayName() {
-        return (_displayName);
-    }
-
-    public void setHidden(boolean hidden) {
-        _hidden = hidden;
-    }
-
-    public boolean isHidden() {
-        return _hidden;
-    }
-
-    public String getName() {
-        return (_name);
-    }
-
-    public int getOffset() {
-        return (_offset);
-    }
-
-    public void setRenderer(CellRenderer renderer) {
-        _renderer = renderer;
-    }
-
-    public CellRenderer getRenderer() {
-        return (_renderer);
-    }
-
-    public boolean isVisible() {
-        return !isHidden();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/AbstractCellRenderer.java b/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/AbstractCellRenderer.java
deleted file mode 100644
index 4e901e6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/AbstractCellRenderer.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table.renderer;
-
-import org.apache.struts2.components.table.WebTable;
-
-
-/**
- * this is the base class that most renderers will be derived from.
- * It allows setting the alignment.  Subclasses should set there actuall
- * content by implementing getCellValue
- */
-abstract public class AbstractCellRenderer implements CellRenderer {
-
-    /**
-     * used for horizontal cell alignmnet
-     */
-    protected String _alignment = null;
-
-
-    public void setAlignment(String alignment) {
-        _alignment = alignment;
-    }
-
-    public String getAlignment() {
-        return _alignment;
-    }
-
-    /**
-     * implememnts CellRenderer renderCell.  It sets the alignment.  gets the actual
-     * data from getCellValue
-     */
-    public String renderCell(WebTable table, Object data, int row, int col) {
-        if (isAligned()) {
-            StringBuffer buf = new StringBuffer(256);
-            buf.append("<div align='").append(_alignment).append("'>");
-            buf.append(getCellValue(table, data, row, col));
-            buf.append("</div>");
-
-            return buf.toString();
-        }
-
-        return getCellValue(table, data, row, col);
-    }
-
-    protected boolean isAligned() {
-        return _alignment != null;
-    }
-
-    /**
-     * this is the method that subclasses need to implement to set their value.
-     * they should not override renderCell unless they want to change the alignmnent
-     * renderering
-     */
-    abstract protected String getCellValue(WebTable table, Object data, int row, int col);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/BooleanCellRenderer.java b/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/BooleanCellRenderer.java
deleted file mode 100644
index 44e228f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/BooleanCellRenderer.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table.renderer;
-
-import org.apache.struts2.components.table.WebTable;
-
-
-/**
- */
-public class BooleanCellRenderer extends AbstractCellRenderer {
-
-    /**
-     * value used if the boolean object is false
-     */
-    protected String _falseValue = "false";
-
-    /**
-     * value used if the boolean object is true
-     */
-    protected String _trueValue = "true";
-
-
-    public BooleanCellRenderer() {
-        super();
-    }
-
-
-    public String getCellValue(WebTable table, Object data, int row, int col) {
-        if (data == null) {
-            return "";
-        }
-
-        if (data instanceof Boolean) {
-            return ((Boolean) data).booleanValue() ? _trueValue : _falseValue;
-        }
-
-        return data.toString(); //if here then not a boolean
-    }
-
-    public void setFalseValue(String falseValue) {
-        _falseValue = falseValue;
-    }
-
-    public void setTrueValue(String trueValue) {
-        _trueValue = trueValue;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/CellRenderer.java b/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/CellRenderer.java
deleted file mode 100644
index 40ccd10..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/CellRenderer.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table.renderer;
-
-import org.apache.struts2.components.table.WebTable;
-
-/**
- */
-public interface CellRenderer {
-
-    public String renderCell(WebTable table, Object data, int row, int col);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/DateCellRenderer.java b/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/DateCellRenderer.java
deleted file mode 100644
index ee7d3ca..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/DateCellRenderer.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table.renderer;
-
-import java.text.SimpleDateFormat;
-
-import org.apache.struts2.components.table.WebTable;
-
-
-/**
- */
-public class DateCellRenderer extends AbstractCellRenderer {
-
-    SimpleDateFormat _formater = new SimpleDateFormat();
-
-    /**
-     * this is the string that  SimpleDateFormat needs to display the date
-     *
-     * @see SimpleDateFormat
-     */
-    String _formatString = null;
-
-
-    public DateCellRenderer() {
-        super();
-    }
-
-
-    public String getCellValue(WebTable table, Object data, int row, int col) {
-
-        if (data == null) {
-            return "";
-        }
-
-        if (data instanceof java.util.Date) {
-            return _formater.format((java.util.Date) data);
-        }
-
-        return data.toString();
-    }
-
-    public void setFormatString(String format) {
-        _formatString = format;
-        _formater.applyPattern(_formatString);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/DefaultCellRenderer.java b/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/DefaultCellRenderer.java
deleted file mode 100644
index 032a508..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/DefaultCellRenderer.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table.renderer;
-
-import org.apache.struts2.components.table.WebTable;
-
-
-/**
- */
-public class DefaultCellRenderer extends AbstractCellRenderer {
-
-    public DefaultCellRenderer() {
-        super();
-    }
-
-
-    public String getCellValue(WebTable table, Object data, int row, int col) {
-        if (data != null) {
-            return data.toString();
-        }
-
-        return "null";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/FixedTextCellRenderer.java b/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/FixedTextCellRenderer.java
deleted file mode 100644
index 71e2a08..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/FixedTextCellRenderer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table.renderer;
-
-import org.apache.struts2.components.table.WebTable;
-
-
-/**
- * usefull if a column has an embeded ID number needed for a link but you want it to
- * say something else.
- */
-public class FixedTextCellRenderer extends AbstractCellRenderer {
-
-    /**
-     * this is the text that will be shown in the column
-     */
-    protected String _text = "";
-
-
-    public String getCellValue(WebTable table, Object data, int row, int col) {
-        return _text;
-    }
-
-    public void setText(String text) {
-        _text = text;
-    }
-
-    public String getText() {
-        return _text;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/LinkCellRenderer.java b/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/LinkCellRenderer.java
deleted file mode 100644
index 67e97be..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/LinkCellRenderer.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table.renderer;
-
-import org.apache.struts2.components.table.WebTable;
-
-
-/**
- */
-public class LinkCellRenderer extends AbstractCellRenderer {
-
-    /**
-     * this is the actual renderer tha will be used to display the text
-     */
-    protected CellRenderer _delegateRenderer = new DefaultCellRenderer();
-
-    /**
-     * the CSS class this link belongs to. Optional
-     */
-    protected String _cssClass = null;
-
-    /**
-     * the id attribute this link belongs to. Optional
-     */
-    protected String _cssId = null;
-
-    /**
-     * this is the link we are setting (required)
-     */
-    protected String _link = null;
-
-    /**
-     * the (Java)script/ function to execute when the link is clicked. Optional
-     */
-    protected String _onclick = null;
-
-    /**
-     * the (Java)script/ function to execute when the link is clicked twice. Optional
-     */
-    protected String _ondblclick = null;
-
-    /**
-     * the (Java)script/ function to execute when cursor is away from the link. Optional
-     */
-    protected String _onmouseout = null;
-
-    /**
-     * the (Java)script/ function to execute when cursor is over the link. Optional
-     */
-    protected String _onmouseover = null;
-
-    /**
-     * if set there will be a parameter attached to link.  (optional)
-     * This should be extended to allow multiple parameters
-     */
-    protected String _param = null;
-
-    /**
-     * directly set the value for the param.  Will overide paramColumn if set.
-     * optional.  Either this or paramColumn must be set if param is used.
-     * Will be ignored if param not used
-     */
-    protected String _paramValue = null;
-
-    /**
-     * the target frame to open in. Optional
-     */
-    protected String _target = null;
-
-    /**
-     * the title attribute this link belongs to. Optional
-     */
-    protected String _title = null;
-
-    /**
-     * additional parameters after the above parameter is generated. Optional
-     */
-    protected String _trailParams = null;
-
-    /**
-     * if used the param value will be taken from another column in the table.  Useful if each row
-     * needs a different paramter.  The paramter can be taken from a hidden cell.
-     * if paramValue is also set it will overrid this.  (option either this or paramValue must be set
-     * if param is used. Will be ignored if param not used
-     */
-    protected int _paramColumn = -1;
-
-
-    public LinkCellRenderer() {
-    }
-
-
-    /**
-     * should the link data be encodeed?
-     */
-    public String getCellValue(WebTable table, Object data, int row, int col) {
-        String value = _delegateRenderer.renderCell(table, data, row, col);
-
-        StringBuffer cell = new StringBuffer(256);
-        cell.append("<a href='").append(_link);
-
-        if (_param != null) {
-            cell.append("?").append(_param).append("=");
-
-            if (_paramValue != null) {
-                cell.append(_paramValue);
-            } else if (_paramColumn >= 0) {
-                cell.append(table.getModel().getValueAt(row, _paramColumn).toString());
-            }
-        }
-
-        if ((_trailParams != null) && !"".equals(_trailParams)) {
-            if (_param == null) {
-                cell.append("?");
-            } else {
-                cell.append("&");
-            }
-
-            cell.append(_trailParams);
-        }
-
-        cell.append("'");
-
-        if ((_target != null) && (!"".equals(_target))) {
-            cell.append(" target='").append(_target).append("'");
-        }
-
-        if ((_cssClass != null) && (!"".equals(_cssClass))) {
-            cell.append(" class='").append(_cssClass).append("'");
-        }
-
-        if ((_cssId != null) && (!"".equals(_cssId))) {
-            cell.append(" id='").append(_cssId).append("'");
-        }
-
-        if ((_title != null) && (!"".equals(_title))) {
-            cell.append(" title='").append(_title).append("'");
-        }
-
-        if ((_onclick != null) && (!"".equals(_onclick))) {
-            cell.append(" onclick='").append(_onclick).append("'");
-        }
-
-        if ((_ondblclick != null) && (!"".equals(_ondblclick))) {
-            cell.append(" ondblclick='").append(_ondblclick).append("'");
-        }
-
-        if ((_onmouseover != null) && (!"".equals(_onmouseover))) {
-            cell.append(" onmouseover='").append(_onmouseover).append("'");
-        }
-
-        if ((_onmouseout != null) && (!"".equals(_onmouseout))) {
-            cell.append(" onmouseout='").append(_onmouseout).append("'");
-        }
-
-        cell.append(">").append(value).append("</a>");
-
-        return cell.toString();
-    }
-
-    public void setCssClass(String cssClass) {
-        _cssClass = cssClass;
-    }
-
-    public void setCssId(String cssId) {
-        _cssId = cssId;
-    }
-
-    public void setLink(String link) {
-        _link = link;
-    }
-
-    public void setOnclick(String onclick) {
-        _onclick = onclick;
-    }
-
-    public void setOndblclick(String ondblclick) {
-        _ondblclick = ondblclick;
-    }
-
-    public void setOnmouseout(String onmouseout) {
-        _onmouseout = onmouseout;
-    }
-
-    public void setOnmouseover(String onmouseover) {
-        _onmouseover = onmouseover;
-    }
-
-    public void setParam(String param) {
-        _param = param;
-    }
-
-    public void setParamColumn(int paramColumn) {
-        _paramColumn = paramColumn;
-    }
-
-    public void setParamValue(String paramValue) {
-        _paramValue = paramValue;
-    }
-
-    /**
-     * used to set the renderer to delgate to.
-     * if the render is an AbstractCellRenderer then it will take the alignment from
-     * the delegate renderer and set it that way.
-     */
-    public void setRenderer(CellRenderer delegateRenderer) {
-        _delegateRenderer = delegateRenderer;
-
-        if (_delegateRenderer instanceof AbstractCellRenderer) {
-            setAlignment(((AbstractCellRenderer) _delegateRenderer).getAlignment());
-        }
-    }
-
-    public void setTarget(String target) {
-        _target = target;
-    }
-
-    public void setTitle(String title) {
-        _title = title;
-    }
-
-    public void setTrailParams(String trailParams) {
-        _trailParams = trailParams;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/NumericCellRenderer.java b/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/NumericCellRenderer.java
deleted file mode 100644
index 420004b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/NumericCellRenderer.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.table.renderer;
-
-import java.text.DecimalFormat;
-
-import org.apache.struts2.components.table.WebTable;
-
-
-/**
- */
-public class NumericCellRenderer extends AbstractCellRenderer {
-
-    DecimalFormat _formater = new DecimalFormat();
-
-    /**
-     * this is the format string that DecimalFormat would use.
-     *
-     * @see DecimalFormat
-     */
-    String _formatString = null;
-
-    /**
-     * if set the is the color to use if Number is negative.
-     */
-    String _negativeColor = null;
-
-    /**
-     * if set this is the color to render if number is positive
-     */
-    String _positiveColor = null;
-
-
-    public NumericCellRenderer() {
-        super();
-    }
-
-
-    public String getCellValue(WebTable table, Object data, int row, int col) {
-        StringBuffer retVal = new StringBuffer(128);
-
-        if (data == null) {
-            return "";
-        }
-
-        if (data instanceof Number) {
-            double cellValue = ((Number) data).doubleValue();
-
-            if (cellValue >= 0) {
-                processNumber(retVal, _positiveColor, cellValue);
-            } else {
-                processNumber(retVal, _negativeColor, cellValue);
-            }
-
-            return retVal.toString();
-        }
-
-        return data.toString();
-    }
-
-    public void setFormatString(String format) {
-        _formatString = format;
-        _formater.applyPattern(_formatString);
-    }
-
-    public void setNegativeColor(String color) {
-        _negativeColor = color;
-    }
-
-    public void setPositiveColor(String color) {
-        _positiveColor = color;
-    }
-
-    protected void processNumber(StringBuffer buf, String color, double cellValue) {
-        if (color != null) {
-            buf.append(" <font color='").append(color).append("'>");
-        }
-
-        buf.append(_formater.format(cellValue));
-
-        if (color != null) {
-            buf.append("</font>");
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/package.html b/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/package.html
deleted file mode 100644
index 403e362..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/table/renderer/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>JSP UI tags for rendering table output in HTML.</body>
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java b/trunk/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java
deleted file mode 100644
index a5cf580..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.template;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-
-/**
- * Base class for template engines.
- */
-public abstract class BaseTemplateEngine implements TemplateEngine {
-	
-    private static final Log LOG = LogFactory.getLog(BaseTemplateEngine.class);
-    
-    /** The default theme properties file name. Default is 'theme.properties' */
-    public static final String DEFAULT_THEME_PROPERTIES_FILE_NAME = "theme.properties";
-
-    final Map<String, Properties> themeProps = new HashMap<String, Properties>();
-
-    public Map getThemeProps(Template template) {
-        synchronized (themeProps) {
-            Properties props = (Properties) themeProps.get(template.getTheme());
-            if (props == null) {
-                String propName = template.getDir() + "/" + template.getTheme() + "/"+getThemePropertiesFileName();
-                
-//              WW-1292
-                // let's try getting it from the filesystem
-                File propFile = new File(propName);
-                InputStream is = null;
-                try {
-                	if (propFile.exists()) {
-                		is = new FileInputStream(propFile);
-                	}
-                }
-                catch(FileNotFoundException e) {
-                	LOG.warn("Unable to find file in filesystem ["+propFile.getAbsolutePath()+"]");
-                }
-                
-                if (is == null) {
-                	// if its not in filesystem. let's try the classpath
-                	is = ClassLoaderUtil.getResourceAsStream(propName, getClass());
-                }
-                
-                props = new Properties();
-
-                if (is != null) {
-                    try {
-                        props.load(is);
-                    } catch (IOException e) {
-                        LOG.error("Could not load " + propName, e);
-                    }
-                }
-
-                themeProps.put(template.getTheme(), props);
-            }
-
-            return props;
-        }
-    }
-
-    protected String getFinalTemplateName(Template template) {
-        String t = template.toString();
-        if (t.indexOf(".") <= 0) {
-            return t + "." + getSuffix();
-        }
-
-        return t;
-    }
-    
-    protected String getThemePropertiesFileName() {
-    	return DEFAULT_THEME_PROPERTIES_FILE_NAME;
-    }
-
-    protected abstract String getSuffix();
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/template/FreemarkerTemplateEngine.java b/trunk/core/src/main/java/org/apache/struts2/components/template/FreemarkerTemplateEngine.java
deleted file mode 100644
index 8e09ca6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/template/FreemarkerTemplateEngine.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.template;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.views.freemarker.FreemarkerManager;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-
-import freemarker.template.Configuration;
-import freemarker.template.SimpleHash;
-
-/**
- * Freemarker based template engine.
- */
-public class FreemarkerTemplateEngine extends BaseTemplateEngine {
-    static Class bodyContent = null;
-
-    static {
-        try {
-            bodyContent = ClassLoaderUtil.loadClass("javax.servlet.jsp.tagext.BodyContent",
-                    FreemarkerTemplateEngine.class);
-        } catch (ClassNotFoundException e) {
-            // this is OK -- this just means JSP isn't even being used here, which is perfectly fine.
-            // we need this class in environments that use JSP to know when to wrap the writer
-            // and ignore flush() calls. In JSP, it is illegal for a BodyContent writer to be flushed(),
-            // so we have to take caution here.
-        }
-    }
-
-    private static final Log LOG = LogFactory.getLog(FreemarkerTemplateEngine.class);
-
-    public void renderTemplate(TemplateRenderingContext templateContext) throws Exception {
-        // get the various items required from the stack
-        ValueStack stack = templateContext.getStack();
-        Map context = stack.getContext();
-        ServletContext servletContext = (ServletContext) context.get(ServletActionContext.SERVLET_CONTEXT);
-        HttpServletRequest req = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST);
-        HttpServletResponse res = (HttpServletResponse) context.get(ServletActionContext.HTTP_RESPONSE);
-
-        // prepare freemarker
-        FreemarkerManager freemarkerManager = FreemarkerManager.getInstance();
-        Configuration config = freemarkerManager.getConfiguration(servletContext);
-
-        // get the list of templates we can use
-        List templates = templateContext.getTemplate().getPossibleTemplates(this);
-
-        // find the right template
-        freemarker.template.Template template = null;
-        String templateName = null;
-        Exception exception = null;
-        for (Iterator iterator = templates.iterator(); iterator.hasNext();) {
-            Template t = (Template) iterator.next();
-            templateName = getFinalTemplateName(t);
-            try {
-                // try to load, and if it works, stop at the first one
-                template = config.getTemplate(templateName);
-                break;
-            } catch (IOException e) {
-                if (exception == null) {
-                    exception = e;
-                }
-            }
-        }
-
-        if (template == null) {
-            LOG.error("Could not load template " + templateContext.getTemplate());
-            if (exception != null) {
-                throw exception;
-            } else {
-                return;
-            }
-        }
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Rendering template " + templateName);
-        }
-
-        ActionInvocation ai = ActionContext.getContext().getActionInvocation();
-
-        Object action = (ai == null) ? null : ai.getAction();
-        SimpleHash model = freemarkerManager.buildTemplateModel(stack, action, servletContext, req, res, config.getObjectWrapper());
-
-        model.put("tag", templateContext.getTag());
-        model.put("themeProperties", getThemeProps(templateContext.getTemplate()));
-
-        // the BodyContent JSP writer doesn't like it when FM flushes automatically --
-        // so let's just not do it (it will be flushed eventually anyway)
-        Writer writer = templateContext.getWriter();
-        if (bodyContent != null && bodyContent.isAssignableFrom(writer.getClass())) {
-            final Writer wrapped = writer;
-            writer = new Writer() {
-                public void write(char cbuf[], int off, int len) throws IOException {
-                    wrapped.write(cbuf, off, len);
-                }
-
-                public void flush() throws IOException {
-                    // nothing!
-                }
-
-                public void close() throws IOException {
-                    wrapped.close();
-                }
-            };
-        }
-
-        try {
-            stack.push(templateContext.getTag());
-            template.process(model, writer);
-        } finally {
-            stack.pop();
-        }
-    }
-
-    protected String getSuffix() {
-        return "ftl";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/template/JspTemplateEngine.java b/trunk/core/src/main/java/org/apache/struts2/components/template/JspTemplateEngine.java
deleted file mode 100644
index a0b21d0..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/template/JspTemplateEngine.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.template;
-
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.components.Include;
-import org.apache.struts2.components.UIBean;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * JSP based template engine.
- */
-public class JspTemplateEngine extends BaseTemplateEngine {
-    private static final Log LOG = LogFactory.getLog(JspTemplateEngine.class);
-
-    public void renderTemplate(TemplateRenderingContext templateContext) throws Exception {
-        Template template = templateContext.getTemplate();
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Trying to render template " + template + ", repeating through parents until we succeed");
-        }
-        UIBean tag = templateContext.getTag();
-        ValueStack stack = templateContext.getStack();
-        stack.push(tag);
-        PageContext pageContext = (PageContext) stack.getContext().get(ServletActionContext.PAGE_CONTEXT);
-        List templates = template.getPossibleTemplates(this);
-        Exception exception = null;
-        boolean success = false;
-        for (Iterator iterator = templates.iterator(); iterator.hasNext();) {
-            Template t = (Template) iterator.next();
-            try {
-                Include.include(getFinalTemplateName(t), pageContext.getOut(),
-                        pageContext.getRequest(), (HttpServletResponse) pageContext.getResponse());
-                success = true;
-                break;
-            } catch (Exception e) {
-                if (exception == null) {
-                    exception = e;
-                }
-            }
-        }
-
-        if (!success) {
-            LOG.error("Could not render JSP template " + templateContext.getTemplate());
-
-            if (exception != null) {
-                throw exception;
-            } else {
-                return;
-            }
-        }
-
-        stack.pop();
-    }
-
-    protected String getSuffix() {
-        return "jsp";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/template/Template.java b/trunk/core/src/main/java/org/apache/struts2/components/template/Template.java
deleted file mode 100644
index f0bf1c4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/template/Template.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.template;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A template.
- * <p/>
- * A template is used as a model for rendering output.
- * This object contains basic common template information
- */
-public class Template implements Cloneable {
-    String dir;
-    String theme;
-    String name;
-
-    /**
-     * Constructor.
-     *
-     * @param dir  base folder where the template is stored.
-     * @param theme  the theme of the template
-     * @param name   the name of the template.
-     */
-    public Template(String dir, String theme, String name) {
-        this.dir = dir;
-        this.theme = theme;
-        this.name = name;
-    }
-
-    public String getDir() {
-        return dir;
-    }
-
-    public String getTheme() {
-        return theme;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public List getPossibleTemplates(TemplateEngine engine) {
-        List list = new ArrayList(3);
-        Template template = this;
-        String parentTheme;
-        list.add(template);
-        while ((parentTheme = (String) engine.getThemeProps(template).get("parent")) != null) {
-            try {
-                template = (Template) template.clone();
-                template.theme = parentTheme;
-                list.add(template);
-            } catch (CloneNotSupportedException e) {
-                // do nothing
-            }
-        }
-
-        return list;
-    }
-
-    /**
-     * Constructs a string in the format <code>/dir/theme/name</code>.
-     * @return a string in the format <code>/dir/theme/name</code>.
-     */
-    public String toString() {
-        return "/" + dir + "/" + theme + "/" + name;
-    }
-
-    protected Object clone() throws CloneNotSupportedException {
-        return super.clone();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngine.java b/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngine.java
deleted file mode 100644
index 83f66e1..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngine.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.template;
-
-import java.util.Map;
-
-/**
- * Any template language which wants to support UI tag templating needs to provide an implementation of this interface
- * to handle rendering the template
- */
-public interface TemplateEngine {
-
-    /**
-     * Renders the template
-     * @param templateContext  context for the given template.
-     * @throws Exception is thrown if there is a failure when rendering.
-     */
-    void renderTemplate(TemplateRenderingContext templateContext) throws Exception;
-
-    /**
-     * Get's the properties for the given template.
-     *
-     * @param template   the template.
-     * @return  the properties as key value pairs.
-     */
-    Map getThemeProps(Template template);
-    
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java b/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java
deleted file mode 100644
index e4cf9e0..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.template;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.config.Settings;
-
-/**
- * The TemplateEngineManager will return a template engine for the template
- */
-public class TemplateEngineManager {
-    public static final String DEFAULT_TEMPLATE_TYPE_CONFIG_KEY = "struts.ui.templateSuffix";
-
-    private static final TemplateEngineManager MANAGER = new TemplateEngineManager();
-
-    /** The default template extenstion is <code>ftl</code>. */
-    public static final String DEFAULT_TEMPLATE_TYPE = "ftl";
-
-    Map templateEngines = new HashMap();
-
-    private TemplateEngineManager() {
-        templateEngines.put("ftl", new FreemarkerTemplateEngine());
-        templateEngines.put("vm", new VelocityTemplateEngine());
-        templateEngines.put("jsp", new JspTemplateEngine());
-    }
-
-    /**
-     * Registers the given template engine.
-     * <p/>
-     * Will add the engine to the existing list of known engines.
-     * @param templateExtension  filename extension (eg. .jsp, .ftl, .vm).
-     * @param templateEngine     the engine.
-     */
-    public static void registerTemplateEngine(String templateExtension, TemplateEngine templateEngine) {
-        MANAGER.templateEngines.put(templateExtension, templateEngine);
-    }
-
-    /**
-     * Gets the TemplateEngine for the template name. If the template name has an extension (for instance foo.jsp), then
-     * this extension will be used to look up the appropriate TemplateEngine. If it does not have an extension, it will
-     * look for a Configuration setting "struts.ui.templateSuffix" for the extension, and if that is not set, it
-     * will fall back to "ftl" as the default.
-     *
-     * @param template               Template used to determine which TemplateEngine to return
-     * @param templateTypeOverride Overrides the default template type
-     * @return the engine.
-     */
-    public static TemplateEngine getTemplateEngine(Template template, String templateTypeOverride) {
-        String templateType = DEFAULT_TEMPLATE_TYPE;
-        String templateName = template.toString();
-        if (templateName.indexOf(".") > 0) {
-            templateType = templateName.substring(templateName.indexOf(".") + 1);
-        } else if (templateTypeOverride !=null && templateTypeOverride.length() > 0) {
-            templateType = templateTypeOverride;
-        } else if (Settings.isSet(DEFAULT_TEMPLATE_TYPE_CONFIG_KEY)) {
-            templateType = (String) Settings.get(DEFAULT_TEMPLATE_TYPE_CONFIG_KEY);
-        }
-        return (TemplateEngine) MANAGER.templateEngines.get(templateType);
-    }
-
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateRenderingContext.java b/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateRenderingContext.java
deleted file mode 100644
index df0809e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateRenderingContext.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.template;
-
-import java.io.Writer;
-import java.util.Map;
-
-import org.apache.struts2.components.UIBean;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * Context used when rendering templates.
- */
-public class TemplateRenderingContext {
-    Template template;
-    ValueStack stack;
-    Map parameters;
-    UIBean tag;
-    Writer writer;
-
-    /**
-     * Constructor
-     *
-     * @param template  the template.
-     * @param writer    the writer.
-     * @param stack     OGNL value stack.
-     * @param params    parameters to this template.
-     * @param tag       the tag UI component.
-     */
-    public TemplateRenderingContext(Template template, Writer writer, ValueStack stack, Map params, UIBean tag) {
-        this.template = template;
-        this.writer = writer;
-        this.stack = stack;
-        this.parameters = params;
-        this.tag = tag;
-    }
-
-    public Template getTemplate() {
-        return template;
-    }
-
-    public ValueStack getStack() {
-        return stack;
-    }
-
-    public Map getParameters() {
-        return parameters;
-    }
-
-    public UIBean getTag() {
-        return tag;
-    }
-
-    public Writer getWriter() {
-        return writer;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/components/template/VelocityTemplateEngine.java b/trunk/core/src/main/java/org/apache/struts2/components/template/VelocityTemplateEngine.java
deleted file mode 100644
index c9d0ae5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/components/template/VelocityTemplateEngine.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.template;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.views.velocity.VelocityManager;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.context.Context;
-
-/**
- * Velocity based template engine.
- */
-public class VelocityTemplateEngine extends BaseTemplateEngine {
-    private static final Log LOG = LogFactory.getLog(VelocityTemplateEngine.class);
-
-    public void renderTemplate(TemplateRenderingContext templateContext) throws Exception {
-        // get the various items required from the stack
-        Map actionContext = templateContext.getStack().getContext();
-        ServletContext servletContext = (ServletContext) actionContext.get(ServletActionContext.SERVLET_CONTEXT);
-        HttpServletRequest req = (HttpServletRequest) actionContext.get(ServletActionContext.HTTP_REQUEST);
-        HttpServletResponse res = (HttpServletResponse) actionContext.get(ServletActionContext.HTTP_RESPONSE);
-
-        // prepare velocity
-        VelocityManager velocityManager = VelocityManager.getInstance();
-        velocityManager.init(servletContext);
-        VelocityEngine velocityEngine = velocityManager.getVelocityEngine();
-
-        // get the list of templates we can use
-        List templates = templateContext.getTemplate().getPossibleTemplates(this);
-
-        // find the right template
-        org.apache.velocity.Template template = null;
-        String templateName = null;
-        Exception exception = null;
-        for (Iterator iterator = templates.iterator(); iterator.hasNext();) {
-            Template t = (Template) iterator.next();
-            templateName = getFinalTemplateName(t);
-            try {
-                // try to load, and if it works, stop at the first one
-                template = velocityEngine.getTemplate(templateName);
-                break;
-            } catch (IOException e) {
-                if (exception == null) {
-                    exception = e;
-                }
-            }
-        }
-
-        if (template == null) {
-            LOG.error("Could not load template " + templateContext.getTemplate());
-            if (exception != null) {
-                throw exception;
-            } else {
-                return;
-            }
-        }
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Rendering template " + templateName);
-        }
-
-        Context context = velocityManager.createContext(templateContext.getStack(), req, res);
-
-        Writer outputWriter = templateContext.getWriter();
-        context.put("tag", templateContext.getTag());
-        context.put("parameters", templateContext.getParameters());
-
-        template.merge(context, outputWriter);
-    }
-
-    protected String getSuffix() {
-        return "vm";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/config/DefaultSettings.java b/trunk/core/src/main/java/org/apache/struts2/config/DefaultSettings.java
deleted file mode 100644
index dacb970..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/config/DefaultSettings.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.StringTokenizer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsConstants;
-
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-
-
-/**
- * Default implementation of Settings - creates and delegates to other settingss by using an internal
- * {@link DelegatingSettings}.
- */
-public class DefaultSettings extends Settings {
-
-    protected Log log = LogFactory.getLog(this.getClass());
-    Settings config;
-
-
-    /**
-     * Creates a new DefaultSettings object by loading all property files
-     * and creating an internal {@link DelegatingSettings} object. All calls to get and set
-     * in this class will call that settings object.
-     */
-    public DefaultSettings() {
-        // Create default implementations 
-        // Use default properties and struts.properties
-        ArrayList<Settings> list = new ArrayList<Settings>();
-
-        try {
-            list.add(new PropertiesSettings("struts"));
-        } catch (Exception e) {
-            log.warn("Could not find or error in struts.properties", e);
-        }
-
-        try {
-            list.add(new PropertiesSettings("org/apache/struts2/default"));
-        } catch (Exception e) {
-            log.error("Could not find org/apache/struts2/default.properties", e);
-        }
-
-        Settings[] configList = new Settings[list.size()];
-        config = new DelegatingSettings((Settings[]) list.toArray(configList));
-
-        // Add list of additional properties settingss
-        try {
-            StringTokenizer configFiles = new StringTokenizer((String) config.getImpl(StrutsConstants.STRUTS_CUSTOM_PROPERTIES), ",");
-
-            while (configFiles.hasMoreTokens()) {
-                String name = configFiles.nextToken();
-
-                try {
-                    list.add(new PropertiesSettings(name));
-                } catch (Exception e) {
-                    log.error("Could not find " + name + ".properties. Skipping");
-                }
-            }
-
-            configList = new Settings[list.size()];
-            config = new DelegatingSettings((Settings[]) list.toArray(configList));
-        } catch (IllegalArgumentException e) {
-            // thrown when Settings is unable to find a certain property
-            // eg. struts.custom.properties in default.properties which is commented
-            // out
-        }
-
-        // Add additional list of i18n global resource bundles
-        try {
-
-            LocalizedTextUtil.addDefaultResourceBundle("org/apache/struts2/struts-messages");
-            StringTokenizer bundleFiles = new StringTokenizer((String) config.getImpl(StrutsConstants.STRUTS_CUSTOM_I18N_RESOURCES), ", ");
-
-            while (bundleFiles.hasMoreTokens()) {
-                String name = bundleFiles.nextToken();
-                try {
-                    log.info("Loading global messages from " + name);
-                    LocalizedTextUtil.addDefaultResourceBundle(name);
-                } catch (Exception e) {
-                    log.error("Could not find " + name + ".properties. Skipping");
-                }
-            }
-        } catch (IllegalArgumentException e) {
-            // struts.custom.i18n.resources wasn't provided
-        }
-    }
-
-
-    /**
-     * Sets the given property - delegates to the internal config implementation.
-     *
-     * @see #set(String, String)
-     */
-    public void setImpl(String aName, String aValue) throws IllegalArgumentException, UnsupportedOperationException {
-        config.setImpl(aName, aValue);
-    }
-
-    /**
-     * Gets the specified property - delegates to the internal config implementation.
-     *
-     * @see #get(String)
-     */
-    public String getImpl(String aName) throws IllegalArgumentException {
-        // Delegate
-        return config.getImpl(aName);
-    }
-
-    /**
-     * Determines whether or not a value has been set - delegates to the internal config implementation.
-     *
-     * @see #isSet(String)
-     */
-    public boolean isSetImpl(String aName) {
-        return config.isSetImpl(aName);
-    }
-
-    /**
-     * Returns a list of all property names - delegates to the internal config implementation.
-     *
-     * @see #list()
-     */
-    public Iterator listImpl() {
-        return config.listImpl();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/config/DelegatingSettings.java b/trunk/core/src/main/java/org/apache/struts2/config/DelegatingSettings.java
deleted file mode 100644
index 6580686..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/config/DelegatingSettings.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-
-/**
- * A Settings implementation which stores an internal list of settings objects. Each time
- * a config method is called (get, set, list, etc..) this class will go through the list of settingss
- * and call the method until successful.
- *
- */
-public class DelegatingSettings extends Settings {
-
-    Settings[] configList;
-
-
-    /**
-     * Creates a new DelegatingSettings object given a list of {@link Settings} implementations.
-     *
-     * @param aConfigList a list of Settings implementations.
-     */
-    public DelegatingSettings(Settings[] aConfigList) {
-        configList = aConfigList;
-    }
-
-
-    /**
-     * Sets the given property - calls setImpl(String, Object) method on config objects in the config
-     * list until successful.
-     *
-     * @see #set(String, String)
-     */
-    public void setImpl(String name, String value) throws IllegalArgumentException, UnsupportedOperationException {
-        // Determine which config to use by using get
-        // Delegate to the other settingss
-        IllegalArgumentException e = null;
-
-        for (int i = 0; i < configList.length; i++) {
-            try {
-                configList[i].getImpl(name);
-
-                // Found it, now try setting
-                configList[i].setImpl(name, value);
-
-                // Worked, now return
-                return;
-            } catch (IllegalArgumentException ex) {
-                e = ex;
-
-                // Try next config
-            }
-        }
-
-        throw e;
-    }
-
-    /**
-     * Gets the specified property - calls getImpl(String) method on config objects in config list
-     * until successful.
-     *
-     * @see #get(String)
-     */
-    public String getImpl(String name) throws IllegalArgumentException {
-        // Delegate to the other settings
-        IllegalArgumentException e = null;
-
-        for (int i = 0; i < configList.length; i++) {
-            try {
-                return configList[i].getImpl(name);
-            } catch (IllegalArgumentException ex) {
-                e = ex;
-
-                // Try next config
-            }
-        }
-
-        throw e;
-    }
-
-    /**
-     * Determines if a paramter has been set - calls the isSetImpl(String) method on each config object
-     * in config list. Returns <tt>true</tt> when one of the config implementations returns true. Returns
-     * <tt>false</tt> otherwise.
-     *
-     * @see #isSet(String)
-     */
-    public boolean isSetImpl(String aName) {
-        for (int i = 0; i < configList.length; i++) {
-            if (configList[i].isSetImpl(aName)) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns a list of all property names - returns a list of all property names in all config
-     * objects in config list.
-     *
-     * @see #list()
-     */
-    public Iterator listImpl() {
-        boolean workedAtAll = false;
-
-        Set<Object> settingList = new HashSet<Object>();
-        UnsupportedOperationException e = null;
-
-        for (int i = 0; i < configList.length; i++) {
-            try {
-                Iterator list = configList[i].listImpl();
-
-                while (list.hasNext()) {
-                    settingList.add(list.next());
-                }
-
-                workedAtAll = true;
-            } catch (UnsupportedOperationException ex) {
-                e = ex;
-
-                // Try next config
-            }
-        }
-
-        if (!workedAtAll) {
-            throw (e == null) ? new UnsupportedOperationException() : e;
-        } else {
-            return settingList.iterator();
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/config/PropertiesSettings.java b/trunk/core/src/main/java/org/apache/struts2/config/PropertiesSettings.java
deleted file mode 100644
index dc24208..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/config/PropertiesSettings.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.Properties;
-
-import org.apache.struts2.StrutsException;
-
-
-/**
- * A class to handle settings via a properties file.
- */
-public class PropertiesSettings extends Settings {
-
-    Properties settings;
-
-
-    /**
-     * Creates a new properties config given the name of a properties file. The name is expected to NOT have
-     * the ".properties" file extension.  So when <tt>new PropertiesSettings("foo")</tt> is called
-     * this class will look in the classpath for the <tt>foo.properties</tt> file.
-     *
-     * @param name the name of the properties file, excluding the ".properties" extension.
-     */
-    public PropertiesSettings(String name) {
-        settings = new Properties();
-
-        URL settingsUrl = Thread.currentThread().getContextClassLoader().getResource(name + ".properties");
-
-        if (settingsUrl == null) {
-            throw new IllegalStateException(name + ".properties missing");
-        }
-
-        // Load settings
-        try {
-            settings.load(settingsUrl.openStream());
-        } catch (IOException e) {
-            throw new StrutsException("Could not load " + name + ".properties:" + e, e);
-        }
-    }
-
-
-    /**
-     * Sets a property in the properties file.
-     *
-     * @see #set(String, String)
-     */
-    public void setImpl(String aName, String aValue) {
-        settings.setProperty(aName, aValue);
-    }
-
-    /**
-     * Gets a property from the properties file.
-     *
-     * @see #get(String)
-     */
-    public String getImpl(String aName) throws IllegalArgumentException {
-        String setting = settings.getProperty(aName);
-
-        if (setting == null) {
-            throw new IllegalArgumentException("No such setting:" + aName);
-        }
-
-        return setting;
-    }
-
-    /**
-     * Tests to see if a property exists in the properties file.
-     *
-     * @see #isSet(String)
-     */
-    public boolean isSetImpl(String aName) {
-        if (settings.get(aName) != null) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Lists all keys in the properties file.
-     *
-     * @see #list()
-     */
-    public Iterator listImpl() {
-        return settings.keySet().iterator();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/config/ServletContextSingleton.java b/trunk/core/src/main/java/org/apache/struts2/config/ServletContextSingleton.java
deleted file mode 100644
index 42ce49a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/config/ServletContextSingleton.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config;
-
-import javax.servlet.ServletContext;
-
-/**
- * This singleton holds an instance of the web servlet context.
- * <p/>
- * This is needed for running Struts on Weblogic Server 6.1
- * because there is no provision to retrieve the servlet context
- * from the web session object.
- * <p/>
- * This class is created to bet that this singleton can be set by
- * {@link org.apache.struts2.dispatcher.FilterDispatcherCompatWeblogic61}
- * before the servlet context is needed by
- * {@link org.apache.struts2.lifecycle.SessionLifecycleListener}
- * which will use this object to get it.
- *
- */
-public class ServletContextSingleton {
-    /**
-     * The web servlet context.  Holding this is the
-     * purpose of this singleton.
-     */
-    private ServletContext servletContext;
-
-    /**
-     * The sole instance of this class.
-     */
-    private static ServletContextSingleton singleton;
-
-    /**
-     * Constructor which cannot be called
-     * publicly.
-     */
-    private ServletContextSingleton() {
-    }
-
-    /**
-     * Answers the singleton.
-     * <p/>
-     * At some point, the caller must populate the web servlet
-     * context.
-     *
-     * @return Answers the singleton instance of this class
-     */
-    public static ServletContextSingleton getInstance() {
-        if (singleton == null) {
-            singleton = new ServletContextSingleton();
-        }
-        return singleton;
-    }
-
-    /**
-     * Gets the servlet context
-     * 
-     * @return The web servlet context
-     */
-    public ServletContext getServletContext() {
-        return servletContext;
-    }
-
-    /**
-     * Sets the servlet context
-     * 
-     * @param context The web servlet context
-     */
-    public void setServletContext(ServletContext context) {
-        servletContext = context;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/config/Settings.java b/trunk/core/src/main/java/org/apache/struts2/config/Settings.java
deleted file mode 100644
index 69f63df..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/config/Settings.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config;
-
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.StringTokenizer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsConstants;
-
-import com.opensymphony.xwork2.ObjectFactory;
-
-
-/**
- * Handles all Struts config properties. Implementation of this class is pluggable (the
- * default implementation is {@link DefaultSettings}). This gives developers to ability to customize how
- * Struts properties are set and retrieved. As an example, a developer may wish to check a separate property
- * store before delegating to the Struts one. <p>
- * <p/>
- * Key methods: <ul>
- * <p/>
- * <li>{@link #getLocale()}</li>
- * <li>{@link #get(String)}</li>
- * <li>{@link #set(String, String)}</li>
- * <li>{@link #list()}</li></ul>
- * <p/>
- * Key methods for subclassers: <ul>
- * <p/>
- * <li>{@link #getImpl(String)}</li>
- * <li>{@link #setImpl(String, String)}</li>
- * <li>{@link #listImpl()}</li>
- * <li>{@link #isSetImpl(String)}</li></ul>
- */
-public class Settings {
-
-    static Settings settingsImpl;
-    static Settings defaultImpl;
-    static Locale locale; // Cached locale
-    private static final Log LOG = LogFactory.getLog(Settings.class);
-
-
-    /**
-     * Sets the current settings implementation. Can only be called once.
-     *
-     * @param config a Settings implementation
-     * @throws IllegalStateException if an error occurs when setting the settings implementation.
-     */
-    public static void setInstance(Settings config) throws IllegalStateException {
-        settingsImpl = config;
-        locale = null; // Reset cached locale
-    }
-
-    /**
-     * Gets the current settings implementation.
-     *
-     * @return the current settings implementation.
-     */
-    public static Settings getInstance() {
-        return (settingsImpl == null) ? getDefaultInstance() : settingsImpl;
-    }
-
-    /**
-     * Returns the Struts locale. Keys off the property <tt>struts.locale</tt> which should be set
-     * as the Java {@link java.util.Locale#toString() toString()} representation of a Locale object (i.e.,
-     * "en", "de_DE", "_GB", "en_US_WIN", "de__POSIX", "fr_MAC", etc). <p>
-     * <p/>
-     * If no locale is specified then the default VM locale is used ({@link java.util.Locale#getDefault()}).
-     *
-     * @return the Struts locale if specified or the VM default locale.
-     */
-    public static Locale getLocale() {
-        if (locale == null) {
-            try {
-                StringTokenizer localeTokens = new StringTokenizer(get(StrutsConstants.STRUTS_LOCALE), "_");
-                String lang = null;
-                String country = null;
-
-                if (localeTokens.hasMoreTokens()) {
-                    lang = localeTokens.nextToken();
-                }
-
-                if (localeTokens.hasMoreTokens()) {
-                    country = localeTokens.nextToken();
-                }
-
-                locale = new Locale(lang, country);
-            } catch (Throwable t) {
-                // Default
-                LOG.warn("Setting locale to the default locale");
-                locale = Locale.getDefault();
-            }
-        }
-
-        return locale;
-    }
-
-    /**
-     * Determines whether or not a value has been set. Useful for testing for the existance of parameter without
-     * throwing an IllegalArgumentException.
-     *
-     * @param name the name of the property to test.
-     * @return <tt>true</tt> if the property exists and has a value, <tt>false</tt> otherwise.
-     */
-    public static boolean isSet(String name) {
-        return getInstance().isSetImpl(name);
-    }
-
-    /**
-     * Returns a property as an Object. This will throw an <tt>IllegalArgumentException</tt> if an error occurs
-     * while retrieveing the property or if the property doesn't exist.
-     *
-     * @param name the name of the property to get.
-     * @return the property as an Object.
-     * @throws IllegalArgumentException if an error occurs retrieveing the property or the property does not exist.
-     */
-    public static String get(String name) throws IllegalArgumentException {
-        String val = getInstance().getImpl(name);
-
-        return val;
-    }
-
-    /**
-     * Returns an Iterator of all properties names.
-     *
-     * @return an Iterator of all properties names.
-     */
-    public static Iterator list() {
-        return getInstance().listImpl();
-    }
-
-    /**
-     * Implementation of the {@link #isSet(String)} method.
-     *
-     * @see #isSet(String)
-     */
-    public boolean isSetImpl(String name) {
-        // this is dumb.. maybe it should just throw an unsupported op like the rest of the *Impl
-        // methods in this class.
-        return false;
-    }
-
-    /**
-     * Sets a property. Throws an exception if an error occurs when setting the property or if the
-     * Settings implementation does not support setting properties.
-     *
-     * @param name  the name of the property to set.
-     * @param value the property to set.
-     * @throws IllegalArgumentException      if an error occurs when setting the property.
-     * @throws UnsupportedOperationException if the config implementation does not support setting properties.
-     */
-    public static void set(String name, String value) throws IllegalArgumentException, UnsupportedOperationException {
-        getInstance().setImpl(name, value);
-    }
-
-    /**
-     * Implementation of the {@link #set(String, String)} method.
-     *
-     * @see #set(String, String)
-     */
-    public void setImpl(String name, String value) throws IllegalArgumentException, UnsupportedOperationException {
-        throw new UnsupportedOperationException("This settings does not support updating a setting");
-    }
-
-    /**
-     * Implementation of the {@link #get(String)} method.
-     *
-     * @see #get(String)
-     */
-    public String getImpl(String aName) throws IllegalArgumentException {
-        return null;
-    }
-
-    /**
-     * Implementation of the {@link #list()} method.
-     *
-     * @see #list()
-     */
-    public Iterator listImpl() {
-        throw new UnsupportedOperationException("This settings does not support listing the settings");
-    }
-
-    private static Settings getDefaultInstance() {
-        if (defaultImpl == null) {
-            // Create bootstrap implementation
-            defaultImpl = new DefaultSettings();
-
-            // Create default implementation
-            try {
-                String className = get(StrutsConstants.STRUTS_CONFIGURATION);
-
-                if (!className.equals(defaultImpl.getClass().getName())) {
-                    try {
-                        // singleton instances shouldn't be built accessing request or session-specific context data
-                        defaultImpl = (Settings) ObjectFactory.getObjectFactory().buildBean(Thread.currentThread().getContextClassLoader().loadClass(className), null);
-                    } catch (Exception e) {
-                        LOG.error("Could not instantiate settings", e);
-                    }
-                }
-            } catch (IllegalArgumentException ex) {
-                // ignore
-            }
-        }
-
-        return defaultImpl;
-    }
-
-    public static void reset() {
-        defaultImpl = null;
-        settingsImpl = null;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java b/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
deleted file mode 100644
index 021bbd6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Created on Aug 12, 2004 by mgreer
- */
-package org.apache.struts2.config;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
-
-/**
- * Override Xwork class so we can use an arbitrary config file
- */
-public class StrutsXmlConfigurationProvider extends XmlConfigurationProvider {
-
-    private static final Log LOG = LogFactory.getLog(StrutsXmlConfigurationProvider.class);
-    private File baseDir = null;
-    private String filename;
-
-    /** 
-     * Constructs the configuration provider
-     * 
-     * @param errorIfMissing If we should throw an exception if the file can't be found
-     */
-    public StrutsXmlConfigurationProvider(boolean errorIfMissing) {
-        this("struts.xml", errorIfMissing);
-    }
-    
-    /** 
-     * Constructs the configuration provider
-     * 
-     * @param filename The filename to look for
-     * @param errorIfMissing If we should throw an exception if the file can't be found
-     */
-    public StrutsXmlConfigurationProvider(String filename, boolean errorIfMissing) {
-        super(filename, errorIfMissing);
-        this.filename = filename;
-        Map<String,String> dtdMappings = new HashMap<String,String>(getDtdMappings());
-        dtdMappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.0//EN", "struts-2.0.dtd");
-        setDtdMappings(dtdMappings);
-        File file = new File(filename);
-        if (file.getParent() != null) {
-            this.baseDir = file.getParentFile();
-        }
-    }
-
-    /**
-     * Look for the configuration file on the classpath and in the file system
-     *
-     * @param fileName The file name to retrieve
-     * @see com.opensymphony.xwork2.config.providers.XmlConfigurationProvider#getInputStream(java.lang.String)
-     */
-    @Override
-    protected Iterator<URL> getConfigurationUrls(String fileName) throws IOException {
-        URL url = null;
-        if (baseDir != null) {
-            url = findInFileSystem(fileName);
-            if (url == null) {
-                return super.getConfigurationUrls(fileName);
-            }
-        } 
-        if (url != null) {
-            List<URL> list = new ArrayList<URL>();
-            list.add(url);
-            return list.iterator();
-        } else {
-            return super.getConfigurationUrls(fileName);
-        }
-    }
-    
-    protected URL findInFileSystem(String fileName) throws IOException {
-        URL url = null;
-        File file = new File(fileName);
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Trying to load file " + file);
-        }
-        
-        // Trying relative path to original file
-        if (!file.exists()) {
-            file = new File(baseDir, fileName);
-        }
-        if (file.exists()) {
-            try {
-                url = file.toURL();
-            } catch (MalformedURLException e) {
-                throw new IOException("Unable to convert "+file+" to a URL");
-            }
-        } 
-        return url;
-    }
-
-    /**
-     * Overrides needs reload to ensure it is only checked once per request
-     */
-    @Override
-    public boolean needsReload() {
-        ActionContext ctx = ActionContext.getContext();
-        String key = "configurationReload-"+filename;
-        if (ctx.get(key) == null) {
-            ctx.put(key, Boolean.TRUE);
-            return super.needsReload();
-        }
-        return false;
-        
-    }
-    
-    
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/config/package.html b/trunk/core/src/main/java/org/apache/struts2/config/package.html
deleted file mode 100644
index decba77..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/config/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Classes for Struts configuration and property handling.</body>
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/ActionContextCleanUp.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/ActionContextCleanUp.java
deleted file mode 100644
index e1c3774..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/ActionContextCleanUp.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
-
-/**
- * <!-- SNIPPET START: description -->
- * Special filter designed to work with the {@link FilterDispatcher} and allow
- * for easier integration with SiteMesh. Normally, ordering your filters to have
- * SiteMesh go first, and then {@link FilterDispatcher} go second is perfectly fine.
- * However, sometimes you may wish to access Struts features, including the
- * value stack, from within your SiteMesh decorators. Because {@link FilterDispatcher}
- * cleans up the {@link ActionContext}, your decorator won't have access to the
- * date you want.
- * <p/>
- * <p/>
- * By adding this filter, the {@link FilterDispatcher} will know to not clean up and
- * instead defer cleanup to this filter. The ordering of the filters should then be:
- * <p/>
- * <ul>
- * <li>this filter</li>
- * <li>SiteMesh filter</li>
- * <li>{@link FilterDispatcher}</li>
- * </ul>
- * <!-- SNIPPET END: description -->
- *
- * @version $Date$ $Id$
- *
- * @see FilterDispatcher
- */
-public class ActionContextCleanUp implements Filter {
-
-    private static final Log LOG = LogFactory.getLog(ActionContextCleanUp.class);
-
-    private static final String COUNTER = "__cleanup_recursion_counter";
-
-    protected FilterConfig filterConfig;
-    protected Dispatcher dispatcher;
-
-    /**
-     * Initializes the filter
-     * 
-     * @param filterConfig The filter configuration
-     */
-    public void init(FilterConfig filterConfig) throws ServletException {
-        this.filterConfig = filterConfig;
-        dispatcher = new Dispatcher(filterConfig.getServletContext());
-    }
-
-    
-    /**
-     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
-     */
-    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
-
-        HttpServletRequest request = (HttpServletRequest) req;
-        HttpServletResponse response = (HttpServletResponse) res;
-
-        String timerKey = "ActionContextCleanUp_doFilter: ";
-        try {
-        	UtilTimerStack.push(timerKey);
-        	
-        	// prepare the request no matter what - this ensures that the proper character encoding
-        	// is used before invoking the mapper (see WW-9127)
-        	Dispatcher.setInstance(dispatcher);
-        	dispatcher.prepare(request, response);
-
-        	ServletContext servletContext = filterConfig.getServletContext();
-        	try {
-        		request = dispatcher.wrapRequest(request, servletContext);
-        	} catch (IOException e) {
-        		String message = "Could not wrap servlet request with MultipartRequestWrapper!";
-        		LOG.error(message, e);
-        		throw new ServletException(message, e);
-        	}
-
-        	try {
-        		Integer count = (Integer)request.getAttribute(COUNTER);
-        		if (count == null) {
-        			count = new Integer(1);
-        		}
-        		else {
-        			count = new Integer(count.intValue()+1);
-        		}
-        		request.setAttribute(COUNTER, count);
-        		chain.doFilter(request, response);
-        	} finally {
-        		int counterVal = ((Integer)request.getAttribute(COUNTER)).intValue();
-        		counterVal -= 1;
-        		request.setAttribute(COUNTER, new Integer(counterVal));
-        		cleanUp(request);
-        	}
-        }
-        finally {
-        	UtilTimerStack.pop(timerKey);
-        }
-    }
-
-    /**
-     * Clean up the request of threadlocals if this is the last execution
-     * 
-     * @param req The servlet request
-     */
-    protected static void cleanUp(ServletRequest req) {
-        // should we clean up yet?
-        if (req.getAttribute(COUNTER) != null &&
-                 ((Integer)req.getAttribute(COUNTER)).intValue() > 0 ) {
-             return;
-         }
-
-        // always dontClean up the thread request, even if an action hasn't been executed
-        ActionContext.setContext(null);
-        
-        Dispatcher.setInstance(null);
-    }
-
-    
-    /* (non-Javadoc)
-     * @see javax.servlet.Filter#destroy()
-     */
-    public void destroy() {
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/ApplicationMap.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/ApplicationMap.java
deleted file mode 100644
index 79e782f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/ApplicationMap.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.Serializable;
-import java.util.AbstractMap;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.ServletContext;
-
-
-/**
- * A simple implementation of the {@link java.util.Map} interface to handle a collection of attributes and
- * init parameters in a {@link javax.servlet.ServletContext} object. The {@link #entrySet()} method
- * enumerates over all servlet context attributes and init parameters and returns a collection of both.
- * Note, this will occur lazily - only when the entry set is asked for.
- *
- */
-public class ApplicationMap extends AbstractMap implements Serializable {
-
-	private static final long serialVersionUID = 9136809763083228202L;
-	
-	private ServletContext context;
-    private Set<Object> entries;
-
-
-    /**
-     * Creates a new map object given the servlet context.
-     *
-     * @param ctx the servlet context
-     */
-    public ApplicationMap(ServletContext ctx) {
-        this.context = ctx;
-    }
-
-
-    /**
-     * Removes all entries from the Map and removes all attributes from the servlet context.
-     */
-    public void clear() {
-        entries = null;
-
-        Enumeration e = context.getAttributeNames();
-
-        while (e.hasMoreElements()) {
-            context.removeAttribute(e.nextElement().toString());
-        }
-    }
-
-    /**
-     * Creates a Set of all servlet context attributes as well as context init parameters.
-     *
-     * @return a Set of all servlet context attributes as well as context init parameters.
-     */
-    public Set entrySet() {
-        if (entries == null) {
-            entries = new HashSet<Object>();
-
-            // Add servlet context attributes
-            Enumeration enumeration = context.getAttributeNames();
-
-            while (enumeration.hasMoreElements()) {
-                final String key = enumeration.nextElement().toString();
-                final Object value = context.getAttribute(key);
-                entries.add(new Map.Entry() {
-                    public boolean equals(Object obj) {
-                        Map.Entry entry = (Map.Entry) obj;
-
-                        return ((key == null) ? (entry.getKey() == null) : key.equals(entry.getKey())) && ((value == null) ? (entry.getValue() == null) : value.equals(entry.getValue()));
-                    }
-
-                    public int hashCode() {
-                        return ((key == null) ? 0 : key.hashCode()) ^ ((value == null) ? 0 : value.hashCode());
-                    }
-
-                    public Object getKey() {
-                        return key;
-                    }
-
-                    public Object getValue() {
-                        return value;
-                    }
-
-                    public Object setValue(Object obj) {
-                        context.setAttribute(key.toString(), obj);
-
-                        return value;
-                    }
-                });
-            }
-
-            // Add servlet context init params
-            enumeration = context.getInitParameterNames();
-
-            while (enumeration.hasMoreElements()) {
-                final String key = enumeration.nextElement().toString();
-                final Object value = context.getInitParameter(key);
-                entries.add(new Map.Entry() {
-                    public boolean equals(Object obj) {
-                        Map.Entry entry = (Map.Entry) obj;
-
-                        return ((key == null) ? (entry.getKey() == null) : key.equals(entry.getKey())) && ((value == null) ? (entry.getValue() == null) : value.equals(entry.getValue()));
-                    }
-
-                    public int hashCode() {
-                        return ((key == null) ? 0 : key.hashCode()) ^ ((value == null) ? 0 : value.hashCode());
-                    }
-
-                    public Object getKey() {
-                        return key;
-                    }
-
-                    public Object getValue() {
-                        return value;
-                    }
-
-                    public Object setValue(Object obj) {
-                        context.setAttribute(key.toString(), obj);
-
-                        return value;
-                    }
-                });
-            }
-        }
-
-        return entries;
-    }
-
-    /**
-     * Returns the servlet context attribute or init parameter based on the given key. If the
-     * entry is not found, <tt>null</tt> is returned.
-     *
-     * @param key the entry key.
-     * @return the servlet context attribute or init parameter or <tt>null</tt> if the entry is not found.
-     */
-    public Object get(Object key) {
-        // Try context attributes first, then init params
-        // This gives the proper shadowing effects
-        String keyString = key.toString();
-        Object value = context.getAttribute(keyString);
-
-        return (value == null) ? context.getInitParameter(keyString) : value;
-    }
-
-    /**
-     * Sets a servlet context attribute given a attribute name and value.
-     *
-     * @param key   the name of the attribute.
-     * @param value the value to set.
-     * @return the attribute that was just set.
-     */
-    public Object put(Object key, Object value) {
-        entries = null;
-        context.setAttribute(key.toString(), value);
-
-        return get(key);
-    }
-
-    /**
-     * Removes the specified servlet context attribute.
-     *
-     * @param key the attribute to remove.
-     * @return the entry that was just removed.
-     */
-    public Object remove(Object key) {
-        entries = null;
-
-        Object value = get(key);
-        context.removeAttribute(key.toString());
-
-        return value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java
deleted file mode 100644
index 91164aa..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts2.ServletActionContext;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * A simple action support class that sets properties to be able to serve 
- */
-public class DefaultActionSupport extends ActionSupport {
-
-	private static final long serialVersionUID = -2426166391283746095L;
-	
-	private String successResultValue;
-	
-	
-	/**
-	 * Constructor 
-	 */
-	public DefaultActionSupport() {
-		super();
-	}
-
-	/* (non-Javadoc)
-	 * @see com.opensymphony.xwork2.ActionSupport#execute()
-	 */
-	public String execute() throws Exception {
-		HttpServletRequest request = ServletActionContext.getRequest();
-		String requestedUrl = request.getPathInfo();
-		if (successResultValue == null) successResultValue = requestedUrl;
-		return SUCCESS;
-	}
-
-	/**
-	 * @return Returns the successResultValue.
-	 */
-	public String getSuccessResultValue() {
-		return successResultValue;
-	}
-
-	/**
-	 * @param successResultValue The successResultValue to set.
-	 */
-	public void setSuccessResultValue(String successResultValue) {
-		this.successResultValue = successResultValue;
-	}
-	
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
deleted file mode 100644
index 6488421..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
+++ /dev/null
@@ -1,670 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.config.StrutsXmlConfigurationProvider;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-import org.apache.struts2.dispatcher.multipart.MultiPartRequest;
-import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
-import org.apache.struts2.impl.StrutsActionProxyFactory;
-import org.apache.struts2.impl.StrutsObjectFactory;
-import org.apache.struts2.util.AttributeMap;
-import org.apache.struts2.util.ObjectFactoryDestroyable;
-import org.apache.struts2.util.ObjectFactoryInitializable;
-import org.apache.struts2.views.freemarker.FreemarkerManager;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.util.FileManager;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ActionProxyFactory;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-import com.opensymphony.xwork2.util.ObjectTypeDeterminer;
-import com.opensymphony.xwork2.util.ObjectTypeDeterminerFactory;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-import com.opensymphony.xwork2.util.XWorkContinuationConfig;
-import com.opensymphony.xwork2.util.location.Location;
-import com.opensymphony.xwork2.util.location.LocationUtils;
-import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
-
-import freemarker.template.Template;
-
-/**
- * A utility class the actual dispatcher delegates most of its tasks to. Each instance
- * of the primary dispatcher holds an instance of this dispatcher to be shared for
- * all requests.
- *
- * @see org.apache.struts2.dispatcher.FilterDispatcher
- * @see org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher
- */
-public class Dispatcher {
-
-    // Set Struts-specific factories.
-    static {
-        ObjectFactory.setObjectFactory(new StrutsObjectFactory());
-        ActionProxyFactory.setFactory(new StrutsActionProxyFactory());
-    }
-
-    private static final Log LOG = LogFactory.getLog(Dispatcher.class);
-
-    private static ThreadLocal<Dispatcher> instance = new ThreadLocal<Dispatcher>();
-    private static List<DispatcherListener> dispatcherListeners =
-        new ArrayList<DispatcherListener>();
-
-    private ConfigurationManager configurationManager;
-    private static boolean portletSupportActive;
-    private boolean devMode = false;
-
-    // used to get WebLogic to play nice
-    private boolean paramsWorkaroundEnabled = false;
-
-    /**
-     * Gets the current instance for this thread
-     *
-     * @return The dispatcher instance
-     */
-    public static Dispatcher getInstance() {
-        return (Dispatcher) instance.get();
-    }
-
-    /**
-     * Sets the dispatcher instance for this thread
-     *
-     * @param instance The instance
-     */
-    public static void setInstance(Dispatcher instance) {
-        Dispatcher.instance.set(instance);
-    }
-
-    /**
-     * Adds a dispatcher lifecycle listener
-     *
-     * @param l The listener
-     */
-    public static synchronized void addDispatcherListener(DispatcherListener l) {
-        dispatcherListeners.add(l);
-    }
-
-    /**
-     * Removes a dispatcher lifecycle listener
-     *
-     * @param l The listener
-     */
-    public static synchronized void removeDispatcherListener(DispatcherListener l) {
-        dispatcherListeners.remove(l);
-    }
-
-    /**
-     * The constructor with its servlet context instance (optional)
-     *
-     * @param servletContext The servlet context
-     */
-    public Dispatcher(ServletContext servletContext) {
-        init(servletContext);
-    }
-
-    /**
-     * Cleans up thread local variables
-     */
-    public void cleanup() {
-        ObjectFactory objectFactory = ObjectFactory.getObjectFactory();
-        if (objectFactory == null) {
-            LOG.warn("Object Factory is null, something is seriously wrong, no clean up will be performed");
-        }
-        if (objectFactory instanceof ObjectFactoryDestroyable) {
-            try {
-                ((ObjectFactoryDestroyable)objectFactory).destroy();
-            }
-            catch(Exception e) {
-                // catch any exception that may occured during destroy() and log it
-                LOG.error("exception occurred while destroying ObjectFactory ["+objectFactory+"]", e);
-            }
-        }
-        instance.set(null);
-        synchronized(Dispatcher.class) {
-            if (dispatcherListeners.size() > 0) {
-                for (DispatcherListener l : dispatcherListeners) {
-                    l.dispatcherDestroyed(this);
-                }
-            }
-        }
-    }
-
-    /**
-     * Initializes the instance
-     *
-     * @param servletContext The servlet context
-     */
-    private void init(ServletContext servletContext) {
-        boolean reloadi18n = Boolean.valueOf((String) Settings.get(StrutsConstants.STRUTS_I18N_RELOAD)).booleanValue();
-        LocalizedTextUtil.setReloadBundles(reloadi18n);
-
-        if (Settings.isSet(StrutsConstants.STRUTS_OBJECTFACTORY)) {
-            String className = (String) Settings.get(StrutsConstants.STRUTS_OBJECTFACTORY);
-            if (className.equals("spring")) {
-                // note: this class name needs to be in string form so we don't put hard
-                //       dependencies on spring, since it isn't technically required.
-                className = "org.apache.struts2.spring.StrutsSpringObjectFactory";
-            } else if (className.equals("plexus")) {
-                className = "org.apache.struts2.plexus.PlexusObjectFactory";
-                LOG.warn("The 'plexus' shorthand for the Plexus ObjectFactory is deprecated.  Please "
-                        +"use the full class name: "+className);
-            }
-
-            try {
-                Class clazz = ClassLoaderUtil.loadClass(className, Dispatcher.class);
-                ObjectFactory objectFactory = (ObjectFactory) clazz.newInstance();
-                if (servletContext != null) {
-                    if (objectFactory instanceof ObjectFactoryInitializable) {
-                        ((ObjectFactoryInitializable) objectFactory).init(servletContext);
-                    }
-                }
-                ObjectFactory.setObjectFactory(objectFactory);
-            } catch (Exception e) {
-                LOG.error("Could not load ObjectFactory named " + className + ". Using default ObjectFactory.", e);
-            }
-        }
-
-        if (Settings.isSet(StrutsConstants.STRUTS_OBJECTTYPEDETERMINER)) {
-            String className = (String) Settings.get(StrutsConstants.STRUTS_OBJECTTYPEDETERMINER);
-            if (className.equals("tiger")) {
-                // note: this class name needs to be in string form so we don't put hard
-                //       dependencies on xwork-tiger, since it isn't technically required.
-                className = "com.opensymphony.xwork2.util.GenericsObjectTypeDeterminer";
-            }
-            else if (className.equals("notiger")) {
-                className = "com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer";
-            }
-
-            try {
-                Class clazz = ClassLoaderUtil.loadClass(className, Dispatcher.class);
-                ObjectTypeDeterminer objectTypeDeterminer = (ObjectTypeDeterminer) clazz.newInstance();
-                ObjectTypeDeterminerFactory.setInstance(objectTypeDeterminer);
-            } catch (Exception e) {
-                LOG.error("Could not load ObjectTypeDeterminer named " + className + ". Using default DefaultObjectTypeDeterminer.", e);
-            }
-        }
-
-        if ("true".equals(Settings.get(StrutsConstants.STRUTS_DEVMODE))) {
-            devMode = true;
-            Settings.set(StrutsConstants.STRUTS_I18N_RELOAD, "true");
-            Settings.set(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD, "true");
-        }
-
-        //check for configuration reloading
-        if ("true".equalsIgnoreCase(Settings.get(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD))) {
-            FileManager.setReloadingConfigs(true);
-        }
-
-        if (Settings.isSet(StrutsConstants.STRUTS_CONTINUATIONS_PACKAGE)) {
-            String pkg = Settings.get(StrutsConstants.STRUTS_CONTINUATIONS_PACKAGE);
-            ObjectFactory.setContinuationPackage(pkg);
-        }
-
-        // test wether param-access workaround needs to be enabled
-        if (servletContext != null && servletContext.getServerInfo() != null
-                && servletContext.getServerInfo().indexOf("WebLogic") >= 0) {
-            LOG.info("WebLogic server detected. Enabling Struts parameter access work-around.");
-            paramsWorkaroundEnabled = true;
-        } else if (Settings.isSet(StrutsConstants.STRUTS_DISPATCHER_PARAMETERSWORKAROUND)) {
-            paramsWorkaroundEnabled = "true".equals(Settings.get(StrutsConstants.STRUTS_DISPATCHER_PARAMETERSWORKAROUND));
-        } else {
-            LOG.debug("Parameter access work-around disabled.");
-        }
-
-        configurationManager = new ConfigurationManager();
-        String configFiles = null;
-        if (Settings.isSet(StrutsConstants.STRUTS_CONFIGURATION_FILES)) {
-            configFiles = Settings.get(StrutsConstants.STRUTS_CONFIGURATION_FILES);
-        }
-        if (configFiles != null) {
-	        String[] files = configFiles.split("\\s*[,]\\s*");
-	        for (String file : files) {
-	            if ("xwork.xml".equals(file)) {
-	                configurationManager.addConfigurationProvider(new XmlConfigurationProvider(file, false));
-	            } else {
-	                configurationManager.addConfigurationProvider(new StrutsXmlConfigurationProvider(file, false));
-	            }
-	        }
-        }
-
-        synchronized(Dispatcher.class) {
-            if (dispatcherListeners.size() > 0) {
-                for (DispatcherListener l : dispatcherListeners) {
-                    l.dispatcherInitialized(this);
-                }
-            }
-        }
-    }
-
-    /**
-     * Loads the action and executes it. This method first creates the action context from the given
-     * parameters then loads an <tt>ActionProxy</tt> from the given action name and namespace. After that,
-     * the action is executed and output channels throught the response object. Actions not found are
-     * sent back to the user via the {@link Dispatcher#sendError} method, using the 404 return code.
-     * All other errors are reported by throwing a ServletException.
-     *
-     * @param request  the HttpServletRequest object
-     * @param response the HttpServletResponse object
-     * @param mapping  the action mapping object
-     * @throws ServletException when an unknown error occurs (not a 404, but typically something that
-     *                          would end up as a 5xx by the servlet container)
-     */
-    public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException {
-        Map<String, Object> extraContext = createContextMap(request, response, mapping, context);
-
-        // If there was a previous value stack, then create a new copy and pass it in to be used by the new Action
-        ValueStack stack = (ValueStack) request.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);
-        if (stack != null) {
-            extraContext.put(ActionContext.VALUE_STACK, ValueStackFactory.getFactory().createValueStack(stack));
-        }
-
-        String timerKey = "Handling request from Dispatcher";
-        try {
-            UtilTimerStack.push(timerKey);
-            String namespace = mapping.getNamespace();
-            String name = mapping.getName();
-            String method = mapping.getMethod();
-
-            String id = request.getParameter(XWorkContinuationConfig.CONTINUE_PARAM);
-            if (id != null) {
-                // remove the continue key from the params - we don't want to bother setting
-                // on the value stack since we know it won't work. Besides, this breaks devMode!
-                Map params = (Map) extraContext.get(ActionContext.PARAMETERS);
-                params.remove(XWorkContinuationConfig.CONTINUE_PARAM);
-
-                // and now put the key in the context to be picked up later by XWork
-                extraContext.put(XWorkContinuationConfig.CONTINUE_KEY, id);
-            }
-
-            ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(
-                    configurationManager.getConfiguration(), namespace, name, extraContext, true, false);
-            proxy.setMethod(method);
-            request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, proxy.getInvocation().getStack());
-
-            // if the ActionMapping says to go straight to a result, do it!
-            if (mapping.getResult() != null) {
-                Result result = mapping.getResult();
-                result.execute(proxy.getInvocation());
-            } else {
-                proxy.execute();
-            }
-
-            // If there was a previous value stack then set it back onto the request
-            if (stack != null) {
-                request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
-            }
-        } catch (ConfigurationException e) {
-            LOG.error("Could not find action or result", e);
-            sendError(request, response, context, HttpServletResponse.SC_NOT_FOUND, e);
-        } catch (Exception e) {
-            LOG.error("Could not execute action", e);
-            sendError(request, response, context, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
-        } finally {
-            UtilTimerStack.pop(timerKey);
-        }
-    }
-
-    /**
-     * Creates a context map containing all the wrapped request objects
-     *
-     * @param request The servlet request
-     * @param response The servlet response
-     * @param mapping The action mapping
-     * @param context The servlet context
-     * @return A map of context objects
-     */
-    public Map<String,Object> createContextMap(HttpServletRequest request, HttpServletResponse response,
-            ActionMapping mapping, ServletContext context) {
-        // request map wrapping the http request objects
-        Map requestMap = new RequestMap(request);
-
-        // parameters map wrapping the http paraneters.
-        Map params = null;
-        if (mapping != null) {
-            params = mapping.getParams();
-        }
-        Map requestParams = new HashMap(request.getParameterMap());
-        if (params != null) {
-            params.putAll(requestParams);
-        } else {
-            params = requestParams;
-        }
-
-        // session map wrapping the http session
-        Map session = new SessionMap(request);
-
-        // application map wrapping the ServletContext
-        Map application = new ApplicationMap(context);
-
-        Map<String,Object> extraContext = createContextMap(requestMap, params, session, application, request, response, context);
-        extraContext.put(ServletActionContext.ACTION_MAPPING, mapping);
-        return extraContext;
-    }
-
-    /**
-     * Merges all application and servlet attributes into a single <tt>HashMap</tt> to represent the entire
-     * <tt>Action</tt> context.
-     *
-     * @param requestMap     a Map of all request attributes.
-     * @param parameterMap   a Map of all request parameters.
-     * @param sessionMap     a Map of all session attributes.
-     * @param applicationMap a Map of all servlet context attributes.
-     * @param request        the HttpServletRequest object.
-     * @param response       the HttpServletResponse object.
-     * @param servletContext the ServletContextmapping object.
-     * @return a HashMap representing the <tt>Action</tt> context.
-     */
-    public HashMap<String,Object> createContextMap(Map requestMap,
-                                    Map parameterMap,
-                                    Map sessionMap,
-                                    Map applicationMap,
-                                    HttpServletRequest request,
-                                    HttpServletResponse response,
-                                    ServletContext servletContext) {
-        HashMap<String,Object> extraContext = new HashMap<String,Object>();
-        extraContext.put(ActionContext.PARAMETERS, new HashMap(parameterMap));
-        extraContext.put(ActionContext.SESSION, sessionMap);
-        extraContext.put(ActionContext.APPLICATION, applicationMap);
-
-        Locale locale = null;
-        if (Settings.isSet(StrutsConstants.STRUTS_LOCALE)) {
-            locale = LocalizedTextUtil.localeFromString(Settings.get(StrutsConstants.STRUTS_LOCALE), request.getLocale());
-        } else {
-            locale = request.getLocale();
-        }
-
-        extraContext.put(ActionContext.LOCALE, locale);
-        extraContext.put(ActionContext.DEV_MODE, Boolean.valueOf(devMode));
-
-        extraContext.put(StrutsStatics.HTTP_REQUEST, request);
-        extraContext.put(StrutsStatics.HTTP_RESPONSE, response);
-        extraContext.put(StrutsStatics.SERVLET_CONTEXT, servletContext);
-
-        // helpers to get access to request/session/application scope
-        extraContext.put("request", requestMap);
-        extraContext.put("session", sessionMap);
-        extraContext.put("application", applicationMap);
-        extraContext.put("parameters", parameterMap);
-
-        AttributeMap attrMap = new AttributeMap(extraContext);
-        extraContext.put("attr", attrMap);
-
-        return extraContext;
-    }
-
-    /**
-     * Returns the maximum upload size allowed for multipart requests (this is configurable).
-     *
-     * @return the maximum upload size allowed for multipart requests
-     */
-    private static int getMaxSize() {
-        Integer maxSize = new Integer(Integer.MAX_VALUE);
-        try {
-            String maxSizeStr = Settings.get(StrutsConstants.STRUTS_MULTIPART_MAXSIZE);
-
-            if (maxSizeStr != null) {
-                try {
-                    maxSize = new Integer(maxSizeStr);
-                } catch (NumberFormatException e) {
-                    LOG.warn("Unable to format 'struts.multipart.maxSize' property setting. Defaulting to Integer.MAX_VALUE");
-                }
-            } else {
-                LOG.warn("Unable to format 'struts.multipart.maxSize' property setting. Defaulting to Integer.MAX_VALUE");
-            }
-        } catch (IllegalArgumentException e1) {
-            LOG.warn("Unable to format 'struts.multipart.maxSize' property setting. Defaulting to Integer.MAX_VALUE");
-        }
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("maxSize=" + maxSize);
-        }
-
-        return maxSize.intValue();
-    }
-
-    /**
-     * Returns the path to save uploaded files to (this is configurable).
-     *
-     * @return the path to save uploaded files to
-     */
-    private String getSaveDir(ServletContext servletContext) {
-        String saveDir = Settings.get(StrutsConstants.STRUTS_MULTIPART_SAVEDIR).trim();
-
-        if (saveDir.equals("")) {
-            File tempdir = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
-            LOG.info("Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir");
-
-            if (tempdir != null) {
-                saveDir = tempdir.toString();
-            }
-        } else {
-            File multipartSaveDir = new File(saveDir);
-
-            if (!multipartSaveDir.exists()) {
-                multipartSaveDir.mkdir();
-            }
-        }
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("saveDir=" + saveDir);
-        }
-
-        return saveDir;
-    }
-
-    /**
-     * Prepares a request, including setting the encoding and locale
-     *
-     * @param request The request
-     * @param response The response
-     */
-    public void prepare(HttpServletRequest request, HttpServletResponse response) {
-        String encoding = null;
-        if (Settings.isSet(StrutsConstants.STRUTS_I18N_ENCODING)) {
-            encoding = Settings.get(StrutsConstants.STRUTS_I18N_ENCODING);
-        }
-
-        Locale locale = null;
-        if (Settings.isSet(StrutsConstants.STRUTS_LOCALE)) {
-            locale = LocalizedTextUtil.localeFromString(Settings.get(StrutsConstants.STRUTS_LOCALE), request.getLocale());
-        }
-
-        if (encoding != null) {
-            try {
-                request.setCharacterEncoding(encoding);
-            } catch (Exception e) {
-                LOG.error("Error setting character encoding to '" + encoding + "' - ignoring.", e);
-            }
-        }
-
-        if (locale != null) {
-            response.setLocale(locale);
-        }
-
-        if (paramsWorkaroundEnabled) {
-            request.getParameter("foo"); // simply read any parameter (existing or not) to "prime" the request
-        }
-    }
-
-    /**
-     * Wraps and returns the given response or returns the original response object. This is used to transparently
-     * handle multipart data as a wrapped class around the given request. Override this method to handle multipart
-     * requests in a special way or to handle other types of requests. Note, {@link org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper} is
-     * flexible - you should look to that first before overriding this method to handle multipart data.
-     *
-     * @param request the HttpServletRequest object.
-     * @return a wrapped request or original request.
-     * @see org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
-     */
-    public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
-        // don't wrap more than once
-        if (request instanceof StrutsRequestWrapper) {
-            return request;
-        }
-
-        if (MultiPartRequest.isMultiPart(request)) {
-            request = new MultiPartRequestWrapper(request, getSaveDir(servletContext), getMaxSize());
-        } else {
-            request = new StrutsRequestWrapper(request);
-        }
-
-        return request;
-    }
-
-    /**
-     * Sends an HTTP error response code.
-     *
-     * @param request  the HttpServletRequest object.
-     * @param response the HttpServletResponse object.
-     * @param code     the HttpServletResponse error code (see {@link javax.servlet.http.HttpServletResponse} for possible error codes).
-     * @param e        the Exception that is reported.
-     */
-    public void sendError(HttpServletRequest request, HttpServletResponse response,
-            ServletContext ctx, int code, Exception e) {
-        if (devMode) {
-            response.setContentType("text/html");
-
-            try {
-                freemarker.template.Configuration config = FreemarkerManager.getInstance().getConfiguration(ctx);
-                Template template = config.getTemplate("/org/apache/struts2/dispatcher/error.ftl");
-
-                List<Throwable> chain = new ArrayList<Throwable>();
-                Throwable cur = e;
-                chain.add(cur);
-                while ((cur = cur.getCause()) != null) {
-                    chain.add(cur);
-                }
-
-                HashMap<String,Object> data = new HashMap<String,Object>();
-                data.put("exception", e);
-                data.put("unknown", Location.UNKNOWN);
-                data.put("chain", chain);
-                data.put("locator", new Locator());
-                template.process(data, response.getWriter());
-                response.getWriter().close();
-            } catch (Exception exp) {
-                try {
-                    response.sendError(code, "Unable to show problem report: " + exp);
-                } catch (IOException ex) {
-                    // we're already sending an error, not much else we can do if more stuff breaks
-                }
-            }
-        } else {
-            try {
-                // send a http error response to use the servlet defined error handler
-                // make the exception availible to the web.xml defined error page
-                request.setAttribute("javax.servlet.error.exception", e);
-
-                // for compatibility
-                request.setAttribute("javax.servlet.jsp.jspException", e);
-
-                // send the error response
-                response.sendError(code, e.getMessage());
-            } catch (IOException e1) {
-                // we're already sending an error, not much else we can do if more stuff breaks
-            }
-        }
-    }
-
-    /**
-     * Returns <tt>true</tt>, if portlet support is active, <tt>false</tt> otherwise.
-     *
-     * @return <tt>true</tt>, if portlet support is active, <tt>false</tt> otherwise.
-     */
-    public boolean isPortletSupportActive() {
-        return portletSupportActive;
-    }
-
-    /**
-     * Set the flag that portlet support is active or not.
-     * @param portletSupportActive <tt>true</tt> or <tt>false</tt>
-     */
-    public static void setPortletSupportActive(boolean portletSupportActive) {
-        Dispatcher.portletSupportActive = portletSupportActive;
-    }
-
-    /** Simple accessor for a static method */
-    public class Locator {
-        public Location getLocation(Object obj) {
-            Location loc = LocationUtils.getLocation(obj);
-            if (loc == null) {
-                return Location.UNKNOWN;
-            }
-            return loc;
-        }
-    }
-
-    /**
-     * Gets the current configuration manager instance
-     *
-     * @return The instance
-     */
-    public ConfigurationManager getConfigurationManager() {
-        return configurationManager;
-    }
-
-    /**
-     * Sets the current configuration manager instance
-     *
-     * @param mgr The configuration manager
-     */
-    public void setConfigurationManager(ConfigurationManager mgr) {
-        this.configurationManager = mgr;
-    }
-
-    /**
-     * @return the devMode
-     */
-    public boolean isDevMode() {
-        return devMode;
-    }
-
-    /**
-     * @param devMode the devMode to set
-     */
-    public void setDevMode(boolean devMode) {
-        this.devMode = devMode;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/DispatcherListener.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/DispatcherListener.java
deleted file mode 100644
index 1030cef..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/DispatcherListener.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-/**
- * A interface to tag those that want to execute code on the init and
- * destory of a Dispatcher.
- */
-public interface DispatcherListener {
-
-    /**
-     * Called when the dispatcher is initialized
-     * 
-     * @param du The dispatcher instance
-     */
-    public void dispatcherInitialized(Dispatcher du);
-    
-    /**
-     * Called when the dispatcher is destroyed
-     * 
-     * @param du The dispatcher instance
-     */
-    public void dispatcherDestroyed(Dispatcher du);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
deleted file mode 100644
index 5ce84e7..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URLDecoder;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.TimeZone;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.RequestUtils;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.mapper.ActionMapper;
-import org.apache.struts2.dispatcher.mapper.ActionMapperFactory;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
-import com.opensymphony.xwork2.ActionContext;
-
-/**
- * Master filter for Struts that handles four distinct 
- * responsibilities:
- *
- * <ul>
- *
- * <li>Executing actions</li>
- *
- * <li>Cleaning up the {@link ActionContext} (see note)</li>
- *
- * <li>Serving static content</li>
- *
- * <li>Kicking off XWork's interceptor chain for the request lifecycle</li>
- *
- * </ul>
- *
- * <p/> <b>IMPORTANT</b>: this filter must be mapped to all requests. Unless you know exactly what you are doing, always
- * map to this URL pattern: /*
- *
- * <p/> <b>Executing actions</b>
- *
- * <p/> This filter executes actions by consulting the {@link ActionMapper} and determining if the requested URL should
- * invoke an action. If the mapper indicates it should, <b>the rest of the filter chain is stopped</b> and the action is
- * invoked. This is important, as it means that filters like the SiteMesh filter must be placed <b>before</b> this
- * filter or they will not be able to decorate the output of actions.
- *
- * <p/> <b>Cleaning up the {@link ActionContext}</b>
- *
- * <p/> This filter will also automatically clean up the {@link ActionContext} for you, ensuring that no memory leaks
- * take place. However, this can sometimes cause problems integrating with other products like SiteMesh. See {@link
- * ActionContextCleanUp} for more information on how to deal with this.
- *
- * <p/> <b>Serving static content</b>
- *
- * <p/> This filter also serves common static content needed when using various parts of Struts, such as JavaScript
- * files, CSS files, etc. It works by looking for requests to /struts/*, and then mapping the value after "/struts/"
- * to common packages in Struts and, optionally, in your class path. By default, the following packages are
- * automatically searched:
- *
- * <ul>
- *
- * <li>org.apache.struts2.static</li>
- *
- * <li>template</li>
- *
- * </ul>
- *
- * <p/> This means that you can simply request /struts/xhtml/styles.css and the XHTML UI theme's default stylesheet
- * will be returned. Likewise, many of the AJAX UI components require various JavaScript files, which are found in the
- * org.apache.struts2.static package. If you wish to add additional packages to be searched, you can add a comma
- * separated (space, tab and new line will do as well) list in the filter init parameter named "packages". <b>Be
- * careful</b>, however, to expose any packages that may have sensitive information, such as properties file with
- * database access credentials.
- *
- * <p/>
- * 
- * To use a custom {@link Dispatcher}, the <code>createDispatcher()</code> method could be overriden by 
- * the subclass.
- *
- * @see org.apache.struts2.lifecycle.LifecycleListener
- * @see ActionMapper
- * @see ActionContextCleanUp
- * 
- * @version $Date$ $Id$
- */
-public class FilterDispatcher implements Filter, StrutsStatics {
-    private static final Log LOG = LogFactory.getLog(FilterDispatcher.class);
-
-    private FilterConfig filterConfig;
-    private String[] pathPrefixes;
-    private Dispatcher dispatcher;
-
-    private SimpleDateFormat df = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss");
-    private final Calendar lastModifiedCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
-    private final String lastModified = df.format(lastModifiedCal.getTime());
-
-    /** 
-     * Gets this filter's configuration
-     * 
-     * @return The filter config
-     */
-    protected FilterConfig getFilterConfig() {
-        return filterConfig;
-    }
-
-    /**
-     * Cleans up the dispatcher
-     */
-    public void destroy() {
-        	if (dispatcher == null) {
-        		LOG.warn("something is seriously wrong, DispatcherUtil is not initialized (null) ");
-        	} else {
-        	    dispatcher.cleanup();
-        }
-    }
-
-    /**
-     * Initializes the dispatcher and filter
-     */
-    public void init(FilterConfig filterConfig) throws ServletException {
-        this.filterConfig = filterConfig;
-        String param = filterConfig.getInitParameter("packages");
-        String packages = "org.apache.struts2.static template org.apache.struts2.interceptor.debugging";
-        if (param != null) {
-            packages = param + " " + packages;
-        }
-        this.pathPrefixes = parse(packages);
-        dispatcher = createDispatcher();
-    }
-    
-    /**
-     * Parses the list of packages
-     * 
-     * @param packages A comma-delimited String 
-     * @return A string array of packages
-     */
-    protected String[] parse(String packages) {
-        if (packages == null) {
-            return null;
-        }
-        List<String> pathPrefixes = new ArrayList<String>();
-
-        StringTokenizer st = new StringTokenizer(packages, ", \n\t");
-        while (st.hasMoreTokens()) {
-            String pathPrefix = st.nextToken().replace('.', '/');
-            if (!pathPrefix.endsWith("/")) {
-                pathPrefix += "/";
-            }
-            pathPrefixes.add(pathPrefix);
-        }
-
-        return (String[]) pathPrefixes.toArray(new String[pathPrefixes.size()]);
-    }
-
-
-    /* (non-Javadoc)
-     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
-     */
-    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
-        HttpServletRequest request = (HttpServletRequest) req;
-        HttpServletResponse response = (HttpServletResponse) res;
-        ServletContext servletContext = filterConfig.getServletContext();
-
-        String timerKey = "FilterDispatcher_doFilter: ";
-        try {
-        	UtilTimerStack.push(timerKey);
-        	Dispatcher du = Dispatcher.getInstance();
-        
-        	// Prepare and wrap the request if the cleanup filter hasn't already
-        	if (du == null) {
-        		du = dispatcher;
-        		// prepare the request no matter what - this ensures that the proper character encoding
-        		// is used before invoking the mapper (see WW-9127)
-        		du.prepare(request, response);
-
-        		try {
-        			// Wrap request first, just in case it is multipart/form-data 
-        			// parameters might not be accessible through before encoding (ww-1278)
-        			request = du.wrapRequest(request, servletContext);
-        		} catch (IOException e) {
-        			String message = "Could not wrap servlet request with MultipartRequestWrapper!";
-        			LOG.error(message, e);
-        			throw new ServletException(message, e);
-        		}
-        		Dispatcher.setInstance(du);
-        	}
-
-        	ActionMapper mapper = null;
-        	ActionMapping mapping = null;
-        	try {
-        		mapper = ActionMapperFactory.getMapper();
-        		mapping = mapper.getMapping(request, du.getConfigurationManager());
-        	} catch (Exception ex) {
-        		du.sendError(request, response, servletContext, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
-        		ActionContextCleanUp.cleanUp(req);
-        		return;
-        	}
-
-        	if (mapping == null) {
-        		// there is no action in this request, should we look for a static resource?
-        		String resourcePath = RequestUtils.getServletPath(request);
-
-        		if ("".equals(resourcePath) && null != request.getPathInfo()) {
-        			resourcePath = request.getPathInfo();
-        		}
-
-        		if ("true".equals(Settings.get(StrutsConstants.STRUTS_SERVE_STATIC_CONTENT)) 
-                    && resourcePath.startsWith("/struts")) {
-        			String name = resourcePath.substring("/struts".length());
-        			findStaticResource(name, response);
-        		} else {
-        			// this is a normal request, let it pass through
-        			chain.doFilter(request, response);
-        		}
-        		// The framework did its job here
-        		return;
-        	}
-
-
-        	try {
-        		dispatcher.serviceAction(request, response, servletContext, mapping);
-        	} finally {
-        		ActionContextCleanUp.cleanUp(req);
-        	}
-        }
-        finally {
-        	UtilTimerStack.pop(timerKey);
-        }
-    }
-
-    /**
-     * Servlet 2.3 specifies that the servlet context can be retrieved from the session. Unfortunately, some versions of
-     * WebLogic can only retrieve the servlet context from the filter config. Hence, this method enables subclasses to
-     * retrieve the servlet context from other sources.
-     *
-     * @param session the HTTP session where, in Servlet 2.3, the servlet context can be retrieved
-     * @return the servlet context.
-     */
-    protected ServletContext getServletContext(HttpSession session) {
-        return filterConfig.getServletContext();
-    }
-
-    /**
-     * Fins a static resource
-     * 
-     * @param name The resource name
-     * @param response The request
-     * @throws IOException If anything goes wrong
-     */
-    protected void findStaticResource(String name, HttpServletResponse response) throws IOException {
-        if (!name.endsWith(".class")) {
-            for (int i = 0; i < pathPrefixes.length; i++) {
-                InputStream is = findInputStream(name, pathPrefixes[i]);
-                if (is != null) {
-                    // set the content-type header
-                    String contentType = getContentType(name);
-                    if (contentType != null) {
-                        response.setContentType(contentType);
-                    }
-                    
-                    if ("true".equals(Settings.get(StrutsConstants.STRUTS_SERVE_STATIC_BROWSER_CACHE))) {
-                    	// set heading information for caching static content
-                        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
-                        response.setHeader("Date",df.format(cal.getTime())+" GMT");
-                        cal.add(Calendar.DAY_OF_MONTH,1);
-                        response.setHeader("Expires",df.format(cal.getTime())+" GMT");
-                        response.setHeader("Retry-After",df.format(cal.getTime())+" GMT");
-                        response.setHeader("Cache-Control","public");
-                        response.setHeader("Last-Modified",lastModified+" GMT");
-                    }
-                    else {
-                    	response.setHeader("Cache-Control","no-cache");
-                        response.setHeader("Pragma","no-cache");
-                        response.setHeader("Expires","-1");
-                    }
-
-                    try {
-                        copy(is, response.getOutputStream());
-                    } finally {
-                        is.close();
-                    }
-                    return;
-                }
-            }
-        }
-
-        response.sendError(HttpServletResponse.SC_NOT_FOUND);
-    }
-
-    /**
-     * Determines the content type for the resource name
-     * 
-     * @param name The resource name
-     * @return The mime type
-     */
-    protected String getContentType(String name) {
-        // NOT using the code provided activation.jar to avoid adding yet another dependency
-        // this is generally OK, since these are the main files we server up
-        if (name.endsWith(".js")) {
-            return "text/javascript";
-        } else if (name.endsWith(".css")) {
-            return "text/css";
-        } else if (name.endsWith(".html")) {
-            return "text/html";
-        } else if (name.endsWith(".txt")) {
-            return "text/plain";
-        } else if (name.endsWith(".gif")) {
-            return "image/gif";
-        } else if (name.endsWith(".jpg") || name.endsWith(".jpeg")) {
-            return "image/jpeg";
-        } else if (name.endsWith(".png")) {
-            return "image/png";
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Copies the from the input stream to the output stream
-     * 
-     * @param input The input stream
-     * @param output The output stream
-     * @throws IOException If anything goes wrong
-     */
-    protected void copy(InputStream input, OutputStream output) throws IOException {
-        final byte[] buffer = new byte[4096];
-        int n;
-        while (-1 != (n = input.read(buffer))) {
-            output.write(buffer, 0, n);
-        }
-    }
-
-    /**
-     * Looks for a static resource in the classpath
-     * 
-     * @param name The resource name
-     * @param packagePrefix The package prefix to use to locate the resource
-     * @return The inputstream of the resource
-     * @throws IOException If there is a problem locating the resource
-     */
-    protected InputStream findInputStream(String name, String packagePrefix) throws IOException {
-        String resourcePath;
-        if (packagePrefix.endsWith("/") && name.startsWith("/")) {
-            resourcePath = packagePrefix + name.substring(1);
-        } else {
-            resourcePath = packagePrefix + name;
-        }
-
-        String enc = (String) Settings.get(StrutsConstants.STRUTS_I18N_ENCODING);
-        resourcePath = URLDecoder.decode(resourcePath, enc);
-
-        return ClassLoaderUtil.getResourceAsStream(resourcePath, getClass());
-    }
-    
-    /**
-     * Create a {@link Dispatcher}, this serves as a hook for subclass to overried
-     * such that a custom {@link Dispatcher} could be created. 
-     * 
-     * @return Dispatcher
-     */
-    protected Dispatcher createDispatcher() {
-    	return new Dispatcher(filterConfig.getServletContext());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcherCompatWeblogic61.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcherCompatWeblogic61.java
deleted file mode 100644
index 9063bb9..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcherCompatWeblogic61.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.config.ServletContextSingleton;
-
-
-/**
- * When running Weblogic Server 6.1, this class should be
- * specified in web.xml instead of {@link FilterDispatcher}.
- * <p/>
- * This class properly handles the weblogic.jar handling
- * of servlet filters.  There is one serious incompatibility, and
- * that is that while {@link FilterDispatcher#init(FilterConfig)}
- * throws a {@link ServletException}, this class's method
- * {@link #setFilterConfig(FilterConfig)} does not throw
- * the exception.  Since {@link #setFilterConfig(FilterConfig)}
- * invokes {@link FilterDispatcher#init(FilterConfig)}, the setter
- * must "swallow" the exception.  This it does by logging the
- * exception as an error.
- *
- */
-public class FilterDispatcherCompatWeblogic61
-        extends FilterDispatcher
-        implements Filter {
-
-    private static Log log =
-            LogFactory.getLog(FilterDispatcherCompatWeblogic61.class);
-
-    /**
-     * dummy setter for {@link #filterConfig}; this method
-     * sets up the {@link org.apache.struts2.config.ServletContextSingleton} with
-     * the servlet context from the filter configuration.
-     * <p/>
-     * This is needed by Weblogic Server 6.1 because it
-     * uses a slightly obsolete Servlet 2.3-minus spec
-     * whose {@link Filter} interface requires this method.
-     * <p/>
-     *
-     * @param filterConfig the filter configuration.
-     */
-    public void setFilterConfig(FilterConfig filterConfig) {
-        try {
-            init(filterConfig);
-        } catch (ServletException se) {
-            log.error("Couldn't set the filter configuration in this filter", se);
-        }
-
-        ServletContextSingleton singleton = ServletContextSingleton.getInstance();
-        singleton.setServletContext(filterConfig.getServletContext());
-    }
-
-    /**
-     * answers the servlet context.
-     * <p/>
-     * Servlet 2.3 specifies that this can be retrieved from
-     * the session.  Unfortunately, weblogic.jar can only retrieve
-     * the servlet context from the filter config.  Hence, this
-     * returns the servlet context from the singleton that was
-     * setup by {@link #setFilterConfig(FilterConfig)}.
-     *
-     * @param session the HTTP session.  Not used
-     * @return the servlet context.
-     */
-    protected ServletContext getServletContext(HttpSession session) {
-        ServletContextSingleton singleton =
-                ServletContextSingleton.getInstance();
-        return singleton.getServletContext();
-    }
-
-    /**
-     * This method is required by Weblogic 6.1 SP4 because
-     * they defined this as a required method just before
-     * the Servlet 2.3 specification was finalized.
-     *
-     * @return the filter's filter configuration
-     */
-    public FilterConfig getFilterConfig() {
-        return super.getFilterConfig();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java
deleted file mode 100644
index 4c45409..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.ServletActionContext;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.util.TextParseUtil;
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * A custom Result type for setting HTTP headers and status by optionally evaluating against the ValueStack.
- * 
- * <!-- END SNIPPET: description -->
- * <p/>
- * <b>This result type takes the following parameters:</b>
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li><b>status</b> - the http servlet response status code that should be set on a response.</li>
- *
- * <li><b>parse</b> - true by default. If set to false, the headers param will not be parsed for Ognl expressions.</li>
- *
- * <li><b>headers</b> - header values.</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- * <b>Example:</b>
- *
- * <pre><!-- START SNIPPET: example -->
- * &lt;result name="success" type="httpheader"&gt;
- *   &lt;param name="status"&gt;204&lt;/param&gt;
- *   &lt;param name="headers.a"&gt;a custom header value&lt;/param&gt;
- *   &lt;param name="headers.b"&gt;another custom header value&lt;/param&gt;
- * &lt;/result&gt;
- * <!-- END SNIPPET: example --></pre>
- *
- */
-public class HttpHeaderResult implements Result {
-
-	private static final long serialVersionUID = 195648957144219214L;
-
-    /** The default parameter */
-	public static final String DEFAULT_PARAM = "status";
-
-
-    private boolean parse = true;
-    private Map<String,String> headers;
-    private int status = -1;
-    
-    public HttpHeaderResult() {
-    	super();
-    	headers = new HashMap<String,String>();
-    }
-    
-    public HttpHeaderResult(int status) {
-    	this();
-    	this.status = status;
-    	this.parse = false;
-    }
-
-
-    /**
-     * Returns a Map of all HTTP headers.
-     *
-     * @return a Map of all HTTP headers.
-     */
-    public Map getHeaders() {
-        return headers;
-    }
-
-    /**
-     * Sets whether or not the HTTP header values should be evaluated against the ValueStack (by default they are).
-     *
-     * @param parse <tt>true</tt> if HTTP header values should be evaluated agains the ValueStack, <tt>false</tt>
-     *              otherwise.
-     */
-    public void setParse(boolean parse) {
-        this.parse = parse;
-    }
-
-    /**
-     * Sets the http servlet response status code that should be set on a response.
-     *
-     * @param status the Http status code
-     * @see javax.servlet.http.HttpServletResponse#setStatus(int)
-     */
-    public void setStatus(int status) {
-        this.status = status;
-    }
-    
-    /**
-     * Adds an HTTP header to the response
-     * @param name
-     * @param value
-     */
-    public void addHeader(String name, String value) {
-    	headers.put(name, value);
-    }
-
-    /**
-     * Sets the optional HTTP response status code and also re-sets HTTP headers after they've
-     * been optionally evaluated against the ValueStack.
-     *
-     * @param invocation an encapsulation of the action execution state.
-     * @throws Exception if an error occurs when re-setting the headers.
-     */
-    public void execute(ActionInvocation invocation) throws Exception {
-        HttpServletResponse response = ServletActionContext.getResponse();
-
-        if (status != -1) {
-            response.setStatus(status);
-        }
-
-        if (headers != null) {
-            ValueStack stack = ActionContext.getContext().getValueStack();
-
-            for (Iterator iterator = headers.entrySet().iterator();
-                 iterator.hasNext();) {
-                Map.Entry entry = (Map.Entry) iterator.next();
-                String value = (String) entry.getValue();
-                String finalValue = parse ? TextParseUtil.translateVariables(value, stack) : value;
-                response.addHeader((String) entry.getKey(), finalValue);
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/PlainTextResult.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/PlainTextResult.java
deleted file mode 100644
index 62490a4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/PlainTextResult.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.nio.charset.Charset;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionInvocation;
-
-/**
- * <!-- START SNIPPET: description -->
- * 
- * A result that send the content out as plain text. Usefull typically when needed
- * to display the raw content of a JSP or Html file for example.
- * 
- * <!-- END SNIPPET: description -->
- * 
- * 
- * <!-- START SNIPPET: params -->
- * 
- * <ul>
- * 	<li>location (default) = location of the file (jsp/html) to be displayed as plain text.</li>
- *  <li>charSet (optional) = character set to be used. This character set will be used to set the
- *  response type (eg. Content-Type=text/plain; charset=UTF-8) and when reading 
- *  using a Reader. Some example of charSet would be UTF-8, ISO-8859-1 etc. 
- * </ul>
- * 
- * <!-- END SNIPPET: params -->
- * 
- * 
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;action name="displayJspRawContent" &gt;
- *   &lt;result type="plaintext"&gt;/myJspFile.jsp&lt;/result&gt;
- * &lt;/action&gt;
- * 
- * 
- * &lt;action name="displayJspRawContent" &gt;
- *   &lt;result type="plaintext"&gt;
- *      &lt;param name="location"&gt;/myJspFile.jsp&lt;/param&gt;
- *      &lt;param name="charSet"&gt;UTF-8&lt;/param&gt;
- *   &lt;/result&gt;
- * &lt;/action&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- */
-public class PlainTextResult extends StrutsResultSupport {
-
-    public static final int BUFFER_SIZE = 1024;
-    
-	private static final Log _log = LogFactory.getLog(PlainTextResult.class);
-
-	private static final long serialVersionUID = 3633371605905583950L;
-	
-	private String charSet;
-	
-	public PlainTextResult() {
-		super();
-	}
-	
-	public PlainTextResult(String location) {
-		super(location);
-	}
-	
-    /**
-     * Set the character set
-     * 
-     * @return The character set
-     */
-	public String getCharSet() {
-		return charSet;
-	}
-    
-    /**
-     * Set the character set
-     * 
-     * @param charSet The character set
-     */
-	public void setCharSet(String charSet) {
-		this.charSet = charSet;
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.apache.struts2.dispatcher.StrutsResultSupport#doExecute(java.lang.String, com.opensymphony.xwork2.ActionInvocation)
-	 */
-	protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
-		
-		// verify charset 
-		Charset charset = null;
-		if (charSet != null) {
-			if (Charset.isSupported(charSet)) {
-				charset = Charset.forName(charSet);
-			}
-			else {
-				_log.warn("charset ["+charSet+"] is not recognized ");
-				charset = null;
-			}
-		}
-		
-		HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(HTTP_RESPONSE);
-		ServletContext servletContext = (ServletContext) invocation.getInvocationContext().get(SERVLET_CONTEXT);
-
-		
-		if (charset != null) {
-			response.setContentType("text/plain; charset="+charSet);
-		}
-		else {
-			response.setContentType("text/plain");
-		}
-		response.setHeader("Content-Disposition", "inline");
-		
-		
-		PrintWriter writer = response.getWriter();
-		InputStreamReader reader = null;
-		try {
-			if (charset != null) {
-				reader = new InputStreamReader(servletContext.getResourceAsStream(finalLocation), charset);
-			}
-			else {
-				reader = new InputStreamReader(servletContext.getResourceAsStream(finalLocation));
-			}
-			if (reader == null) {
-				_log.warn("resource at location ["+finalLocation+"] cannot be obtained (return null) from ServletContext !!! ");
-			}
-			else {
-				char[] buffer = new char[BUFFER_SIZE];
-				int charRead = 0;
-				while((charRead = reader.read(buffer)) != -1) {
-					writer.write(buffer, 0, charRead);
-				}
-			}
-		}
-		finally {
-			if (reader != null)
-				reader.close();
-			if (writer != null) {
-				writer.flush();
-				writer.close();
-			}
-		}
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/RequestMap.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/RequestMap.java
deleted file mode 100644
index a4183b5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/RequestMap.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.Serializable;
-import java.util.AbstractMap;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-
-
-/**
- * A simple implementation of the {@link java.util.Map} interface to handle a collection of request attributes.
- */
-public class RequestMap extends AbstractMap implements Serializable {
-
-	private static final long serialVersionUID = -7675640869293787926L;
-	
-	private Set<Object> entries;
-    private HttpServletRequest request;
-
-
-    /**
-     * Saves the request to use as the backing for getting and setting values
-     *
-     * @param request the http servlet request.
-     */
-    public RequestMap(final HttpServletRequest request) {
-        this.request = request;
-    }
-
-
-    /**
-     * Removes all attributes from the request as well as clears entries in this map.
-     */
-    public void clear() {
-        entries = null;
-        Enumeration keys = request.getAttributeNames();
-
-        while (keys.hasMoreElements()) {
-            String key = (String) keys.nextElement();
-            request.removeAttribute(key);
-        }
-    }
-
-    /**
-     * Returns a Set of attributes from the http request.
-     *
-     * @return a Set of attributes from the http request.
-     */
-    public Set entrySet() {
-        if (entries == null) {
-            entries = new HashSet<Object>();
-
-            Enumeration enumeration = request.getAttributeNames();
-
-            while (enumeration.hasMoreElements()) {
-                final String key = enumeration.nextElement().toString();
-                final Object value = request.getAttribute(key);
-                entries.add(new Entry() {
-                    public boolean equals(Object obj) {
-                        Entry entry = (Entry) obj;
-
-                        return ((key == null) ? (entry.getKey() == null) : key.equals(entry.getKey())) && ((value == null) ? (entry.getValue() == null) : value.equals(entry.getValue()));
-                    }
-
-                    public int hashCode() {
-                        return ((key == null) ? 0 : key.hashCode()) ^ ((value == null) ? 0 : value.hashCode());
-                    }
-
-                    public Object getKey() {
-                        return key;
-                    }
-
-                    public Object getValue() {
-                        return value;
-                    }
-
-                    public Object setValue(Object obj) {
-                        request.setAttribute(key.toString(), obj);
-
-                        return value;
-                    }
-                });
-            }
-        }
-
-        return entries;
-    }
-
-    /**
-     * Returns the request attribute associated with the given key or <tt>null</tt> if it doesn't exist.
-     *
-     * @param key the name of the request attribute.
-     * @return the request attribute or <tt>null</tt> if it doesn't exist.
-     */
-    public Object get(Object key) {
-        return request.getAttribute(key.toString());
-    }
-
-    /**
-     * Saves an attribute in the request.
-     *
-     * @param key   the name of the request attribute.
-     * @param value the value to set.
-     * @return the object that was just set.
-     */
-    public Object put(Object key, Object value) {
-        entries = null;
-        request.setAttribute(key.toString(), value);
-
-        return get(key);
-    }
-
-    /**
-     * Removes the specified request attribute.
-     *
-     * @param key the name of the attribute to remove.
-     * @return the value that was removed or <tt>null</tt> if the value was not found (and hence, not removed).
-     */
-    public Object remove(Object key) {
-        entries = null;
-
-        Object value = get(key);
-        request.removeAttribute(key.toString());
-
-        return value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java
deleted file mode 100644
index 33222a8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.dispatcher.mapper.ActionMapper;
-import org.apache.struts2.dispatcher.mapper.ActionMapperFactory;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-import org.apache.struts2.views.util.UrlHelper;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * This result uses the {@link ActionMapper} provided by the {@link ActionMapperFactory} to redirect the browser to a
- * URL that invokes the specified action and (optional) namespace. This is better than the {@link ServletRedirectResult}
- * because it does not require you to encode the URL patterns processed by the {@link ActionMapper} in to your struts.xml
- * configuration files. This means you can change your URL patterns at any point and your application will still work.
- * It is strongly recommended that if you are redirecting to another action, you use this result rather than the
- * standard redirect result.
- *
- * <p/>
- *
- * To pass parameters, the &lt;param&gt; ... &lt;/param&gt; tag. The following parameters will not be
- * passable becuase they are part of the config param for this particular result.
- *
- * <ul>
- * 	<li>actionName</li>
- *  <li>namespace</li>
- *  <li>method</li>
- *  <li>encode</li>
- *  <li>parse</li>
- *  <li>location</li>
- *  <li>prependServletContext</li>
- * </ul>
- *
- * See examples below for an example of how request parameters could be passed in.
- *
- * <!-- END SNIPPET: description -->
- *
- * <b>This result type takes the following parameters:</b>
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li><b>actionName (default)</b> - the name of the action that will be redirect to</li>
- *
- * <li><b>namespace</b> - used to determine which namespace the action is in that we're redirecting to . If namespace is
- * null, this defaults to the current namespace</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- * <b>Example:</b>
- *
- * <pre><!-- START SNIPPET: example -->
- * &lt;package name="public" extends="struts-default"&gt;
- *     &lt;action name="login" class="..."&gt;
- *         &lt;!-- Redirect to another namespace --&gt;
- *         &lt;result type="redirect-action"&gt;
- *             &lt;param name="actionName"&gt;dashboard&lt;/param&gt;
- *             &lt;param name="namespace"&gt;/secure&lt;/param&gt;
- *         &lt;/result&gt;
- *     &lt;/action&gt;
- * &lt;/package&gt;
- *
- * &lt;package name="secure" extends="struts-default" namespace="/secure"&gt;
- *     &lt;-- Redirect to an action in the same namespace --&gt;
- *     &lt;action name="dashboard" class="..."&gt;
- *         &lt;result&gt;dashboard.jsp&lt;/result&gt;
- *         &lt;result name="error" type="redirect-action&gt;error&lt;/result&gt;
- *     &lt;/action&gt;
- *
- *     &lt;action name="error" class="..."&gt;
- *         &lt;result&gt;error.jsp&lt;/result&gt;
- *     &lt;/action&gt;
- * &lt;/package&gt;
- *
- * &lt;package name="passingRequestParameters" extends="struts-default" namespace="/passingRequestParameters"&gt;
- * 	  &lt;-- Pass parameters (reportType, width and height) --&gt;
- *    &lt;!--
- *    The redirect-action url generated will be :
- *    /genReport/generateReport.action?reportType=pie&width=100&height=100
- *    --&gt;
- *    &lt;action name="gatherReportInfo" class="..."&gt;
- *       &lt;result name="showReportResult" type="redirect-action"&gt;
- *       	&lt;param name="actionName"&gt;generateReport&lt;/param&gt;
- *          &lt;param name="namespace="&gt;/genReport&lt;/param&gt;
- *          &lt;param name="reportType"&gt;pie&lt;/param&gt;
- *          &lt;param name="width"&gt;100&lt;/param&gt;
- *          &lt;param name="height"&gt;100&lt;/param&gt;
- *       &lt;/result&gt;
- *    &lt;/action&gt;
- * &lt;/package&gt;
- *
- *
- * <!-- END SNIPPET: example --></pre>
- *
- * @see ActionMapper
- */
-public class ServletActionRedirectResult extends ServletRedirectResult {
-
-	private static final long serialVersionUID = -9042425229314584066L;
-
-    /** The default parameter */
-	public static final String DEFAULT_PARAM = "actionName";
-
-    protected String actionName;
-    protected String namespace;
-    protected String method;
-    
-    private Map<String, String> requestParameters = new HashMap<String, String>();
-
-    public ServletActionRedirectResult() {
-    	super();
-    }
-    
-    public ServletActionRedirectResult(String actionName) {
-    	this(null, actionName, null);
-    }
-    
-    public ServletActionRedirectResult(String actionName, String method) {
-    	this(null, actionName, method);
-    }
-    
-	public ServletActionRedirectResult(String namespace, String actionName, String method) {
-		super(null);
-		this.namespace = namespace;
-		this.actionName = actionName;
-		this.method = method;
-	}
-    
-    protected List<String> prohibitedResultParam = Arrays.asList(new String[] {
-    		DEFAULT_PARAM, "namespace", "method", "encode", "parse", "location",
-    		"prependServletContext" });
-
-    /**
-     * @see com.opensymphony.xwork2.Result#execute(com.opensymphony.xwork2.ActionInvocation)
-     */
-    public void execute(ActionInvocation invocation) throws Exception {
-        actionName = conditionalParse(actionName, invocation);
-        if (namespace == null) {
-            namespace = invocation.getProxy().getNamespace();
-        } else {
-            namespace = conditionalParse(namespace, invocation);
-        }
-        if (method == null) {
-        	method = "";
-        }
-        else {
-        	method = conditionalParse(method, invocation);
-        }
-
-        String resultCode = invocation.getResultCode();
-        if (resultCode != null) {
-	        ResultConfig resultConfig = invocation.getProxy().getConfig().getResults().get(
-	        		resultCode);
-	        Map resultConfigParams = resultConfig.getParams();
-	        for (Iterator i = resultConfigParams.entrySet().iterator(); i.hasNext(); ) {
-	        	Map.Entry e = (Map.Entry) i.next();
-	        	if (! prohibitedResultParam.contains(e.getKey())) {
-	        		requestParameters.put(e.getKey().toString(),
-	        				e.getValue() == null ? "":
-	        					conditionalParse(e.getValue().toString(), invocation));
-	        	}
-	        }
-        }
-
-        ActionMapper mapper = ActionMapperFactory.getMapper();
-        StringBuffer tmpLocation = new StringBuffer(mapper.getUriFromActionMapping(new ActionMapping(actionName, namespace, method, null)));
-        UrlHelper.buildParametersString(requestParameters, tmpLocation, "&");
-
-        setLocation(tmpLocation.toString());
-
-        super.execute(invocation);
-    }
-
-    /**
-     * Sets the action name
-     *
-     * @param actionName The name
-     */
-    public void setActionName(String actionName) {
-        this.actionName = actionName;
-    }
-
-    /**
-     * Sets the namespace
-     *
-     * @param namespace The namespace
-     */
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    /**
-     * Sets the method
-     *
-     * @param method The method
-     */
-    public void setMethod(String method) {
-    	this.method = method;
-    }
-    
-    /**
-     * Adds a request parameter to be added to the redirect url
-     * 
-     * @param key The parameter name
-     * @param value The parameter value
-     */
-    public ServletActionRedirectResult addParameter(String key, Object value) {
-    	requestParameters.put(key, String.valueOf(value));
-    	return this;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletDispatcherResult.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletDispatcherResult.java
deleted file mode 100644
index 4efd352..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletDispatcherResult.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-
-import com.opensymphony.xwork2.ActionInvocation;
-
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * Includes or forwards to a view (usually a jsp). Behind the scenes Struts
- * will use a RequestDispatcher, where the target servlet/JSP receives the same
- * request/response objects as the original servlet/JSP. Therefore, you can pass
- * data between them using request.setAttribute() - the Struts action is
- * available.
- * <p/>
- * There are three possible ways the result can be executed:
- *  
- * <ul>
- *
- * <li>If we are in the scope of a JSP (a PageContext is available), PageContext's
- * {@link PageContext#include(String) include} method is called.</li>
- *
- * <li>If there is no PageContext and we're not in any sort of include (there is no
- * "javax.servlet.include.servlet_path" in the request attributes), then a call to
- * {@link RequestDispatcher#forward(javax.servlet.ServletRequest, javax.servlet.ServletResponse) forward}
- * is made.</li>
- * 
- * <li>Otherwise, {@link RequestDispatcher#include(javax.servlet.ServletRequest, javax.servlet.ServletResponse) include}
- * is called.</li>
- * 
- * </ul>
- * <!-- END SNIPPET: description -->
- *
- * <b>This result type takes the following parameters:</b>
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li><b>location (default)</b> - the location to go to after execution (ex. jsp).</li>
- *
- * <li><b>parse</b> - true by default. If set to false, the location param will not be parsed for Ognl expressions.</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- * <b>Example:</b>
- *
- * <pre><!-- START SNIPPET: example -->
- * &lt;result name="success" type="dispatcher"&gt;
- *   &lt;param name="location"&gt;foo.jsp&lt;/param&gt;
- * &lt;/result&gt;
- * <!-- END SNIPPET: example --></pre>
- *
- * This result follows the same rules from {@link StrutsResultSupport}.
- *
- * @see javax.servlet.RequestDispatcher
- */
-public class ServletDispatcherResult extends StrutsResultSupport {
-
-	private static final long serialVersionUID = -1970659272360685627L;
-	
-	private static final Log log = LogFactory.getLog(ServletDispatcherResult.class);
-
-	public ServletDispatcherResult() {
-		super();
-	}
-	
-	public ServletDispatcherResult(String location) {
-		super(location);
-	}
-	
-    /**
-     * Dispatches to the given location. Does its forward via a RequestDispatcher. If the
-     * dispatch fails a 404 error will be sent back in the http response.
-     *
-     * @param finalLocation the location to dispatch to.
-     * @param invocation    the execution state of the action
-     * @throws Exception if an error occurs. If the dispatch fails the error will go back via the
-     *                   HTTP request.
-     */
-    public void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
-        if (log.isDebugEnabled()) {
-            log.debug("Forwarding to location " + finalLocation);
-        }
-
-        PageContext pageContext = ServletActionContext.getPageContext();
-
-        if (pageContext != null) {
-            pageContext.include(finalLocation);
-        } else {
-            HttpServletRequest request = ServletActionContext.getRequest();
-            HttpServletResponse response = ServletActionContext.getResponse();
-            RequestDispatcher dispatcher = request.getRequestDispatcher(finalLocation);
-
-            // if the view doesn't exist, let's do a 404
-            if (dispatcher == null) {
-                response.sendError(404, "result '" + finalLocation + "' not found");
-
-                return;
-            }
-
-            // If we're included, then include the view
-            // Otherwise do forward 
-            // This allow the page to, for example, set content type 
-            if (!response.isCommitted() && (request.getAttribute("javax.servlet.include.servlet_path") == null)) {
-                request.setAttribute("struts.view_uri", finalLocation);
-                request.setAttribute("struts.request_uri", request.getRequestURI());
-
-                dispatcher.forward(request, response);
-            } else {
-                dispatcher.include(request, response);
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java
deleted file mode 100644
index 5eee5b9..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.dispatcher.mapper.ActionMapperFactory;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * Calls the {@link HttpServletResponse#sendRedirect(String) sendRedirect}
- * method to the location specified. The response is told to redirect the
- * browser to the specified location (a new request from the client). The
- * consequence of doing this means that the action (action instance, action
- * errors, field errors, etc) that was just executed is lost and no longer
- * available. This is because actions are built on a single-thread model. The
- * only way to pass data is through the session or with web parameters
- * (url?name=value) which can be OGNL expressions.
- *
- * <!-- END SNIPPET: description -->
- * <p/>
- * <b>This result type takes the following parameters:</b>
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li><b>location (default)</b> - the location to go to after execution.</li>
- *
- * <li><b>parse</b> - true by default. If set to false, the location param will 
- * not be parsed for Ognl expressions.</li>
- *
- * </ul>
- *
- * <p>
- * This result follows the same rules from {@link StrutsResultSupport}.
- * </p>
- *
- * <!-- END SNIPPET: params -->
- *
- * <b>Example:</b>
- *
- * <pre><!-- START SNIPPET: example -->
- * &lt;result name="success" type="redirect"&gt;
- *   &lt;param name="location"&gt;foo.jsp&lt;/param&gt;
- *   &lt;param name="parse"&gt;false&lt;/param&gt;
- * &lt;/result&gt;
- * <!-- END SNIPPET: example --></pre>
- *
- */
-public class ServletRedirectResult extends StrutsResultSupport {
-	
-	private static final long serialVersionUID = 6316947346435301270L;
-
-	private static final Log log = LogFactory.getLog(ServletRedirectResult.class);
-
-    protected boolean prependServletContext = true;
-
-    public ServletRedirectResult() {
-    	super();
-    }
-    
-    public ServletRedirectResult(String location) {
-    	super(location);
-    }
-    
-    /**
-     * Sets whether or not to prepend the servlet context path to the redirected URL.
-     *
-     * @param prependServletContext <tt>true</tt> to prepend the location with the servlet context path,
-     *                              <tt>false</tt> otherwise.
-     */
-    public void setPrependServletContext(boolean prependServletContext) {
-        this.prependServletContext = prependServletContext;
-    }
-
-    /**
-     * Redirects to the location specified by calling {@link HttpServletResponse#sendRedirect(String)}.
-     *
-     * @param finalLocation the location to redirect to.
-     * @param invocation    an encapsulation of the action execution state.
-     * @throws Exception if an error occurs when redirecting.
-     */
-    protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
-        ActionContext ctx = invocation.getInvocationContext();
-        HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
-        HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
-
-        if (isPathUrl(finalLocation)) {
-            if (!finalLocation.startsWith("/")) {
-                String namespace = ActionMapperFactory.getMapper().getMapping(
-                        request, Dispatcher.getInstance().getConfigurationManager()).getNamespace();
-
-                if ((namespace != null) && (namespace.length() > 0) && (!"/".equals(namespace))) {
-                    finalLocation = namespace + "/" + finalLocation;
-                } else {
-                    finalLocation = "/" + finalLocation;
-                }
-            }
-
-            // if the URL's are relative to the servlet context, append the servlet context path
-            if (prependServletContext && (request.getContextPath() != null) && (request.getContextPath().length() > 0)) {
-                finalLocation = request.getContextPath() + finalLocation;
-            }
-
-            finalLocation = response.encodeRedirectURL(finalLocation);
-        }
-
-        if (log.isDebugEnabled()) {
-            log.debug("Redirecting to finalLocation " + finalLocation);
-        }
-
-        response.sendRedirect(finalLocation);
-    }
-
-    private static boolean isPathUrl(String url) {
-        // filter out "http:", "https:", "mailto:", "file:", "ftp:"
-        // since the only valid places for : in URL's is before the path specification
-        // either before the port, or after the protocol
-        return (url.indexOf(':') == -1);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java
deleted file mode 100644
index 81fa69d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.Serializable;
-import java.util.AbstractMap;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-
-/**
- * A simple implementation of the {@link java.util.Map} interface to handle a collection of HTTP session
- * attributes. The {@link #entrySet()} method enumerates over all session attributes and creates a Set of entries.
- * Note, this will occur lazily - only when the entry set is asked for.
- *
- */
-public class SessionMap extends AbstractMap implements Serializable {
-
-	private static final long serialVersionUID = 4678843241638046854L;
-	
-	protected HttpSession session;
-    protected Set<Object> entries;
-    protected HttpServletRequest request;
-
-
-    /**
-     * Creates a new session map given a http servlet request. Note, ths enumeration of request
-     * attributes will occur when the map entries are asked for.
-     *
-     * @param request the http servlet request object.
-     */
-    public SessionMap(HttpServletRequest request) {
-        // note, holding on to this request and relying on lazy session initalization will not work
-        // if you are running your action invocation in a background task, such as using the
-        // "exec-and-wait" interceptor
-        this.request = request;
-        this.session = request.getSession(false);
-    }
-
-    /**
-     * Invalidate the http session.
-     */
-    public void invalidate() {
-		if (session == null) {
-			return;
-		}
-
-		synchronized (session) {
-			session.invalidate();
-			session = null;
-			entries = null;
-		}
-	}
-
-    /**
-	 * Removes all attributes from the session as well as clears entries in this
-	 * map.
-	 */
-    public void clear() {
-        if (session == null ) {
-            return;
-        }
-
-        synchronized (session) {
-        	entries = null;
-        	Enumeration<String> attributeNamesEnum = session.getAttributeNames();
-        	while(attributeNamesEnum.hasMoreElements()) {
-        		session.removeAttribute(attributeNamesEnum.nextElement());
-        	}
-        }
-        
-    }
-
-    /**
-     * Returns a Set of attributes from the http session.
-     *
-     * @return a Set of attributes from the http session.
-     */
-    public Set entrySet() {
-        if (session == null) {
-            return Collections.EMPTY_SET;
-        }
-
-        synchronized (session) {
-            if (entries == null) {
-                entries = new HashSet<Object>();
-
-                Enumeration enumeration = session.getAttributeNames();
-
-                while (enumeration.hasMoreElements()) {
-                    final String key = enumeration.nextElement().toString();
-                    final Object value = session.getAttribute(key);
-                    entries.add(new Map.Entry() {
-                        public boolean equals(Object obj) {
-                            Map.Entry entry = (Map.Entry) obj;
-
-                            return ((key == null) ? (entry.getKey() == null) : key.equals(entry.getKey())) && ((value == null) ? (entry.getValue() == null) : value.equals(entry.getValue()));
-                        }
-
-                        public int hashCode() {
-                            return ((key == null) ? 0 : key.hashCode()) ^ ((value == null) ? 0 : value.hashCode());
-                        }
-
-                        public Object getKey() {
-                            return key;
-                        }
-
-                        public Object getValue() {
-                            return value;
-                        }
-
-                        public Object setValue(Object obj) {
-                            session.setAttribute(key.toString(), obj);
-
-                            return value;
-                        }
-                    });
-                }
-            }
-        }
-
-        return entries;
-    }
-
-    /**
-     * Returns the session attribute associated with the given key or <tt>null</tt> if it doesn't exist.
-     *
-     * @param key the name of the session attribute.
-     * @return the session attribute or <tt>null</tt> if it doesn't exist.
-     */
-    public Object get(Object key) {
-        if (session == null) {
-            return null;
-        }
-
-        synchronized (session) {
-            return session.getAttribute(key.toString());
-        }
-    }
-
-    /**
-     * Saves an attribute in the session.
-     *
-     * @param key   the name of the session attribute.
-     * @param value the value to set.
-     * @return the object that was just set.
-     */
-    public Object put(Object key, Object value) {
-        synchronized (this) {
-            if (session == null) {
-                session = request.getSession(true);
-            }
-        }
-
-        synchronized (session) {
-            entries = null;
-            session.setAttribute(key.toString(), value);
-
-            return get(key);
-        }
-    }
-
-    /**
-     * Removes the specified session attribute.
-     *
-     * @param key the name of the attribute to remove.
-     * @return the value that was removed or <tt>null</tt> if the value was not found (and hence, not removed).
-     */
-    public Object remove(Object key) {
-        if (session == null) {
-            return null;
-        }
-
-        synchronized (session) {
-            entries = null;
-
-            Object value = get(key);
-            session.removeAttribute(key.toString());
-
-            return value;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java
deleted file mode 100644
index 6f4f0a0..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionInvocation;
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * A custom Result type for send raw data (via an InputStream) directly to the
- * HttpServletResponse. Very useful for allowing users to download content.
- *
- * <!-- END SNIPPET: description -->
- * <p/>
- * <b>This result type takes the following parameters:</b>
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li><b>contentType</b> - the stream mime-type as sent to the web browser
- * (default = <code>text/plain</code>).</li>
- *
- * <li><b>contentLength</b> - the stream length in bytes (the browser displays a
- * progress bar).</li>
- *
- * <li><b>contentDispostion</b> - the content disposition header value for
- * specifing the file name (default = <code>inline</code>, values are typically
- * <i>filename="document.pdf"</i>.</li>
- *
- * <li><b>inputName</b> - the name of the InputStream property from the chained
- * action (default = <code>inputStream</code>).</li>
- *
- * <li><b>bufferSize</b> - the size of the buffer to copy from input to output
- * (default = <code>1024</code>).</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- * <b>Example:</b>
- *
- * <pre><!-- START SNIPPET: example -->
- * &lt;result name="success" type="stream"&gt;
- *   &lt;param name="contentType"&gt;image/jpeg&lt;/param&gt;
- *   &lt;param name="inputName"&gt;imageStream&lt;/param&gt;
- *   &lt;param name="contentDisposition"&gt;filename="document.pdf"&lt;/param&gt;
- *   &lt;param name="bufferSize"&gt;1024&lt;/param&gt;
- * &lt;/result&gt;
- * <!-- END SNIPPET: example --></pre>
- *
- */
-public class StreamResult extends StrutsResultSupport {
-	
-	private static final long serialVersionUID = -1468409635999059850L;
-
-	protected static final Log log = LogFactory.getLog(StreamResult.class);
-
-    protected String contentType = "text/plain";
-    protected String contentLength;
-    protected String contentDisposition = "inline";
-    protected String inputName = "inputStream";
-    protected InputStream inputStream;
-    protected int bufferSize = 1024;
-
-    public StreamResult() {
-    	super();
-    }
-    
-    public StreamResult(InputStream in) {
-    	this.inputStream = in;
-    }
-    
-    /**
-     * @return Returns the bufferSize.
-     */
-    public int getBufferSize() {
-        return (bufferSize);
-    }
-
-    /**
-     * @param bufferSize The bufferSize to set.
-     */
-    public void setBufferSize(int bufferSize) {
-        this.bufferSize = bufferSize;
-    }
-
-    /**
-     * @return Returns the contentType.
-     */
-    public String getContentType() {
-        return (contentType);
-    }
-
-    /**
-     * @param contentType The contentType to set.
-     */
-    public void setContentType(String contentType) {
-        this.contentType = contentType;
-    }
-
-    /**
-     * @return Returns the contentLength.
-     */
-    public String getContentLength() {
-        return contentLength;
-    }
-
-    /**
-     * @param contentLength The contentLength to set.
-     */
-    public void setContentLength(String contentLength) {
-        this.contentLength = contentLength;
-    }
-
-    /**
-     * @return Returns the Content-disposition header value.
-     */
-    public String getContentDisposition() {
-        return contentDisposition;
-    }
-
-    /**
-     * @param contentDisposition the Content-disposition header value to use.
-     */
-    public void setContentDisposition(String contentDisposition) {
-        this.contentDisposition = contentDisposition;
-    }
-
-    /**
-     * @return Returns the inputName.
-     */
-    public String getInputName() {
-        return (inputName);
-    }
-
-    /**
-     * @param inputName The inputName to set.
-     */
-    public void setInputName(String inputName) {
-        this.inputName = inputName;
-    }
-
-    /**
-     * @see org.apache.struts2.dispatcher.StrutsResultSupport#doExecute(java.lang.String, com.opensymphony.xwork2.ActionInvocation)
-     */
-    protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
-
-        OutputStream oOutput = null;
-
-        try {
-        	if (inputStream == null) {
-        		// Find the inputstream from the invocation variable stack
-        		inputStream = (InputStream) invocation.getStack().findValue(conditionalParse(inputName, invocation));
-        	}
-        		
-            if (inputStream == null) {
-                String msg = ("Can not find a java.io.InputStream with the name [" + inputName + "] in the invocation stack. " +
-                    "Check the <param name=\"inputName\"> tag specified for this action.");
-                log.error(msg);
-                throw new IllegalArgumentException(msg);
-            }
-
-            // Find the Response in context
-            HttpServletResponse oResponse = (HttpServletResponse) invocation.getInvocationContext().get(HTTP_RESPONSE);
-
-            // Set the content type
-            oResponse.setContentType(conditionalParse(contentType, invocation));
-
-            // Set the content length
-            if (contentLength != null) {
-            	String _contentLength = conditionalParse(contentLength, invocation);
-            	int _contentLengthAsInt = -1;
-            	try {
-            		_contentLengthAsInt = Integer.parseInt(_contentLength);
-            		if (_contentLengthAsInt >= 0) {
-                		oResponse.setContentLength(_contentLengthAsInt);
-                	}
-            	}
-            	catch(NumberFormatException e) {
-            		log.warn("failed to recongnize "+_contentLength+" as a number, contentLength header will not be set", e);
-            	}
-            }
-
-            // Set the content-disposition
-            if (contentDisposition != null) {
-                oResponse.addHeader("Content-disposition", conditionalParse(contentDisposition, invocation));
-            }
-
-            // Get the outputstream
-            oOutput = oResponse.getOutputStream();
-
-            if (log.isDebugEnabled()) {
-                log.debug("Streaming result [" + inputName + "] type=[" + contentType + "] length=[" + contentLength +
-                    "] content-disposition=[" + contentDisposition + "]");
-            }
-
-            // Copy input to output
-            log.debug("Streaming to output buffer +++ START +++");
-            byte[] oBuff = new byte[bufferSize];
-            int iSize;
-            while (-1 != (iSize = inputStream.read(oBuff))) {
-                oOutput.write(oBuff, 0, iSize);
-            }
-            log.debug("Streaming to output buffer +++ END +++");
-
-            // Flush
-            oOutput.flush();
-        }
-        finally {
-            if (inputStream != null) inputStream.close();
-            if (oOutput != null) oOutput.close();
-        }
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java
deleted file mode 100644
index 7d002af..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * All Struts requests are wrapped with this class, which provides simple JSTL accessibility. This is because JSTL
- * works with request attributes, so this class delegates to the value stack except for a few cases where required to
- * prevent infinite loops. Namely, we don't let any attribute name with "#" in it delegate out to the value stack, as it
- * could potentially cause an infinite loop. For example, an infinite loop would take place if you called:
- * request.getAttribute("#attr.foo").
- *
- * <!-- END SNIPPET: javadoc -->
- *
- */
-public class StrutsRequestWrapper extends HttpServletRequestWrapper {
-    
-    /**
-     * The constructor
-     * @param req The request
-     */
-    public StrutsRequestWrapper(HttpServletRequest req) {
-        super(req);
-    }
-
-    /**
-     * Gets the object, looking in the value stack if not found
-     * 
-     * @param s The attribute key
-     */
-    public Object getAttribute(String s) {
-        if (s != null && s.startsWith("javax.servlet")) {
-            // don't bother with the standard javax.servlet attributes, we can short-circuit this
-            // see WW-953 and the forums post linked in that issue for more info
-            return super.getAttribute(s);
-        }
-
-        ActionContext ctx = ActionContext.getContext();
-        Object attribute = super.getAttribute(s);
-
-        boolean alreadyIn = false;
-        Boolean b = (Boolean) ctx.get("__requestWrapper.getAttribute");
-        if (b != null) {
-            alreadyIn = b.booleanValue();
-        }
-
-        // note: we don't let # come through or else a request for
-        // #attr.foo or #request.foo could cause an endless loop
-        if (!alreadyIn && attribute == null && s.indexOf("#") == -1) {
-            try {
-                // If not found, then try the ValueStack
-                ctx.put("__requestWrapper.getAttribute", Boolean.TRUE);
-                ValueStack stack = ctx.getValueStack();
-                if (stack != null) {
-                    attribute = stack.findValue(s);
-                }
-            } finally {
-                ctx.put("__requestWrapper.getAttribute", Boolean.FALSE);
-            }
-        }
-        return attribute;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java
deleted file mode 100644
index ac1685f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsStatics;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.util.TextParseUtil;
-
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * 
- * A base class for all Struts action execution results.
- * The "location" param is the default parameter, meaning the most common usage of this result would be:
- * <p/>
- * This class provides two common parameters for any subclass:
- * <ul>
- * <li>location - the location to go to after execution (could be a jsp page or another action).
- * It can be parsed as per the rules definied in the
- * {@link TextParseUtil#translateVariables(java.lang.String, com.opensymphony.xwork2.util.ValueStack) translateVariables}
- * method</li>
- * <li>parse - true by default. If set to false, the location param will not be parsed for expressions</li>
- * <li>encode - false by default. If set to false, the location param will not be url encoded. This only have effect when parse is true</li>
- * </ul>
- * 
- * <b>NOTE:</b>
- * The encode param will only have effect when parse is true
- * 
- * <!-- END SNIPPET: javadoc -->
- * 
- * <p/>
- * 
- * <!-- START SNIPPET: example -->
- * 
- * <p/>
- * In the struts.xml configuration file, these would be included as:
- * <p/>
- * <pre>
- *  &lt;result name="success" type="redirect"&gt;
- *      &lt;param name="<b>location</b>"&gt;foo.jsp&lt;/param&gt;
- *  &lt;/result&gt;</pre>
- * <p/>
- * or
- * <p/>
- * <pre>
- *  &lt;result name="success" type="redirect" &gt;
- *      &lt;param name="<b>location</b>"&gt;foo.jsp?url=${myUrl}&lt;/param&gt;
- *      &lt;param name="<b>parse</b>"&gt;true&lt;/param&gt;
- *      &lt;param name="<b>encode</b>"&gt;true&lt;/param&gt;
- *  &lt;/result&gt;</pre>
- * <p/>
- * In the above case, myUrl will be parsed against Ognl Value Stack and then 
- * URL encoded.
- * <p/>
- * or when using the default parameter feature
- * <p/>
- * <pre>
- *  &lt;result name="success" type="redirect"&gt;<b>foo.jsp</b>&lt;/result&gt;</pre>
- * <p/>
- * You should subclass this class if you're interested in adding more parameters or functionality
- * to your Result. If you do subclass this class you will need to
- * override {@link #doExecute(String, ActionInvocation)}.<p>
- * <p/>
- * Any custom result can be defined in struts.xml as:
- * <p/>
- * <pre>
- *  &lt;result-types&gt;
- *      ...
- *      &lt;result-type name="myresult" class="com.foo.MyResult" /&gt;
- *  &lt;/result-types&gt;</pre>
- * <p/>
- * Please see the {@link com.opensymphony.xwork2.Result} class for more info on Results in general.
- *
- * <!-- END SNIPPET: example -->
- * 
- * @see com.opensymphony.xwork2.Result
- */
-public abstract class StrutsResultSupport implements Result, StrutsStatics {
-	
-	private static final Log _log = LogFactory.getLog(StrutsResultSupport.class);
-	
-    /** The default parameter */
-    public static final String DEFAULT_PARAM = "location";
-
-    private boolean parse;
-    private boolean encode;
-    private String location;
-    private String lastFinalLocation;
-
-    public StrutsResultSupport() {
-    	this(null, true, false);
-    }
-    
-    public StrutsResultSupport(String location) {
-    	this(location, false, false);
-    }
-    
-    public StrutsResultSupport(String location, boolean parse, boolean encode) {
-    	this.location = location;
-    	this.parse = parse;
-    	this.encode = encode;
-    }
-    
-    /**
-     * The location to go to after action execution. This could be a JSP page or another action.
-     * The location can contain OGNL expressions which will be evaulated if the <tt>parse</tt>
-     * parameter is set to <tt>true</tt>.
-     *
-     * @param location the location to go to after action execution.
-     * @see #setParse(boolean)
-     */
-    public void setLocation(String location) {
-        this.location = location;
-    }
-    
-    /**
-     * Returns the last parsed and encoded location value
-     */
-    public String getLastFinalLocation() {
-        return lastFinalLocation;
-    }
-
-    /**
-     * Set parse to <tt>true</tt> to indicate that the location should be parsed as an OGNL expression. This
-     * is set to <tt>true</tt> by default.
-     *
-     * @param parse <tt>true</tt> if the location parameter is an OGNL expression, <tt>false</tt> otherwise.
-     */
-    public void setParse(boolean parse) {
-        this.parse = parse;
-    }
-    
-    /**
-     * Set encode to <tt>true</tt> to indicate that the location should be url encoded. This is set to
-     * <tt>true</tt> by default
-     * 
-     * @param encode <tt>true</tt> if the location parameter should be url encode, <tt>false</tt> otherwise.
-     */
-    public void setEncode(boolean encode) {
-    	this.encode = encode;
-    }
-
-    /**
-     * Implementation of the <tt>execute</tt> method from the <tt>Result</tt> interface. This will call
-     * the abstract method {@link #doExecute(String, ActionInvocation)} after optionally evaluating the
-     * location as an OGNL evaluation.
-     *
-     * @param invocation the execution state of the action.
-     * @throws Exception if an error occurs while executing the result.
-     */
-    public void execute(ActionInvocation invocation) throws Exception {
-        lastFinalLocation = conditionalParse(location, invocation);
-        doExecute(lastFinalLocation, invocation);
-    }
-    
-    /**
-     * Parses the parameter for OGNL expressions against the valuestack
-     * 
-     * @param param The parameter value
-     * @param invocation The action invocation instance
-     * @return The resulting string
-     */
-    protected String conditionalParse(String param, ActionInvocation invocation) {
-        if (parse && param != null && invocation != null) {
-            return TextParseUtil.translateVariables(param, invocation.getStack(), 
-            		new TextParseUtil.ParsedValueEvaluator() {
-						public Object evaluate(Object parsedValue) {
-							if (encode) {
-								if (parsedValue != null) {
-									try {
-										// use UTF-8 as this is the recommended encoding by W3C to 
-										// avoid incompatibilities.
-										return URLEncoder.encode(parsedValue.toString(), "UTF-8");
-									}
-									catch(UnsupportedEncodingException e) {
-										_log.warn("error while trying to encode ["+parsedValue+"]", e);
-									}
-								}
-							}
-							return parsedValue;
-						}
-            });
-        } else {
-        	return param;
-        }
-    }
-
-    /**
-     * Executes the result given a final location (jsp page, action, etc) and the action invocation
-     * (the state in which the action was executed). Subclasses must implement this class to handle
-     * custom logic for result handling.
-     *
-     * @param finalLocation the location (jsp page, action, etc) to go to.
-     * @param invocation    the execution state of the action.
-     * @throws Exception if an error occurs while executing the result.
-     */
-    protected abstract void doExecute(String finalLocation, ActionInvocation invocation) throws Exception;
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/VelocityResult.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/VelocityResult.java
deleted file mode 100644
index b4a4dd2..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/VelocityResult.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-
-import javax.servlet.Servlet;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspFactory;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.views.JspSupportServlet;
-import org.apache.struts2.views.velocity.VelocityManager;
-import org.apache.velocity.Template;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.context.Context;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * Using the Servlet container's {@link JspFactory}, this result mocks a JSP
- * execution environment and then displays a Velocity template that will be
- * streamed directly to the servlet output.
- *
- * <!-- END SNIPPET: description -->
- * <p/>
- * <b>This result type takes the following parameters:</b>
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li><b>location (default)</b> - the location of the template to process.</li>
- *
- * <li><b>parse</b> - true by default. If set to false, the location param will 
- * not be parsed for Ognl expressions.</li>
- *
- * </ul>
- * <p>
- * This result follows the same rules from {@link StrutsResultSupport}.
- * </p>
- *
- * <!-- END SNIPPET: params -->
- *
- * <b>Example:</b>
- *
- * <pre><!-- START SNIPPET: example -->
- * &lt;result name="success" type="velocity"&gt;
- *   &lt;param name="location"&gt;foo.vm&lt;/param&gt;
- * &lt;/result&gt;
- * <!-- END SNIPPET: example --></pre>
- *
- */
-public class VelocityResult extends StrutsResultSupport {
-
-	private static final long serialVersionUID = 7268830767762559424L;
-	
-	private static final Log log = LogFactory.getLog(VelocityResult.class);
-
-	public VelocityResult() {
-		super();
-	}
-	
-	public VelocityResult(String location) {
-		super(location);
-	}
-
-    /**
-     * Creates a Velocity context from the action, loads a Velocity template and executes the
-     * template. Output is written to the servlet output stream.
-     *
-     * @param finalLocation the location of the Velocity template
-     * @param invocation    an encapsulation of the action execution state.
-     * @throws Exception if an error occurs when creating the Velocity context, loading or executing
-     *                   the template or writing output to the servlet response stream.
-     */
-    public void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
-        ValueStack stack = ActionContext.getContext().getValueStack();
-
-        HttpServletRequest request = ServletActionContext.getRequest();
-        HttpServletResponse response = ServletActionContext.getResponse();
-        JspFactory jspFactory = null;
-        ServletContext servletContext = ServletActionContext.getServletContext();
-        Servlet servlet = JspSupportServlet.jspSupportServlet;
-
-        VelocityManager.getInstance().init(servletContext);
-
-        boolean usedJspFactory = false;
-        PageContext pageContext = (PageContext) ActionContext.getContext().get(ServletActionContext.PAGE_CONTEXT);
-
-        if (pageContext == null && servlet != null) {
-            jspFactory = JspFactory.getDefaultFactory();
-            pageContext = jspFactory.getPageContext(servlet, request, response, null, true, 8192, true);
-            ActionContext.getContext().put(ServletActionContext.PAGE_CONTEXT, pageContext);
-            usedJspFactory = true;
-        }
-
-        try {
-            String encoding = getEncoding(finalLocation);
-            String contentType = getContentType(finalLocation);
-
-            if (encoding != null) {
-                contentType = contentType + ";charset=" + encoding;
-            }
-
-            VelocityManager velocityManager = VelocityManager.getInstance();
-            Template t = getTemplate(stack, velocityManager.getVelocityEngine(), invocation, finalLocation, encoding);
-
-            Context context = createContext(velocityManager, stack, request, response, finalLocation);
-            Writer writer = new OutputStreamWriter(response.getOutputStream(), encoding);
-
-
-            response.setContentType(contentType);
-
-            t.merge(context, writer);
-
-            // always flush the writer (we used to only flush it if this was a jspWriter, but someone asked
-            // to do it all the time (WW-829). Since Velocity support is being deprecated, we'll oblige :)
-            writer.flush();
-        } catch (Exception e) {
-            log.error("Unable to render Velocity Template, '" + finalLocation + "'", e);
-            throw e;
-        } finally {
-            if (usedJspFactory) {
-                jspFactory.releasePageContext(pageContext);
-            }
-        }
-
-        return;
-    }
-
-    /**
-     * Retrieve the content type for this template.
-     * <p/>
-     * People can override this method if they want to provide specific content types for specific templates (eg text/xml).
-     *
-     * @return The content type associated with this template (default "text/html")
-     */
-    protected String getContentType(String templateLocation) {
-        return "text/html";
-    }
-
-    /**
-     * Retrieve the encoding for this template.
-     * <p/>
-     * People can override this method if they want to provide specific encodings for specific templates.
-     *
-     * @return The encoding associated with this template (defaults to the value of 'struts.i18n.encoding' property)
-     */
-    protected String getEncoding(String templateLocation) {
-        String encoding = (String) Settings.get(StrutsConstants.STRUTS_I18N_ENCODING);
-        if (encoding == null) {
-            encoding = System.getProperty("file.encoding");
-        }
-        if (encoding == null) {
-            encoding = "UTF-8";
-        }
-        return encoding;
-    }
-
-    /**
-     * Given a value stack, a Velocity engine, and an action invocation, this method returns the appropriate
-     * Velocity template to render.
-     *
-     * @param stack      the value stack to resolve the location again (when parse equals true)
-     * @param velocity   the velocity engine to process the request against
-     * @param invocation an encapsulation of the action execution state.
-     * @param location   the location of the template
-     * @param encoding   the charset encoding of the template
-     * @return the template to render
-     * @throws Exception when the requested template could not be found
-     */
-    protected Template getTemplate(ValueStack stack, VelocityEngine velocity, ActionInvocation invocation, String location, String encoding) throws Exception {
-        if (!location.startsWith("/")) {
-            location = invocation.getProxy().getNamespace() + "/" + location;
-        }
-
-        Template template = velocity.getTemplate(location, encoding);
-
-        return template;
-    }
-
-    /**
-     * Creates the VelocityContext that we'll use to render this page.
-     *
-     * @param velocityManager a reference to the velocityManager to use
-     * @param stack           the value stack to resolve the location against (when parse equals true)
-     * @param location        the name of the template that is being used
-     * @return the a minted Velocity context.
-     */
-    protected Context createContext(VelocityManager velocityManager, ValueStack stack, HttpServletRequest request, HttpServletResponse response, String location) {
-        return velocityManager.createContext(stack, request, response);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java
deleted file mode 100644
index c344793..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.mapper;
-
-import javax.servlet.http.HttpServletRequest;
-
-import com.opensymphony.xwork2.config.ConfigurationManager;
-
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * The ActionMapper is responsible for providing a mapping between HTTP requests and action invocation requests and
- * vice-versa. When given an HttpServletRequest, the ActionMapper may return null if no action invocation request maps,
- * or it may return an {@link ActionMapping} that describes an action invocation that Struts should attempt to try. The
- * ActionMapper is not required to guarantee that the {@link ActionMapping} returned be a real action or otherwise
- * ensure a valid request. This means that most ActionMappers do not need to consult the Struts configuration to
- * determine if a request should be mapped.
- *
- * <p/> Just as requests can be mapped from HTTP to an action invocation, the opposite is true as well. However, because
- * HTTP requests (when shown in HTTP responses) must be in String form, a String is returned rather than an actual
- * request object.
- *
- * <!-- END SNIPPET: javadoc -->
- */
-public interface ActionMapper {
-    
-    /**
-     * Gets an action mapping for the current request
-     * 
-     * @param request The servlet request
-     * @param config The current configuration manager
-     * @return The appropriate action mapping
-     */
-    ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager);
-
-    /**
-     * Converts an ActionMapping into a URI string
-     * 
-     * @param mapping The action mapping
-     * @return The URI string that represents this mapping
-     */
-    String getUriFromActionMapping(ActionMapping mapping);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapperFactory.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapperFactory.java
deleted file mode 100644
index ad3ce29..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapperFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.mapper;
-
-import java.util.HashMap;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.config.Settings;
-
-import com.opensymphony.xwork2.ObjectFactory;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Factory that creates {@link ActionMapper}s. This factory looks up the class name of the {@link ActionMapper} from
- * Struts's configuration using the key <b>struts.mapper.class</b>.
- *
- * <!-- END SNIPPET: javadoc -->
- *
- */
-public class ActionMapperFactory {
-    protected static final Log LOG = LogFactory.getLog(ActionMapperFactory.class);
-
-    private static final HashMap<String,ActionMapper> classMap = new HashMap<String,ActionMapper>();
-
-    /**
-     * Gets an instance of the ActionMapper
-     * 
-     * @return The action mapper
-     */
-    public static ActionMapper getMapper() {
-        synchronized (classMap) {
-            String clazz = (String) Settings.get(StrutsConstants.STRUTS_MAPPER_CLASS);
-            try {
-                ActionMapper mapper = (ActionMapper) classMap.get(clazz);
-                if (mapper == null) {
-                    mapper = (ActionMapper) ObjectFactory.getObjectFactory().buildBean(clazz, null);
-                    classMap.put(clazz, mapper);
-                }
-
-                return mapper;
-            } catch (Exception e) {
-                String msg = "Could not create ActionMapper: Struts will *not* work!";
-                throw new StrutsException(msg, e);
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java
deleted file mode 100644
index 3680ddf..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.mapper;
-
-import java.util.Map;
-
-import com.opensymphony.xwork2.Result;
-
-/**
- * Simple class that holds the action mapping information used to invoke a
- * Struts action. The name and namespace are required, but the params map
- * is optional, and as such may be null. If a params map is supplied,
- * it <b>must</b> be a mutable map, such as a HashMap.
- *
- */
-public class ActionMapping {
-
-    private String name;
-    private String namespace;
-    private String method;
-    private Map params;
-    private Result result;
-
-    /**
-     * Constructs an ActionMapping
-     */
-    public ActionMapping() {}
-
-    /**
-     * Constructs an ActionMapping with a default result
-     * 
-     * @param result The default result
-     */
-    public ActionMapping(Result result) {
-        this.result = result;
-    }
-
-    /**
-     * Constructs an ActionMapping with its values
-     * 
-     * @param name The action name
-     * @param namespace The action namespace
-     * @param method The method
-     * @param params The extra parameters
-     */
-    public ActionMapping(String name, String namespace, String method, Map params) {
-        this.name = name;
-        this.namespace = namespace;
-        this.method = method;
-        this.params = params;
-    }
-
-    /**
-     * @return The action name
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * @return The action namespace
-     */
-    public String getNamespace() {
-        return namespace;
-    }
-
-    /**
-     * @return The extra parameters
-     */
-    public Map getParams() {
-        return params;
-    }
-
-    /**
-     * @return The method
-     */
-    public String getMethod() {
-        if (null != method && "".equals(method)) {
-            return null;
-        } else {
-            return method;
-        }
-    }
-
-    /**
-     * @return The default result
-     */
-    public Result getResult() {
-        return result;
-    }
-
-    /**
-     * @param result The result
-     */
-    public void setResult(Result result) {
-        this.result = result;
-    }
-
-    /**
-     * @param name The action name
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * @param namespace The action namespace
-     */
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    /**
-     * @param method The method name to call on the action
-     */
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-    /**
-     * @param params The extra parameters for this mapping
-     */
-    public void setParams(Map params) {
-        this.params = params;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
deleted file mode 100644
index 5f3e982..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.mapper;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts2.RequestUtils;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.ServletRedirectResult;
-import org.apache.struts2.util.PrefixTrie;
-
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * 
- * Default action mapper implementation, using the standard *.[ext] (where ext
- * usually "action") pattern. The extension is looked up from the Struts
- * configuration key <b>struts.action.exection</b>.
- * 
- * <p/> To help with dealing with buttons and other related requirements, this
- * mapper (and other {@link ActionMapper}s, we hope) has the ability to name a
- * button with some predefined prefix and have that button name alter the
- * execution behaviour. The four prefixes are:
- * 
- * <ul>
- * 
- * <li>Method prefix - <i>method:default</i></li>
- * 
- * <li>Action prefix - <i>action:dashboard</i></li>
- * 
- * <li>Redirect prefix - <i>redirect:cancel.jsp</i></li>
- * 
- * <li>Redirect-action prefix - <i>redirect-action:cancel</i></li>
- * 
- * </ul>
- * 
- * <p/> In addition to these four prefixes, this mapper also understands the
- * action naming pattern of <i>foo!bar</i> in either the extension form (eg:
- * foo!bar.action) or in the prefix form (eg: action:foo!bar). This syntax tells
- * this mapper to map to the action named <i>foo</i> and the method <i>bar</i>.
- * 
- * <!-- END SNIPPET: javadoc -->
- * 
- * <p/> <b>Method Prefix</b> <p/>
- * 
- * <!-- START SNIPPET: method -->
- * 
- * With method-prefix, instead of calling baz action's execute() method (by
- * default if it isn't overriden in struts.xml to be something else), the baz
- * action's anotherMethod() will be called. A very elegant way determine which
- * button is clicked. Alternatively, one would have submit button set a
- * particular value on the action when clicked, and the execute() method decides
- * on what to do with the setted value depending on which button is clicked.
- * 
- * <!-- END SNIPPET: method -->
- * 
- * <pre>
- *  &lt;!-- START SNIPPET: method-example --&gt;
- *  &lt;a:form action=&quot;baz&quot;&gt;
- *      &lt;a:textfield label=&quot;Enter your name&quot; name=&quot;person.name&quot;/&gt;
- *      &lt;a:submit value=&quot;Create person&quot;/&gt;
- *      &lt;a:submit name=&quot;method:anotherMethod&quot; value=&quot;Cancel&quot;/&gt;
- *  &lt;/a:form&gt;
- *  &lt;!-- END SNIPPET: method-example --&gt;
- * </pre>
- * 
- * <p/> <b>Action prefix</b> <p/>
- * 
- * <!-- START SNIPPET: action -->
- * 
- * With action-prefix, instead of executing baz action's execute() method (by
- * default if it isn't overriden in struts.xml to be something else), the
- * anotherAction action's execute() method (assuming again if it isn't overriden
- * with something else in struts.xml) will be executed.
- * 
- * <!-- END SNIPPET: action -->
- * 
- * <pre>
- *  &lt;!-- START SNIPPET: action-example --&gt;
- *  &lt;a:form action=&quot;baz&quot;&gt;
- *      &lt;a:textfield label=&quot;Enter your name&quot; name=&quot;person.name&quot;/&gt;
- *      &lt;a:submit value=&quot;Create person&quot;/&gt;
- *      &lt;a:submit name=&quot;action:anotherAction&quot; value=&quot;Cancel&quot;/&gt;
- *  &lt;/a:form&gt;
- *  &lt;!-- END SNIPPET: action-example --&gt;
- * </pre>
- * 
- * <p/> <b>Redirect prefix</b> <p/>
- * 
- * <!-- START SNIPPET: redirect -->
- * 
- * With redirect-prefix, instead of executing baz action's execute() method (by
- * default it isn't overriden in struts.xml to be something else), it will get
- * redirected to, in this case to www.google.com. Internally it uses
- * ServletRedirectResult to do the task.
- * 
- * <!-- END SNIPPET: redirect -->
- * 
- * <pre>
- *  &lt;!-- START SNIPPET: redirect-example --&gt;
- *  &lt;a:form action=&quot;baz&quot;&gt;
- *      &lt;a:textfield label=&quot;Enter your name&quot; name=&quot;person.name&quot;/&gt;
- *      &lt;a:submit value=&quot;Create person&quot;/&gt;
- *      &lt;a:submit name=&quot;redirect:www.google.com&quot; value=&quot;Cancel&quot;/&gt;
- *  &lt;/a:form&gt;
- *  &lt;!-- END SNIPPET: redirect-example --&gt;
- * </pre>
- * 
- * <p/> <b>Redirect-action prefix</b> <p/>
- * 
- * <!-- START SNIPPET: redirect-action -->
- * 
- * With redirect-action-prefix, instead of executing baz action's execute()
- * method (by default it isn't overriden in struts.xml to be something else), it
- * will get redirected to, in this case 'dashboard.action'. Internally it uses
- * ServletRedirectResult to do the task and read off the extension from the
- * struts.properties.
- * 
- * <!-- END SNIPPET: redirect-action -->
- * 
- * <pre>
- *  &lt;!-- START SNIPPET: redirect-action-example --&gt;
- *  &lt;a:form action=&quot;baz&quot;&gt;
- *      &lt;a:textfield label=&quot;Enter your name&quot; name=&quot;person.name&quot;/&gt;
- *      &lt;a:submit value=&quot;Create person&quot;/&gt;
- *      &lt;a:submit name=&quot;redirect-action:dashboard&quot; value=&quot;Cancel&quot;/&gt;
- *  &lt;/a:form&gt;
- *  &lt;!-- END SNIPPET: redirect-action-example --&gt;
- * </pre>
- * 
- */
-public class DefaultActionMapper implements ActionMapper {
-
-    static final String METHOD_PREFIX = "method:";
-
-    static final String ACTION_PREFIX = "action:";
-
-    static final String REDIRECT_PREFIX = "redirect:";
-
-    static final String REDIRECT_ACTION_PREFIX = "redirect-action:";
-
-    private static boolean allowDynamicMethodCalls = "true".equals(Settings
-            .get(StrutsConstants.STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION));
-
-    private PrefixTrie prefixTrie = null;
-
-    public DefaultActionMapper() {
-        prefixTrie = new PrefixTrie() {
-            {
-                put(METHOD_PREFIX, new ParameterAction() {
-                    public void execute(String key, ActionMapping mapping) {
-                        mapping
-                                .setMethod(key
-                                        .substring(METHOD_PREFIX.length()));
-                    }
-                });
-
-                put(ACTION_PREFIX, new ParameterAction() {
-                    public void execute(String key, ActionMapping mapping) {
-                        String name = key.substring(ACTION_PREFIX.length());
-                        if (allowDynamicMethodCalls) {
-                            int bang = name.indexOf('!');
-                            if (bang != -1) {
-                                String method = name.substring(bang + 1);
-                                mapping.setMethod(method);
-                                name = name.substring(0, bang);
-                            }
-                        }
-                        mapping.setName(name);
-                    }
-                });
-
-                put(REDIRECT_PREFIX, new ParameterAction() {
-                    public void execute(String key, ActionMapping mapping) {
-                        ServletRedirectResult redirect = new ServletRedirectResult();
-                        redirect.setLocation(key.substring(REDIRECT_PREFIX
-                                .length()));
-                        mapping.setResult(redirect);
-                    }
-                });
-
-                put(REDIRECT_ACTION_PREFIX, new ParameterAction() {
-                    public void execute(String key, ActionMapping mapping) {
-                        String location = key.substring(REDIRECT_ACTION_PREFIX
-                                .length());
-                        ServletRedirectResult redirect = new ServletRedirectResult();
-                        String extension = getDefaultExtension();
-                        if (extension != null) {
-                            location += "." + extension;
-                        }
-                        redirect.setLocation(location);
-                        mapping.setResult(redirect);
-                    }
-                });
-            }
-        };
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.struts2.dispatcher.mapper.ActionMapper#getMapping(javax.servlet.http.HttpServletRequest)
-     */
-    public ActionMapping getMapping(HttpServletRequest request,
-            ConfigurationManager configManager) {
-        ActionMapping mapping = new ActionMapping();
-        String uri = getUri(request);
-
-        uri = dropExtension(uri);
-        if (uri == null) {
-            return null;
-        }
-
-        parseNameAndNamespace(uri, mapping, configManager.getConfiguration());
-
-        handleSpecialParameters(request, mapping);
-
-        if (mapping.getName() == null) {
-            return null;
-        }
-
-        if (allowDynamicMethodCalls) {
-            // handle "name!method" convention.
-            String name = mapping.getName();
-            int exclamation = name.lastIndexOf("!");
-            if (exclamation != -1) {
-                mapping.setName(name.substring(0, exclamation));
-                mapping.setMethod(name.substring(exclamation + 1));
-            }
-        }
-
-        return mapping;
-    }
-
-    /**
-     * Special parameters, as described in the class-level comment, are searched
-     * for and handled.
-     * 
-     * @param request
-     *            The request
-     * @param mapping
-     *            The action mapping
-     */
-    public void handleSpecialParameters(HttpServletRequest request,
-            ActionMapping mapping) {
-        // handle special parameter prefixes.
-        Map parameterMap = request.getParameterMap();
-        for (Iterator iterator = parameterMap.keySet().iterator(); iterator
-                .hasNext();) {
-            String key = (String) iterator.next();
-            ParameterAction parameterAction = (ParameterAction) prefixTrie
-                    .get(key);
-            if (parameterAction != null) {
-                parameterAction.execute(key, mapping);
-                break;
-            }
-        }
-    }
-
-    /**
-     * Parses the name and namespace from the uri
-     * 
-     * @param uri
-     *            The uri
-     * @param mapping
-     *            The action mapping to populate
-     */
-    void parseNameAndNamespace(String uri, ActionMapping mapping,
-            Configuration config) {
-        String namespace, name;
-        int lastSlash = uri.lastIndexOf("/");
-        if (lastSlash == -1) {
-            namespace = "";
-            name = uri;
-        } else if (lastSlash == 0) {
-            // ww-1046, assume it is the root namespace, it will fallback to
-            // default
-            // namespace anyway if not found in root namespace.
-            namespace = "/";
-            name = uri.substring(lastSlash + 1);
-        } else {
-            String prefix = uri.substring(0, lastSlash);
-            namespace = "";
-            // Find the longest matching namespace, defaulting to the default
-            for (Iterator i = config.getPackageConfigs().values().iterator(); i
-                    .hasNext();) {
-                String ns = ((PackageConfig) i.next()).getNamespace();
-                if (ns != null && prefix.startsWith(ns)) {
-                    if (ns.length() > namespace.length()) {
-                        namespace = ns;
-                    }
-                }
-            }
-
-            name = uri.substring(namespace.length() + 1);
-        }
-        mapping.setNamespace(namespace);
-        mapping.setName(name);
-    }
-
-    /**
-     * Drops the extension from the action name
-     * 
-     * @param name
-     *            The action name
-     * @return The action name without its extension
-     */
-    String dropExtension(String name) {
-        List extensions = getExtensions();
-        if (extensions == null) {
-            return name;
-        }
-        Iterator it = extensions.iterator();
-        while (it.hasNext()) {
-            String extension = "." + (String) it.next();
-            if (name.endsWith(extension)) {
-                name = name.substring(0, name.length() - extension.length());
-                return name;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns null if no extension is specified.
-     */
-    static String getDefaultExtension() {
-        List extensions = getExtensions();
-        if (extensions == null) {
-            return null;
-        } else {
-            return (String) extensions.get(0);
-        }
-    }
-
-    /**
-     * Returns null if no extension is specified.
-     */
-    static List getExtensions() {
-        String extensions = (String) org.apache.struts2.config.Settings
-                .get(StrutsConstants.STRUTS_ACTION_EXTENSION);
-
-        if ("".equals(extensions)) {
-            return null;
-        } else {
-            return Arrays.asList(extensions.split(","));
-        }
-    }
-
-    /**
-     * Gets the uri from the request
-     * 
-     * @param request
-     *            The request
-     * @return The uri
-     */
-    String getUri(HttpServletRequest request) {
-        // handle http dispatcher includes.
-        String uri = (String) request
-                .getAttribute("javax.servlet.include.servlet_path");
-        if (uri != null) {
-            return uri;
-        }
-
-        uri = RequestUtils.getServletPath(request);
-        if (uri != null && !"".equals(uri)) {
-            return uri;
-        }
-
-        uri = request.getRequestURI();
-        return uri.substring(request.getContextPath().length());
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.struts2.dispatcher.mapper.ActionMapper#getUriFromActionMapping(org.apache.struts2.dispatcher.mapper.ActionMapping)
-     */
-    public String getUriFromActionMapping(ActionMapping mapping) {
-        StringBuffer uri = new StringBuffer();
-
-        uri.append(mapping.getNamespace());
-        if (!"/".equals(mapping.getNamespace())) {
-            uri.append("/");
-        }
-        String name = mapping.getName();
-        String params = "";
-        if (name.indexOf('?') != -1) {
-            params = name.substring(name.indexOf('?'));
-            name = name.substring(0, name.indexOf('?'));
-        }
-        uri.append(name);
-
-        if (null != mapping.getMethod() && !"".equals(mapping.getMethod())) {
-            uri.append("!").append(mapping.getMethod());
-        }
-
-        String extension = getDefaultExtension();
-        if (extension != null) {
-            if (uri.indexOf('.' + extension) == -1) {
-                uri.append(".").append(extension);
-                if (params.length() > 0) {
-                    uri.append(params);
-                }
-            }
-        }
-
-        return uri.toString();
-    }
-
-    /**
-     * Defines a parameter action prefix
-     */
-    interface ParameterAction {
-        void execute(String key, ActionMapping mapping);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java
deleted file mode 100644
index 9b1889e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.mapper;
-
-import java.net.URLDecoder;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.RequestUtils;
-
-import com.opensymphony.xwork2.config.ConfigurationManager;
-
-
-/**
- * A custom action mapper using the following format:
- * <p/>
- * <p/>
- * <ul><tt>http://HOST/ACTION_NAME/PARAM_NAME1/PARAM_VALUE1/PARAM_NAME2/PARAM_VALUE2</tt></ul>
- * <p/>
- * You can have as many parameters you'd like to use. Alternatively the URL can be shortened to the following:
- * <p/>
- * <ul><tt>http://HOST/ACTION_NAME/PARAM_VALUE1/PARAM_NAME2/PARAM_VALUE2</tt></ul>
- * <p/>
- * This is the same as:
- * <p/>
- * <ul><tt>http://HOST/ACTION_NAME/ACTION_NAME + "Id"/PARAM_VALUE1/PARAM_NAME2/PARAM_VALUE2</tt></ul>
- * <p/>
- * Suppose for example we would like to display some articles by id at using the following URL sheme:
- * <p/>
- * <ul><tt>http://HOST/article/Id</tt></ul>
- * <p/>
- * <p/>
- * Your action just needs a setArticleId() method, and requests such as /article/1, /article/2, etc will all map
- * to that URL pattern.
- *
- */
-public class RestfulActionMapper implements ActionMapper {
-    protected static final Log LOG = LogFactory.getLog(RestfulActionMapper.class);
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.mapper.ActionMapper#getMapping(javax.servlet.http.HttpServletRequest)
-     */
-    public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) {
-        String uri = RequestUtils.getServletPath(request);
-
-        int nextSlash = uri.indexOf('/', 1);
-        if (nextSlash == -1) {
-            return null;
-        }
-
-        String actionName = uri.substring(1, nextSlash);
-        HashMap<String,String> parameters = new HashMap<String,String>();
-        try {
-            StringTokenizer st = new StringTokenizer(uri.substring(nextSlash), "/");
-            boolean isNameTok = true;
-            String paramName = null;
-            String paramValue;
-
-            // check if we have the first parameter name
-            if ((st.countTokens() % 2) != 0) {
-                isNameTok = false;
-                paramName = actionName + "Id";
-            }
-
-            while (st.hasMoreTokens()) {
-                if (isNameTok) {
-                    paramName = URLDecoder.decode(st.nextToken(), "UTF-8");
-                    isNameTok = false;
-                } else {
-                    paramValue = URLDecoder.decode(st.nextToken(), "UTF-8");
-
-                    if ((paramName != null) && (paramName.length() > 0)) {
-                        parameters.put(paramName, paramValue);
-                    }
-
-                    isNameTok = true;
-                }
-            }
-        } catch (Exception e) {
-            LOG.warn(e);
-        }
-
-        return new ActionMapping(actionName, "", "", parameters);
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.mapper.ActionMapper#getUriFromActionMapping(org.apache.struts2.dispatcher.mapper.ActionMapping)
-     */
-    public String getUriFromActionMapping(ActionMapping mapping) {
-        String base = mapping.getNamespace() + mapping.getName();
-        for (Iterator iterator = mapping.getParams().entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            String name = (String) entry.getKey();
-            if (name.equals(mapping.getName() + "Id")) {
-                base = base + "/" + entry.getValue();
-                break;
-            }
-        }
-
-        return base;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
deleted file mode 100644
index 4cb541e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.multipart;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.RequestContext;
-import org.apache.commons.fileupload.disk.DiskFileItem;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
-
-/**
- * Multipart form data request adapter for Jakarta Commons Fileupload package.
- *
- */
-public class JakartaMultiPartRequest extends MultiPartRequest {
-    // maps parameter name -> List of FileItem objects
-    private Map<String,List<FileItem>> files = new HashMap<String,List<FileItem>>();
-    // maps parameter name -> List of param values
-    private Map<String,List<String>> params = new HashMap<String,List<String>>();
-    // any errors while processing this request
-    private List<String> errors = new ArrayList<String>();
-
-    /**
-     * Creates a new request wrapper to handle multi-part data using methods adapted from Jason Pell's
-     * multipart classes (see class description).
-     *
-     * @param maxSize        maximum size post allowed
-     * @param saveDir        the directory to save off the file
-     * @param servletRequest the request containing the multipart
-     * @throws java.io.IOException  is thrown if encoding fails.
-     */
-    public JakartaMultiPartRequest(HttpServletRequest servletRequest, String saveDir, int maxSize)
-            throws IOException {
-        DiskFileItemFactory fac = new DiskFileItemFactory();
-        fac.setSizeThreshold(0);
-        if (saveDir != null) {
-            fac.setRepository(new File(saveDir));
-        }
-
-        // Parse the request
-        try {
-            ServletFileUpload upload = new ServletFileUpload(fac);
-            List items = upload.parseRequest(createRequestContext(servletRequest));
-
-            for (int i = 0; i < items.size(); i++) {
-                FileItem item = (FileItem) items.get(i);
-                if (log.isDebugEnabled()) log.debug("Found item " + item.getFieldName());
-                if (item.isFormField()) {
-                    log.debug("Item is a normal form field");
-                    List<String> values;
-                    if (params.get(item.getFieldName()) != null) {
-                        values = params.get(item.getFieldName());
-                    } else {
-                        values = new ArrayList<String>();
-                    }
-
-                    // note: see http://jira.opensymphony.com/browse/WW-633
-                    // basically, in some cases the charset may be null, so
-                    // we're just going to try to "other" method (no idea if this
-                    // will work)
-                    String charset = servletRequest.getCharacterEncoding();
-                    if (charset != null) {
-                        values.add(item.getString(charset));
-                    } else {
-                        values.add(item.getString());
-                    }
-                    params.put(item.getFieldName(), values);
-                } else {
-                    log.debug("Item is a file upload");
-
-                    List<FileItem> values;
-                    if (files.get(item.getFieldName()) != null) {
-                        values = files.get(item.getFieldName());
-                    } else {
-                        values = new ArrayList<FileItem>();
-                    }
-
-                    values.add(item);
-                    files.put(item.getFieldName(), values);
-                }
-            }
-        } catch (FileUploadException e) {
-            log.error(e);
-            errors.add(e.getMessage());
-        }
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getFileParameterNames()
-     */
-    public Enumeration<String> getFileParameterNames() {
-        return Collections.enumeration(files.keySet());
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getContentType(java.lang.String)
-     */
-    public String[] getContentType(String fieldName) {
-        List items = (List) files.get(fieldName);
-
-        if (items == null) {
-            return null;
-        }
-
-        List<String> contentTypes = new ArrayList<String>(items.size());
-        for (int i = 0; i < items.size(); i++) {
-            FileItem fileItem = (FileItem) items.get(i);
-            contentTypes.add(fileItem.getContentType());
-        }
-
-        return (String[]) contentTypes.toArray(new String[contentTypes.size()]);
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getFile(java.lang.String)
-     */
-    public File[] getFile(String fieldName) {
-        List items = (List) files.get(fieldName);
-
-        if (items == null) {
-            return null;
-        }
-
-        List<File> fileList = new ArrayList<File>(items.size());
-        for (int i = 0; i < items.size(); i++) {
-            DiskFileItem fileItem = (DiskFileItem) items.get(i);
-            fileList.add(fileItem.getStoreLocation());
-        }
-
-        return (File[]) fileList.toArray(new File[fileList.size()]);
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getFileNames(java.lang.String)
-     */
-    public String[] getFileNames(String fieldName) {
-        List<FileItem> items = files.get(fieldName);
-
-        if (items == null) {
-            return null;
-        }
-
-        List<String> fileNames = new ArrayList<String>(items.size());
-        for (int i = 0; i < items.size(); i++) {
-            DiskFileItem fileItem = (DiskFileItem) items.get(i);
-            fileNames.add(getCanonicalName(fileItem.getName()));
-        }
-
-        return (String[]) fileNames.toArray(new String[fileNames.size()]);
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getFilesystemName(java.lang.String)
-     */
-    public String[] getFilesystemName(String fieldName) {
-        List items = (List) files.get(fieldName);
-
-        if (items == null) {
-            return null;
-        }
-
-        List<String> fileNames = new ArrayList<String>(items.size());
-        for (int i = 0; i < items.size(); i++) {
-            DiskFileItem fileItem = (DiskFileItem) items.get(i);
-            fileNames.add(fileItem.getStoreLocation().getName());
-        }
-
-        return (String[]) fileNames.toArray(new String[fileNames.size()]);
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getParameter(java.lang.String)
-     */
-    public String getParameter(String name) {
-        List v = (List) params.get(name);
-        if (v != null && v.size() > 0) {
-            return (String) v.get(0);
-        }
-
-        return null;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getParameterNames()
-     */
-    public Enumeration<String> getParameterNames() {
-        return Collections.enumeration(params.keySet());
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getParameterValues(java.lang.String)
-     */
-    public String[] getParameterValues(String name) {
-        List<String> v = params.get(name);
-        if (v != null && v.size() > 0) {
-            return (String[]) v.toArray(new String[v.size()]);
-        }
-
-        return null;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getErrors()
-     */
-    public List getErrors() {
-        return errors;
-    }
-
-    /**
-     * Returns the canonical name of the given file.
-     *
-     * @param filename  the given file
-     * @return the canonical name of the given file
-     */
-    private String getCanonicalName(String filename) {
-        int forwardSlash = filename.lastIndexOf("/");
-        int backwardSlash = filename.lastIndexOf("\\");
-        if (forwardSlash != -1 && forwardSlash > backwardSlash) {
-            filename = filename.substring(forwardSlash + 1, filename.length());
-        } else if (backwardSlash != -1 && backwardSlash >= forwardSlash) {
-            filename = filename.substring(backwardSlash + 1, filename.length());
-        }
-
-        return filename;
-    }
-
-    /**
-     * Creates a RequestContext needed by Jakarta Commons Upload.
-     *
-     * @param req  the request.
-     * @return a new request context.
-     */
-    private RequestContext createRequestContext(final HttpServletRequest req) {
-        return new RequestContext() {
-            public String getCharacterEncoding() {
-                return req.getCharacterEncoding();
-            }
-
-            public String getContentType() {
-                return req.getContentType();
-            }
-
-            public int getContentLength() {
-                return req.getContentLength();
-            }
-
-            public InputStream getInputStream() throws IOException {
-                return req.getInputStream();
-            }
-        };
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequest.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequest.java
deleted file mode 100644
index 35fc41d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.multipart;
-
-import java.io.File;
-import java.util.Enumeration;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-
-/**
- * Abstract wrapper class HTTP requests to handle multi-part data. <p>
- *
- */
-public abstract class MultiPartRequest {
-
-    protected static Log log = LogFactory.getLog(MultiPartRequest.class);
-
-
-    /**
-     * Returns <tt>true</tt> if the request is multipart form data, <tt>false</tt> otherwise.
-     *
-     * @param request the http servlet request.
-     * @return <tt>true</tt> if the request is multipart form data, <tt>false</tt> otherwise.
-     */
-    public static boolean isMultiPart(HttpServletRequest request) {
-        String content_type = request.getContentType();
-        return content_type != null && content_type.indexOf("multipart/form-data") != -1;
-    }
-
-    /**
-     * Returns an enumeration of the parameter names for uploaded files
-     *
-     * @return an enumeration of the parameter names for uploaded files
-     */
-    public abstract Enumeration<String> getFileParameterNames();
-
-    /**
-     * Returns the content type(s) of the file(s) associated with the specified field name
-     * (as supplied by the client browser), or <tt>null</tt> if no files are associated with the
-     * given field name.
-     *
-     * @param fieldName input field name
-     * @return an array of content encoding for the specified input field name or <tt>null</tt> if
-     *         no content type was specified.
-     */
-    public abstract String[] getContentType(String fieldName);
-
-    /**
-     * Returns a {@link java.io.File} object for the filename specified or <tt>null</tt> if no files
-     * are associated with the given field name.
-     *
-     * @param fieldName input field name
-     * @return a File[] object for files associated with the specified input field name
-     */
-    public abstract File[] getFile(String fieldName);
-
-    /**
-     * Returns a String[] of file names for files associated with the specified input field name
-     *
-     * @param fieldName input field name
-     * @return a String[] of file names for files associated with the specified input field name
-     */
-    public abstract String[] getFileNames(String fieldName);
-
-    /**
-     * Returns the file system name(s) of files associated with the given field name or
-     * <tt>null</tt> if no files are associated with the given field name.
-     *
-     * @param fieldName input field name
-     * @return the file system name(s) of files associated with the given field name
-     */
-    public abstract String[] getFilesystemName(String fieldName);
-
-    /**
-     * Returns the specified request parameter.
-     *
-     * @param name the name of the parameter to get
-     * @return the parameter or <tt>null</tt> if it was not found.
-     */
-    public abstract String getParameter(String name);
-
-    /**
-     * Returns an enumeration of String parameter names.
-     *
-     * @return an enumeration of String parameter names.
-     */
-    public abstract Enumeration<String> getParameterNames();
-
-    /**
-     * Returns a list of all parameter values associated with a parameter name. If there is only
-     * one parameter value per name the resulting array will be of length 1.
-     *
-     * @param name the name of the parameter.
-     * @return an array of all values associated with the parameter name.
-     */
-    public abstract String[] getParameterValues(String name);
-
-    /**
-     * Returns a list of error messages that may have occurred while processing the request.
-     * If there are no errors, an empty list is returned. If the underlying implementation
-     * (ie: pell, cos, jakarta, etc) cannot support providing these errors, an empty list is
-     * also returned. This list of errors is repoted back to the
-     * {@link MultiPartRequestWrapper}'s errors field.
-     *
-     * @return a list of Strings that represent various errors during parsing
-     */
-    public abstract List getErrors();
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java b/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java
deleted file mode 100644
index 3b754cb..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.multipart;
-
-import java.io.File;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.StrutsRequestWrapper;
-import org.apache.struts2.util.ClassLoaderUtils;
-
-
-/**
- * Parses a multipart request and provides a wrapper around the request. The parsing implementation used
- * depends on the <tt>struts.multipart.parser</tt> setting. It should be set to a class which
- * extends {@link org.apache.struts2.dispatcher.multipart.MultiPartRequest}. <p>
- * <p/>
- * Struts ships with three implementations,
- * {@link org.apache.struts2.dispatcher.multipart.PellMultiPartRequest}, and
- * {@link org.apache.struts2.dispatcher.multipart.CosMultiPartRequest} and
- * {@link org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest}. The Jakarta implementation
- * is the default. The <tt>struts.multipart.parser</tt> property should be set to <tt>jakarta</tt> for the
- * Jakarta implementation, <tt>pell</tt> for the Pell implementation and <tt>cos</tt> for the Jason Hunter
- * implementation. <p>
- * <p/>
- * The files are uploaded when the object is instantiated. If there are any errors they are logged using
- * {@link #addError(String)}. An action handling a multipart form should first check {@link #hasErrors()}
- * before doing any other processing. <p>
- *
- */
-public class MultiPartRequestWrapper extends StrutsRequestWrapper {
-    protected static final Log log = LogFactory.getLog(MultiPartRequestWrapper.class);
-
-    Collection errors;
-    MultiPartRequest multi;
-
-    /**
-     * Instantiates the appropriate MultiPartRequest parser implementation and processes the data.
-     *
-     * @param request the servlet request object
-     * @param saveDir directory to save the file(s) to
-     * @param maxSize maximum file size allowed
-     */
-    public MultiPartRequestWrapper(HttpServletRequest request, String saveDir, int maxSize) {
-        super(request);
-
-        if (request instanceof MultiPartRequest) {
-            multi = (MultiPartRequest) request;
-        } else {
-            String parser = Settings.get(StrutsConstants.STRUTS_MULTIPART_PARSER);
-
-            // If it's not set, use Jakarta
-            if (parser.equals("")) {
-                log.warn("Property struts.multipart.parser not set." +
-                        " Using org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest");
-                parser = "org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest";
-            }
-            // legacy support for old style property values
-            else if (parser.equals("pell")) {
-                parser = "org.apache.struts2.dispatcher.multipart.PellMultiPartRequest";
-            } else if (parser.equals("cos")) {
-                parser = "org.apache.struts2.dispatcher.multipart.CosMultiPartRequest";
-            } else if (parser.equals("jakarta")) {
-                parser = "org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest";
-            }
-
-            try {
-                Class baseClazz = org.apache.struts2.dispatcher.multipart.MultiPartRequest.class;
-
-                Class clazz = ClassLoaderUtils.loadClass(parser, MultiPartRequestWrapper.class);
-
-                // make sure it extends MultiPartRequest
-                if (!baseClazz.isAssignableFrom(clazz)) {
-                    addError("Class '" + parser + "' does not extend MultiPartRequest");
-
-                    return;
-                }
-
-                // get the constructor
-                Constructor ctor = clazz.getDeclaredConstructor(new Class[]{
-                        ClassLoaderUtils.loadClass("javax.servlet.http.HttpServletRequest", MultiPartRequestWrapper.class),
-                        java.lang.String.class, int.class
-                });
-
-                // build the parameter list
-                Object[] parms = new Object[]{
-                        request, saveDir, new Integer(maxSize)
-                };
-
-                // instantiate it
-                multi = (MultiPartRequest) ctor.newInstance(parms);
-                for (Iterator iter = multi.getErrors().iterator(); iter.hasNext();) {
-                    String error = (String) iter.next();
-                    addError(error);
-                }
-            } catch (ClassNotFoundException e) {
-                addError("Class: " + parser + " not found.");
-            } catch (NoSuchMethodException e) {
-                addError("Constructor error for " + parser + ": " + e);
-            } catch (InstantiationException e) {
-                addError("Error instantiating " + parser + ": " + e);
-            } catch (IllegalAccessException e) {
-                addError("Access errror for " + parser + ": " + e);
-            } catch (InvocationTargetException e) {
-                // This is a wrapper for any exceptions thrown by the constructor called from newInstance
-                addError(e.getTargetException().toString());
-            }
-        }
-    }
-
-    /**
-     * Get an enumeration of the parameter names for uploaded files
-     *
-     * @return enumeration of parameter names for uploaded files
-     */
-    public Enumeration<String> getFileParameterNames() {
-        if (multi == null) {
-            return null;
-        }
-
-        return multi.getFileParameterNames();
-    }
-
-    /**
-     * Get an array of content encoding for the specified input field name or <tt>null</tt> if
-     * no content type was specified.
-     *
-     * @param name input field name
-     * @return an array of content encoding for the specified input field name
-     */
-    public String[] getContentTypes(String name) {
-        if (multi == null) {
-            return null;
-        }
-
-        return multi.getContentType(name);
-    }
-
-    /**
-     * Get a {@link java.io.File[]} for the given input field name.
-     *
-     * @param fieldName input field name
-     * @return a File[] object for files associated with the specified input field name
-     */
-    public File[] getFiles(String fieldName) {
-        if (multi == null) {
-            return null;
-        }
-
-        return multi.getFile(fieldName);
-    }
-
-    /**
-     * Get a String array of the file names for uploaded files
-     *
-     * @return a String[] of file names for uploaded files
-     */
-    public String[] getFileNames(String fieldName) {
-        if (multi == null) {
-            return null;
-        }
-
-        return multi.getFileNames(fieldName);
-    }
-
-    /**
-     * Get the filename(s) of the file(s) uploaded for the given input field name.
-     * Returns <tt>null</tt> if the file is not found.
-     *
-     * @param fieldName input field name
-     * @return the filename(s) of the file(s) uploaded for the given input field name or
-     *         <tt>null</tt> if name not found.
-     */
-    public String[] getFileSystemNames(String fieldName) {
-        if (multi == null) {
-            return null;
-        }
-
-        return multi.getFilesystemName(fieldName);
-    }
-
-    /**
-     * @see javax.servlet.http.HttpServletRequest#getParameter(String)
-     */
-    public String getParameter(String name) {
-        return ((multi == null) || (multi.getParameter(name) == null)) ? super.getParameter(name) : multi.getParameter(name);
-    }
-
-    /**
-     * @see javax.servlet.http.HttpServletRequest#getParameterMap()
-     */
-    public Map getParameterMap() {
-        Map map = new HashMap();
-        Enumeration enumeration = getParameterNames();
-
-        while (enumeration.hasMoreElements()) {
-            String name = (String) enumeration.nextElement();
-            map.put(name, this.getParameterValues(name));
-        }
-
-        return map;
-    }
-
-    /**
-     * @see javax.servlet.http.HttpServletRequest#getParameterNames()
-     */
-    public Enumeration getParameterNames() {
-        if (multi == null) {
-            return super.getParameterNames();
-        } else {
-            return mergeParams(multi.getParameterNames(), super.getParameterNames());
-        }
-    }
-
-    /**
-     * @see javax.servlet.http.HttpServletRequest#getParameterValues(String)
-     */
-    public String[] getParameterValues(String name) {
-        return ((multi == null) || (multi.getParameterValues(name) == null)) ? super.getParameterValues(name) : multi.getParameterValues(name);
-    }
-
-    /**
-     * Returns <tt>true</tt> if any errors occured when parsing the HTTP multipart request, <tt>false</tt> otherwise.
-     *
-     * @return <tt>true</tt> if any errors occured when parsing the HTTP multipart request, <tt>false</tt> otherwise.
-     */
-    public boolean hasErrors() {
-        if ((errors == null) || errors.isEmpty()) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-
-    /**
-     * Returns a collection of any errors generated when parsing the multipart request.
-     *
-     * @return the error Collection.
-     */
-    public Collection getErrors() {
-        return errors;
-    }
-
-    /**
-     * Adds an error message.
-     *
-     * @param anErrorMessage the error message to report.
-     */
-    protected void addError(String anErrorMessage) {
-        if (errors == null) {
-            errors = new ArrayList();
-        }
-
-        errors.add(anErrorMessage);
-    }
-
-    /**
-     * Merges 2 enumeration of parameters as one.
-     *
-     * @param params1 the first enumeration.
-     * @param params2 the second enumeration.
-     * @return a single Enumeration of all elements from both Enumerations.
-     */
-    protected Enumeration mergeParams(Enumeration params1, Enumeration params2) {
-        Vector temp = new Vector();
-
-        while (params1.hasMoreElements()) {
-            temp.add(params1.nextElement());
-        }
-
-        while (params2.hasMoreElements()) {
-            temp.add(params2.nextElement());
-        }
-
-        return temp.elements();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/package.html b/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/package.html
deleted file mode 100644
index 6f5f810..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Classes to help dispatch multipart HTTP requests.</body>
diff --git a/trunk/core/src/main/java/org/apache/struts2/dispatcher/package.html b/trunk/core/src/main/java/org/apache/struts2/dispatcher/package.html
deleted file mode 100644
index 588e5d0..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/dispatcher/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Classes for action dispatching in Struts (the Controller part of MVC).</body>
diff --git a/trunk/core/src/main/java/org/apache/struts2/impl/ActionContextImpl.java b/trunk/core/src/main/java/org/apache/struts2/impl/ActionContextImpl.java
deleted file mode 100644
index bc61e04..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/impl/ActionContextImpl.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.struts2.spi.ActionContext;
-import org.apache.struts2.spi.Result;
-
-import com.opensymphony.xwork2.ActionInvocation;
-
-public class ActionContextImpl implements ActionContext {
-
-    final ActionInvocation invocation;
-
-    public ActionContextImpl(ActionInvocation invocation) {
-        this.invocation = invocation;
-    }
-
-    public Object getAction() {
-        return invocation.getAction();
-    }
-
-    public Method getMethod() {
-        String methodName = invocation.getProxy().getMethod();
-        try {
-            return getAction().getClass().getMethod(methodName);
-        } catch (NoSuchMethodException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public String getActionName() {
-        return invocation.getProxy().getActionName();
-    }
-
-    public String getNamespacePath() {
-        return invocation.getProxy().getNamespace();
-    }
-
-    // TODO: Do something with these.
-    List<Result> resultInterceptors = new ArrayList<Result>();
-
-    public void addResultInterceptor(Result interceptor) {
-        resultInterceptors.add(interceptor);
-    }
-
-    public Result getResult() {
-        // TODO
-        throw new UnsupportedOperationException();
-    }
-
-    public ActionContext getPrevious() {
-        // TODO
-        throw new UnsupportedOperationException();
-    }
-
-    public ActionContext getNext() {
-        // TODO
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/impl/InterceptorAdapter.java b/trunk/core/src/main/java/org/apache/struts2/impl/InterceptorAdapter.java
deleted file mode 100644
index 68e3d57..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/impl/InterceptorAdapter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import static org.apache.struts2.impl.RequestContextImpl.ILLEGAL_PROCEED;
-
-import java.util.concurrent.Callable;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-
-public class InterceptorAdapter implements Interceptor {
-
-    private static final long serialVersionUID = 8020658947818231684L;
-    final org.apache.struts2.spi.Interceptor delegate;
-
-    public InterceptorAdapter(org.apache.struts2.spi.Interceptor delegate) {
-        this.delegate = delegate;
-    }
-
-    public String intercept(final ActionInvocation invocation) throws Exception {
-        final RequestContextImpl requestContext = RequestContextImpl.get();
-
-        // Save the existing proceed implementation so we can restore it later.
-        Callable<String> previous = requestContext.getProceed();
-
-        requestContext.setProceed(new Callable<String>() {
-            public String call() throws Exception {
-                // This proceed implementation is no longer valid past this point.
-                requestContext.setProceed(ILLEGAL_PROCEED);
-                try {
-                    return invocation.invoke();
-                } finally {
-                    // We're valid again.
-                    requestContext.setProceed(this);
-                }
-            }
-        });
-
-        try {
-            return delegate.intercept(requestContext);
-        } finally {
-            requestContext.setProceed(previous);
-        }
-    }
-
-    public void destroy() {}
-    public void init() {}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/impl/MessagesImpl.java b/trunk/core/src/main/java/org/apache/struts2/impl/MessagesImpl.java
deleted file mode 100644
index 32a759e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/impl/MessagesImpl.java
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.struts2.Messages;
-
-import com.opensymphony.xwork2.DefaultTextProvider;
-import com.opensymphony.xwork2.TextProvider;
-
-public class MessagesImpl implements Messages {
-
-    final TextProvider textProvider = DefaultTextProvider.INSTANCE;
-    Map<String, Messages> fieldMap = new HashMap<String, Messages>();
-    Map<Severity, List<String>> severityMap = new EnumMap<Severity, List<String>>(Severity.class);
-
-    public Messages forField(String fieldName) {
-        Messages forField = fieldMap.get(fieldName);
-        if (forField == null) {
-            forField = new MessagesImpl();
-            fieldMap.put(fieldName, forField);
-        }
-        return forField;
-    }
-
-    public Map<String, Messages> forFields() {
-        return fieldMap;
-    }
-
-    public void addInformation(String key) {
-        forSeverity(Severity.INFO).add(textProvider.getText(key));
-    }
-
-    public void addInformation(String key, String... arguments) {
-        forSeverity(Severity.INFO).add(textProvider.getText(key, arguments));
-    }
-
-    public void addWarning(String key) {
-        forSeverity(Severity.WARN).add(textProvider.getText(key));
-    }
-
-    public void addWarning(String key, String... arguments) {
-        forSeverity(Severity.WARN).add(textProvider.getText(key, arguments));
-    }
-
-    public void addError(String key) {
-        forSeverity(Severity.ERROR).add(textProvider.getText(key));
-    }
-
-    public void addError(String key, String... arguments) {
-        forSeverity(Severity.ERROR).add(textProvider.getText(key, arguments));
-    }
-
-    public void add(Severity severity, String key) {
-        forSeverity(severity).add(textProvider.getText(key));
-    }
-
-    public void add(Severity severity, String key, String... arguments) {
-        forSeverity(severity).add(textProvider.getText(key, arguments));
-    }
-
-    public Set<Severity> getSeverities() {
-        Set<Severity> severities = EnumSet.noneOf(Severity.class);
-        for (Severity severity : Severity.values()) {
-            List<String> messages = severityMap.get(severity);
-            if (messages != null && !messages.isEmpty()) {
-                severities.add(severity);
-            }
-        }
-        return Collections.unmodifiableSet(severities);
-    }
-
-    public List<String> forSeverity(Severity severity) {
-        List<String> messages = severityMap.get(severity);
-        if (messages == null) {
-            messages = new ArrayList<String>();
-            severityMap.put(severity, messages);
-        }
-        return messages;
-    }
-
-    public List<String> getErrors() {
-        return forSeverity(Severity.ERROR);
-    }
-
-    public List<String> getWarnings() {
-        return forSeverity(Severity.WARN);
-    }
-
-    public List<String> getInformation() {
-        return forSeverity(Severity.INFO);
-    }
-
-    public boolean hasErrors() {
-        return !isEmpty(Severity.ERROR);
-    }
-
-    public boolean hasWarnings() {
-        return !isEmpty(Severity.WARN);
-    }
-
-    public boolean hasInformation() {
-        return !isEmpty(Severity.INFO);
-    }
-
-    public boolean isEmpty() {
-        for (Severity severity : Severity.values())
-            if (!isEmpty(severity))
-                return false;
-
-        return true;
-    }
-
-    public boolean isEmpty(Severity severity) {
-        List<String> messages = severityMap.get(severity);
-        if (messages != null && !messages.isEmpty()) {
-            return false;
-        }
-
-        for (Messages fieldMessages : fieldMap.values())
-            if (!fieldMessages.isEmpty(severity))
-                return false;
-
-        return true;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/impl/RequestContextImpl.java b/trunk/core/src/main/java/org/apache/struts2/impl/RequestContextImpl.java
deleted file mode 100644
index 1d85380..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/impl/RequestContextImpl.java
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import static org.apache.struts2.StrutsStatics.HTTP_REQUEST;
-import static org.apache.struts2.StrutsStatics.HTTP_RESPONSE;
-import static org.apache.struts2.StrutsStatics.SERVLET_CONTEXT;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.Callable;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.Messages;
-import org.apache.struts2.dispatcher.RequestMap;
-import org.apache.struts2.spi.ActionContext;
-import org.apache.struts2.spi.RequestContext;
-import org.apache.struts2.spi.ValueStack;
-
-import com.opensymphony.xwork2.ActionInvocation;
-
-public class RequestContextImpl implements RequestContext {
-
-    com.opensymphony.xwork2.ActionContext xworkContext;
-    ActionContext actionContext;
-    Messages messages = new MessagesImpl();
-
-    public static final Callable<String> ILLEGAL_PROCEED = new Callable<String>() {
-        public String call() throws Exception {
-            throw new IllegalStateException();
-        }
-    };
-
-    public RequestContextImpl(com.opensymphony.xwork2.ActionContext xworkContext) {
-        this.xworkContext = xworkContext;
-    }
-
-    public ActionContext getActionContext() {
-        return actionContext;
-    }
-
-    public Object getAction() {
-        return getActionContext().getAction();
-    }
-
-    void setActionContext(ActionContext actionContext) {
-        this.actionContext = actionContext;
-    }
-
-    public Map<String, String[]> getParameterMap() {
-        return xworkContext.getParameters();
-    }
-
-    Map<String, Object> attributeMap;
-
-    public Map<String, Object> getAttributeMap() {
-        if (attributeMap == null) {
-            attributeMap = new RequestMap(getServletRequest());
-        }
-        return attributeMap;
-    }
-
-    public Map<String, Object> getSessionMap() {
-        return xworkContext.getSession();
-    }
-
-    public Map<String, Object> getApplicationMap() {
-        return xworkContext.getApplication();
-    }
-
-    public List<Cookie> findCookiesForName(String name) {
-        List<Cookie> cookies = new ArrayList<Cookie>();
-        for (Cookie cookie : getServletRequest().getCookies())
-            if (name.equals(cookie.getName()))
-                cookies.add(cookie);
-
-        return cookies;
-   }
-
-    public Locale getLocale() {
-        return xworkContext.getLocale();
-    }
-
-    public void setLocale(Locale locale) {
-        xworkContext.setLocale(locale);
-    }
-
-    public Messages getMessages() {
-        return messages;
-    }
-
-    public HttpServletRequest getServletRequest() {
-        return (HttpServletRequest) xworkContext.get(HTTP_REQUEST);
-    }
-
-    public HttpServletResponse getServletResponse() {
-        return (HttpServletResponse) xworkContext.get(HTTP_RESPONSE);
-    }
-
-    public ServletContext getServletContext() {
-        return (ServletContext) xworkContext.get(SERVLET_CONTEXT);
-    }
-
-    ValueStack valueStack;
-
-    public ValueStack getValueStack() {
-        if (valueStack == null) {
-            valueStack = new ValueStackAdapter(xworkContext.getValueStack());
-        }
-        return valueStack;
-    }
-
-    Callable<String> proceed = ILLEGAL_PROCEED;
-
-    public String proceed() throws Exception {
-        return proceed.call();
-    }
-
-    public void setProceed(Callable<String> proceed) {
-        this.proceed = proceed;
-    }
-
-    public Callable<String> getProceed() {
-        return proceed;
-    }
-
-    static ThreadLocal<RequestContextImpl[]> threadLocalRequestContext = new ThreadLocal<RequestContextImpl[]>() {
-        protected RequestContextImpl[] initialValue() {
-            return new RequestContextImpl[1];
-        }
-    };
-
-    /**
-     * Creates RequestContext if necessary. Always creates a new ActionContext and restores an existing ActionContext
-     * when finished.
-     */
-    public static String callInContext(ActionInvocation invocation, Callable<String> callable)
-            throws Exception {
-        RequestContextImpl[] reference = threadLocalRequestContext.get();
-
-        if (reference[0] == null) {
-            // Initial invocation.
-            reference[0] = new RequestContextImpl(invocation.getInvocationContext());
-            reference[0].setActionContext(new ActionContextImpl(invocation));
-            try {
-                return callable.call();
-            } finally {
-                reference[0] = null;
-            }
-        } else {
-            // Nested invocation.
-            RequestContextImpl requestContext = reference[0];
-            ActionContext previous = requestContext.getActionContext();
-            requestContext.setActionContext(new ActionContextImpl(invocation));
-            try {
-                return callable.call();
-            } finally {
-                requestContext.setActionContext(previous);
-            }
-        }
-    }
-
-    public static RequestContextImpl get() {
-        RequestContextImpl requestContext = threadLocalRequestContext.get()[0];
-
-        if (requestContext == null)
-            throw new IllegalStateException("RequestContext has not been created.");
-
-        return requestContext;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/impl/ResultAdapter.java b/trunk/core/src/main/java/org/apache/struts2/impl/ResultAdapter.java
deleted file mode 100644
index f71c8f3..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/impl/ResultAdapter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Result;
-
-public class ResultAdapter implements Result {
-
-    private static final long serialVersionUID = -5107033078266553554L;
-    final org.apache.struts2.spi.Result delegate;
-
-    public ResultAdapter(org.apache.struts2.spi.Result delegate) {
-        this.delegate = delegate;
-    }
-
-    public void execute(ActionInvocation invocation) throws Exception {
-        delegate.execute(RequestContextImpl.get());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java b/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java
deleted file mode 100644
index f133405..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import java.util.Map;
-import java.util.concurrent.Callable;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.DefaultActionProxy;
-import com.opensymphony.xwork2.config.Configuration;
-
-public class StrutsActionProxy extends DefaultActionProxy {
-
-    private static final long serialVersionUID = -2434901249671934080L;
-
-    public StrutsActionProxy(Configuration cfg, String namespace, String actionName, Map extraContext,
-                             boolean executeResult, boolean cleanupContext) throws Exception {
-        super(cfg, namespace, actionName, extraContext, executeResult, cleanupContext);
-    }
-
-    public String execute() throws Exception {
-        ActionContext previous = ActionContext.getContext();
-        ActionContext.setContext(invocation.getInvocationContext());
-        try {
-            return RequestContextImpl.callInContext(invocation, new Callable<String>() {
-                public String call() throws Exception {
-                    return invocation.invoke();
-                }
-            });
-        } finally {
-            if (cleanupContext)
-                ActionContext.setContext(previous);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java b/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java
deleted file mode 100644
index c55e5fd..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import java.util.Map;
-
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.DefaultActionProxyFactory;
-import com.opensymphony.xwork2.config.Configuration;
-
-public class StrutsActionProxyFactory extends DefaultActionProxyFactory {
-
-    public ActionProxy createActionProxy(Configuration config, String namespace, String actionName, Map extraContext)
-            throws Exception {
-        return new StrutsActionProxy(config, namespace, actionName, extraContext, true, true);
-    }
-
-    public ActionProxy createActionProxy(Configuration config, String namespace, String actionName, Map extraContext,
-            boolean executeResult, boolean cleanupContext) throws Exception {
-        return new StrutsActionProxy(config, namespace, actionName, extraContext, executeResult, cleanupContext);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java b/trunk/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java
deleted file mode 100644
index dda52df..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.entities.InterceptorConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-import com.opensymphony.xwork2.util.OgnlUtil;
-
-public class StrutsObjectFactory extends ObjectFactory {
-
-    public Interceptor buildInterceptor(InterceptorConfig interceptorConfig, Map refParams)
-            throws ConfigurationException {
-        String className = interceptorConfig.getClassName();
-
-        Map<String, String> params = new HashMap<String, String>();
-        Map typeParams = interceptorConfig.getParams();
-        if (typeParams != null && !typeParams.isEmpty())
-            params.putAll(typeParams);
-        if (refParams != null && !refParams.isEmpty())
-            params.putAll(refParams);
-        params.putAll(refParams);
-
-        try {
-            // interceptor instances are long-lived and used across user sessions, so don't try to pass in any extra
-            // context
-            Object o = buildBean(className, null);
-            OgnlUtil.setProperties(params, o);
-
-            if (o instanceof Interceptor) {
-                Interceptor interceptor = (Interceptor) o;
-                interceptor.init();
-                return interceptor;
-            }
-
-            if (o instanceof org.apache.struts2.spi.Interceptor)
-                return new InterceptorAdapter((org.apache.struts2.spi.Interceptor) o);
-
-            throw new ConfigurationException(
-                    "Class [" + className + "] does not implement Interceptor", interceptorConfig);
-        } catch (InstantiationException e) {
-            throw new ConfigurationException(
-                    "Unable to instantiate an instance of Interceptor class [" + className + "].",
-                    e, interceptorConfig);
-        } catch (IllegalAccessException e) {
-            throw new ConfigurationException(
-                    "IllegalAccessException while attempting to instantiate an instance of Interceptor class ["
-                            + className + "].",
-                    e, interceptorConfig);
-        } catch (Exception e) {
-            throw new ConfigurationException(
-                    "Caught Exception while registering Interceptor class " + className,
-                    e, interceptorConfig);
-        } catch (NoClassDefFoundError e) {
-            throw new ConfigurationException(
-                    "Could not load class " + className
-                            + ". Perhaps it exists but certain dependencies are not available?",
-                    e, interceptorConfig);
-        }
-    }
-
-    public Result buildResult(ResultConfig resultConfig, Map extraContext) throws Exception {
-        String resultClassName = resultConfig.getClassName();
-        if (resultClassName == null)
-            return null;
-
-        Object result = buildBean(resultClassName, extraContext);
-        OgnlUtil.setProperties(resultConfig.getParams(), result, extraContext);
-
-        if (result instanceof Result)
-            return (Result) result;
-
-        if (result instanceof org.apache.struts2.spi.Result)
-            return new ResultAdapter((org.apache.struts2.spi.Result) result);
-
-        throw new ConfigurationException(result.getClass().getName() + " does not implement Result.");
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/impl/ValueStackAdapter.java b/trunk/core/src/main/java/org/apache/struts2/impl/ValueStackAdapter.java
deleted file mode 100644
index 652a4fc..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/impl/ValueStackAdapter.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import java.util.Iterator;
-
-import org.apache.struts2.spi.ValueStack;
-
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-public class ValueStackAdapter implements ValueStack {
-
-    final com.opensymphony.xwork2.util.ValueStack delegate;
-
-    public ValueStackAdapter(com.opensymphony.xwork2.util.ValueStack delegate) {
-        this.delegate = delegate;
-    }
-
-    public Object peek() {
-        return delegate.peek();
-    }
-
-    public Object pop() {
-        return delegate.pop();
-    }
-
-    public void push(Object o) {
-        delegate.push(o);
-    }
-
-    public ValueStack clone() {
-        return new ValueStackAdapter(ValueStackFactory.getFactory().createValueStack(delegate));
-    }
-
-    public Object get(String expr) {
-        return delegate.findValue(expr);
-    }
-
-    public <T> T get(String expr, Class<T> requiredType) {
-        return (T) delegate.findValue(expr, requiredType);
-    }
-
-    public String getString(String expr) {
-        return delegate.findString(expr);
-    }
-
-    public void set(String expr, Object o) {
-        delegate.set(expr, o);
-    }
-
-    public int size() {
-        return delegate.size();
-    }
-
-    public Iterator<Object> iterator() {
-        return delegate.getRoot().iterator();
-    }
-}
\ No newline at end of file
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/ApplicationAware.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/ApplicationAware.java
deleted file mode 100644
index 7c173c1..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/ApplicationAware.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.Map;
-
-
-/**
- * Actions that want to be aware of the application Map object should implement this interface.
- * This will give them access to a Map where they can put objects that should be available
- * to other parts of the application. <p>
- * <p/>
- * Typical uses are configuration objects and caches.
- *
- */
-public interface ApplicationAware {
-
-    /**
-     * Sets the map of application properties in the implementing class.
-     *
-     * @param application a Map of application properties.
-     */
-    public void setApplication(Map application);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/BackgroundProcess.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/BackgroundProcess.java
deleted file mode 100644
index ba82b17..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/BackgroundProcess.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.io.Serializable;
-
-import com.opensymphony.xwork2.ActionInvocation;
-
-/**
- * Background thread to be executed by the ExecuteAndWaitInterceptor.
- *
- */
-public class BackgroundProcess implements Serializable {
-	
-	private static final long serialVersionUID = 3884464776311686443L;
-	
-	protected Object action;
-    protected ActionInvocation invocation;
-    protected String result;
-    protected Exception exception;
-    protected boolean done;
-
-    /**
-     * Constructs a background process
-     * 
-     * @param threadName The thread name
-     * @param invocation The action invocation
-     * @param threadPriority The thread priority
-     */
-    public BackgroundProcess(String threadName, final ActionInvocation invocation, int threadPriority) {
-        this.invocation = invocation;
-        this.action = invocation.getAction();
-        try {
-            final Thread t = new Thread(new Runnable() {
-                public void run() {
-                    try {
-                        beforeInvocation();
-                        result = invocation.invokeActionOnly();
-                        afterInvocation();
-                    } catch (Exception e) {
-                        exception = e;
-                    }
-
-                    done = true;
-                }
-            });
-            t.setName(threadName);
-            t.setPriority(threadPriority);
-            t.start();
-        } catch (Exception e) {
-            exception = e;
-        }
-    }
-
-    /**
-     * Called before the background thread determines the result code
-     * from the ActionInvocation.
-     *
-     * @throws Exception any exception thrown will be thrown, in turn, by the ExecuteAndWaitInterceptor
-     */
-    protected void beforeInvocation() throws Exception {
-    }
-
-    /**
-     * Called after the background thread determines the result code
-     * from the ActionInvocation, but before the background thread is
-     * marked as done.
-     *
-     * @throws Exception any exception thrown will be thrown, in turn, by the ExecuteAndWaitInterceptor
-     */
-    protected void afterInvocation() throws Exception {
-    }
-
-    /**
-     * Retrieves the action.
-     *
-     * @return  the action.
-     */
-    public Object getAction() {
-        return action;
-    }
-
-    /**
-     * Retrieves the action invocation.
-     * 
-     * @return the action invocation
-     */
-    public ActionInvocation getInvocation() {
-        return invocation;
-    }
-
-    /**
-     * Gets the result of the background process.
-     * 
-     * @return  the result; <tt>null</tt> if not done.
-     */
-    public String getResult() {
-        return result;
-    }
-
-    /**
-     * Gets the exception if any was thrown during the execution of the background process.
-     * 
-     * @return the exception or <tt>null</tt> if no exception was thrown.
-     */
-    public Exception getException() {
-        return exception;
-    }
-
-    /**
-     * Returns the status of the background process.
-     * 
-     * @return <tt>true</tt> if finished, <tt>false</tt> otherwise
-     */
-    public boolean isDone() {
-        return done;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/CheckboxInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/CheckboxInterceptor.java
deleted file mode 100644
index b441dbb..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/CheckboxInterceptor.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * $Id: CheckboxListTest.java 439747 2006-09-03 09:22:46Z mrdon $
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * <!-- START SNIPPET: description -->
- * Looks for a hidden identification field that specifies the original value of the checkbox.
- * If the checkbox isn't submitted, insert it into the parameters as if it was with the value 
- * of 'false'.
- * <!-- END SNIPPET: description -->
- * <p/>
- * <!-- START SNIPPET: parameters -->
- * <ul><li>setUncheckedValue -
- * The default value of an unchecked box can be overridden by setting the 'uncheckedValue' property.
- * </li></ul>
- * <!-- END SNIPPET: parameters -->
- * <p/>
- * <!-- START SNIPPET: extending -->
- * <p/>
- * <!-- END SNIPPET: extending -->
- */
-public class CheckboxInterceptor implements Interceptor {
-    
-    /** Auto-generated serialization id */
-    private static final long serialVersionUID = -586878104807229585L;
-    
-    private String uncheckedValue = Boolean.FALSE.toString();
-
-    public void destroy() {
-    }
-
-    public void init() {
-    }
-
-    public String intercept(ActionInvocation ai) throws Exception {
-        Map parameters = ai.getInvocationContext().getParameters();
-        Map<String, String> newParams = new HashMap<String, String>();
-        Set<String> keys = parameters.keySet();
-        for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) {
-            String key = iterator.next();
-
-            if (key.startsWith("__checkbox_")) {
-                String name = key.substring("__checkbox_".length());
-
-                iterator.remove();
-
-                // is this checkbox checked/submitted?
-                if (!parameters.containsKey(name)) {
-                    // if not, let's be sure to default the value to false
-                    newParams.put(name, uncheckedValue);
-                }
-            }
-        }
-
-        parameters.putAll(newParams);
-
-        return ai.invoke();
-    }
-
-    /**
-     * Overrides the default value for an unchecked checkbox
-     * 
-     * @param uncheckedValue The uncheckedValue to set
-     */
-    public void setUncheckedValue(String uncheckedValue) {
-        this.uncheckedValue = uncheckedValue;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java
deleted file mode 100644
index a81dcd4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * This interceptor creates the HttpSession.
- * <p/>
- * This is particular usefull when using the &lt;@s.token&gt; tag in freemarker templates.
- * The tag <b>do</b> require that a HttpSession is already created since freemarker commits
- * the response to the client immediately.
- * 
- * <!-- END SNIPPET: description -->
- *
- * <p/> <u>Interceptor parameters:</u>
- *
- *
- * <!-- START SNIPPET: extending -->
- * 
- * <ul>
- * 	<li>none</li>
- * </ul>
- * 
- * <!-- END SNIPPET: extending -->
- *
- *
- * <!-- START SNIPPET: parameters -->
- *
- * <ul>
- *
- * <li>None</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: parameters -->
- *
- * <b>Example:</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="create-session"/&gt;
- *     &lt;interceptor-ref name="defaultStack"/&gt;
- *     &lt;result name="input"&gt;input_with_token_tag.ftl&lt;/result&gt;
- * &lt;/action&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * @version $Date$ $Id$
- */
-public class CreateSessionInterceptor extends AbstractInterceptor {
-	
-	private static final long serialVersionUID = -4590322556118858869L;
-	
-	private static final Log _log = LogFactory.getLog(CreateSessionInterceptor.class);
-	
-	
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.interceptor.Interceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
-     */
-    public String intercept(ActionInvocation invocation) throws Exception {
-		_log.debug("Creating HttpSession");
-		ServletActionContext.getRequest().getSession(true);
-        return invocation.invoke();
-	}
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java
deleted file mode 100644
index 0e821df..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.Collections;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
-
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * The ExecuteAndWaitInterceptor is great for running long-lived actions in the background while showing the user a nice
- * progress meter. This also prevents the HTTP request from timing out when the action takes more than 5 or 10 minutes.
- *
- * <p/> Using this interceptor is pretty straight forward. Assuming that you are including struts-default.xml, this
- * interceptor is already configured but is not part of any of the default stacks. Because of the nature of this
- * interceptor, it must be the <b>last</b> interceptor in the stack.
- *
- * <p/> This interceptor works on a per-session basis. That means that the same action name (myLongRunningAction, in the
- * above example) cannot be run more than once at a time in a given session. On the initial request or any subsequent
- * requests (before the action has completed), the <b>wait</b> result will be returned. <b>The wait result is
- * responsible for issuing a subsequent request back to the action, giving the effect of a self-updating progress
- * meter</b>.
- *
- * <p/> If no "wait" result is found, Struts will automatically generate a wait result on the fly. This result is
- * written in FreeMarker and cannot run unless FreeMarker is installed. If you don't wish to deploy with FreeMarker, you
- * must provide your own wait result. This is generally a good thing to do anyway, as the default wait page is very
- * plain.
- *
- * <p/>Whenever the wait result is returned, the <b>action that is currently running in the background will be placed on
- * top of the stack</b>. This allows you to display progress data, such as a count, in the wait page. By making the wait
- * page automatically reload the request to the action (which will be short-circuited by the interceptor), you can give
- * the appearance of an automatic progress meter.
- *
- * <p/>This interceptor also supports using an initial wait delay. An initial delay is a time in milliseconds we let the
- * server wait before the wait page is shown to the user. During the wait this interceptor will wake every 100 millis
- * to check if the background process is done premature, thus if the job for some reason doesn't take to long the wait
- * page is not shown to the user.
- * <br/> This is useful for e.g. search actions that have a wide span of execution time. Using a delay time of 2000
- * millis we ensure the user is presented fast search results immediately and for the slow results a wait page is used.
- *
- * <p/><b>Important</b>: Because the action will be running in a seperate thread, you can't use ActionContext because it
- * is a ThreadLocal. This means if you need to access, for example, session data, you need to implement SessionAware
- * rather than calling ActionContext.getSesion().
- *
- * <p/>The thread kicked off by this interceptor will be named in the form <b><u>actionName</u>BrackgroundProcess</b>.
- * For example, the <i>search</i> action would run as a thread named <i>searchBackgroundProcess</i>.
- *
- * <!-- END SNIPPET: description -->
- *
- * <p/> <u>Interceptor parameters:</u>
- *
- * <!-- START SNIPPET: parameters -->
- *
- * <ul>
- *
- * <li>threadPriority (optional) - the priority to assign the thread. Default is <code>Thread.NORM_PRIORITY</code>.</li>
- * <li>delay (optional) - an initial delay in millis to wait before the wait page is shown (returning <code>wait</code> as result code). Default is no initial delay.</li>
- * <li>delaySleepInterval (optional) - only used with delay. Used for waking up at certain intervals to check if the background process is already done. Default is 100 millis.</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: parameters -->
- *
- * <p/> <u>Extending the interceptor:</u>
- *
- * <p/>
- *
- * <!-- START SNIPPET: extending -->
- *
- * If you wish to make special preparations before and/or after the invocation of the background thread, you can extend
- * the BackgroundProcess class and implement the beforeInvocation() and afterInvocation() methods. This may be useful
- * for obtaining and releasing resources that the background process will need to execute successfully. To use your
- * background process extension, extend ExecuteAndWaitInterceptor and implement the getNewBackgroundProcess() method.
- *
- * <!-- END SNIPPET: extending -->
- *
- * <p/> <u>Example code:</u>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="completeStack"/&gt;
- *     &lt;interceptor-ref name="execAndWait"/&gt;
- *     &lt;result name="wait"&gt;longRunningAction-wait.jsp&lt;/result&gt;
- *     &lt;result name="success"&gt;longRunningAction-success.jsp&lt;/result&gt;
- * &lt;/action&gt;
- *
- * &lt;%@ taglib prefix="s" uri="/struts" %&gt;
- * &lt;html&gt;
- *   &lt;head&gt;
- *     &lt;title&gt;Please wait&lt;/title&gt;
- *     &lt;meta http-equiv="refresh" content="5;url=&lt;a:url includeParams="all" /&gt;"/&gt;
- *   &lt;/head&gt;
- *   &lt;body&gt;
- *     Please wait while we process your request.
- *     Click &lt;a href="&lt;a:url includeParams="all" /&gt;">&lt;/a&gt; if this page does not reload automatically.
- *   &lt;/body&gt;
- * &lt;/html&gt;
- * </pre>
- *
- * <p/> <u>Example code2:</u>
- * This example will wait 2 second (2000 millis) before the wait page is shown to the user. Therefore
- * if the long process didn't last long anyway the user isn't shown a wait page.
- *
- * <pre>
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="completeStack"/&gt;
- *     &lt;interceptor-ref name="execAndWait"&gt;
- *         &lt;param name="delay"&gt;2000&lt;param&gt;
- *     &lt;interceptor-ref&gt;
- *     &lt;result name="wait"&gt;longRunningAction-wait.jsp&lt;/result&gt;
- *     &lt;result name="success"&gt;longRunningAction-success.jsp&lt;/result&gt;
- * &lt;/action&gt;
- * </pre>
- *
- * <p/> <u>Example code3:</u>
- * This example will wait 1 second (1000 millis) before the wait page is shown to the user.
- * And at every 50 millis this interceptor will check if the background process is done, if so
- * it will return before the 1 second has elapsed, and the user isn't shown a wait page.
- *
- * <pre>
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="completeStack"/&gt;
- *     &lt;interceptor-ref name="execAndWait"&gt;
- *         &lt;param name="delay"&gt;1000&lt;param&gt;
- *         &lt;param name="delaySleepInterval"&gt;50&lt;param&gt;
- *     &lt;interceptor-ref&gt;
- *     &lt;result name="wait"&gt;longRunningAction-wait.jsp&lt;/result&gt;
- *     &lt;result name="success"&gt;longRunningAction-success.jsp&lt;/result&gt;
- * &lt;/action&gt;
- * </pre>
- *
- * <!-- END SNIPPET: example -->
- *
- */
-public class ExecuteAndWaitInterceptor extends MethodFilterInterceptor {
-	
-	private static final long serialVersionUID = -2754639196749652512L;
-
-	private static final Log LOG = LogFactory.getLog(ExecuteAndWaitInterceptor.class);
-
-    public static final String KEY = "__execWait";
-    public static final String WAIT = "wait";
-    protected int delay;
-    protected int delaySleepInterval = 100; // default sleep 100 millis before checking if background process is done
-    protected boolean executeAfterValidationPass = false;
-    
-    private int threadPriority = Thread.NORM_PRIORITY;
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.interceptor.Interceptor#init()
-     */
-    public void init() {
-    }
-
-    /**
-     * Creates a new background process
-     * 
-     * @param name The process name
-     * @param actionInvocation The action invocation
-     * @param threadPriority The thread priority
-     * @return The new process
-     */
-    protected BackgroundProcess getNewBackgroundProcess(String name, ActionInvocation actionInvocation, int threadPriority) {
-        return new BackgroundProcess(name + "BackgroundThread", actionInvocation, threadPriority);
-    }
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.interceptor.MethodFilterInterceptor#doIntercept(com.opensymphony.xwork2.ActionInvocation)
-     */
-    protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
-        ActionProxy proxy = actionInvocation.getProxy();
-        String name = proxy.getActionName();
-        ActionContext context = actionInvocation.getInvocationContext();
-        Map session = context.getSession();
-
-        Boolean secondTime  = true;
-        if (executeAfterValidationPass) {
-            secondTime = (Boolean) context.get(KEY);
-            if (secondTime == null) {
-                context.put(KEY, true);
-                secondTime = false;
-            } else {
-                secondTime = true;
-            }
-        }
-
-        synchronized (session) {
-            BackgroundProcess bp = (BackgroundProcess) session.get(KEY + name);
-
-            if (secondTime && bp == null) {
-                bp = getNewBackgroundProcess(name, actionInvocation, threadPriority);
-                session.put(KEY + name, bp);
-                performInitialDelay(bp); // first time let some time pass before showing wait page
-                secondTime = false;
-            }
-
-            if (!secondTime && bp != null && !bp.isDone()) {
-                actionInvocation.getStack().push(bp.getAction());
-                Map results = proxy.getConfig().getResults();
-                if (!results.containsKey(WAIT)) {
-                    LOG.warn("ExecuteAndWait interceptor has detected that no result named 'wait' is available. " +
-                            "Defaulting to a plain built-in wait page. It is highly recommend you " +
-                            "provide an action-specific or global result named '" + WAIT +
-                            "'! This requires FreeMarker support and won't work if you don't have it installed");
-                    // no wait result? hmm -- let's try to do dynamically put it in for you!
-                    ResultConfig rc = new ResultConfig(WAIT, "org.apache.struts2.views.freemarker.FreemarkerResult",
-                            Collections.singletonMap("location", "/org/apache/struts2/interceptor/wait.ftl"));
-                    results.put(WAIT, rc);
-                }
-
-                return WAIT;
-            } else if (!secondTime && bp != null && bp.isDone()) {
-                session.remove(KEY + name);
-                actionInvocation.getStack().push(bp.getAction());
-
-                // if an exception occured during action execution, throw it here
-                if (bp.getException() != null) {
-                    throw bp.getException();
-                }
-
-                return bp.getResult();
-            } else {
-                // this is the first instance of the interceptor and there is no existing action
-                // already run in the background, so let's just let this pass through. We assume
-                // the action invocation will be run in the background on the subsequent pass through
-                // this interceptor
-                return actionInvocation.invoke();
-            }
-        }
-    }
-
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.interceptor.Interceptor#destroy()
-     */
-    public void destroy() {
-    }
-
-    /**
-     * Performs the initial delay.
-     * <p/>
-     * When this interceptor is executed for the first time this methods handles any provided initial delay.
-     * An initial delay is a time in miliseconds we let the server wait before we continue.
-     * <br/> During the wait this interceptor will wake every 100 millis to check if the background
-     * process is done premature, thus if the job for some reason doesn't take to long the wait
-     * page is not shown to the user.
-     *
-     * @param bp the background process
-     * @throws InterruptedException is thrown by Thread.sleep
-     */
-    protected void performInitialDelay(BackgroundProcess bp) throws InterruptedException {
-        if (delay <= 0 || delaySleepInterval <= 0) {
-            return;
-        }
-
-        int steps = delay / delaySleepInterval;
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Delaying for " + delay + " millis. (using " + steps + " steps)");
-        }
-        int step;
-        for (step = 0; step < steps && !bp.isDone(); step++) {
-            Thread.sleep(delaySleepInterval);
-        }
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Sleeping ended after " + step + " steps and the background process is " + (bp.isDone() ? " done" : " not done"));
-        }
-    }
-
-    /**
-     * Sets the thread priority of the background process.
-     *
-     * @param threadPriority the priority from <code>Thread.XXX</code>
-     */
-    public void setThreadPriority(int threadPriority) {
-        this.threadPriority = threadPriority;
-    }
-
-    /**
-     * Sets the initial delay in millis (msec).
-     *
-     * @param delay in millis. (0 for not used)
-     */
-    public void setDelay(int delay) {
-        this.delay = delay;
-    }
-
-    /**
-     * Sets the sleep interval in millis (msec) when performing the initial delay.
-     *
-     * @param delaySleepInterval in millis (0 for not used)
-     */
-    public void setDelaySleepInterval(int delaySleepInterval) {
-        this.delaySleepInterval = delaySleepInterval;
-    }
-
-    /**
-     * Whether to start the background process after the second pass (first being validation)
-     * or not
-     * 
-     * @param executeAfterValidationPass the executeAfterValidationPass to set
-     */
-    public void setExecuteAfterValidationPass(boolean executeAfterValidationPass) {
-        this.executeAfterValidationPass = executeAfterValidationPass;
-    }
-    
-    
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
deleted file mode 100644
index 11c2a4a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ValidationAware;
-import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * Interceptor that is based off of {@link MultiPartRequestWrapper}, which is automatically applied for any request that
- * includes a file. It adds the following parameters, where [File Name] is the name given to the file uploaded by the
- * HTML form:
- *
- * <ul>
- *
- * <li>[File Name] : File - the actual File</li>
- *
- * <li>[File Name]ContentType : String - the content type of the file</li>
- *
- * <li>[File Name]FileName : String - the actual name of the file uploaded (not the HTML name)</li>
- *
- * </ul>
- *
- * <p/> You can get access to these files by merely providing setters in your action that correspond to any of the three
- * patterns above, such as setDocument(File document), setDocumentContentType(String contentType), etc.
- * <br/>See the example code section.
- *
- * <p/> This interceptor will add several field errors, assuming that the action implements {@link ValidationAware}.
- * These error messages are based on several i18n values stored in struts-messages.properties, a default i18n file
- * processed for all i18n requests. You can override the text of these messages by providing text for the following
- * keys:
- *
- * <ul>
- *
- * <li>struts.messages.error.uploading - a general error that occurs when the file could not be uploaded</li>
- *
- * <li>struts.messages.error.file.too.large - occurs when the uploaded file is too large</li>
- *
- * <li>struts.messages.error.content.type.not.allowed - occurs when the uploaded file does not match the expected
- * content types specified</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: description -->
- *
- * <p/> <u>Interceptor parameters:</u>
- *
- * <!-- START SNIPPET: parameters -->
- *
- * <ul>
- *
- * <li>maximumSize (optional) - the maximum size (in bytes) that the interceptor will allow a file reference to be set
- * on the action. Note, this is <b>not</b> related to the various properties found in struts.properties.
- * Default to approximately 2MB.</li>
- *
- * <li>allowedTypes (optional) - a comma separated list of content types (ie: text/html) that the interceptor will allow
- * a file reference to be set on the action. If none is specified allow all types to be uploaded.</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: parameters -->
- *
- * <p/> <u>Extending the interceptor:</u>
- *
- * <p/>
- *
- * <!-- START SNIPPET: extending -->
- *
- * You can extend this interceptor and override the {@link #acceptFile} method to provide more control over which files
- * are supported and which are not.
- *
- * <!-- END SNIPPET: extending -->
- *
- * <p/> <u>Example code:</u>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;action name="doUpload" class="com.examples.UploadAction"&gt;
- *     &lt;interceptor-ref name="fileUpload"/&gt;
- *     &lt;interceptor-ref name="basicStack"/&gt;
- *     &lt;result name="success"&gt;good_result.ftl&lt;/result&gt;
- * &lt;/action&gt;
- * </pre>
- *
- * And then you need to set encoding <code>multipart/form-data</code> in the form where the user selects the file to upload.
- * <pre>
- *   &lt;a:form action="doUpload" method="post" enctype="multipart/form-data"&gt;
- *       &lt;a:file name="upload" label="File"/&gt;
- *       &lt;a:submit/&gt;
- *   &lt;/a:form&gt;
- * </pre>
- *
- * And then in your action code you'll have access to the File object if you provide setters according to the
- * naming convention documented in the start.
- *
- * <pre>
- *    public com.examples.UploadAction implemements Action {
- *       private File file;
- *       private String contentType;
- *       private String filename;
- *
- *       public void setUpload(File file) {
- *          this.file = file;
- *       }
- *
- *       public void setUploadContentType(String contentType) {
- *          this.contentType = contentType;
- *       }
- *
- *       public void setUploadFileName(String filename) {
- *          this.filename = filename;
- *       }
- *
- *       ...
- *  }
- * </pre>
- * <!-- END SNIPPET: example -->
- *
- */
-public class FileUploadInterceptor extends AbstractInterceptor {
-	
-	private static final long serialVersionUID = -4764627478894962478L;
-	
-	protected static final Log log = LogFactory.getLog(FileUploadInterceptor.class);
-    private static final String DEFAULT_DELIMITER = ",";
-    private static final String DEFAULT_MESSAGE = "no.message.found";
-
-    protected Long maximumSize;
-    protected String allowedTypes;
-    protected Set allowedTypesSet = Collections.EMPTY_SET;
-
-    /**
-     * Sets the allowed mimetypes
-     * 
-     * @param allowedTypes A comma-delimited list of types
-     */
-    public void setAllowedTypes(String allowedTypes) {
-        this.allowedTypes = allowedTypes;
-
-        // set the allowedTypes as a collection for easier access later
-        allowedTypesSet = getDelimitedValues(allowedTypes);
-    }
-
-    /**
-     * Sets the maximum size of an uploaded file
-     * 
-     * @param maximumSize The maximum size in bytes
-     */
-    public void setMaximumSize(Long maximumSize) {
-        this.maximumSize = maximumSize;
-    }
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.interceptor.Interceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
-     */
-    public String intercept(ActionInvocation invocation) throws Exception {
-        ActionContext ac = invocation.getInvocationContext();
-        HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);
-
-        if (!(request instanceof MultiPartRequestWrapper)) {
-            if (log.isDebugEnabled()) {
-                ActionProxy proxy = invocation.getProxy();
-                log.debug(getTextMessage("struts.messages.bypass.request", new Object[]{proxy.getNamespace(), proxy.getActionName()}, ActionContext.getContext().getLocale()));
-            }
-
-            return invocation.invoke();
-        }
-
-        final Object action = invocation.getAction();
-        ValidationAware validation = null;
-
-        if (action instanceof ValidationAware) {
-            validation = (ValidationAware) action;
-        }
-
-        MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;
-
-        if (multiWrapper.hasErrors()) {
-            for (Iterator errorIter = multiWrapper.getErrors().iterator(); errorIter.hasNext();) {
-                String error = (String) errorIter.next();
-
-                if (validation != null) {
-                    validation.addActionError(error);
-                }
-
-                log.error(error);
-            }
-        }
-
-        Map parameters = ac.getParameters();
-
-        // Bind allowed Files
-        Enumeration fileParameterNames = multiWrapper.getFileParameterNames();
-        while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
-            // get the value of this input tag
-            String inputName = (String) fileParameterNames.nextElement();
-
-            // get the content type
-            String[] contentType = multiWrapper.getContentTypes(inputName);
-
-            if (isNonEmpty(contentType)) {
-                // get the name of the file from the input tag
-                String[] fileName = multiWrapper.getFileNames(inputName);
-
-                if (isNonEmpty(fileName)) {
-                    // Get a File object for the uploaded File
-                    File[] files = multiWrapper.getFiles(inputName);
-                    if (files != null) {
-                        for (int index = 0; index < files.length; index++) {
-                            getTextMessage("struts.messages.current.file", new Object[]{inputName, contentType[index], fileName[index], files[index]}, ActionContext.getContext().getLocale());
-
-                            if (acceptFile(files[0], contentType[0], inputName, validation, ac.getLocale())) {
-                                parameters.put(inputName, files);
-                                parameters.put(inputName + "ContentType", contentType);
-                                parameters.put(inputName + "FileName", fileName);
-                            }
-                        }
-                    }
-                } else {
-                    log.error(getTextMessage("struts.messages.invalid.file", new Object[]{inputName}, ActionContext.getContext().getLocale()));
-                }
-            } else {
-                log.error(getTextMessage("struts.messages.invalid.content.type", new Object[]{inputName}, ActionContext.getContext().getLocale()));
-            }
-        }
-
-        // invoke action
-        String result = invocation.invoke();
-
-        // cleanup
-        fileParameterNames = multiWrapper.getFileParameterNames();
-        while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
-            String inputValue = (String) fileParameterNames.nextElement();
-            File[] file = multiWrapper.getFiles(inputValue);
-            for (int index = 0; index < file.length; index++) {
-                File currentFile = file[index];
-                log.info(getTextMessage("struts.messages.removing.file", new Object[]{inputValue, currentFile}, ActionContext.getContext().getLocale()));
-
-                if ((currentFile != null) && currentFile.isFile()) {
-                    currentFile.delete();
-                }
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Override for added functionality. Checks if the proposed file is acceptable based on contentType and size.
-     *
-     * @param file        - proposed upload file.
-     * @param contentType - contentType of the file.
-     * @param inputName   - inputName of the file.
-     * @param validation  - Non-null ValidationAware if the action implements ValidationAware, allowing for better
-     *                    logging.
-     * @param locale
-     * @return true if the proposed file is acceptable by contentType and size.
-     */
-    protected boolean acceptFile(File file, String contentType, String inputName, ValidationAware validation, Locale locale) {
-        boolean fileIsAcceptable = false;
-
-        // If it's null the upload failed
-        if (file == null) {
-            String errMsg = getTextMessage("struts.messages.error.uploading", new Object[]{inputName}, locale);
-            if (validation != null) {
-                validation.addFieldError(inputName, errMsg);
-            }
-
-            log.error(errMsg);
-        } else if (maximumSize != null && maximumSize.longValue() < file.length()) {
-            String errMsg = getTextMessage("struts.messages.error.file.too.large", new Object[]{inputName, file.getName(), "" + file.length()}, locale);
-            if (validation != null) {
-                validation.addFieldError(inputName, errMsg);
-            }
-
-            log.error(errMsg);
-        } else if ((! allowedTypesSet.isEmpty()) && (!containsItem(allowedTypesSet, contentType))) {
-            String errMsg = getTextMessage("struts.messages.error.content.type.not.allowed", new Object[]{inputName, file.getName(), contentType}, locale);
-            if (validation != null) {
-                validation.addFieldError(inputName, errMsg);
-            }
-
-            log.error(errMsg);
-        } else {
-            fileIsAcceptable = true;
-        }
-
-        return fileIsAcceptable;
-    }
-
-    /**
-     * @param itemCollection - Collection of string items (all lowercase).
-     * @param key            - Key to search for.
-     * @return true if itemCollection contains the key, false otherwise.
-     */
-    private static boolean containsItem(Collection itemCollection, String key) {
-        return itemCollection.contains(key.toLowerCase());
-    }
-
-    private static Set getDelimitedValues(String delimitedString) {
-        Set<String> delimitedValues = new HashSet<String>();
-        if (delimitedString != null) {
-            StringTokenizer stringTokenizer = new StringTokenizer(delimitedString, DEFAULT_DELIMITER);
-            while (stringTokenizer.hasMoreTokens()) {
-                String nextToken = stringTokenizer.nextToken().toLowerCase().trim();
-                if (nextToken.length() > 0) {
-                    delimitedValues.add(nextToken);
-                }
-            }
-        }
-        return delimitedValues;
-    }
-
-    private static boolean isNonEmpty(Object[] objArray) {
-        boolean result = false;
-        for (int index = 0; index < objArray.length && !result; index++) {
-            if (objArray[index] != null) {
-                result = true;
-            }
-        }
-        return result;
-    }
-
-    private String getTextMessage(String messageKey, Object[] args, Locale locale) {
-        if (args == null || args.length == 0) {
-            return LocalizedTextUtil.findText(this.getClass(), messageKey, locale);
-        } else {
-            return LocalizedTextUtil.findText(this.getClass(), messageKey, locale, DEFAULT_MESSAGE, args);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java
deleted file mode 100644
index 5fecf94..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ValidationAware;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-
-/**
- * <!-- START SNIPPET: description -->
- * 
- * An interceptor to store {@link ValidationAware} action's messages / errors and field errors into 
- * Http Session, such that it will be retrieveable at a later stage. This allows the action's message /
- * errors and field errors to be available longer that just the particular http request.
- * 
- * <p/>
- * 
- * In the 'STORE' mode, the interceptor will store the {@link ValidationAware} action's message / errors 
- * and field errors into Http session.
- * 
- * <p/>
- * 
- * In the 'RETRIEVE' mode, the interceptor will retrieve the stored action's message / errors  and field
- * errors and put them back into the {@link ValidationAware} action.
- * 
- * <p/>
- * 
- * The interceptor does nothing in the 'NONE' mode, which is the default.
- * 
- * <p/>
- * 
- * The operation mode could be switched using :- <p/>
- * 1] Setting the iterceptor parameter eg.
- * <pre>
- *   &lt;action name="submitApplication" ...&gt;
- *      &lt;interceptor-ref name="store"&gt;
- *         &lt;param name="operationMode"&gtl;STORE&lt;/param&gt;
- *      &lt;/interceptor-ref&gt;
- *      &lt;interceptor-ref name="defaultStack" /&gt;
- *      ....
- *   &lt;/action&gt;
- * </pre>
- * 
- * 2] Through request parameter (allowRequestParameterSwitch must be 'true' which is the default)
- * <pre>
- *   // the request will have the operation mode in 'STORE'
- *   http://localhost:8080/context/submitApplication.action?operationMode=STORE
- * </pre>
- * 
- * <!-- END SNIPPET: description -->
- * 
- * 
- * <!-- START SNIPPET: parameters -->
- * 
- * <ul>
- * 		<li>allowRequestParameterSwitch - To enable request parameter that could switch the operation mode 
- * 										  of this interceptor. </li>
- * 		<li>requestParameterSwitch - The request parameter that will indicate what mode this 
- * 									 interceptor is in. </li>
- * 		<li>operationMode - The operation mode this interceptor should be in 
- * 							(either 'STORE', 'RETRIEVE' or 'NONE'). 'NONE' being the default.</li>
- * </ul>
- * 
- * <!-- END SNIPPET: parameters -->
- * 
- * <p/>
- * 
- * <!-- START SNIPPET: extending -->
- * 
- * The following method could be overriden :-
- * <ul>
- * 	<li>getRequestOperationMode - get the operation mode of this interceptor based on the request parameters</li>
- *  <li>mergeCollection - merge two collections</li>
- *  <li>mergeMap - merge two map</li>
- * </ul>
- * 
- * <!-- END SNIPPET: extending -->
- * 
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;action name="submitApplication" ....&gt;
- *    &lt;interceptor-ref name="store"&gt;
- *    	&lt;param name="operationMode">STORE&lt;/param&gt;
- *    &lt;/interceptor-ref&gt;
- *    &lt;interceptor-ref name="defaultStack" /&gt;
- *    &lt;result name="input" type="redirect">applicationFailed.action&lt;/result&gt;
- *    &lt;result type="dispatcher"&gt;applicationSuccess.jsp&lt;/result&gt;
- * &lt;/action&gt;
- * 
- * &lt;action name="applicationFailed" ....&gt;
- *    &lt;interceptor-ref name="store"&gt;
- *       &lt;param name="operationMode"&gt;RETRIEVE&lt;/param&gt;
- *    &lt;/interceptor-ref&gt;
- *    &lt;result&gt;applicationFailed.jsp&lt;/result&gt;
- * &lt;/action&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- * 
- * <!-- START SNIPPET: exampleDescription -->
- * 
- * With the example above, 'submitApplication.action' will have the action messages / errors / field errors stored
- * in the Http Session. Later when needed, (in this case, when 'applicationFailed.action' is fired, it
- * will get the action messages / errors / field errors stored in the Http Session and put them back into 
- * the action. 
- * 
- * <!-- END SNIPPET: exampleDescription -->
- * 
- * @version $Date$ $Id$
- */
-public class MessageStoreInterceptor implements Interceptor {
-
-	private static final long serialVersionUID = 4491997514314242420L;
-	
-	private static final Log _log = LogFactory.getLog(MessageStoreInterceptor.class);
-	
-	
-	public static final String STORE_MODE = "STORE";
-	public static final String RETRIEVE_MODE = "RETRIEVE";
-	public static final String NONE = "NONE";
-	
-	private boolean allowRequestParameterSwitch = true;
-	private String requestParameterSwitch = "operationMode";
-	private String operationMode = NONE;
-	
-	public static String fieldErrorsSessionKey = "__MessageStoreInterceptor_FieldErrors_SessionKey";
-	public static String actionErrorsSessionKey = "__MessageStoreInterceptor_ActionErrors_SessionKey";
-	public static String actionMessagesSessionKey = "__MessageStoreInterceptor_ActionMessages_SessionKey";
-	
-	
-	
-	public void setAllowRequestParameterSwitch(boolean allowRequestParameterSwitch) {
-		this.allowRequestParameterSwitch = allowRequestParameterSwitch;
-	}
-	public boolean getAllowRequestParameterSwitch() {
-		return this.allowRequestParameterSwitch;
-	}
-	
-	
-	public void setRequestParameterSwitch(String requestParameterSwitch) {
-		this.requestParameterSwitch = requestParameterSwitch;
-	}
-	public String getRequestParameterSwitch() {
-		return this.requestParameterSwitch;
-	}
-	
-	
-	
-	public void setOperationMode(String operationMode) {
-		this.operationMode = operationMode;
-	}
-	public String getOperationModel() {
-		return this.operationMode;
-	}
-	
-
-	public void destroy() {
-	}
-
-	public void init() {
-	}
-
-	public String intercept(ActionInvocation invocation) throws Exception {
-		_log.debug("entering MessageStoreInterceptor ...");
-		
-		before(invocation);
-		String result = invocation.invoke();
-		after(invocation, result);
-		
-		_log.debug("exit executing MessageStoreInterceptor");
-		return result;
-	}
-	
-	/**
-	 * Handle the retrieving of field errors / action messages / field errors, which is
-	 * done before action invocation, and the <code>operationMode</code> is 'RETRIEVE'.
-	 * 
-	 * @param invocation
-	 * @throws Exception
-	 */
-	protected void before(ActionInvocation invocation) throws Exception {
-		String reqOperationMode = getRequestOperationMode(invocation);
-		
-		if (RETRIEVE_MODE.equalsIgnoreCase(reqOperationMode) || 
-				RETRIEVE_MODE.equalsIgnoreCase(operationMode)) {
-			
-			Object action = invocation.getAction();
-			if (action instanceof ValidationAware) {
-				// retrieve error / message from session
-				Map session = (Map) invocation.getInvocationContext().get(ActionContext.SESSION);
-				ValidationAware validationAwareAction = (ValidationAware) action;
-				
-				_log.debug("retrieve error / message from session to populate into action ["+action+"]");
-				
-				Collection actionErrors = (Collection) session.get(actionErrorsSessionKey);
-				Collection actionMessages = (Collection) session.get(actionMessagesSessionKey);
-				Map fieldErrors = (Map) session.get(fieldErrorsSessionKey);
-				
-				if (actionErrors != null && actionErrors.size() > 0) {
-					Collection mergedActionErrors = mergeCollection(validationAwareAction.getActionErrors(), actionErrors);
-					validationAwareAction.setActionErrors(mergedActionErrors);
-				}
-				
-				if (actionMessages != null && actionMessages.size() > 0) {
-					Collection mergedActionMessages = mergeCollection(validationAwareAction.getActionMessages(), actionMessages);
-					validationAwareAction.setActionMessages(mergedActionMessages);
-				}
-				
-				if (fieldErrors != null && fieldErrors.size() > 0) {
-					Map mergedFieldErrors = mergeMap(validationAwareAction.getFieldErrors(), fieldErrors);
-					validationAwareAction.setFieldErrors(mergedFieldErrors);
-				}
-				session.remove(actionErrorsSessionKey);
-				session.remove(actionMessagesSessionKey);
-				session.remove(fieldErrorsSessionKey);
-			}
-		}
-	}
-	
-	/**
-	 * Handle the storing of field errors / action messages / field errors, which is
-	 * done after action invocation, and the <code>operationMode</code> is in 'STORE'.
-	 * 
-	 * @param invocation
-	 * @param result
-	 * @throws Exception
-	 */
-	protected void after(ActionInvocation invocation, String result) throws Exception {
-		
-		String reqOperationMode = getRequestOperationMode(invocation);
-		if (STORE_MODE.equalsIgnoreCase(reqOperationMode) ||
-				STORE_MODE.equalsIgnoreCase(operationMode)) {
-			
-			Object action = invocation.getAction();
-			if (action instanceof ValidationAware) {
-				// store error / messages into session
-				Map session = (Map) invocation.getInvocationContext().get(ActionContext.SESSION);
-				
-				_log.debug("store action ["+action+"] error/messages into session ");
-				
-				ValidationAware validationAwareAction = (ValidationAware) action;
-				session.put(actionErrorsSessionKey, validationAwareAction.getActionErrors());
-				session.put(actionMessagesSessionKey, validationAwareAction.getActionMessages());
-				session.put(fieldErrorsSessionKey, validationAwareAction.getFieldErrors());
-			}
-			else {
-				_log.debug("Action ["+action+"] is not ValidationAware, no message / error that are storeable");
-			}
-		}
-	}
-	
-	
-	/**
-	 * Get the operationMode through request paramter, if <code>allowRequestParameterSwitch</code>
-	 * is 'true', else it simply returns 'NONE', meaning its neither in the 'STORE_MODE' nor
-	 * 'RETRIEVE_MODE'.
-	 * 
-	 * @return String
-	 */
-	protected String getRequestOperationMode(ActionInvocation invocation) {
-		String reqOperationMode = NONE;
-		if (allowRequestParameterSwitch) {
-			Map reqParams = (Map) invocation.getInvocationContext().get(ActionContext.PARAMETERS);
-			boolean containsParameter = reqParams.containsKey(requestParameterSwitch);
-			if (containsParameter) {
-				String[] reqParamsArr = (String[]) reqParams.get(requestParameterSwitch);
-				if (reqParamsArr != null && reqParamsArr.length > 0) {
-					reqOperationMode = reqParamsArr[0];
-				}
-			}
-		}
-		return reqOperationMode;
-	}
-	
-	/**
-	 * Merge <code>col1</code> and <code>col2</code> and return the composite 
-	 * <code>Collection</code>.
-	 * 
-	 * @param col1
-	 * @param col2
-	 * @return Collection
-	 */
-	protected Collection mergeCollection(Collection col1, Collection col2) {
-		Collection _col1 = (col1 == null ? new ArrayList() : col1);
-		Collection _col2 = (col2 == null ? new ArrayList() : col2);
-		_col1.addAll(_col2);
-		return _col1;
-	}
-	
-	/**
-	 * Merge <code>map1</code> and <code>map2</code> and return the composite
-	 * <code>Map</code>
-	 * 
-	 * @param map1
-	 * @param map2
-	 * @return Map
-	 */
-	protected Map mergeMap(Map map1, Map map2) {
-		Map _map1 = (map1 == null ? new LinkedHashMap() : map1);
-		Map _map2 = (map2 == null ? new LinkedHashMap() : map2);
-		_map1.putAll(_map2);
-		return _map1;
-	}
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/NoParameters.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/NoParameters.java
deleted file mode 100644
index 5fb3eb8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/NoParameters.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-
-/**
- * This marker interface should be implemented by actions that do not want any parameters set on
- * them automatically. This may be useful if one is using the action tag and want to supply
- * the parameters to the action manually using the param tag. It may also be useful if one for
- * security reasons wants to make sure that parameters cannot be set by malicious users.
- *
- */
-public interface NoParameters extends com.opensymphony.xwork2.interceptor.NoParameters {
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/ParameterAware.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/ParameterAware.java
deleted file mode 100644
index a1071c4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/ParameterAware.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.Map;
-
-
-/**
- * This interface gives actions an alternative way of receiving input parameters. The map will
- * contain all input parameters as name/value entries. Actions that need this should simply implement it. <p>
- * <p/>
- * One common use for this is to have the action propagate parameters to internally instantiated data
- * objects. <p>
- * <p/>
- * Note that all parameter values for a given name will be returned, so the type of the objects in
- * the map is <tt>java.lang.String[]</tt>.
- *
- */
-public interface ParameterAware {
-
-    /**
-     * Sets the  map of input parameters in the implementing class.
-     *
-     * @param parameters a Map of parameters (name/value Strings).
-     */
-    public void setParameters(Map parameters);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalAware.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalAware.java
deleted file mode 100644
index 891a860..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalAware.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-/**
- * Actions that want access to the Principal information from HttpServletRequest object
- * should implement this interface.
- *
- * <p>This interface is only relevant if the Action is used in a servlet environment.
- * By using this interface you will not become tied to servlet environment.</p>
- *
- */
-public interface PrincipalAware {
-    void setPrincipalProxy(PrincipalProxy principalProxy);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java
deleted file mode 100644
index e513071..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.security.Principal;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Proxy class used together with PrincipalAware interface. It allows to get indirect access to
- * HttpServletRequest Principal related methods.
- *
- */
-public class PrincipalProxy {
-    private HttpServletRequest request;
-
-    /**
-     * Constructs a proxy
-     * 
-     * @param request The underlying request
-     */
-    public PrincipalProxy(HttpServletRequest request) {
-        this.request = request;
-    }
-
-    /**
-     * True if the user is in the given role
-     * 
-     * @param role The role
-     * @return True if the user is in that role
-     */
-    public boolean isUserInRole(String role) {
-        return request.isUserInRole(role);
-    }
-
-    /**
-     * Gets the user principal
-     * 
-     * @return The principal
-     */
-    public Principal getUserPrincipal() {
-        return request.getUserPrincipal();
-    }
-
-    /**
-     * Gets the user id
-     * 
-     * @return The user id
-     */
-    public String getRemoteUser() {
-        return request.getRemoteUser();
-    }
-
-    /**
-     * Is the request using https?
-     * 
-     * @return True if using https
-     */
-    public boolean isRequestSecure() {
-        return request.isSecure();
-    }
-
-    /**
-     * Gets the request
-     * 
-     * @return The request
-     */
-    public HttpServletRequest getRequest() {
-        return request;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java
deleted file mode 100644
index 1e619cf..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * $Id: CreateSessionInterceptor.java 439747 2006-09-03 09:22:46Z mrdon $
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import org.apache.struts2.dispatcher.Dispatcher;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
-
-/**
- * Allows profiling to be enabled or disabled via request parameters, when
- * devMode is enabled.
- */
-public class ProfilingActivationInterceptor extends AbstractInterceptor {
-
-    private String profilingKey = "profiling";
-    
-    /**
-     * @return the profilingKey
-     */
-    public String getProfilingKey() {
-        return profilingKey;
-    }
-
-    /**
-     * @param profilingKey the profilingKey to set
-     */
-    public void setProfilingKey(String profilingKey) {
-        this.profilingKey = profilingKey;
-    }
-
-    @Override
-    public String intercept(ActionInvocation invocation) throws Exception {
-        if (Dispatcher.getInstance().isDevMode()) {
-            Object val = invocation.getInvocationContext().getParameters().get(profilingKey);
-            if (val != null) {
-                String sval = (val instanceof String ? (String)val : ((String[])val)[0]);
-                boolean enable = "yes".equalsIgnoreCase(sval) || "true".equalsIgnoreCase(sval);
-                UtilTimerStack.setActive(enable);
-                invocation.getInvocationContext().getParameters().remove(profilingKey);
-            }
-        }
-        return invocation.invoke();
-        
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/RequestAware.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/RequestAware.java
deleted file mode 100644
index 77b42d4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/RequestAware.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.Map;
-
-/**
- * Actions that want access to the current serlvet request attributes should implement this interface.<p />
- * 
- * This interface is only relevant if the Action is used in a servlet environment.<p/>
- * 
- * Note that using this interface makes the Action tied to a servlet environment, so it should be
- * avoided if possible since things like unit testing will become more difficult.
- */
-public interface RequestAware {
-
-	/**
-     * Sets the Map of request attributes in the implementing class.
-     *
-     * @param request a Map of HTTP request attribute name/value pairs.
-     */
-    public void setRequest(Map request);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java
deleted file mode 100644
index bcf63ab..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.IdentityHashMap;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.dispatcher.SessionMap;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-import com.opensymphony.xwork2.interceptor.PreResultListener;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * This is designed to solve a few simple issues related to wizard-like functionality in Struts. One of those issues is
- * that some applications have a application-wide parameters commonly used, such <i>pageLen</i> (used for records per
- * page). Rather than requiring that each action check if such parameters are supplied, this interceptor can look for
- * specified parameters and pull them out of the session.
- *
- * <p/> This works by setting listed properties at action start with values from session/application attributes keyed
- * after the action's class, the action's name, or any supplied key. After action is executed all the listed properties
- * are taken back and put in session or application context.
- *
- * <p/> To make sure that each execution of the action is consistent it makes use of session-level locking. This way it
- * guarantees that each action execution is atomic at the session level. It doesn't guarantee application level
- * consistency however there has yet to be enough reasons to do so. Application level consistency would also be a big
- * performance overkill.
- *
- * <p/> Note that this interceptor takes a snapshot of action properties just before result is presented (using a {@link
- * PreResultListener}), rather than after action is invoked. There is a reason for that: At this moment we know that
- * action's state is "complete" as it's values may depend on the rest of the stack and specifically - on the values of
- * nested interceptors.
- *
- * <!-- END SNIPPET: description -->
- *
- * <p/> <u>Interceptor parameters:</u>
- *
- * <!-- START SNIPPET: parameters -->
- *
- * <ul>
- *
- * <li>session - a list of action properties to be bound to session scope</li>
- *
- * <li>application - a list of action properties to be bound to application scope</li>
- *
- * <li>key - a session/application attribute key prefix, can contain following values:</li>
- *
- * <ul>
- *
- * <li>CLASS - that creates a unique key prefix based on action namespace and action class, it's a default value</li>
- *
- * <li>ACTION - creates a unique key prefix based on action namespace and action name</li>
- *
- * <li>any other value is taken literally as key prefix</li>
- *
- * </ul>
- *
- * <li>type - with one of the following</li>
- *
- * <ul>
- *
- * <li>start - means it's a start action of the wizard-like action sequence and all session scoped properties are reset
- * to their defaults</li>
- *
- * <li>end - means that session scoped properties are removed from session after action is run</li>
- *
- * <li>any other value or no value means that it's in-the-middle action that is set with session properties before it's
- * executed, and it's properties are put back to session after execution</li>
- *
- * </ul>
- *
- * <li>sessionReset - boolean value causing all session values to be reset to action's default values or application
- * scope values, note that it is similliar to type="start" and in fact it does the same, but in our team it is sometimes
- * semantically preferred. We use session scope in two patterns - sometimes there are wizzard-like action sequences that
- * have start and end, and sometimes we just want simply reset current session values.</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: parameters -->
- *
- * <p/> <u>Extending the interceptor:</u>
- *
- * <p/>
- *
- * <!-- START SNIPPET: extending -->
- *
- * There are no know extension points for this interceptor.
- *
- * <!-- END SNIPPET: extending -->
- *
- * <p/> <u>Example code:</u>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;!-- As the filter and orderBy parameters are common for all my browse-type actions,
- *      you can move control to the scope interceptor. In the session parameter you can list
- *      action properties that are going to be automatically managed over session. You can
- *      do the same for application-scoped variables--&gt;
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="basicStack"/&gt;
- *     &lt;interceptor-ref name="hibernate"/&gt;
- *     &lt;interceptor-ref name="scope"&gt;
- *         &lt;param name="session"&gt;filter,orderBy&lt;/param&gt;
- *         &lt;param name="autoCreateSession"&gt;true&lt;/param&gt;
- *     &lt;/interceptor-ref&gt;
- *     &lt;result name="success"&gt;good_result.ftl&lt;/result&gt;
- * &lt;/action&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- */
-public class ScopeInterceptor extends AbstractInterceptor implements PreResultListener {
-
-	private static final long serialVersionUID = 9120762699600054395L;
-
-	private static final Log LOG = LogFactory.getLog(ScopeInterceptor.class);
-
-    private String[] application = null;
-    private String[] session = null;
-    private String key;
-    private String type = null;
-    private boolean autoCreateSession = true;
-    private String sessionReset = "session.reset";
-    private boolean reset = false;
-
-    /**
-     * Sets a list of application scoped properties
-     * 
-     * @param s A comma-delimited list
-     */
-    public void setApplication(String s) {
-        if (s != null) {
-            application = s.split(" *, *");
-        }
-    }
-
-    /**
-     * Sets a list of session scoped properties
-     * 
-     * @param s A comma-delimited list
-     */
-    public void setSession(String s) {
-        if (s != null) {
-            session = s.split(" *, *");
-        }
-    }
-
-    /**
-     * Sets if the session should be automatically created
-     * 
-     * @param value True if it should be created
-     */
-    public void setAutoCreateSession(String value) {
-        if (value != null && value.length() > 0) {
-            this.autoCreateSession = new Boolean(value).booleanValue();
-        }
-    }
-
-    private String getKey(ActionInvocation invocation) {
-        ActionProxy proxy = invocation.getProxy();
-        if (key == null || "CLASS".equals(key)) {
-            return "struts.ScopeInterceptor:" + proxy.getAction().getClass();
-        } else if ("ACTION".equals(key)) {
-            return "struts.ScopeInterceptor:" + proxy.getNamespace() + ":" + proxy.getActionName();
-        }
-        return key;
-    }
-
-    /**
-     * The constructor
-     */
-    public ScopeInterceptor() {
-        super();
-    }
-
-
-    private static final Object NULL = new Object() {
-        public String toString() {
-            return "NULL";
-        }
-    };
-
-    private static final Object nullConvert(Object o) {
-        if (o == null) {
-            return NULL;
-        }
-
-        if (o == NULL) {
-            return null;
-        }
-
-        return o;
-    }
-
-
-    private static Map locks = new IdentityHashMap();
-
-    static final void lock(Object o, ActionInvocation invocation) throws Exception {
-        synchronized (o) {
-            int count = 3;
-            Object previous = null;
-            while ((previous = locks.get(o)) != null) {
-                if (previous == invocation) {
-                    return;
-                }
-                if (count-- <= 0) {
-                    locks.remove(o);
-                    o.notify();
-
-                    throw new StrutsException("Deadlock in session lock");
-                }
-                o.wait(10000);
-            }
-            ;
-            locks.put(o, invocation);
-        }
-    }
-
-    static final void unlock(Object o) {
-        synchronized (o) {
-            locks.remove(o);
-            o.notify();
-        }
-    }
-
-    protected void after(ActionInvocation invocation, String result) throws Exception {
-        Map ses = ActionContext.getContext().getSession();
-        if ( ses != null) {
-            unlock(ses);
-        }
-    }
-
-
-    protected void before(ActionInvocation invocation) throws Exception {
-        invocation.addPreResultListener(this);
-        Map ses = ActionContext.getContext().getSession();
-        if (ses == null && autoCreateSession) {
-            ses = new SessionMap(ServletActionContext.getRequest());
-            ActionContext.getContext().setSession(ses);
-        }
-
-        if ( ses != null) {
-            lock(ses, invocation);
-        }
-
-        String key = getKey(invocation);
-        Map app = ActionContext.getContext().getApplication();
-        final ValueStack stack = ActionContext.getContext().getValueStack();
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("scope interceptor before");
-        }
-
-        if (application != null)
-            for (int i = 0; i < application.length; i++) {
-                String string = application[i];
-                Object attribute = app.get(key + string);
-                if (attribute != null) {
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("application scoped variable set " + string + " = " + String.valueOf(attribute));
-                    }
-
-                    stack.setValue(string, nullConvert(attribute));
-                }
-            }
-
-        if (ActionContext.getContext().getParameters().get(sessionReset) != null) {
-            return;
-        }
-
-        if (reset) {
-            return;
-        }
-
-        if (ses == null) {
-            LOG.debug("No HttpSession created... Cannot set session scoped variables");
-            return;
-        }
-
-        if (session != null && (!"start".equals(type))) {
-            for (int i = 0; i < session.length; i++) {
-                String string = session[i];
-                Object attribute = ses.get(key + string);
-                if (attribute != null) {
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("session scoped variable set " + string + " = " + String.valueOf(attribute));
-                    }
-                    stack.setValue(string, nullConvert(attribute));
-                }
-            }
-        }
-    }
-
-    public void setKey(String key) {
-        this.key = key;
-    }
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.interceptor.PreResultListener#beforeResult(com.opensymphony.xwork2.ActionInvocation, java.lang.String)
-     */
-    public void beforeResult(ActionInvocation invocation, String resultCode) {
-        String key = getKey(invocation);
-        Map app = ActionContext.getContext().getApplication();
-        final ValueStack stack = ActionContext.getContext().getValueStack();
-
-        if (application != null)
-            for (int i = 0; i < application.length; i++) {
-                String string = application[i];
-                Object value = stack.findValue(string);
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("application scoped variable saved " + string + " = " + String.valueOf(value));
-                }
-
-                //if( value != null)
-                app.put(key + string, nullConvert(value));
-            }
-
-        boolean ends = "end".equals(type);
-
-        Map ses = ActionContext.getContext().getSession();
-        if (ses != null) {
-
-            if (session != null) {
-                for (int i = 0; i < session.length; i++) {
-                    String string = session[i];
-                    if (ends) {
-                        ses.remove(key + string);
-                    } else {
-                        Object value = stack.findValue(string);
-
-                        if (LOG.isDebugEnabled()) {
-                            LOG.debug("session scoped variable saved " + string + " = " + String.valueOf(value));
-                        }
-
-                        // Null value should be scoped too
-                        //if( value != null)
-                        ses.put(key + string, nullConvert(value));
-                    }
-                }
-            }
-            unlock(ses);
-        } else {
-            LOG.debug("No HttpSession created... Cannot save session scoped variables.");
-        }
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("scope interceptor after (before result)");
-        }
-    }
-
-    /**
-     * @return The type of scope operation, "start" or "end"
-     */      
-    public String getType() {
-        return type;
-    }
-
-    /**
-     * Sets the type of scope operation
-     * 
-     * @param type Either "start" or "end"
-     */
-    public void setType(String type) {
-        type = type.toLowerCase();
-        if ("start".equals(type) || "end".equals(type)) {
-            this.type = type;
-        } else {
-            throw new IllegalArgumentException("Only start or end are allowed arguments for type");
-        }
-    }
-
-    /**
-     * @return Gets the session reset parameter name
-     */
-    public String getSessionReset() {
-        return sessionReset;
-    }
-
-    /**
-     * @param sessionReset The session reset parameter name
-     */
-    public void setSessionReset(String sessionReset) {
-        this.sessionReset = sessionReset;
-    }
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.interceptor.Interceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
-     */
-    public String intercept(ActionInvocation invocation) throws Exception {
-        String result = null;
-        Map ses = ActionContext.getContext().getSession();
-        before(invocation);
-        try {
-            result = invocation.invoke();
-            after(invocation, result);
-        } finally {
-            if (ses != null) {
-                unlock(ses);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * @return True if the scope is reset
-     */
-    public boolean isReset() {
-        return reset;
-    }
-
-    /**
-     * @param reset True if the scope should be reset
-     */
-    public void setReset(boolean reset) {
-        this.reset = reset;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java
deleted file mode 100644
index 96b1039..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.util.ServletContextAware;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * An interceptor which sets action properties based on the interfaces an action implements. For example, if the action
- * implements {@link ParameterAware} then the action context's parameter map will be set on it.
- *
- * <p/> This interceptor is designed to set all properties an action needs if it's aware of servlet parameters, the
- * servlet context, the session, etc. Interfaces that it supports are:
- *
- * <ul>
- *
- * <li>{@link ServletContextAware}</li>
- *
- * <li>{@link ServletRequestAware}</li>
- *
- * <li>{@link ServletResponseAware}</li>
- *
- * <li>{@link ParameterAware}</li>
- * 
- * <li>{@link RequestAware}</li>
- *
- * <li>{@link SessionAware}</li>
- *
- * <li>{@link ApplicationAware}</li>
- *
- * <li>{@link PrincipalAware}</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: description -->
- *
- * <p/> <u>Interceptor parameters:</u>
- *
- * <!-- START SNIPPET: parameters -->
- *
- * <ul>
- *
- * <li>None</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: parameters -->
- *
- * <p/> <u>Extending the interceptor:</u>
- *
- * <p/>
- *
- * <!-- START SNIPPET: extending -->
- *
- * There are no known extension points for this interceptor.
- *
- * <!-- END SNIPPET: extending -->
- *
- * <p/> <u>Example code:</u>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="servlet-config"/&gt;
- *     &lt;interceptor-ref name="basicStack"/&gt;
- *     &lt;result name="success"&gt;good_result.ftl&lt;/result&gt;
- * &lt;/action&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @see ServletContextAware
- * @see ServletRequestAware
- * @see ServletResponseAware
- * @see ParameterAware
- * @see SessionAware
- * @see ApplicationAware
- * @see PrincipalAware
- */
-public class ServletConfigInterceptor extends AbstractInterceptor implements StrutsStatics {
-	
-	private static final long serialVersionUID = 605261777858676638L;
-
-    /**
-     * Sets action properties based on the interfaces an action implements. Things like application properties,
-     * parameters, session attributes, etc are set based on the implementing interface.
-     *
-     * @param invocation an encapsulation of the action execution state.
-     * @throws Exception if an error occurs when setting action properties.
-     */
-    public String intercept(ActionInvocation invocation) throws Exception {
-        final Object action = invocation.getAction();
-        final ActionContext context = invocation.getInvocationContext();
-
-        if (action instanceof ServletRequestAware) {
-            HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
-            ((ServletRequestAware) action).setServletRequest(request);
-        }
-
-        if (action instanceof ServletResponseAware) {
-            HttpServletResponse response = (HttpServletResponse) context.get(HTTP_RESPONSE);
-            ((ServletResponseAware) action).setServletResponse(response);
-        }
-
-        if (action instanceof ParameterAware) {
-            ((ParameterAware) action).setParameters(context.getParameters());
-        }
-        
-        if (action instanceof RequestAware) {
-        	((RequestAware) action).setRequest((Map) context.get("request"));
-        }
-
-        if (action instanceof SessionAware) {
-            ((SessionAware) action).setSession(context.getSession());
-        }
-
-        if (action instanceof ApplicationAware) {
-            ((ApplicationAware) action).setApplication(context.getApplication());
-        }
-
-        if (action instanceof PrincipalAware) {
-            HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
-            ((PrincipalAware) action).setPrincipalProxy(new PrincipalProxy(request));
-        }
-        if (action instanceof ServletContextAware) {
-            ServletContext servletContext = (ServletContext) context.get(SERVLET_CONTEXT);
-            ((ServletContextAware) action).setServletContext(servletContext);
-        }
-        return invocation.invoke();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletRequestAware.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletRequestAware.java
deleted file mode 100644
index d372a70..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletRequestAware.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import javax.servlet.http.HttpServletRequest;
-
-
-/**
- * All Actions that want to have access to the servlet request object must implement this interface.<p>
- * <p/>
- * This interface is only relevant if the Action is used in a servlet environment. <p>
- * <p/>
- * Note that using this interface makes the Action tied to a servlet environment, so it should be
- * avoided if possible since things like unit testing will become more difficult.
- *
- */
-public interface ServletRequestAware {
-
-    /**
-     * Sets the HTTP request object in implementing classes.
-     *
-     * @param request the HTTP request.
-     */
-    public void setServletRequest(HttpServletRequest request);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletResponseAware.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletResponseAware.java
deleted file mode 100644
index 5fef895..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/ServletResponseAware.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import javax.servlet.http.HttpServletResponse;
-
-
-/**
- * All Actions that want to have access to the servlet response object must implement this interface.<p>
- * <p/>
- * This interface is only relevant if the Action is used in a servlet environment.<p>
- * <p/>
- * Note that using this interface makes the Action tied to a servlet environment, so it should be
- * avoided if possible since things like unit testing will become more difficult.
- *
- */
-public interface ServletResponseAware {
-
-    /**
-     * Sets the HTTP response object in implementing classes.
-     *
-     * @param response the HTTP response.
-     */
-    public void setServletResponse(HttpServletResponse response);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/SessionAware.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/SessionAware.java
deleted file mode 100644
index f21b999..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/SessionAware.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.Map;
-
-
-/**
- * Actions that want access to the user's HTTP session should implement this interface.<p>
- * <p/>
- * This interface is only relevant if the Action is used in a servlet environment.<p>
- * <p/>
- * Note that using this interface makes the Action tied to a servlet environment, so it should be
- * avoided if possible since things like unit testing will become more difficult.
- *
- */
-public interface SessionAware {
-
-    /**
-     * Sets the Map of session attributes in the implementing class.
-     *
-     * @param session a Map of HTTP session attribute name/value pairs.
-     */
-    public void setSession(Map session);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptor.java
deleted file mode 100644
index 9938900..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptor.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor;
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * This interceptor extends {@link ConversionErrorInterceptor} but only adds conversion errors from the ActionContext to
- * the field errors of the action if the field value is not null, "", or {""} (a size 1 String array with only an empty
- * String). See {@link ConversionErrorInterceptor} for more information, as well as the Type Conversion documentation.
- *
- * <!-- END SNIPPET: description -->
- *
- * <p/> <u>Interceptor parameters:</u>
- *
- * <!-- START SNIPPET: parameters -->
- *
- * <ul>
- *
- * <li>None</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: parameters -->
- *
- * <p/> <u>Extending the interceptor:</u>
- *
- * <p/>
- *
- * <!-- START SNIPPET: extending -->
- *
- * There are no known extension points for this interceptor.
- *
- * <!-- END SNIPPET: extending -->
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="params"/&gt;
- *     &lt;interceptor-ref name="conversionError"/&gt;
- *     &lt;result name="success"&gt;good_result.ftl&lt;/result&gt;
- * &lt;/action&gt;
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @see com.opensymphony.xwork2.ActionContext#getConversionErrors()
- * @see ConversionErrorInterceptor
- */
-public class StrutsConversionErrorInterceptor extends ConversionErrorInterceptor {
-	
-	private static final long serialVersionUID = 2759744840082921602L;
-
-	protected Object getOverrideExpr(ActionInvocation invocation, Object value) {
-        ValueStack stack = invocation.getStack();
-
-        try {
-            stack.push(value);
-
-            return "'" + stack.findValue("top", String.class) + "'";
-        } finally {
-            stack.pop();
-        }
-    }
-
-    /**
-     * Returns <tt>false</tt> if the value is null, "", or {""} (array of size 1 with a blank element). Returns
-     * <tt>true</tt> otherwise.
-     *
-     * @param propertyName the name of the property to check.
-     * @param value        the value to error check.
-     * @return <tt>false</tt>  if the value is null, "", or {""}, <tt>true</tt> otherwise.
-     */
-    protected boolean shouldAddError(String propertyName, Object value) {
-        if (value == null) {
-            return false;
-        }
-
-        if ("".equals(value)) {
-            return false;
-        }
-
-        if (value instanceof String[]) {
-            String[] array = (String[]) value;
-
-            if (array.length == 0) {
-                return false;
-            }
-
-            if (array.length > 1) {
-                return true;
-            }
-
-            String str = array[0];
-
-            if ("".equals(str)) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java
deleted file mode 100644
index 515c083..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.Map;
-
-import org.apache.struts2.util.TokenHelper;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ValidationAware;
-import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * Ensures that only one request per token is processed. This interceptor can make sure that back buttons and double
- * clicks don't cause un-intended side affects. For example, you can use this to prevent careless users who might double
- * click on a "checkout" button at an online store. This interceptor uses a fairly primitive technique for when an
- * invalid token is found: it returns the result <b>invalid.token</b>, which can be mapped in your action configuration.
- * A more complex implementation, {@link TokenSessionStoreInterceptor}, can provide much better logic for when invalid
- * tokens are found.
- * 
- * <p/>
- *
- * <b>Note:</b> To set a token in your form, you should use the <b>token tag</b>. This tag is required and must be used
- * in the forms that submit to actions protected by this interceptor. Any request that does not provide a token (using
- * the token tag) will be processed as a request with an invalid token.
- * 
- * <p/>
- * 
- * <b>Internationalization Note:</b> The following key could be used to internationalized the action errors generated
- * by this token interceptor
- * 
- * <ul>
- *    <li>struts.messages.invalid.token</li>
- * </ul>
- * 
- * <p/>
- * 
- * <b>NOTE:</b> As this method extends off MethodFilterInterceptor, it is capable of
- * deciding if it is applicable only to selective methods in the action class. See
- * <code>MethodFilterInterceptor</code> for more info.
- *
- * <!-- END SNIPPET: description -->
- *
- * <p/> <u>Interceptor parameters:</u>
- *
- * <!-- START SNIPPET: parameters -->
- *
- * <ul>
- *
- * <li>None</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: parameters -->
- *
- * <p/> <u>Extending the interceptor:</u>
- *
- * <p/>
- *
- * <!-- START SNIPPET: extending -->
- *
- * While not very common for users to extend, this interceptor is extended by the {@link TokenSessionStoreInterceptor}.
- * The {@link #handleInvalidToken}  and {@link #handleValidToken} methods are protected and available for more
- * interesting logic, such as done with the token session interceptor.
- *
- * <!-- END SNIPPET: extending -->
- *
- * <p/> <u>Example code:</u>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="token"/&gt;
- *     &lt;interceptor-ref name="basicStack"/&gt;
- *     &lt;result name="success"&gt;good_result.ftl&lt;/result&gt;
- * &lt;/action&gt;
- * 
- * &lt;-- In this case, myMethod of the action class will not 
- *        get checked for invalidity of token --&gt;
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="token"&gt;
- *     	  &lt;param name="excludeMethods"&gt;myMethod&lt;/param&gt;
- *     &lt;/interceptor-ref name="token"/&gt;
- *     &lt;interceptor-ref name="basicStack"/&gt;
- *     &lt;result name="success"&gt;good_result.ftl&lt;/result&gt;
- * &lt;/action&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- * @see TokenSessionStoreInterceptor
- * @see TokenHelper
- */
-public class TokenInterceptor extends MethodFilterInterceptor {
-	
-	private static final long serialVersionUID = -6680894220590585506L;
-	
-	public static final String INVALID_TOKEN_CODE = "invalid.token";
-
-    /**
-     * @see com.opensymphony.xwork2.interceptor.MethodFilterInterceptor#doIntercept(com.opensymphony.xwork2.ActionInvocation)
-     */
-    protected String doIntercept(ActionInvocation invocation) throws Exception {
-        if (log.isDebugEnabled()) {
-            log.debug("Intercepting invocation to check for valid transaction token.");
-        }
-
-        Map session = ActionContext.getContext().getSession();
-
-        synchronized (session) {
-            if (!TokenHelper.validToken()) {
-                return handleInvalidToken(invocation);
-            }
-
-            return handleValidToken(invocation);
-        }
-    }
-
-    /**
-     * Determines what to do if an invalida token is provided. If the action implements {@link ValidationAware}
-     *
-     * @param invocation the action invocation where the invalid token failed
-     * @return the return code to indicate should be processed
-     * @throws Exception when any unexpected error occurs.
-     */
-    protected String handleInvalidToken(ActionInvocation invocation) throws Exception {
-        Object action = invocation.getAction();
-        String errorMessage = LocalizedTextUtil.findText(this.getClass(), "struts.messages.invalid.token",
-                invocation.getInvocationContext().getLocale(),
-                "The form has already been processed or no token was supplied, please try again.", new Object[0]);
-
-        if (action instanceof ValidationAware) {
-            ((ValidationAware) action).addActionError(errorMessage);
-        } else {
-            log.warn(errorMessage);
-        }
-
-        return INVALID_TOKEN_CODE;
-    }
-
-    /**
-     * Called when a valid token is found. This method invokes the action by can be changed to do something more
-     * interesting.
-     *
-     * @param invocation the action invocation
-     * @throws Exception when any unexpected error occurs.
-     */
-    protected String handleValidToken(ActionInvocation invocation) throws Exception {
-        return invocation.invoke();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java
deleted file mode 100644
index faedeeb..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.util.InvocationSessionStore;
-import org.apache.struts2.util.TokenHelper;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * This interceptor builds off of the {@link TokenInterceptor}, providing advanced logic for handling invalid tokens.
- * Unlike the normal token interceptor, this interceptor will attempt to provide intelligent fail-over in the event of
- * multiple requests using the same session. That is, it will block subsequent requests until the first request is
- * complete, and then instead of returning the <i>invalid.token</i> code, it will attempt to display the same response
- * that the original, valid action invocation would have displayed if no multiple requests were submitted in the first
- * place.
- * 
- * <p/>
- * 
- * <b>NOTE:</b> As this method extends off MethodFilterInterceptor, it is capable of
- * deciding if it is applicable only to selective methods in the action class. See
- * <code>MethodFilterInterceptor</code> for more info.
- *
- * <!-- END SNIPPET: description -->
- *
- * <p/> <u>Interceptor parameters:</u>
- *
- * <!-- START SNIPPET: parameters -->
- *
- * <ul>
- *
- * <li>None</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: parameters -->
- *
- * <p/> <u>Extending the interceptor:</u>
- *
- * <p/>
- *
- * <!-- START SNIPPET: extending -->
- *
- * There are no known extension points for this interceptor.
- *
- * <!-- END SNIPPET: extending -->
- *
- * <p/> <u>Example code:</u>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="token-session/&gt;
- *     &lt;interceptor-ref name="basicStack"/&gt;
- *     &lt;result name="success"&gt;good_result.ftl&lt;/result&gt;
- * &lt;/action&gt;
- * 
- * &lt;-- In this case, myMethod of the action class will not 
- *        get checked for invalidity of token --&gt;
- * &lt;action name="someAction" class="com.examples.SomeAction"&gt;
- *     &lt;interceptor-ref name="token-session&gt;
- *         &lt;param name="excludeMethods"&gt;myMethod&lt;/param&gt;
- *     &lt;/interceptor-ref name="token-session&gt;
- *     &lt;interceptor-ref name="basicStack"/&gt;
- *     &lt;result name="success"&gt;good_result.ftl&lt;/result&gt;
- * &lt;/action&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- */
-public class TokenSessionStoreInterceptor extends TokenInterceptor {
-	
-	private static final long serialVersionUID = -9032347965469098195L;
-
-	/* (non-Javadoc)
-	 * @see org.apache.struts2.interceptor.TokenInterceptor#handleInvalidToken(com.opensymphony.xwork2.ActionInvocation)
-	 */
-	protected String handleInvalidToken(ActionInvocation invocation) throws Exception {
-        ActionContext ac = invocation.getInvocationContext();
-
-        HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);
-        String tokenName = TokenHelper.getTokenName();
-        String token = TokenHelper.getToken(tokenName);
-
-        Map params = ac.getParameters();
-        params.remove(tokenName);
-        params.remove(TokenHelper.TOKEN_NAME_FIELD);
-
-        if ((tokenName != null) && (token != null)) {
-            ActionInvocation savedInvocation = InvocationSessionStore.loadInvocation(tokenName, token);
-
-            if (savedInvocation != null) {
-                // set the valuestack to the request scope
-                ValueStack stack = savedInvocation.getStack();
-                request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
-
-                Result result = savedInvocation.getResult();
-
-                if ((result != null) && (savedInvocation.getProxy().getExecuteResult())) {
-                    result.execute(savedInvocation);
-                }
-
-                // turn off execution of this invocations result
-                invocation.getProxy().setExecuteResult(false);
-
-                return savedInvocation.getResultCode();
-            }
-        }
-
-        return INVALID_TOKEN_CODE;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.interceptor.TokenInterceptor#handleValidToken(com.opensymphony.xwork2.ActionInvocation)
-     */
-    protected String handleValidToken(ActionInvocation invocation) throws Exception {
-        // we know the token name and token must be there
-        String key = TokenHelper.getTokenName();
-        String token = TokenHelper.getToken(key);
-        InvocationSessionStore.storeInvocation(key, token, invocation);
-
-        return invocation.invoke();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java
deleted file mode 100644
index 6653519..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor.debugging;
-
-import java.beans.BeanInfo;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.Array;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.views.freemarker.FreemarkerResult;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-import com.opensymphony.xwork2.interceptor.PreResultListener;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * Provides several different debugging screens to provide insight into the
- * data behind the page. The value of the 'debug' request parameter determines
- * the screen:
- * <ul>
- * <li> <code>xml</code> - Dumps the parameters, context, session, and value
- * stack as an XML document.</li>
- * <li> <code>console</code> - Shows a popup 'OGNL Console' that allows the
- * user to test OGNL expressions against the value stack. The XML data from
- * the 'xml' mode is inserted at the top of the page.</li>
- * <li> <code>command</code> - Tests an OGNL expression and returns the
- * string result. Only used by the OGNL console.</li>
- * </ul>
- * <p/>
- * <p/>
- * This interceptor only is activated when devMode is enabled in
- * struts.properties. The 'debug' parameter is removed from the parameter list
- * before the action is executed. All operations occur before the natural
- * Result has a chance to execute. </p>
- */
-public class DebuggingInterceptor implements Interceptor {
-
-    private static final long serialVersionUID = -3097324155953078783L;
-
-    private final static Log log = LogFactory.getLog(DebuggingInterceptor.class);
-
-    private String[] ignorePrefixes = new String[]{"org.apache.struts.",
-            "com.opensymphony.xwork2.", "xwork."};
-    private String[] _ignoreKeys = new String[]{"application", "session",
-            "parameters", "request"};
-    private HashSet<String> ignoreKeys = new HashSet<String>(Arrays.asList(_ignoreKeys));
-
-    private final static String XML_MODE = "xml";
-    private final static String CONSOLE_MODE = "console";
-    private final static String COMMAND_MODE = "command";
-
-    private final static String SESSION_KEY = "org.apache.struts2.interceptor.debugging.VALUE_STACK";
-
-    private final static String DEBUG_PARAM = "debug";
-    private final static String EXPRESSION_PARAM = "expression";
-    
-    private boolean enableXmlWithConsole = false;
-
-
-    /**
-     * Unused.
-     */
-    public void init() {
-    }
-
-
-    /**
-     * Unused.
-     */
-    public void destroy() {
-    }
-
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see com.opensymphony.xwork2.interceptor.Interceptor#invoke(com.opensymphony.xwork2.ActionInvocation)
-     */
-    public String intercept(ActionInvocation inv) throws Exception {
-
-        Boolean devMode = (Boolean) ActionContext.getContext().get(
-                ActionContext.DEV_MODE);
-        boolean cont = true;
-        if (devMode) {
-            final ActionContext ctx = ActionContext.getContext();
-            String type = getParameter(DEBUG_PARAM);
-            ctx.getParameters().remove(DEBUG_PARAM);
-            if (XML_MODE.equals(type)) {
-                inv.addPreResultListener(
-                        new PreResultListener() {
-                            public void beforeResult(ActionInvocation inv, String result) {
-                                printContext();
-                            }
-                        });
-            } else if (CONSOLE_MODE.equals(type)) {
-                inv.addPreResultListener(
-                        new PreResultListener() {
-                            public void beforeResult(ActionInvocation inv, String actionResult) {
-                                String xml = "";
-                                if (enableXmlWithConsole) {
-                                    StringWriter writer = new StringWriter();
-                                    printContext(new PrettyPrintWriter(writer));
-                                    xml = writer.toString();
-                                    xml = xml.replaceAll("&", "&amp;");
-                                    xml = xml.replaceAll(">", "&gt;");
-                                    xml = xml.replaceAll("<", "&lt;");
-                                }
-                                ActionContext.getContext().put("debugXML", xml);
-
-                                FreemarkerResult result = new FreemarkerResult();
-                                result.setContentType("text/html");
-                                result.setLocation("/org/apache/struts2/interceptor/debugging/console.ftl");
-                                result.setParse(false);
-                                try {
-                                    result.execute(inv);
-                                } catch (Exception ex) {
-                                    log.error("Unable to create debugging console", ex);
-                                }
-
-                            }
-                        });
-            } else if (COMMAND_MODE.equals(type)) {
-                ValueStack stack = (ValueStack) ctx.getSession().get(SESSION_KEY);
-                String cmd = getParameter(EXPRESSION_PARAM);
-
-                HttpServletResponse res = ServletActionContext.getResponse();
-                res.setContentType("text/plain");
-
-                try {
-                    PrintWriter writer =
-                            ServletActionContext.getResponse().getWriter();
-                    writer.print(stack.findValue(cmd));
-                    writer.close();
-                } catch (IOException ex) {
-                    ex.printStackTrace();
-                }
-                cont = false;
-            }
-        }
-        if (cont) {
-            try {
-                return inv.invoke();
-            } finally {
-                if (devMode) {
-                    final ActionContext ctx = ActionContext.getContext();
-                    ctx.getSession().put(SESSION_KEY, ctx.get(ActionContext.VALUE_STACK));
-                }
-            }
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     * Gets a single string from the request parameters
-     *
-     * @param key The key
-     * @return The parameter value
-     */
-    private String getParameter(String key) {
-        String[] arr = (String[]) ActionContext.getContext().getParameters().get(key);
-        if (arr != null && arr.length > 0) {
-            return arr[0];
-        }
-        return null;
-    }
-
-
-    /**
-     * Prints the current context to the response in XML format.
-     */
-    protected void printContext() {
-        HttpServletResponse res = ServletActionContext.getResponse();
-        res.setContentType("text/xml");
-
-        try {
-            PrettyPrintWriter writer = new PrettyPrintWriter(
-                    ServletActionContext.getResponse().getWriter());
-            printContext(writer);
-            writer.close();
-        } catch (IOException ex) {
-            ex.printStackTrace();
-        }
-    }
-
-
-    /**
-     * Prints the current request to the existing writer.
-     *
-     * @param writer The XML writer
-     */
-    protected void printContext(PrettyPrintWriter writer) {
-        ActionContext ctx = ActionContext.getContext();
-        writer.startNode(DEBUG_PARAM);
-        serializeIt(ctx.getParameters(), "parameters", writer,
-                new ArrayList<Object>());
-        writer.startNode("context");
-        String key;
-        Map ctxMap = ctx.getContextMap();
-        for (Object o : ctxMap.keySet()) {
-            key = o.toString();
-            boolean print = !ignoreKeys.contains(key);
-
-            for (String ignorePrefixe : ignorePrefixes) {
-                if (key.startsWith(ignorePrefixe)) {
-                    print = false;
-                    break;
-                }
-            }
-            if (print) {
-                serializeIt(ctxMap.get(key), key, writer, new ArrayList<Object>());
-            }
-        }
-        writer.endNode();
-        serializeIt(ctx.getSession(), "request", writer, new ArrayList<Object>());
-        serializeIt(ctx.getSession(), "session", writer, new ArrayList<Object>());
-
-        ValueStack stack = (ValueStack) ctx.get(ActionContext.VALUE_STACK);
-        serializeIt(stack.getRoot(), "valueStack", writer, new ArrayList<Object>());
-        writer.endNode();
-    }
-
-
-    /**
-     * Recursive function to serialize objects to XML. Currently it will
-     * serialize Collections, maps, Arrays, and JavaBeans. It maintains a stack
-     * of objects serialized already in the current functioncall. This is used
-     * to avoid looping (stack overflow) of circular linked objects. Struts and
-     * XWork objects are ignored.
-     *
-     * @param bean   The object you want serialized.
-     * @param name   The name of the object, used for element &lt;name/&gt;
-     * @param writer The XML writer
-     * @param stack  List of objects we're serializing since the first calling
-     *               of this function (to prevent looping on circular references).
-     */
-    protected void serializeIt(Object bean, String name,
-                               PrettyPrintWriter writer, List<Object> stack) {
-        writer.flush();
-        // Check stack for this object
-        if ((bean != null) && (stack.contains(bean))) {
-            if (log.isInfoEnabled()) {
-                log.info("Circular reference detected, not serializing object: "
-                        + name);
-            }
-            return;
-        } else if (bean != null) {
-            // Push object onto stack.
-            // Don't push null objects ( handled below)
-            stack.add(bean);
-        }
-        if (bean == null) {
-            return;
-        }
-        String clsName = bean.getClass().getName();
-
-        writer.startNode(name);
-
-        // It depends on the object and it's value what todo next:
-        if (bean instanceof Collection) {
-            Collection col = (Collection) bean;
-
-            // Iterate through components, and call ourselves to process
-            // elements
-            for (Object aCol : col) {
-                serializeIt(aCol, "value", writer, stack);
-            }
-        } else if (bean instanceof Map) {
-
-            Map map = (Map) bean;
-
-            // Loop through keys and call ourselves
-            for (Object key : map.keySet()) {
-                Object Objvalue = map.get(key);
-                serializeIt(Objvalue, key.toString(), writer, stack);
-            }
-        } else if (bean.getClass().isArray()) {
-            // It's an array, loop through it and keep calling ourselves
-            for (int i = 0; i < Array.getLength(bean); i++) {
-                serializeIt(Array.get(bean, i), "arrayitem", writer, stack);
-            }
-        } else {
-            if (clsName.startsWith("java.lang")) {
-                writer.setValue(bean.toString());
-            } else {
-                // Not java.lang, so we can call ourselves with this object's
-                // values
-                try {
-                    BeanInfo info = Introspector.getBeanInfo(bean.getClass());
-                    PropertyDescriptor[] props = info.getPropertyDescriptors();
-
-                    for (PropertyDescriptor prop : props) {
-                        String n = prop.getName();
-                        Method m = prop.getReadMethod();
-
-                        // Call ourselves with the result of the method
-                        // invocation
-                        if (m != null) {
-                            serializeIt(m.invoke(bean), n, writer, stack);
-                        }
-                    }
-                } catch (Exception e) {
-                    log.error(e, e);
-                }
-            }
-        }
-
-        writer.endNode();
-
-        // Remove object from stack
-        stack.remove(bean);
-    }
-
-
-    /**
-     * @param enableXmlWithConsole the enableXmlWithConsole to set
-     */
-    public void setEnableXmlWithConsole(boolean enableXmlWithConsole) {
-        this.enableXmlWithConsole = enableXmlWithConsole;
-    }
-
-    
-    
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/PrettyPrintWriter.java b/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/PrettyPrintWriter.java
deleted file mode 100644
index f736814..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/PrettyPrintWriter.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package org.apache.struts2.interceptor.debugging;
-
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.util.Stack;
-
-/**
- * A simple writer that outputs XML in a pretty-printed indented stream.
- *
- * <p>By default, the chars <code><xmp>& < > " ' \r</xmp></code> are escaped and replaced with a suitable XML entity.
- * To alter this behavior, override the the {@link #writeText(com.thoughtworks.xstream.core.util.QuickWriter, String)}
- * and {@link #writeAttributeValue(com.thoughtworks.xstream.core.util.QuickWriter, String)} methods.</p>
- *
- * <p>This code was taken from the XStream project under the BSD license.</p>
- *
- */
-public class PrettyPrintWriter {
-
-    private final PrintWriter writer;
-    private final Stack<String> elementStack = new Stack<String>();
-    private final char[] lineIndenter;
-
-    private boolean tagInProgress;
-    private int depth;
-    private boolean readyForNewLine;
-    private boolean tagIsEmpty;
-    private String newLine;
-
-    private static final char[] NULL = "&#x0;".toCharArray();
-    private static final char[] AMP = "&amp;".toCharArray();
-    private static final char[] LT = "&lt;".toCharArray();
-    private static final char[] GT = "&gt;".toCharArray();
-    private static final char[] SLASH_R = "&#x0D;".toCharArray();
-    private static final char[] QUOT = "&quot;".toCharArray();
-    private static final char[] APOS = "&apos;".toCharArray();
-    private static final char[] CLOSE = "</".toCharArray();
-
-    public PrettyPrintWriter(Writer writer, char[] lineIndenter, String newLine) {
-        this.writer = new PrintWriter(writer);
-        this.lineIndenter = lineIndenter;
-        this.newLine = newLine;
-    }
-
-    public PrettyPrintWriter(Writer writer, char[] lineIndenter) {
-        this(writer, lineIndenter, "\n");
-    }
-
-    public PrettyPrintWriter(Writer writer, String lineIndenter, String newLine) {
-        this(writer, lineIndenter.toCharArray(), newLine);
-    }
-
-    public PrettyPrintWriter(Writer writer, String lineIndenter) {
-        this(writer, lineIndenter.toCharArray());
-    }
-
-    public PrettyPrintWriter(Writer writer) {
-        this(writer, new char[]{' ', ' '});
-    }
-
-    public void startNode(String name) {
-        tagIsEmpty = false;
-        finishTag();
-        writer.write('<');
-        writer.write(name);
-        elementStack.push(name);
-        tagInProgress = true;
-        depth++;
-        readyForNewLine = true;
-        tagIsEmpty = true;
-    }
-
-    public void setValue(String text) {
-        readyForNewLine = false;
-        tagIsEmpty = false;
-        finishTag();
-
-        writeText(writer, text);
-    }
-
-    public void addAttribute(String key, String value) {
-        writer.write(' ');
-        writer.write(key);
-        writer.write('=');
-        writer.write('\"');
-        writeAttributeValue(writer, value);
-        writer.write('\"');
-    }
-
-    protected void writeAttributeValue(PrintWriter writer, String text) {
-        writeText(text);
-    }
-
-    protected void writeText(PrintWriter writer, String text) {
-        writeText(text);
-    }
-
-    private void writeText(String text) {
-        int length = text.length();
-        for (int i = 0; i < length; i++) {
-            char c = text.charAt(i);
-            switch (c) {
-                case '\0':
-                    this.writer.write(NULL);
-                    break;
-                case '&':
-                    this.writer.write(AMP);
-                    break;
-                case '<':
-                    this.writer.write(LT);
-                    break;
-                case '>':
-                    this.writer.write(GT);
-                    break;
-                case '"':
-                    this.writer.write(QUOT);
-                    break;
-                case '\'':
-                    this.writer.write(APOS);
-                    break;
-                case '\r':
-                    this.writer.write(SLASH_R);
-                    break;
-                default:
-                    this.writer.write(c);
-            }
-        }
-    }
-
-    public void endNode() {
-        depth--;
-        if (tagIsEmpty) {
-            writer.write('/');
-            readyForNewLine = false;
-            finishTag();
-            elementStack.pop();
-        } else {
-            finishTag();
-            writer.write(CLOSE);
-            writer.write((String)elementStack.pop());
-            writer.write('>');
-        }
-        readyForNewLine = true;
-        if (depth == 0 ) {
-            writer.flush();
-        }
-    }
-
-    private void finishTag() {
-        if (tagInProgress) {
-            writer.write('>');
-        }
-        tagInProgress = false;
-        if (readyForNewLine) {
-            endOfLine();
-        }
-        readyForNewLine = false;
-        tagIsEmpty = false;
-    }
-
-    protected void endOfLine() {
-        writer.write(newLine);
-        for (int i = 0; i < depth; i++) {
-            writer.write(lineIndenter);
-        }
-    }
-
-    public void flush() {
-        writer.flush();
-    }
-
-    public void close() {
-        writer.close();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/PortletActionConstants.java b/trunk/core/src/main/java/org/apache/struts2/portlet/PortletActionConstants.java
deleted file mode 100644
index 2d452a2..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/PortletActionConstants.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet;
-
-/**
- * Interface defining some constants used in the Struts portlet implementation
- * 
- */
-public interface PortletActionConstants {
-	/**
-	 * Default action name to use when no default action has been configured in the portlet
-	 * init parameters.
-	 */
-	String DEFAULT_ACTION_NAME = "default";
-	
-	/**
-	 * Action name parameter name
-	 */
-	String ACTION_PARAM = "struts.portlet.action"; 
-	
-	/**
-	 * Key for parameter holding the last executed portlet mode.
-	 */
-	String MODE_PARAM = "struts.portlet.mode";
-	
-	/**
-     * Key used for looking up and storing the portlet phase
-     */
-    String PHASE = "struts.portlet.phase";
-
-    /**
-     * Constant used for the render phase (
-     * {@link javax.portlet.Portlet#render(javax.portlet.RenderRequest, javax.portlet.RenderResponse)})
-     */
-    Integer RENDER_PHASE = new Integer(1);
-
-    /**
-     * Constant used for the event phase (
-     * {@link javax.portlet.Portlet#processAction(javax.portlet.ActionRequest, javax.portlet.ActionResponse)})
-     */
-    Integer EVENT_PHASE = new Integer(2);
-
-    /**
-     * Key used for looking up and storing the
-     * {@link javax.portlet.PortletRequest}
-     */
-    String REQUEST = "struts.portlet.request";
-
-    /**
-     * Key used for looking up and storing the
-     * {@link javax.portlet.PortletResponse}
-     */
-    String RESPONSE = "struts.portlet.response";
-    
-    /**
-     * Key used for looking up and storing the action that was invoked in the event phase.
-     */
-    String EVENT_ACTION = "struts.portlet.eventAction";
-
-    /**
-     * Key used for looking up and storing the
-     * {@link javax.portlet.PortletConfig}
-     */
-    String PORTLET_CONFIG = "struts.portlet.config";
-
-    /**
-     * Name of the action used as error handler
-     */
-    String ERROR_ACTION = "errorHandler";
-
-    /**
-     * Key for the portlet namespace stored in the 
-     * {@link org.apache.struts2.portlet.context.PortletActionContext}.
-     */
-    String PORTLET_NAMESPACE = "struts.portlet.portletNamespace";
-    
-    /**
-     * Key for the mode-to-namespace map stored in the 
-     * {@link org.apache.struts2.portlet.context.PortletActionContext}.
-     */
-    String MODE_NAMESPACE_MAP = "struts.portlet.modeNamespaceMap";
-    
-    /**
-     * Key for the default action name for the portlet, stored in the 
-     * {@link org.apache.struts2.portlet.context.PortletActionContext}.
-     */
-    String DEFAULT_ACTION_FOR_MODE = "struts.portlet.defaultActionForMode";
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java b/trunk/core/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java
deleted file mode 100644
index 34c5223..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet;
-
-import java.io.Serializable;
-import java.util.AbstractMap;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.portlet.PortletContext;
-
-/**
- * Portlet specific {@link java.util.Map} implementation representing the
- * {@link javax.portlet.PortletContext} of a Portlet.
- * 
- */
-public class PortletApplicationMap extends AbstractMap implements Serializable {
-
-	private static final long serialVersionUID = 2296107511063504414L;
-
-    private PortletContext context;
-
-	private Set<Object> entries;
-
-	/**
-	 * Creates a new map object given the {@link PortletContext}.
-	 * 
-	 * @param ctx The portlet context.
-	 */
-	public PortletApplicationMap(PortletContext ctx) {
-		this.context = ctx;
-	}
-
-	/**
-	 * Removes all entries from the Map and removes all attributes from the
-	 * portlet context.
-	 */
-	public void clear() {
-		entries = null;
-
-		Enumeration e = context.getAttributeNames();
-
-		while (e.hasMoreElements()) {
-			context.removeAttribute(e.nextElement().toString());
-		}
-	}
-
-	/**
-	 * Creates a Set of all portlet context attributes as well as context init
-	 * parameters.
-	 * 
-	 * @return a Set of all portlet context attributes as well as context init
-	 *         parameters.
-	 */
-	public Set entrySet() {
-		if (entries == null) {
-			entries = new HashSet<Object>();
-
-			// Add portlet context attributes
-			Enumeration enumeration = context.getAttributeNames();
-
-			while (enumeration.hasMoreElements()) {
-				final String key = enumeration.nextElement().toString();
-				final Object value = context.getAttribute(key);
-				entries.add(new Map.Entry() {
-					public boolean equals(Object obj) {
-						Map.Entry entry = (Map.Entry) obj;
-
-						return ((key == null) ? (entry.getKey() == null) : key
-								.equals(entry.getKey()))
-								&& ((value == null) ? (entry.getValue() == null)
-										: value.equals(entry.getValue()));
-					}
-
-					public int hashCode() {
-						return ((key == null) ? 0 : key.hashCode())
-								^ ((value == null) ? 0 : value.hashCode());
-					}
-
-					public Object getKey() {
-						return key;
-					}
-
-					public Object getValue() {
-						return value;
-					}
-
-					public Object setValue(Object obj) {
-						context.setAttribute(key.toString(), obj);
-
-						return value;
-					}
-				});
-			}
-
-			// Add portlet context init params
-			enumeration = context.getInitParameterNames();
-
-			while (enumeration.hasMoreElements()) {
-				final String key = enumeration.nextElement().toString();
-				final Object value = context.getInitParameter(key);
-				entries.add(new Map.Entry() {
-					public boolean equals(Object obj) {
-						Map.Entry entry = (Map.Entry) obj;
-
-						return ((key == null) ? (entry.getKey() == null) : key
-								.equals(entry.getKey()))
-								&& ((value == null) ? (entry.getValue() == null)
-										: value.equals(entry.getValue()));
-					}
-
-					public int hashCode() {
-						return ((key == null) ? 0 : key.hashCode())
-								^ ((value == null) ? 0 : value.hashCode());
-					}
-
-					public Object getKey() {
-						return key;
-					}
-
-					public Object getValue() {
-						return value;
-					}
-
-					public Object setValue(Object obj) {
-						context.setAttribute(key.toString(), obj);
-
-						return value;
-					}
-				});
-			}
-		}
-
-		return entries;
-	}
-
-	/**
-	 * Returns the portlet context attribute or init parameter based on the
-	 * given key. If the entry is not found, <tt>null</tt> is returned.
-	 * 
-	 * @param key
-	 *            the entry key.
-	 * @return the portlet context attribute or init parameter or <tt>null</tt>
-	 *         if the entry is not found.
-	 */
-	public Object get(Object key) {
-		// Try context attributes first, then init params
-		// This gives the proper shadowing effects
-		String keyString = key.toString();
-		Object value = context.getAttribute(keyString);
-
-		return (value == null) ? context.getInitParameter(keyString) : value;
-	}
-
-	/**
-	 * Sets a portlet context attribute given a attribute name and value.
-	 * 
-	 * @param key
-	 *            the name of the attribute.
-	 * @param value
-	 *            the value to set.
-	 * @return the attribute that was just set.
-	 */
-	public Object put(Object key, Object value) {
-		entries = null;
-		context.setAttribute(key.toString(), value);
-
-		return get(key);
-	}
-
-	/**
-	 * Removes the specified portlet context attribute.
-	 * 
-	 * @param key
-	 *            the attribute to remove.
-	 * @return the entry that was just removed.
-	 */
-	public Object remove(Object key) {
-		entries = null;
-
-		Object value = get(key);
-		context.removeAttribute(key.toString());
-
-		return value;
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java b/trunk/core/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java
deleted file mode 100644
index b76b5ba..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/PortletRequestMap.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet;
-
-import java.util.AbstractMap;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.portlet.PortletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * A simple implementation of the {@link java.util.Map} interface to handle a collection of request attributes.
- * 
- */
-public class PortletRequestMap extends AbstractMap {
-
-    private static final Log LOG = LogFactory.getLog(PortletRequestMap.class);
-    
-    private Set<Object> entries = null;
-    private PortletRequest request = null;
-
-    /**
-     * Saves the request to use as the backing for getting and setting values
-     *
-     * @param request the portlet request.
-     */
-    public PortletRequestMap(PortletRequest request) {
-        this.request = request;
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("Dumping request parameters: ");
-            Iterator params = request.getParameterMap().keySet().iterator();
-            while(params.hasNext()) {
-                String key = (String)params.next();
-                String val = request.getParameter(key);
-                LOG.debug(key + " = " + val);
-            }
-        }
-    }
-
-    /**
-     * Removes all attributes from the request as well as clears entries in this
-     * map.
-     */
-    public void clear() {
-        entries = null;
-        Enumeration keys = request.getAttributeNames();
-
-        while (keys.hasMoreElements()) {
-            String key = (String) keys.nextElement();
-            request.removeAttribute(key);
-        }
-    }
-
-    /**
-     * Returns a Set of attributes from the portlet request.
-     * 
-     * @return a Set of attributes from the portlet request.
-     */
-    public Set entrySet() {
-        if (entries == null) {
-            entries = new HashSet<Object>();
-
-            Enumeration enumeration = request.getAttributeNames();
-
-            while (enumeration.hasMoreElements()) {
-                final String key = enumeration.nextElement().toString();
-                final Object value = request.getAttribute(key);
-                entries.add(new Entry() {
-                    public boolean equals(Object obj) {
-                        Entry entry = (Entry) obj;
-
-                        return ((key == null) ? (entry.getKey() == null) : key
-                                .equals(entry.getKey()))
-                                && ((value == null) ? (entry.getValue() == null)
-                                        : value.equals(entry.getValue()));
-                    }
-
-                    public int hashCode() {
-                        return ((key == null) ? 0 : key.hashCode())
-                                ^ ((value == null) ? 0 : value.hashCode());
-                    }
-
-                    public Object getKey() {
-                        return key;
-                    }
-
-                    public Object getValue() {
-                        return value;
-                    }
-
-                    public Object setValue(Object obj) {
-                        request.setAttribute(key, obj);
-
-                        return value;
-                    }
-                });
-            }
-        }
-
-        return entries;
-    }
-
-    /**
-     * Returns the request attribute associated with the given key or
-     * <tt>null</tt> if it doesn't exist.
-     * 
-     * @param key the name of the request attribute.
-     * @return the request attribute or <tt>null</tt> if it doesn't exist.
-     */
-    public Object get(Object key) {
-        return request.getAttribute(key.toString());
-    }
-
-    /**
-     * Saves an attribute in the request.
-     * 
-     * @param key the name of the request attribute.
-     * @param value the value to set.
-     * @return the object that was just set.
-     */
-    public Object put(Object key, Object value) {
-        entries = null;
-        request.setAttribute(key.toString(), value);
-
-        return get(key);
-    }
-
-    /**
-     * Removes the specified request attribute.
-     * 
-     * @param key the name of the attribute to remove.
-     * @return the value that was removed or <tt>null</tt> if the value was
-     * not found (and hence, not removed).
-     */
-    public Object remove(Object key) {
-        entries = null;
-
-        Object value = get(key);
-        request.removeAttribute(key.toString());
-
-        return value;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java b/trunk/core/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java
deleted file mode 100644
index b3ff045..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/PortletSessionMap.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet;
-
-import java.util.AbstractMap;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * A simple implementation of the {@link java.util.Map} interface to handle a collection of portlet session
- * attributes. The {@link #entrySet()} method enumerates over all session attributes and creates a Set of entries.
- * Note, this will occur lazily - only when the entry set is asked for.
- * 
- */
-public class PortletSessionMap extends AbstractMap {
-    
-    private static final Log LOG = LogFactory.getLog(PortletSessionMap.class);
-
-    private PortletSession session = null;
-    private Set<Object> entries = null;
-
-    /**
-     * Creates a new session map given a portlet request. 
-     *
-     * @param request the portlet request object.
-     */
-    public PortletSessionMap(PortletRequest request) {
-        this.session = request.getPortletSession();
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("Dumping session info: ");
-            Enumeration enumeration = session.getAttributeNames();
-            while(enumeration.hasMoreElements()) {
-                String key = (String)enumeration.nextElement();
-                Object val = session.getAttribute(key);
-                LOG.debug(key + " = " + val);
-            }
-        }
-    }
-
-    /**
-     * @see java.util.Map#entrySet()
-     */
-    public Set entrySet() {
-        synchronized (session) {
-            if (entries == null) {
-                entries = new HashSet<Object>();
-
-                Enumeration enumeration = session.getAttributeNames();
-
-                while (enumeration.hasMoreElements()) {
-                    final String key = enumeration.nextElement().toString();
-                    final Object value = session.getAttribute(key);
-                    entries.add(new Map.Entry() {
-                        public boolean equals(Object obj) {
-                            Map.Entry entry = (Map.Entry) obj;
-
-                            return ((key == null) ? (entry.getKey() == null)
-                                    : key.equals(entry.getKey()))
-                                    && ((value == null) ? (entry.getValue() == null)
-                                            : value.equals(entry.getValue()));
-                        }
-
-                        public int hashCode() {
-                            return ((key == null) ? 0 : key.hashCode())
-                                    ^ ((value == null) ? 0 : value.hashCode());
-                        }
-
-                        public Object getKey() {
-                            return key;
-                        }
-
-                        public Object getValue() {
-                            return value;
-                        }
-
-                        public Object setValue(Object obj) {
-                            session.setAttribute(key, obj);
-
-                            return value;
-                        }
-                    });
-                }
-            }
-        }
-
-        return entries;
-    }
-
-    /**
-     * Returns the session attribute associated with the given key or
-     * <tt>null</tt> if it doesn't exist.
-     * 
-     * @param key the name of the session attribute.
-     * @return the session attribute or <tt>null</tt> if it doesn't exist.
-     */
-    public Object get(Object key) {
-        synchronized (session) {
-            return session.getAttribute(key.toString());
-        }
-    }
-
-    /**
-     * Saves an attribute in the session.
-     * 
-     * @param key the name of the session attribute.
-     * @param value the value to set.
-     * @return the object that was just set.
-     */
-    public Object put(Object key, Object value) {
-        synchronized (session) {
-            entries = null;
-            session.setAttribute(key.toString(), value);
-
-            return get(key);
-        }
-    }
-
-    /**
-     * @see java.util.Map#clear()
-     */
-    public void clear() {
-        synchronized (session) {
-            entries = null;
-            session.invalidate();
-        }
-    }
-
-    /**
-     * Removes the specified session attribute.
-     * 
-     * @param key the name of the attribute to remove.
-     * @return the value that was removed or <tt>null</tt> if the value was
-     * not found (and hence, not removed).
-     */
-    public Object remove(Object key) {
-        synchronized (session) {
-            entries = null;
-
-            Object value = get(key);
-            session.removeAttribute(key.toString());
-
-            return value;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java b/trunk/core/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java
deleted file mode 100644
index 86870b4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.context;
-
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletResponse;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-import org.apache.struts2.portlet.PortletActionConstants;
-
-import com.opensymphony.xwork2.ActionContext;
-
-
-/**
- * PortletActionContext. ActionContext thread local for the portlet environment.
- * 
- * @version $Revision$ $Date$
- */
-public class PortletActionContext implements PortletActionConstants {
-
-    /**
-     * Get the PortletConfig of the portlet that is executing.
-     *
-     * @return The PortletConfig of the executing portlet.
-     */
-    public static PortletConfig getPortletConfig() {
-        return (PortletConfig) getContext().get(PORTLET_CONFIG);
-    }
-
-    /**
-     * Get the RenderRequest. Can only be invoked in the render phase.
-     *
-     * @return The current RenderRequest.
-     * @throws IllegalStateException If the method is invoked in the wrong phase.
-     */
-    public static RenderRequest getRenderRequest() {
-        if (!isRender()) {
-            throw new IllegalStateException(
-                    "RenderRequest cannot be obtained in event phase");
-        }
-        return (RenderRequest) getContext().get(REQUEST);
-    }
-
-    /**
-     * Get the RenderResponse. Can only be invoked in the render phase.
-     *
-     * @return The current RenderResponse.
-     * @throws IllegalStateException If the method is invoked in the wrong phase.
-     */
-    public static RenderResponse getRenderResponse() {
-        if (!isRender()) {
-            throw new IllegalStateException(
-                    "RenderResponse cannot be obtained in event phase");
-        }
-        return (RenderResponse) getContext().get(RESPONSE);
-    }
-
-    /**
-     * Get the ActionRequest. Can only be invoked in the event phase.
-     *
-     * @return The current ActionRequest.
-     * @throws IllegalStateException If the method is invoked in the wrong phase.
-     */
-    public static ActionRequest getActionRequest() {
-        if (!isEvent()) {
-            throw new IllegalStateException(
-                    "ActionRequest cannot be obtained in render phase");
-        }
-        return (ActionRequest) getContext().get(REQUEST);
-    }
-
-    /**
-     * Get the ActionRequest. Can only be invoked in the event phase.
-     *
-     * @return The current ActionRequest.
-     * @throws IllegalStateException If the method is invoked in the wrong phase.
-     */
-    public static ActionResponse getActionResponse() {
-        if (!isEvent()) {
-            throw new IllegalStateException(
-                    "ActionResponse cannot be obtained in render phase");
-        }
-        return (ActionResponse) getContext().get(RESPONSE);
-    }
-    
-    /**
-     * Get the action namespace of the portlet. Used to organize actions for multiple portlets in
-     * the same portlet application.
-     *
-     * @return The portlet namespace as defined in <code>portlet.xml</code> and <code>struts.xml</code>
-     */
-    public static String getPortletNamespace() {
-        return (String)getContext().get(PORTLET_NAMESPACE);
-    }
-
-    /**
-     * Get the current PortletRequest.
-     *
-     * @return The current PortletRequest.
-     */
-    public static PortletRequest getRequest() {
-        return (PortletRequest) getContext().get(REQUEST);
-    }
-
-    /**
-     * Get the current PortletResponse
-     *
-     * @return The current PortletResponse.
-     */
-    public static PortletResponse getResponse() {
-        return (PortletResponse) getContext().get(RESPONSE);
-    }
-
-    /**
-     * Get the phase that the portlet is executing in.
-     *
-     * @return {@link PortletActionConstants#RENDER_PHASE} in render phase, and
-     * {@link PortletActionConstants#EVENT_PHASE} in the event phase.
-     */
-    public static Integer getPhase() {
-        return (Integer) getContext().get(PHASE);
-    }
-
-    /**
-     * @return <code>true</code> if the Portlet is executing in render phase.
-     */
-    public static boolean isRender() {
-        return PortletActionConstants.RENDER_PHASE.equals(getPhase());
-    }
-
-    /**
-     * @return <code>true</code> if the Portlet is executing in the event phase.
-     */
-    public static boolean isEvent() {
-        return PortletActionConstants.EVENT_PHASE.equals(getPhase());
-    }
-
-    /**
-     * @return The current ActionContext.
-     */
-    private static ActionContext getContext() {
-        return ActionContext.getContext();
-    }
-    
-    /**
-     * Check to see if the current request is a portlet request.
-     *
-     * @return <code>true</code> if the current request is a portlet request.
-     */
-    public static boolean isPortletRequest() {
-        return getRequest() != null;
-    }
-
-    /**
-     * Get the default action name for the current mode.
-     *
-     * @return The default action name for the current portlet mode.
-     */
-    public static String getDefaultActionForMode() {
-        return (String)getContext().get(DEFAULT_ACTION_FOR_MODE);
-    }
-
-    /**
-     * Get the namespace to mode mappings.
-     * 
-     * @return The map of the namespaces for each mode.
-     */
-    public static Map getModeNamespaceMap() {
-        return (Map)getContext().get(MODE_NAMESPACE_MAP);
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java b/trunk/core/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java
deleted file mode 100644
index 181229d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.context;
-
-import java.io.IOException;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsStatics;
-
-import com.opensymphony.xwork2.ActionContext;
-
-/**
- * Since a portlet is not dispatched the same way as a servlet, the 
- * {@link org.apache.struts2.ServletActionContext} is not immediately available, as it 
- * depends on objects from the servlet API. However, the WW2 view implementations require access
- * to the objects in the {@link org.apache.struts2.ServletActionContext}, and this servlet
- * makes sure that these are available when the portlet actions are executing the render results.
- * 
- */
-public class PreparatorServlet extends HttpServlet implements StrutsStatics {
-
-	private static final long serialVersionUID = 1853399729352984089L;
-	
-	private final static Log LOG = LogFactory.getLog(PreparatorServlet.class);
-
-    /**
-     * Prepares the {@link org.apache.struts2.ServletActionContext} with the
-     * {@link ServletContext}, {@link HttpServletRequest} and {@link HttpServletResponse}.
-     */
-    public void service(HttpServletRequest servletRequest,
-            HttpServletResponse servletResponse) throws ServletException,
-            IOException {
-        LOG.debug("Preparing servlet objects for dispatch");
-        ServletContext ctx = getServletContext();
-        ActionContext.getContext().put(SERVLET_CONTEXT, ctx);
-        ActionContext.getContext().put(HTTP_REQUEST, servletRequest);
-        ActionContext.getContext().put(HTTP_RESPONSE, servletResponse);
-        LOG.debug("Preparation complete");
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/context/ServletContextHolderListener.java b/trunk/core/src/main/java/org/apache/struts2/portlet/context/ServletContextHolderListener.java
deleted file mode 100644
index 23d174b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/context/ServletContextHolderListener.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.context;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-/**
- * Some of the factory/managers (e.g. the ObjectFactory) need access to 
- * the {@link org.apache.struts2.ServletActionContext} object when initializing.
- * This {@link javax.servlet.ServletContextListener} keeps a reference to the 
- * {@link javax.servlet.ServletContext} and exposes it through a <code>public static</code>
- * method.
- * 
- */
-public class ServletContextHolderListener implements ServletContextListener {
-
-    private static ServletContext context = null;
-
-    /**
-     * @return The current servlet context
-     */
-    public static ServletContext getServletContext() {
-        return context;
-    }
-
-    /**
-     * Stores the reference to the {@link ServletContext}.
-     * 
-     * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
-     */
-    public void contextInitialized(ServletContextEvent event) {
-        context = event.getServletContext();
-        
-    }
-
-    /**
-     * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
-     */
-    public void contextDestroyed(ServletContextEvent event) {
-    	context = null;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java b/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java
deleted file mode 100644
index 7a9172a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/DirectRenderFromEventAction.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.dispatcher;
-
-import com.opensymphony.xwork2.Action;
-
-import java.io.Serializable;
-
-/**
- * When a portlet is targetted for an <code>event</code>, the portlet will receive two
- * portlet requests, one for the <code>event</code> phase, and then followed by a <code>render</code>
- * operation. When in the <code>event</code> phase, the action that is executed can't render
- * any output. This means that if an action in the XWork configuration is executed in the event
- * phase, and the action is set up with a result that should render something, the result can't
- * immediately be executed. The portlet needs to "wait" to the render phase to do the
- * rendering.
- * <p/>
- * When the {@link org.apache.struts2.portlet.result.PortletResult} detects such a
- * scenario, instead of executing the actual view, it prepares a couple of render parameters
- * specifying this action and the location of the view, which then will be executed in the
- * following render request.
- */
-public class DirectRenderFromEventAction implements Action, Serializable {
-
-    private static final long serialVersionUID = -1814807772308405785L;
-
-    private String location = null;
-
-    /**
-     * Get the location of the view.
-     *
-     * @return Returns the location.
-     */
-    public String getLocation() {
-        return location;
-    }
-
-    /**
-     * Set the location of the view.
-     *
-     * @param location The location to set.
-     */
-    public void setLocation(String location) {
-        this.location = location;
-    }
-
-    /**
-     * Always return success.
-     *
-     * @return SUCCESS
-     */
-    public String execute() throws Exception {
-        return SUCCESS;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java b/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
deleted file mode 100644
index 321bff6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
+++ /dev/null
@@ -1,597 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.dispatcher;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.GenericPortlet;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletException;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletResponse;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.ApplicationMap;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.dispatcher.RequestMap;
-import org.apache.struts2.dispatcher.SessionMap;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-import org.apache.struts2.portlet.PortletActionConstants;
-import org.apache.struts2.portlet.PortletApplicationMap;
-import org.apache.struts2.portlet.PortletRequestMap;
-import org.apache.struts2.portlet.PortletSessionMap;
-import org.apache.struts2.portlet.context.PortletActionContext;
-import org.apache.struts2.portlet.context.ServletContextHolderListener;
-import org.apache.struts2.util.AttributeMap;
-import org.apache.struts2.util.ObjectFactoryInitializable;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.util.FileManager;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ActionProxyFactory;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <p>
- * Struts JSR-168 portlet dispatcher. Similar to the WW2 Servlet dispatcher,
- * but adjusted to a portal environment. The portlet is configured through the <tt>portlet.xml</tt>
- * descriptor. Examples and descriptions follow below:
- * </p>
- * <!-- END SNIPPET: javadoc --> 
- * 
- * @author <a href="nils-helge.garli@bekk.no">Nils-Helge Garli </a>
- * @author Rainer Hermanns
- * 
- * <p><b>Init parameters</b></p>
- * <!-- START SNIPPET: params -->
- * <table class="confluenceTable">
- * <tr>
- * 	<th class="confluenceTh">Name</th>
- * <th class="confluenceTh">Description</th>
- * <th class="confluenceTh">Default value</th>
- * </tr>
- * <tr>
- * 	<td class="confluenceTd">portletNamespace</td><td class="confluenceTd">The namespace for the portlet in the xwork configuration. This 
- * 		namespace is prepended to all action lookups, and makes it possible to host multiple 
- * 		portlets in the same portlet application. If this parameter is set, the complete namespace 
- * 		will be <tt>/portletNamespace/modeNamespace/actionName</tt></td><td class="confluenceTd">The default namespace</td>
- * </tr>
- * <tr>
- *  <td class="confluenceTd">viewNamespace</td><td class="confluenceTd">Base namespace in the xwork configuration for the <tt>view</tt> portlet 
- * 		mode</td><td class="confluenceTd">The default namespace</td>
- * </tr>
- * <tr>
- *  <td class="confluenceTd">editNamespace</td><td class="confluenceTd">Base namespace in the xwork configuration for the <tt>edit</tt> portlet 
- * 		mode</td><td class="confluenceTd">The default namespace</td>
- * </tr>
- * <tr>
- *  <td class="confluenceTd">helpNamespace</td><td class="confluenceTd">Base namespace in the xwork configuration for the <tt>help</tt> portlet 
- * 		mode</td><td class="confluenceTd">The default namespace</td>
- * </tr>
- * <tr>
- *  <td class="confluenceTd">defaultViewAction</td><td class="confluenceTd">Default action to invoke in the <tt>view</tt> portlet mode if no action is
- * 		specified</td><td class="confluenceTd"><tt>default</tt></td>
- * </tr>
- * <tr>
- *  <td class="confluenceTd">defaultEditAction</td><td class="confluenceTd">Default action to invoke in the <tt>edit</tt> portlet mode if no action is
- * 		specified</td><td class="confluenceTd"><tt>default</tt></td>
- * </tr>
- * <tr>
- *  <td class="confluenceTd">defaultHelpAction</td><td class="confluenceTd">Default action to invoke in the <tt>help</tt> portlet mode if no action is
- * 		specified</td><td class="confluenceTd"><tt>default</tt></td>
- * </tr>
- * </table>
- * <!-- END SNIPPET: params -->
- * <p><b>Example:</b></p>
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;init-param&gt;
- *     &lt;!-- The view mode namespace. Maps to a namespace in the xwork config file --&gt;
- *     &lt;name&gt;viewNamespace&lt;/name&gt;
- *     &lt;value&gt;/view&lt;/value&gt;
- * &lt;/init-param&gt;
- * &lt;init-param&gt;
- *    &lt;!-- The default action to invoke in view mode --&gt;
- *	  &lt;name&gt;defaultViewAction&lt;/name&gt;
- *    &lt;value&gt;index&lt;/value&gt;
- * &lt;/init-param&gt;
- * &lt;init-param&gt;
- *     &lt;!-- The view mode namespace. Maps to a namespace in the xwork config file --&gt;
- *     &lt;name&gt;editNamespace&lt;/name&gt;
- *     &lt;value&gt;/edit&lt;/value&gt;
- * &lt;/init-param&gt;
- * &lt;init-param&gt;
- *     &lt;!-- The default action to invoke in view mode --&gt;
- *     &lt;name&gt;defaultEditAction&lt;/name&gt;
- *	   &lt;value&gt;index&lt;/value&gt;
- * &lt;/init-param&gt;
- * &lt;init-param&gt;
- *     &lt;!-- The view mode namespace. Maps to a namespace in the xwork config file --&gt;
- *     &lt;name&gt;helpNamespace&lt;/name&gt;
- *     &lt;value&gt;/help&lt;/value&gt;
- * &lt;/init-param&gt;
- * &lt;init-param&gt;
- *     &lt;!-- The default action to invoke in view mode --&gt;
- *     &lt;name&gt;defaultHelpAction&lt;/name&gt;
- *     &lt;value&gt;index&lt;/value&gt;
- * &lt;/init-param&gt;
- *   
- * <!-- END SNIPPET: example -->
- * </pre>
- */
-public class Jsr168Dispatcher extends GenericPortlet implements StrutsStatics,
-        PortletActionConstants {
-
-    private static final Log LOG = LogFactory.getLog(Jsr168Dispatcher.class);
-
-    private ActionProxyFactory factory = null;
-
-    private Map<PortletMode,String> modeMap = new HashMap<PortletMode,String>(3);
-
-    private Map<PortletMode,ActionMapping> actionMap = new HashMap<PortletMode,ActionMapping>(3);
-
-    private String portletNamespace = null;
-    
-    private Dispatcher dispatcherUtils;
-
-    /**
-     * Initialize the portlet with the init parameters from <tt>portlet.xml</tt>
-     */
-    public void init(PortletConfig cfg) throws PortletException {
-        super.init(cfg);
-        LOG.debug("Initializing portlet " + getPortletName());
-        // For testability
-        if (factory == null) {
-            factory = ActionProxyFactory.getFactory();
-        }
-        portletNamespace = cfg.getInitParameter("portletNamespace");
-        LOG.debug("PortletNamespace: " + portletNamespace);
-        parseModeConfig(cfg, PortletMode.VIEW, "viewNamespace",
-                "defaultViewAction");
-        parseModeConfig(cfg, PortletMode.EDIT, "editNamespace",
-                "defaultEditAction");
-        parseModeConfig(cfg, PortletMode.HELP, "helpNamespace",
-                "defaultHelpAction");
-        parseModeConfig(cfg, new PortletMode("config"), "configNamespace",
-                "defaultConfigAction");
-        parseModeConfig(cfg, new PortletMode("about"), "aboutNamespace",
-                "defaultAboutAction");
-        parseModeConfig(cfg, new PortletMode("print"), "printNamespace",
-                "defaultPrintAction");
-        parseModeConfig(cfg, new PortletMode("preview"), "previewNamespace",
-                "defaultPreviewAction");
-        parseModeConfig(cfg, new PortletMode("edit_defaults"),
-                "editDefaultsNamespace", "defaultEditDefaultsAction");
-        if (StringUtils.isEmpty(portletNamespace)) {
-            portletNamespace = "";
-        }
-        LocalizedTextUtil
-                .addDefaultResourceBundle("org/apache/struts2/struts-messages");
-
-        //check for configuration reloading
-        if ("true".equalsIgnoreCase(Settings
-                .get(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD))) {
-            FileManager.setReloadingConfigs(true);
-        }
-
-        if ("true".equalsIgnoreCase(Settings.get(StrutsConstants.STRUTS_DEVMODE))) {
-            Settings.set(StrutsConstants.STRUTS_I18N_RELOAD, "true");
-            Settings.set(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD, "true");
-        }
-
-        if (Settings.isSet(StrutsConstants.STRUTS_OBJECTFACTORY)) {
-            String className = (String) Settings
-                    .get(StrutsConstants.STRUTS_OBJECTFACTORY);
-            if (className.equals("spring")) {
-                // note: this class name needs to be in string form so we don't put hard
-                //       dependencies on spring, since it isn't technically required.
-                className = "org.apache.struts2.spring.StrutsSpringObjectFactory";
-            } else if (className.equals("plexus")) {
-                // note: this class name needs to be in string form so we don't put hard
-                //       dependencies on spring, since it isn't technically required.
-                className = "org.apache.struts2.plexus.PlexusObjectFactory";
-            }
-
-            try {
-                Class clazz = ClassLoaderUtil.loadClass(className,
-                        Jsr168Dispatcher.class);
-                ObjectFactory objectFactory = (ObjectFactory) clazz
-                        .newInstance();
-                if (objectFactory instanceof ObjectFactoryInitializable) {
-                    ((ObjectFactoryInitializable) objectFactory)
-                            .init(ServletContextHolderListener
-                                    .getServletContext());
-                }
-                ObjectFactory.setObjectFactory(objectFactory);
-            } catch (Exception e) {
-                LOG.error("Could not load ObjectFactory named " + className
-                        + ". Using default ObjectFactory.", e);
-            }
-        }
-        Dispatcher.setPortletSupportActive(true);
-        dispatcherUtils = new Dispatcher(ServletContextHolderListener.getServletContext());
-    }
-
-    /**
-     * Parse the mode to namespace mappings configured in portlet.xml
-     * @param portletConfig The PortletConfig
-     * @param portletMode The PortletMode
-     * @param nameSpaceParam Name of the init parameter where the namespace for the mode
-     * is configured.
-     * @param defaultActionParam Name of the init parameter where the default action to
-     * execute for the mode is configured.
-     */
-    private void parseModeConfig(PortletConfig portletConfig,
-            PortletMode portletMode, String nameSpaceParam,
-            String defaultActionParam) {
-        String namespace = portletConfig.getInitParameter(nameSpaceParam);
-        if (StringUtils.isEmpty(namespace)) {
-            namespace = "";
-        }
-        modeMap.put(portletMode, namespace);
-        String defaultAction = portletConfig
-                .getInitParameter(defaultActionParam);
-        if (StringUtils.isEmpty(defaultAction)) {
-            defaultAction = DEFAULT_ACTION_NAME;
-        }
-        StringBuffer fullPath = new StringBuffer();
-        if (StringUtils.isNotEmpty(portletNamespace)) {
-            fullPath.append(portletNamespace + "/");
-        }
-        if (StringUtils.isNotEmpty(namespace)) {
-            fullPath.append(namespace + "/");
-        }
-        fullPath.append(defaultAction);
-        ActionMapping mapping = new ActionMapping();
-        mapping.setName(getActionName(fullPath.toString()));
-        mapping.setNamespace(getNamespace(fullPath.toString()));
-        actionMap.put(portletMode, mapping);
-    }
-
-    /**
-     * Service an action from the <tt>event</tt> phase.
-     *
-     * @see javax.portlet.Portlet#processAction(javax.portlet.ActionRequest,
-     *      javax.portlet.ActionResponse)
-     */
-    public void processAction(ActionRequest request, ActionResponse response)
-            throws PortletException, IOException {
-        LOG.debug("Entering processAction");
-        resetActionContext();
-        try {
-            serviceAction(request, response, getActionMapping(request),
-                    getRequestMap(request), getParameterMap(request),
-                    getSessionMap(request), getApplicationMap(),
-                    portletNamespace, EVENT_PHASE);
-            LOG.debug("Leaving processAction");
-        } finally {
-            ActionContext.setContext(null);
-        }
-    }
-
-    /**
-     * Service an action from the <tt>render</tt> phase.
-     *
-     * @see javax.portlet.Portlet#render(javax.portlet.RenderRequest,
-     *      javax.portlet.RenderResponse)
-     */
-    public void render(RenderRequest request, RenderResponse response)
-            throws PortletException, IOException {
-
-        LOG.debug("Entering render");
-        resetActionContext();
-        response.setTitle(getTitle(request));
-        try {
-            // Check to see if an event set the render to be included directly
-            serviceAction(request, response, getActionMapping(request),
-                    getRequestMap(request), getParameterMap(request),
-                    getSessionMap(request), getApplicationMap(),
-                    portletNamespace, RENDER_PHASE);
-            LOG.debug("Leaving render");
-        } finally {
-            resetActionContext();
-        }
-    }
-
-    /**
-     *  Reset the action context.
-     */
-    private void resetActionContext() {
-        ActionContext.setContext(null);
-    }
-
-    /**
-     * Merges all application and portlet attributes into a single
-     * <tt>HashMap</tt> to represent the entire <tt>Action</tt> context.
-     *
-     * @param requestMap a Map of all request attributes.
-     * @param parameterMap a Map of all request parameters.
-     * @param sessionMap a Map of all session attributes.
-     * @param applicationMap a Map of all servlet context attributes.
-     * @param request the PortletRequest object.
-     * @param response the PortletResponse object.
-     * @param portletConfig the PortletConfig object.
-     * @param phase The portlet phase (render or action, see
-     *        {@link PortletActionConstants})
-     * @return a HashMap representing the <tt>Action</tt> context.
-     */
-    public HashMap createContextMap(Map requestMap, Map parameterMap,
-            Map sessionMap, Map applicationMap, PortletRequest request,
-            PortletResponse response, PortletConfig portletConfig, Integer phase) {
-
-        // TODO Must put http request/response objects into map for use with
-        // ServletActionContext
-        HashMap<String,Object> extraContext = new HashMap<String,Object>();
-        extraContext.put(ActionContext.PARAMETERS, parameterMap);
-        extraContext.put(ActionContext.SESSION, sessionMap);
-        extraContext.put(ActionContext.APPLICATION, applicationMap);
-
-        Locale locale = null;
-        if (Settings.isSet(StrutsConstants.STRUTS_LOCALE)) {
-            locale = LocalizedTextUtil.localeFromString(Settings.get(StrutsConstants.STRUTS_LOCALE), request.getLocale());
-        } else {
-            locale = request.getLocale();
-        }
-        extraContext.put(ActionContext.LOCALE, locale);
-
-        extraContext.put(StrutsStatics.STRUTS_PORTLET_CONTEXT, getPortletContext());
-        extraContext.put(ActionContext.DEV_MODE, Boolean.valueOf(Settings.get(StrutsConstants.STRUTS_DEVMODE)));
-        extraContext.put(REQUEST, request);
-        extraContext.put(RESPONSE, response);
-        extraContext.put(PORTLET_CONFIG, portletConfig);
-        extraContext.put(PORTLET_NAMESPACE, portletNamespace);
-        extraContext.put(DEFAULT_ACTION_FOR_MODE, actionMap.get(request.getPortletMode()));
-        // helpers to get access to request/session/application scope
-        extraContext.put("request", requestMap);
-        extraContext.put("session", sessionMap);
-        extraContext.put("application", applicationMap);
-        extraContext.put("parameters", parameterMap);
-        extraContext.put(MODE_NAMESPACE_MAP, modeMap);
-
-        extraContext.put(PHASE, phase);
-
-        AttributeMap attrMap = new AttributeMap(extraContext);
-        extraContext.put("attr", attrMap);
-
-        return extraContext;
-    }
-
-    /**
-     * Loads the action and executes it. This method first creates the action
-     * context from the given parameters then loads an <tt>ActionProxy</tt>
-     * from the given action name and namespace. After that, the action is
-     * executed and output channels throught the response object.
-     *
-     * @param request the HttpServletRequest object.
-     * @param response the HttpServletResponse object.
-     * @param mapping the action mapping.
-     * @param requestMap a Map of request attributes.
-     * @param parameterMap a Map of request parameters.
-     * @param sessionMap a Map of all session attributes.
-     * @param applicationMap a Map of all application attributes.
-     * @param portletNamespace the namespace or context of the action.
-     * @param phase The portlet phase (render or action, see
-     *        {@link PortletActionConstants})
-     */
-    public void serviceAction(PortletRequest request, PortletResponse response,
-            ActionMapping mapping, Map requestMap, Map parameterMap,
-            Map sessionMap, Map applicationMap, String portletNamespace,
-            Integer phase) throws PortletException {
-        LOG.debug("serviceAction");
-        Dispatcher.setInstance(dispatcherUtils);
-        HashMap extraContext = createContextMap(requestMap, parameterMap,
-                sessionMap, applicationMap, request, response,
-                getPortletConfig(), phase);
-        String actionName = mapping.getName();
-        String namespace = mapping.getNamespace();
-        try {
-            LOG.debug("Creating action proxy for name = " + actionName
-                    + ", namespace = " + namespace);
-            ActionProxy proxy = factory.createActionProxy(
-                    dispatcherUtils.getConfigurationManager().getConfiguration(), namespace,
-                    actionName, extraContext);
-            request.setAttribute("struts.valueStack", proxy.getInvocation()
-                    .getStack());
-            if (PortletActionConstants.RENDER_PHASE.equals(phase)
-                    && StringUtils.isNotEmpty(request
-                            .getParameter(EVENT_ACTION))) {
-
-                ActionProxy action = (ActionProxy) request.getPortletSession()
-                        .getAttribute(EVENT_ACTION);
-                if (action != null) {
-                    ValueStack stack = proxy.getInvocation().getStack();
-                    Object top = stack.pop();
-                    stack.push(action.getInvocation().getAction());
-                    stack.push(top);
-                }
-            }
-            proxy.execute();
-            if (PortletActionConstants.EVENT_PHASE.equals(phase)) {
-                // Store the executed action in the session for retrieval in the
-                // render phase.
-                ActionResponse actionResp = (ActionResponse) response;
-                request.getPortletSession().setAttribute(EVENT_ACTION, proxy);
-                actionResp.setRenderParameter(EVENT_ACTION, "true");
-            }
-        } catch (ConfigurationException e) {
-            LOG.error("Could not find action", e);
-            throw new PortletException("Could not find action " + actionName, e);
-        } catch (Exception e) {
-            LOG.error("Could not execute action", e);
-            throw new PortletException("Error executing action " + actionName,
-                    e);
-        }
-    }
-
-    /**
-     * Returns a Map of all application attributes. Copies all attributes from
-     * the {@link PortletActionContext}into an {@link ApplicationMap}.
-     * 
-     * @return a Map of all application attributes.
-     */
-    protected Map getApplicationMap() {
-        return new PortletApplicationMap(getPortletContext());
-    }
-
-    /**
-     * Gets the namespace of the action from the request. The namespace is the
-     * same as the portlet mode. E.g, view mode is mapped to namespace
-     * <code>view</code>, and edit mode is mapped to the namespace
-     * <code>edit</code>
-     * 
-     * @param request the PortletRequest object.
-     * @return the namespace of the action.
-     */
-    protected ActionMapping getActionMapping(PortletRequest request) {
-        ActionMapping mapping = new ActionMapping();
-        if (resetAction(request)) {
-            mapping = (ActionMapping) actionMap.get(request.getPortletMode());
-        } else {
-            String actionPath = request.getParameter(ACTION_PARAM);
-            if (StringUtils.isEmpty(actionPath)) {
-                mapping = (ActionMapping) actionMap.get(request
-                        .getPortletMode());
-            } else {
-                String namespace = "";
-                String action = actionPath;
-                int idx = actionPath.lastIndexOf('/');
-                if (idx >= 0) {
-                    namespace = actionPath.substring(0, idx);
-                    action = actionPath.substring(idx + 1);
-                }
-                mapping.setName(action);
-                mapping.setNamespace(namespace);
-            }
-        }
-        return mapping;
-    }
-
-    /**
-     * Get the namespace part of the action path.
-     * @param actionPath Full path to action
-     * @return The namespace part.
-     */
-    String getNamespace(String actionPath) {
-        int idx = actionPath.lastIndexOf('/');
-        String namespace = "";
-        if (idx >= 0) {
-            namespace = actionPath.substring(0, idx);
-        }
-        return namespace;
-    }
-
-    /**
-     * Get the action name part of the action path.
-     * @param actionPath Full path to action
-     * @return The action name.
-     */
-    String getActionName(String actionPath) {
-        int idx = actionPath.lastIndexOf('/');
-        String action = actionPath;
-        if (idx >= 0) {
-            action = actionPath.substring(idx + 1);
-        }
-        return action;
-    }
-
-    /**
-     * Returns a Map of all request parameters. This implementation just calls
-     * {@link PortletRequest#getParameterMap()}.
-     * 
-     * @param request the PortletRequest object.
-     * @return a Map of all request parameters.
-     * @throws IOException if an exception occurs while retrieving the parameter
-     *         map.
-     */
-    protected Map getParameterMap(PortletRequest request) throws IOException {
-        return new HashMap(request.getParameterMap());
-    }
-
-    /**
-     * Returns a Map of all request attributes. The default implementation is to
-     * wrap the request in a {@link RequestMap}. Override this method to
-     * customize how request attributes are mapped.
-     * 
-     * @param request the PortletRequest object.
-     * @return a Map of all request attributes.
-     */
-    protected Map getRequestMap(PortletRequest request) {
-        return new PortletRequestMap(request);
-    }
-
-    /**
-     * Returns a Map of all session attributes. The default implementation is to
-     * wrap the reqeust in a {@link SessionMap}. Override this method to
-     * customize how session attributes are mapped.
-     * 
-     * @param request the PortletRequest object.
-     * @return a Map of all session attributes.
-     */
-    protected Map getSessionMap(PortletRequest request) {
-        return new PortletSessionMap(request);
-    }
-
-    /**
-     * Convenience method to ease testing.
-     * @param factory
-     */
-    protected void setActionProxyFactory(ActionProxyFactory factory) {
-        this.factory = factory;
-    }
-
-    /**
-     * Check to see if the action parameter is valid for the current portlet mode. If the portlet
-     * mode has been changed with the portal widgets, the action name is invalid, since the
-     * action name belongs to the previous executing portlet mode. If this method evaluates to 
-     * <code>true</code> the <code>default&lt;Mode&gt;Action</code> is used instead.
-     * @param request The portlet request.
-     * @return <code>true</code> if the action should be reset.
-     */
-    private boolean resetAction(PortletRequest request) {
-        boolean reset = false;
-        Map paramMap = request.getParameterMap();
-        String[] modeParam = (String[]) paramMap.get(MODE_PARAM);
-        if (modeParam != null && modeParam.length == 1) {
-            String originatingMode = modeParam[0];
-            String currentMode = request.getPortletMode().toString();
-            if (!currentMode.equals(originatingMode)) {
-                reset = true;
-            }
-        }
-        return reset;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/result/PortletResult.java b/trunk/core/src/main/java/org/apache/struts2/portlet/result/PortletResult.java
deleted file mode 100644
index ba33f33..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/result/PortletResult.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.result;
-
-import java.io.IOException;
-import java.util.StringTokenizer;
-
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletException;
-import javax.portlet.PortletRequestDispatcher;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.dispatcher.StrutsResultSupport;
-import org.apache.struts2.portlet.PortletActionConstants;
-import org.apache.struts2.portlet.context.PortletActionContext;
-
-import com.opensymphony.xwork2.ActionInvocation;
-
-/**
- * Result type that includes a JSP to render.
- * 
- */
-public class PortletResult extends StrutsResultSupport {
-
-	private static final long serialVersionUID = 434251393926178567L;
-
-	/**
-     * Logger instance.
-     */
-    private static final Log LOG = LogFactory.getLog(PortletResult.class);
-
-    private String contentType = "text/html";
-
-    private String title;
-    
-    public PortletResult() {
-    	super();
-    }
-    
-    public PortletResult(String location) {
-    	super(location);
-    }
-
-    /**
-     * Execute the result. Obtains the
-     * {@link javax.portlet.PortletRequestDispatcher}from the
-     * {@link PortletActionContext}and includes the JSP.
-     * 
-     * @see com.opensymphony.xwork2.Result#execute(com.opensymphony.xwork2.ActionInvocation)
-     */
-    public void doExecute(String finalLocation,
-            ActionInvocation actionInvocation) throws Exception {
-
-        if (PortletActionContext.isRender()) {
-            executeRenderResult(finalLocation);
-        } else if (PortletActionContext.isEvent()) {
-            executeActionResult(finalLocation, actionInvocation);
-        } else {
-            executeRegularServletResult(finalLocation, actionInvocation);
-        }
-    }
-
-    /**
-     * Executes the regular servlet result.
-     *
-     * @param finalLocation
-     * @param actionInvocation
-     */
-    private void executeRegularServletResult(String finalLocation,
-            ActionInvocation actionInvocation) throws ServletException, IOException {
-        ServletContext ctx = ServletActionContext.getServletContext();
-        HttpServletRequest req = ServletActionContext.getRequest();
-        HttpServletResponse res = ServletActionContext.getResponse();
-        try {
-            ctx.getRequestDispatcher(finalLocation).include(req, res);
-        } catch (ServletException e) {
-            LOG.error("ServletException including " + finalLocation, e);
-            throw e;
-        } catch (IOException e) {
-            LOG.error("IOException while including result '" + finalLocation + "'", e);
-            throw e;
-        }
-    }
-
-    /**
-     * Executes the action result.
-     *
-     * @param finalLocation
-     * @param invocation
-     */
-    protected void executeActionResult(String finalLocation,
-            ActionInvocation invocation) {
-        LOG.debug("Executing result in Event phase");
-        ActionResponse res = PortletActionContext.getActionResponse();
-        LOG.debug("Setting event render parameter: " + finalLocation);
-        if (finalLocation.indexOf('?') != -1) {
-            convertQueryParamsToRenderParams(res, finalLocation
-                    .substring(finalLocation.indexOf('?') + 1));
-            finalLocation = finalLocation.substring(0, finalLocation
-                    .indexOf('?'));
-        }
-        if (finalLocation.endsWith(".action")) {
-            // View is rendered with a view action...luckily...
-            finalLocation = finalLocation.substring(0, finalLocation
-                    .lastIndexOf("."));
-            res.setRenderParameter(PortletActionConstants.ACTION_PARAM, finalLocation);
-        } else {
-            // View is rendered outside an action...uh oh...
-            res.setRenderParameter(PortletActionConstants.ACTION_PARAM, "renderDirect");
-            res.setRenderParameter("location", finalLocation);
-        }
-        res.setRenderParameter(PortletActionConstants.MODE_PARAM, PortletActionContext
-                .getRequest().getPortletMode().toString());
-    }
-
-    /**
-     * Converts the query params to render params.
-     *
-     * @param response
-     * @param queryParams
-     */
-    protected static void convertQueryParamsToRenderParams(
-            ActionResponse response, String queryParams) {
-        StringTokenizer tok = new StringTokenizer(queryParams, "&");
-        while (tok.hasMoreTokens()) {
-            String token = tok.nextToken();
-            String key = token.substring(0, token.indexOf('='));
-            String value = token.substring(token.indexOf('=') + 1);
-            response.setRenderParameter(key, value);
-        }
-    }
-
-    /**
-     * Executes the render result.
-     *
-     * @param finalLocation
-     * @throws PortletException
-     * @throws IOException
-     */
-    protected void executeRenderResult(final String finalLocation) throws PortletException, IOException {
-        LOG.debug("Executing result in Render phase");
-        PortletConfig cfg = PortletActionContext.getPortletConfig();
-        RenderRequest req = PortletActionContext.getRenderRequest();
-        RenderResponse res = PortletActionContext.getRenderResponse();
-        LOG.debug("PortletConfig: " + cfg);
-        LOG.debug("RenderRequest: " + req);
-        LOG.debug("RenderResponse: " + res);
-        res.setContentType(contentType);
-        if (StringUtils.isNotEmpty(title)) {
-            res.setTitle(title);
-        }
-        LOG.debug("Location: " + finalLocation);
-        PortletRequestDispatcher preparator = cfg.getPortletContext()
-                .getNamedDispatcher("preparator");
-        if(preparator == null) {
-            throw new PortletException("Cannot look up 'preparator' servlet. Make sure that you" +
-            		"have configured it correctly in the web.xml file.");
-        }
-        new IncludeTemplate() {
-            protected void when(PortletException e) {
-                LOG.error("PortletException while dispatching to 'preparator' servlet", e);
-            }
-            protected void when(IOException e) {
-                LOG.error("IOException while dispatching to 'preparator' servlet", e);
-            }
-        }.include(preparator, req, res);
-        PortletRequestDispatcher dispatcher = cfg.getPortletContext().getRequestDispatcher(finalLocation);
-        if(dispatcher == null) {
-            throw new PortletException("Could not locate dispatcher for '" + finalLocation + "'");
-        }
-        new IncludeTemplate() {
-            protected void when(PortletException e) {
-                LOG.error("PortletException while dispatching to '" + finalLocation + "'");
-            }
-            protected void when(IOException e) {
-                LOG.error("IOException while dispatching to '" + finalLocation + "'");
-            }
-        }.include(dispatcher, req, res);
-    }
-
-    /**
-     * Sets the content type.
-     *
-     * @param contentType The content type to set.
-     */
-    public void setContentType(String contentType) {
-        this.contentType = contentType;
-    }
-
-    /**
-     * Sets the title.
-     *
-     * @param title The title to set.
-     */
-    public void setTitle(String title) {
-        this.title = title;
-    }
-    
-    static class IncludeTemplate {
-        protected void include(PortletRequestDispatcher dispatcher, RenderRequest req, RenderResponse res) throws PortletException, IOException{
-            try {
-                dispatcher.include(req, res);
-            }
-            catch(PortletException e) {
-                when(e);
-                throw e;
-            }
-            catch(IOException e) {
-                when(e);
-                throw e;
-            }
-        }
-        
-        protected void when(PortletException e) {}
-        
-        protected void when(IOException e) {}
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java b/trunk/core/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java
deleted file mode 100644
index 313abdf..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.result;
-
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletException;
-import javax.portlet.PortletRequestDispatcher;
-import javax.servlet.Servlet;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspFactory;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.StrutsResultSupport;
-import org.apache.struts2.portlet.PortletActionConstants;
-import org.apache.struts2.portlet.context.PortletActionContext;
-import org.apache.struts2.views.JspSupportServlet;
-import org.apache.struts2.views.velocity.VelocityManager;
-import org.apache.velocity.Template;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.context.Context;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: description -->
- * 
- * Using the Servlet container's {@link JspFactory}, this result mocks a JSP
- * execution environment and then displays a Velocity template that will be
- * streamed directly to the servlet output.
- * 
- * <!-- END SNIPPET: description --> <p/><b>This result type takes the
- * following parameters: </b>
- * 
- * <!-- START SNIPPET: params -->
- * 
- * <ul>
- * 
- * <li><b>location (default) </b>- the location of the template to process.
- * </li>
- * 
- * <li><b>parse </b>- true by default. If set to false, the location param
- * will not be parsed for Ognl expressions.</li>
- * 
- * </ul>
- * <p>
- * This result follows the same rules from {@link StrutsResultSupport}.
- * </p>
- * 
- * <!-- END SNIPPET: params -->
- * 
- * <b>Example: </b>
- * 
- * <pre>
- * &lt;!-- START SNIPPET: example --&gt;
- *  &lt;result name=&quot;success&quot; type=&quot;velocity&quot;&gt;
- *    &lt;param name=&quot;location&quot;&gt;foo.vm&lt;/param&gt;
- *  &lt;/result&gt;
- *  &lt;!-- END SNIPPET: example --&gt;
- * </pre>
- * 
- */
-public class PortletVelocityResult extends StrutsResultSupport {
-
-	private static final long serialVersionUID = -8241086555872212274L;
-	
-	private static final Log log = LogFactory
-            .getLog(PortletVelocityResult.class);
-
-	public PortletVelocityResult() {
-		super();
-	}
-	
-	public PortletVelocityResult(String location) {
-		super(location);
-	}
-	
-    /* (non-Javadoc)
-     * @see org.apache.struts2.dispatcher.StrutsResultSupport#doExecute(java.lang.String, com.opensymphony.xwork2.ActionInvocation)
-     */
-    public void doExecute(String location, ActionInvocation invocation)
-            throws Exception {
-        if (PortletActionContext.isEvent()) {
-            executeActionResult(location, invocation);
-        } else if (PortletActionContext.isRender()) {
-            executeRenderResult(location, invocation);
-        }
-    }
-
-    /**
-     * Executes the result
-     * 
-     * @param location The location string
-     * @param invocation The action invocation
-     */
-    private void executeActionResult(String location,
-            ActionInvocation invocation) {
-        ActionResponse res = PortletActionContext.getActionResponse();
-        // View is rendered outside an action...uh oh...
-        res.setRenderParameter(PortletActionConstants.ACTION_PARAM,
-                "freemarkerDirect");
-        res.setRenderParameter("location", location);
-        res.setRenderParameter(PortletActionConstants.MODE_PARAM, PortletActionContext
-                .getRequest().getPortletMode().toString());
-
-    }
-
-    /**
-     * Creates a Velocity context from the action, loads a Velocity template and
-     * executes the template. Output is written to the servlet output stream.
-     * 
-     * @param finalLocation the location of the Velocity template
-     * @param invocation an encapsulation of the action execution state.
-     * @throws Exception if an error occurs when creating the Velocity context,
-     *         loading or executing the template or writing output to the
-     *         servlet response stream.
-     */
-    public void executeRenderResult(String finalLocation,
-            ActionInvocation invocation) throws Exception {
-        prepareServletActionContext();
-        ValueStack stack = ActionContext.getContext().getValueStack();
-
-        HttpServletRequest request = ServletActionContext.getRequest();
-        HttpServletResponse response = ServletActionContext.getResponse();
-        JspFactory jspFactory = null;
-        ServletContext servletContext = ServletActionContext
-                .getServletContext();
-        Servlet servlet = JspSupportServlet.jspSupportServlet;
-
-        VelocityManager.getInstance().init(servletContext);
-
-        boolean usedJspFactory = false;
-        PageContext pageContext = (PageContext) ActionContext.getContext().get(
-                ServletActionContext.PAGE_CONTEXT);
-
-        if (pageContext == null && servlet != null) {
-            jspFactory = JspFactory.getDefaultFactory();
-            pageContext = jspFactory.getPageContext(servlet, request, response,
-                    null, true, 8192, true);
-            ActionContext.getContext().put(ServletActionContext.PAGE_CONTEXT,
-                    pageContext);
-            usedJspFactory = true;
-        }
-
-        try {
-            String encoding = getEncoding(finalLocation);
-            String contentType = getContentType(finalLocation);
-
-            if (encoding != null) {
-                contentType = contentType + ";charset=" + encoding;
-            }
-
-            VelocityManager velocityManager = VelocityManager.getInstance();
-            Template t = getTemplate(stack,
-                    velocityManager.getVelocityEngine(), invocation,
-                    finalLocation, encoding);
-
-            Context context = createContext(velocityManager, stack, request,
-                    response, finalLocation);
-            Writer writer = new OutputStreamWriter(response.getOutputStream(),
-                    encoding);
-
-            response.setContentType(contentType);
-
-            t.merge(context, writer);
-
-            // always flush the writer (we used to only flush it if this was a
-            // jspWriter, but someone asked
-            // to do it all the time (WW-829). Since Velocity support is being
-            // deprecated, we'll oblige :)
-            writer.flush();
-        } catch (Exception e) {
-            log.error("Unable to render Velocity Template, '" + finalLocation
-                    + "'", e);
-            throw e;
-        } finally {
-            if (usedJspFactory) {
-                jspFactory.releasePageContext(pageContext);
-            }
-        }
-
-        return;
-    }
-
-    /**
-     * Retrieve the content type for this template. <p/>People can override
-     * this method if they want to provide specific content types for specific
-     * templates (eg text/xml).
-     * 
-     * @return The content type associated with this template (default
-     *         "text/html")
-     */
-    protected String getContentType(String templateLocation) {
-        return "text/html";
-    }
-
-    /**
-     * Retrieve the encoding for this template. <p/>People can override this
-     * method if they want to provide specific encodings for specific templates.
-     * 
-     * @return The encoding associated with this template (defaults to the value
-     *         of 'struts.i18n.encoding' property)
-     */
-    protected String getEncoding(String templateLocation) {
-        String encoding = (String) Settings
-                .get(StrutsConstants.STRUTS_I18N_ENCODING);
-        if (encoding == null) {
-            encoding = System.getProperty("file.encoding");
-        }
-        if (encoding == null) {
-            encoding = "UTF-8";
-        }
-        return encoding;
-    }
-
-    /**
-     * Given a value stack, a Velocity engine, and an action invocation, this
-     * method returns the appropriate Velocity template to render.
-     * 
-     * @param stack the value stack to resolve the location again (when parse
-     *        equals true)
-     * @param velocity the velocity engine to process the request against
-     * @param invocation an encapsulation of the action execution state.
-     * @param location the location of the template
-     * @param encoding the charset encoding of the template
-     * @return the template to render
-     * @throws Exception when the requested template could not be found
-     */
-    protected Template getTemplate(ValueStack stack,
-            VelocityEngine velocity, ActionInvocation invocation,
-            String location, String encoding) throws Exception {
-        if (!location.startsWith("/")) {
-            location = invocation.getProxy().getNamespace() + "/" + location;
-        }
-
-        Template template = velocity.getTemplate(location, encoding);
-
-        return template;
-    }
-
-    /**
-     * Creates the VelocityContext that we'll use to render this page.
-     * 
-     * @param velocityManager a reference to the velocityManager to use
-     * @param stack the value stack to resolve the location against (when parse
-     *        equals true)
-     * @param location the name of the template that is being used
-     * @return the a minted Velocity context.
-     */
-    protected Context createContext(VelocityManager velocityManager,
-            ValueStack stack, HttpServletRequest request,
-            HttpServletResponse response, String location) {
-        return velocityManager.createContext(stack, request, response);
-    }
-
-    /**
-     *  Prepares the servlet action context for this request
-     */
-    private void prepareServletActionContext() throws PortletException,
-            IOException {
-        PortletRequestDispatcher disp = PortletActionContext.getPortletConfig()
-                .getPortletContext().getNamedDispatcher("preparator");
-        disp.include(PortletActionContext.getRenderRequest(),
-                PortletActionContext.getRenderResponse());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java b/trunk/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java
deleted file mode 100644
index ee3920c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.util;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import javax.portlet.PortletMode;
-import javax.portlet.PortletSecurityException;
-import javax.portlet.PortletURL;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.portlet.WindowState;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.portlet.PortletActionConstants;
-import org.apache.struts2.portlet.context.PortletActionContext;
-
-/**
- * Helper class for creating Portlet URLs. Portlet URLs are fundamentally different from regular
- * servlet URLs since they never target the application itself; all requests go through the portlet
- * container and must therefore be programatically constructed using the 
- * {@link javax.portlet.RenderResponse#createActionURL()} and 
- * {@link javax.portlet.RenderResponse#createRenderURL()} APIs.
- * 
- */
-public class PortletUrlHelper {
-    public static final String ENCODING = "UTF-8";
-    
-    private static final Log LOG = LogFactory.getLog(PortletUrlHelper.class);
-
-    /**
-     * Create a portlet URL with for the specified action and namespace.
-     * 
-     * @param action The action the URL should invoke.
-     * @param namespace The namespace of the action to invoke.
-     * @param params The parameters of the URL.
-     * @param type The type of the url, either <tt>action</tt> or <tt>render</tt>
-     * @param mode The PortletMode of the URL.
-     * @param state The WindowState of the URL.
-     * @return The URL String.
-     */
-    public static String buildUrl(String action, String namespace, Map params,
-            String type, String mode, String state) {
-        return buildUrl(action, namespace, params, null, type, mode, state,
-                true, true);
-    }
-
-    /**
-     * Create a portlet URL with for the specified action and namespace. 
-     * 
-     * @see #buildUrl(String, String, Map, String, String, String)
-     */
-    public static String buildUrl(String action, String namespace, Map params,
-            String scheme, String type, String portletMode, String windowState,
-            boolean includeContext, boolean encodeResult) {
-        RenderRequest request = PortletActionContext.getRenderRequest();
-        RenderResponse response = PortletActionContext.getRenderResponse();
-        LOG.debug("Creating url. Action = " + action + ", Namespace = "
-                + namespace + ", Type = " + type);
-        namespace = prependNamespace(namespace, portletMode);
-        if(StringUtils.isEmpty(portletMode)) {
-            portletMode = PortletActionContext.getRenderRequest().getPortletMode().toString();
-        }
-        String result = null;
-        int paramStartIndex = action.indexOf('?');
-        if (paramStartIndex > 0) {
-            String value = action;
-            action = value.substring(0, value.indexOf('?'));
-            String queryStr = value.substring(paramStartIndex + 1);
-            StringTokenizer tok = new StringTokenizer(queryStr, "&");
-            while (tok.hasMoreTokens()) {
-                String paramVal = tok.nextToken();
-                String key = paramVal.substring(0, paramVal.indexOf('='));
-                String val = paramVal.substring(paramVal.indexOf('=') + 1);
-                params.put(key, new String[] { val });
-            }
-        }
-        if (StringUtils.isNotEmpty(namespace)) {
-            StringBuffer sb = new StringBuffer();
-            sb.append(namespace);
-            if(!action.startsWith("/") && !namespace.endsWith("/")) {
-                sb.append("/");
-            }
-            action = sb.append(action).toString();
-            LOG.debug("Resulting actionPath: " + action);
-        }
-        params.put(PortletActionConstants.ACTION_PARAM, new String[] { action });
-
-        PortletURL url = null;
-        if ("action".equalsIgnoreCase(type)) {
-            LOG.debug("Creating action url");
-            url = response.createActionURL();
-        } else {
-            LOG.debug("Creating render url");
-            url = response.createRenderURL();
-        }
-
-        params.put(PortletActionConstants.MODE_PARAM, portletMode);
-        url.setParameters(ensureParamsAreStringArrays(params));
-
-        if ("HTTPS".equalsIgnoreCase(scheme)) {
-            try {
-                url.setSecure(true);
-            } catch (PortletSecurityException e) {
-                LOG.error("Cannot set scheme to https", e);
-            }
-        }
-        try {
-            url.setPortletMode(getPortletMode(request, portletMode));
-            url.setWindowState(getWindowState(request, windowState));
-        } catch (Exception e) {
-            LOG.error("Unable to set mode or state:" + e.getMessage(), e);
-        }
-        result = url.toString();
-        // TEMP BUG-WORKAROUND FOR DOUBLE ESCAPING OF AMPERSAND
-        if(result.indexOf("&amp;") >= 0) {
-            result = StringUtils.replace(result, "&amp;", "&");
-        }
-        return result;
-
-    }
-
-    /**
-     * 
-     * Prepend the namespace configuration for the specified namespace and PortletMode.
-     * 
-     * @param namespace The base namespace.
-     * @param portletMode The PortletMode.
-     * 
-     * @return prepended namespace.
-     */
-    private static String prependNamespace(String namespace, String portletMode) {
-        StringBuffer sb = new StringBuffer();
-        PortletMode mode = PortletActionContext.getRenderRequest().getPortletMode();
-        if(StringUtils.isNotEmpty(portletMode)) {
-            mode = new PortletMode(portletMode);
-        }
-        String portletNamespace = PortletActionContext.getPortletNamespace();
-        String modeNamespace = (String)PortletActionContext.getModeNamespaceMap().get(mode);
-        LOG.debug("PortletNamespace: " + portletNamespace + ", modeNamespace: " + modeNamespace);
-        if(StringUtils.isNotEmpty(portletNamespace)) {
-            sb.append(portletNamespace);
-        }
-        if(StringUtils.isNotEmpty(modeNamespace)) {
-            if(!modeNamespace.startsWith("/")) {
-                sb.append("/");
-            }
-            sb.append(modeNamespace);
-        }
-        if(StringUtils.isNotEmpty(namespace)) {
-            if(!namespace.startsWith("/")) {
-                sb.append("/");
-            }
-            sb.append(namespace);
-        }
-        LOG.debug("Resulting namespace: " + sb);
-        return sb.toString();
-    }
-
-    /**
-     * Encode an url to a non Struts action resource, like stylesheet, image or
-     * servlet.
-     * 
-     * @param value
-     * @return encoded url to non Struts action resources.
-     */
-    public static String buildResourceUrl(String value, Map params) {
-        StringBuffer sb = new StringBuffer();
-        // Relative URLs are not allowed in a portlet
-        if (!value.startsWith("/")) {
-            sb.append("/");
-        }
-        sb.append(value);
-        if(params != null && params.size() > 0) {
-            sb.append("?");
-            Iterator it = params.keySet().iterator();
-            try {
-            while(it.hasNext()) {
-                String key = (String)it.next();
-                String val = (String)params.get(key);
-                
-                sb.append(URLEncoder.encode(key, ENCODING)).append("=");
-                sb.append(URLEncoder.encode(val, ENCODING));
-                if(it.hasNext()) {
-                    sb.append("&");
-                }
-            }
-            } catch (UnsupportedEncodingException e) {
-                throw new StrutsException("Encoding "+ENCODING+" not found");
-            }
-        }
-        RenderResponse resp = PortletActionContext.getRenderResponse();
-        RenderRequest req = PortletActionContext.getRenderRequest();
-        return resp.encodeURL(req.getContextPath() + sb.toString());
-    }
-
-    /**
-     * Will ensure that all entries in <code>params</code> are String arrays,
-     * as requried by the setParameters on the PortletURL.
-     * 
-     * @param params The parameters to the URL.
-     * @return A Map with all parameters as String arrays.
-     */
-    public static Map ensureParamsAreStringArrays(Map params) {
-        Map result = null;
-        if (params != null) {
-            result = new HashMap(params.size());
-            Iterator it = params.keySet().iterator();
-            while (it.hasNext()) {
-                Object key = it.next();
-                Object val = params.get(key);
-                if (val instanceof String[]) {
-                    result.put(key, val);
-                } else {
-                    result.put(key, new String[] { val.toString() });
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Convert the given String to a WindowState object.
-     * 
-     * @param portletReq The RenderRequest.
-     * @param windowState The WindowState as a String.
-     * @return The WindowState that mathces the <tt>windowState</tt> String, or if
-     * the Sring is blank, the current WindowState.
-     */
-    private static WindowState getWindowState(RenderRequest portletReq,
-            String windowState) {
-        WindowState state = portletReq.getWindowState();
-        if (StringUtils.isNotEmpty(windowState)) {
-            state = portletReq.getWindowState();
-            if ("maximized".equalsIgnoreCase(windowState)) {
-                state = WindowState.MAXIMIZED;
-            } else if ("normal".equalsIgnoreCase(windowState)) {
-                state = WindowState.NORMAL;
-            } else if ("minimized".equalsIgnoreCase(windowState)) {
-                state = WindowState.MINIMIZED;
-            }
-        }
-        if(state == null) {
-            state = WindowState.NORMAL;
-        }
-        return state;
-    }
-
-    /**
-     * Convert the given String to a PortletMode object.
-     * 
-     * @param portletReq The RenderRequest.
-     * @param portletMode The PortletMode as a String.
-     * @return The PortletMode that mathces the <tt>portletMode</tt> String, or if
-     * the Sring is blank, the current PortletMode.
-     */
-    private static PortletMode getPortletMode(RenderRequest portletReq,
-            String portletMode) {
-        PortletMode mode = portletReq.getPortletMode();
-
-        if (StringUtils.isNotEmpty(portletMode)) {
-            mode = portletReq.getPortletMode();
-            if ("edit".equalsIgnoreCase(portletMode)) {
-                mode = PortletMode.EDIT;
-            } else if ("view".equalsIgnoreCase(portletMode)) {
-                mode = PortletMode.VIEW;
-            } else if ("help".equalsIgnoreCase(portletMode)) {
-                mode = PortletMode.HELP;
-            }
-        }
-        if(mode == null) {
-            mode = PortletMode.VIEW;
-        }
-        return mode;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java b/trunk/core/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java
deleted file mode 100644
index 45d1e4d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.spring;
-
-import javax.servlet.ServletContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.util.ObjectFactoryInitializable;
-import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
-import org.springframework.context.ApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
-
-import com.opensymphony.xwork2.spring.SpringObjectFactory;
-
-
-
-/**
- * Struts object factory that integrates with Spring.
- * <p/>
- * Spring should be loaded using a web context listener
- * <code>org.springframework.web.context.ContextLoaderListener</code> defined in <code>web.xml</code>.
- *
- */
-public class StrutsSpringObjectFactory extends SpringObjectFactory implements ObjectFactoryInitializable {
-    private static final Log log = LogFactory.getLog(StrutsSpringObjectFactory.class);
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.util.ObjectFactoryInitializable#init(javax.servlet.ServletContext)
-     */
-    public void init(ServletContext servletContext) {
-        log.info("Initializing Struts-Spring integration...");
-
-        ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
-        if (appContext == null) {
-            // uh oh! looks like the lifecycle listener wasn't installed. Let's inform the user
-            String message = "********** FATAL ERROR STARTING UP SPRING-STRUTS INTEGRATION **********\n" +
-                    "Looks like the Spring listener was not configured for your web app! \n" +
-                    "Nothing will work until WebApplicationContextUtils returns a valid ApplicationContext.\n" +
-                    "You might need to add the following to web.xml: \n" +
-                    "    <listener>\n" +
-                    "        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>\n" +
-                    "    </listener>";
-            log.fatal(message);
-            return;
-        }
-
-        this.setApplicationContext(appContext);
-
-        String autoWire = Settings.get(StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE);
-        int type = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME;   // default
-        if ("name".equals(autoWire)) {
-            type = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME;
-        } else if ("type".equals(autoWire)) {
-            type = AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE;
-        } else if ("auto".equals(autoWire)) {
-            type = AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT;
-        } else if ("constructor".equals(autoWire)) {
-            type = AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR;
-        }
-        this.setAutowireStrategy(type);
-
-        boolean useClassCache = "true".equals(Settings.get(StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE));
-        this.setUseClassCache(useClassCache);
-
-        log.info("... initialized Struts-Spring integration successfully");
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/spring/lifecycle/SpringExternalReferenceResolverSetupListener.java b/trunk/core/src/main/java/org/apache/struts2/spring/lifecycle/SpringExternalReferenceResolverSetupListener.java
deleted file mode 100644
index b986885..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/spring/lifecycle/SpringExternalReferenceResolverSetupListener.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.spring.lifecycle;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.dispatcher.DispatcherListener;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.web.context.support.WebApplicationContextUtils;
-
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ExternalReferenceResolver;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-
-/**
- * Setup any {@link com.opensymphony.xwork2.config.ExternalReferenceResolver}s
- * that implement the ApplicationContextAware interface from the Spring
- * framework. Relies on Spring's
- * {@link org.springframework.web.context.ContextLoaderListener}having been
- * called first.
- */
-public class SpringExternalReferenceResolverSetupListener implements
-        ServletContextListener {
-    
-    private Map<ServletContext,Listener> listeners = new HashMap<ServletContext,Listener>();
-    
-    /* (non-Javadoc)
-     * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
-     */
-    public synchronized void contextDestroyed(ServletContextEvent event) {
-        Listener l = listeners.get(event.getServletContext());
-        Dispatcher.removeDispatcherListener(l);
-        listeners.remove(event.getServletContext());
-    }
-
-    /* (non-Javadoc)
-     * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
-     */
-    public synchronized void contextInitialized(ServletContextEvent event) {
-        Listener l = new Listener(event.getServletContext());
-        Dispatcher.addDispatcherListener(l);
-        listeners.put(event.getServletContext(), l);
-    }
-    
-    /**
-     * Handles initializing and cleaning up the dispatcher
-     * @author brownd
-     *
-     */
-    private class Listener implements DispatcherListener {
-
-        private ServletContext servletContext;
-        
-        /**
-         * Constructs the listener
-         * 
-         * @param ctx The servlet context
-         */
-        public Listener(ServletContext ctx) {
-            this.servletContext = ctx;
-        }
-        
-        /* (non-Javadoc)
-         * @see org.apache.struts2.dispatcher.DispatcherListener#dispatcherInitialized(org.apache.struts2.dispatcher.Dispatcher)
-         */
-        public void dispatcherInitialized(Dispatcher du) {
-            ApplicationContext appContext = WebApplicationContextUtils
-            .getWebApplicationContext(servletContext);
-
-            Configuration xworkConfig = du.getConfigurationManager().getConfiguration();
-            Map packageConfigs = xworkConfig.getPackageConfigs();
-            Iterator i = packageConfigs.values().iterator();
-        
-            while (i.hasNext()) {
-                PackageConfig packageConfig = (PackageConfig) i.next();
-                ExternalReferenceResolver resolver = packageConfig.getExternalRefResolver();
-                if (resolver == null || !(resolver instanceof ApplicationContextAware))
-                    continue;
-                ApplicationContextAware contextAware = (ApplicationContextAware) resolver;
-                contextAware.setApplicationContext(appContext);
-            }
-            
-        }
-
-        /* (non-Javadoc)
-         * @see org.apache.struts2.dispatcher.DispatcherListener#dispatcherDestroyed(org.apache.struts2.dispatcher.Dispatcher)
-         */
-        public void dispatcherDestroyed(Dispatcher du) {
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/AppendIteratorFilter.java b/trunk/core/src/main/java/org/apache/struts2/util/AppendIteratorFilter.java
deleted file mode 100644
index a148e65..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/AppendIteratorFilter.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import com.opensymphony.xwork2.Action;
-
-
-/**
- * A bean that takes several iterators and outputs them in sequence
- *
- * @see org.apache.struts2.components.AppendIterator
- * @see org.apache.struts2.views.jsp.iterator.AppendIteratorTag
- */
-public class AppendIteratorFilter extends IteratorFilterSupport implements Iterator, Action {
-
-    List iterators = new ArrayList();
-
-    // Attributes ----------------------------------------------------
-    List sources = new ArrayList();
-
-
-    // Public --------------------------------------------------------
-    public void setSource(Object anIterator) {
-        sources.add(anIterator);
-    }
-
-    // Action implementation -----------------------------------------
-    public String execute() {
-        // Make source transformations
-        for (int i = 0; i < sources.size(); i++) {
-            Object source = sources.get(i);
-            iterators.add(getIterator(source));
-        }
-
-        return SUCCESS;
-    }
-
-    // Iterator implementation ---------------------------------------
-    public boolean hasNext() {
-        if (iterators.size() > 0) {
-            return (((Iterator) iterators.get(0)).hasNext());
-        } else {
-            return false;
-        }
-    }
-
-    public Object next() {
-        try {
-            return ((Iterator) iterators.get(0)).next();
-        } finally {
-            if (iterators.size() > 0) {
-                if (!((Iterator) iterators.get(0)).hasNext()) {
-                    iterators.remove(0);
-                }
-            }
-        }
-    }
-
-    public void remove() {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/AttributeMap.java b/trunk/core/src/main/java/org/apache/struts2/util/AttributeMap.java
deleted file mode 100644
index 93b04cc..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/AttributeMap.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.jsp.PageContext;
-
-import org.apache.struts2.ServletActionContext;
-
-
-/**
- * A Map that holds 4 levels of scope.
- * <p/>
- * The scopes are the ones known in the web world.:
- * <ul>
- *   <li>Page scope</li>
- *   <li>Request scope</li>
- *   <li>Session scope</li>
- *   <li>Application scope</li>
- * </ul>
- * A object is searched in the order above, starting from page and ending at application scope.
- *
- */
-public class AttributeMap implements Map {
-
-    protected static final String UNSUPPORTED = "method makes no sense for a simplified map";
-
-
-    Map context;
-
-
-    public AttributeMap(Map context) {
-        this.context = context;
-    }
-
-
-    public boolean isEmpty() {
-        throw new UnsupportedOperationException(UNSUPPORTED);
-    }
-
-    public void clear() {
-        throw new UnsupportedOperationException(UNSUPPORTED);
-    }
-
-    public boolean containsKey(Object key) {
-        return (get(key) != null);
-    }
-
-    public boolean containsValue(Object value) {
-        throw new UnsupportedOperationException(UNSUPPORTED);
-    }
-
-    public Set entrySet() {
-        return Collections.EMPTY_SET;
-    }
-
-    public Object get(Object key) {
-        PageContext pc = getPageContext();
-
-        if (pc == null) {
-            Map request = (Map) context.get("request");
-            Map session = (Map) context.get("session");
-            Map application = (Map) context.get("application");
-
-            if ((request != null) && (request.get(key) != null)) {
-                return request.get(key);
-            } else if ((session != null) && (session.get(key) != null)) {
-                return session.get(key);
-            } else if ((application != null) && (application.get(key) != null)) {
-                return application.get(key);
-            }
-        } else {
-            try{
-                return pc.findAttribute(key.toString());
-            }catch (NullPointerException npe){
-                return null;
-            }
-        }
-
-        return null;
-    }
-
-    public Set keySet() {
-        return Collections.EMPTY_SET;
-    }
-
-    public Object put(Object key, Object value) {
-        PageContext pc = getPageContext();
-        if (pc != null) {
-            pc.setAttribute(key.toString(), value);
-        }
-
-        return null;
-    }
-
-    public void putAll(Map t) {
-        throw new UnsupportedOperationException(UNSUPPORTED);
-    }
-
-    public Object remove(Object key) {
-        throw new UnsupportedOperationException(UNSUPPORTED);
-    }
-
-    public int size() {
-        throw new UnsupportedOperationException(UNSUPPORTED);
-    }
-
-    public Collection values() {
-        return Collections.EMPTY_SET;
-    }
-
-    private PageContext getPageContext() {
-        return (PageContext) context.get(ServletActionContext.PAGE_CONTEXT);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/ClassLoaderUtils.java b/trunk/core/src/main/java/org/apache/struts2/util/ClassLoaderUtils.java
deleted file mode 100644
index b07e648..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/ClassLoaderUtils.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-
-/**
- * This class is extremely useful for loading resources and classes in a fault tolerant manner
- * that works across different applications servers.
- * <p/>
- * It has come out of many months of frustrating use of multiple application servers at Atlassian,
- * please don't change things unless you're sure they're not going to break in one server or another!
- *
- */
-public class ClassLoaderUtils {
-
-    /**
-     * Load a given resource.
-     * <p/>
-     * This method will try to load the resource using the following methods (in order):
-     * <ul>
-     * <li>From {@link Thread#getContextClassLoader() Thread.currentThread().getContextClassLoader()}
-     * <li>From {@link Class#getClassLoader() ClassLoaderUtil.class.getClassLoader()}
-     * <li>From the {@link Class#getClassLoader() callingClass.getClassLoader() }
-     * </ul>
-     *
-     * @param resourceName The name of the resource to load
-     * @param callingClass The Class object of the calling object
-     */
-    public static URL getResource(String resourceName, Class callingClass) {
-        URL url = null;
-
-        url = Thread.currentThread().getContextClassLoader().getResource(resourceName);
-
-        if (url == null) {
-            url = ClassLoaderUtils.class.getClassLoader().getResource(resourceName);
-        }
-
-        if (url == null) {
-            url = callingClass.getClassLoader().getResource(resourceName);
-        }
-
-        return url;
-    }
-
-    /**
-     * This is a convenience method to load a resource as a stream.
-     * <p/>
-     * The algorithm used to find the resource is given in getResource()
-     *
-     * @param resourceName The name of the resource to load
-     * @param callingClass The Class object of the calling object
-     */
-    public static InputStream getResourceAsStream(String resourceName, Class callingClass) {
-        URL url = getResource(resourceName, callingClass);
-
-        try {
-            return (url != null) ? url.openStream() : null;
-        } catch (IOException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Load a class with a given name.
-     * <p/>
-     * It will try to load the class in the following order:
-     * <ul>
-     * <li>From {@link Thread#getContextClassLoader() Thread.currentThread().getContextClassLoader()}
-     * <li>Using the basic {@link Class#forName(java.lang.String) }
-     * <li>From {@link Class#getClassLoader() ClassLoaderUtil.class.getClassLoader()}
-     * <li>From the {@link Class#getClassLoader() callingClass.getClassLoader() }
-     * </ul>
-     *
-     * @param className    The name of the class to load
-     * @param callingClass The Class object of the calling object
-     * @throws ClassNotFoundException If the class cannot be found anywhere.
-     */
-    public static Class loadClass(String className, Class callingClass) throws ClassNotFoundException {
-        try {
-            return Thread.currentThread().getContextClassLoader().loadClass(className);
-        } catch (ClassNotFoundException e) {
-            try {
-                return Class.forName(className);
-            } catch (ClassNotFoundException ex) {
-                try {
-                    return ClassLoaderUtils.class.getClassLoader().loadClass(className);
-                } catch (ClassNotFoundException exc) {
-                    return callingClass.getClassLoader().loadClass(className);
-                }
-            }
-        }
-    }
-
-    /**
-     * Prints the current classloader hierarchy - useful for debugging.
-     */
-    public static void printClassLoader() {
-        System.out.println("ClassLoaderUtils.printClassLoader");
-        printClassLoader(Thread.currentThread().getContextClassLoader());
-    }
-
-    /**
-     * Prints the classloader hierarchy from a given classloader - useful for debugging.
-     */
-    public static void printClassLoader(ClassLoader cl) {
-        System.out.println("ClassLoaderUtils.printClassLoader(cl = " + cl + ")");
-
-        if (cl != null) {
-            printClassLoader(cl.getParent());
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/ContainUtil.java b/trunk/core/src/main/java/org/apache/struts2/util/ContainUtil.java
deleted file mode 100644
index d109342..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/ContainUtil.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.lang.reflect.Array;
-import java.util.Collection;
-import java.util.Map;
-
-
-/**
- * <code>ContainUtil</code> will check if object 1 contains object 2.
- * Object 1 may be an Object, array, Collection, or a Map
- *
- */
-public class ContainUtil {
-
-    public static boolean contains(Object obj1, Object obj2) {
-        if ((obj1 == null) || (obj2 == null)) {
-            //log.debug("obj1 or obj2 are null.");
-            return false;
-        }
-
-        if (obj1 instanceof Map) {
-            if (((Map) obj1).containsValue(obj2)) {
-                //log.debug("obj1 is a map and contains obj2");
-                return true;
-            }
-        } else if (obj1 instanceof Collection) {
-            if (((Collection) obj1).contains(obj2)) {
-                //log.debug("obj1 is a collection and contains obj2");
-                return true;
-            }
-        } else if (obj1.getClass().isArray()) {
-            for (int i = 0; i < Array.getLength(obj1); i++) {
-                Object value = null;
-                value = Array.get(obj1, i);
-
-                if (value.equals(obj2)) {
-                    //log.debug("obj1 is an array and contains obj2");
-                    return true;
-                }
-            }
-        } else if (obj1.equals(obj2)) {
-            //log.debug("obj1 is an object and equals obj2");
-            return true;
-        }
-
-        //log.debug("obj1 does not contain obj2: " + obj1 + ", " + obj2);
-        return false;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/Counter.java b/trunk/core/src/main/java/org/apache/struts2/util/Counter.java
deleted file mode 100644
index ad5e53d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/Counter.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.io.Serializable;
-
-
-/**
- * A bean that can be used to keep track of a counter.
- * <p/>
- * Since it is an Iterator it can be used by the iterator tag
- *
- */
-public class Counter implements java.util.Iterator, Serializable {
-
-	private static final long serialVersionUID = 2796965884308060179L;
-
-	boolean wrap = false;
-
-    // Attributes ----------------------------------------------------
-    long first = 1;
-    long current = first;
-    long interval = 1;
-    long last = -1;
-
-
-    public void setAdd(long addition) {
-        current += addition;
-    }
-
-    public void setCurrent(long current) {
-        this.current = current;
-    }
-
-    public long getCurrent() {
-        return current;
-    }
-
-    public void setFirst(long first) {
-        this.first = first;
-        current = first;
-    }
-
-    public long getFirst() {
-        return first;
-    }
-
-    public void setInterval(long interval) {
-        this.interval = interval;
-    }
-
-    public long getInterval() {
-        return interval;
-    }
-
-    public void setLast(long last) {
-        this.last = last;
-    }
-
-    public long getLast() {
-        return last;
-    }
-
-    // Public --------------------------------------------------------
-    public long getNext() {
-        long next = current;
-        current += interval;
-
-        if (wrap && (current > last)) {
-            current -= ((1 + last) - first);
-        }
-
-        return next;
-    }
-
-    public long getPrevious() {
-        current -= interval;
-
-        if (wrap && (current < first)) {
-            current += (last - first + 1);
-        }
-
-        return current;
-    }
-
-    public void setWrap(boolean wrap) {
-        this.wrap = wrap;
-    }
-
-    public boolean isWrap() {
-        return wrap;
-    }
-
-    public boolean hasNext() {
-        return ((last == -1) || wrap) ? true : (current <= last);
-    }
-
-    public Object next() {
-        return new Long(getNext());
-    }
-
-    public void remove() {
-        // Do nothing
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/DateFormatter.java b/trunk/core/src/main/java/org/apache/struts2/util/DateFormatter.java
deleted file mode 100644
index 61e569f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/DateFormatter.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-
-/**
- * A bean that can be used to format dates
- *
- */
-public class DateFormatter {
-
-    Date date;
-    DateFormat format;
-
-    // Attributes ----------------------------------------------------
-    DateFormat parser;
-
-
-    // Public --------------------------------------------------------
-    public DateFormatter() {
-        this.parser = new SimpleDateFormat();
-        this.format = new SimpleDateFormat();
-        this.date = new Date();
-    }
-
-
-    public void setDate(String date) {
-        try {
-            this.date = parser.parse(date);
-        } catch (ParseException e) {
-            throw new IllegalArgumentException(e.getMessage());
-        }
-    }
-
-    public void setDate(Date date) {
-        this.date = date;
-    }
-
-    public void setDate(int date) {
-        setDate(Integer.toString(date));
-    }
-
-    public Date getDate() {
-        return this.date;
-    }
-
-    public void setFormat(String format) {
-        this.format = new SimpleDateFormat(format);
-    }
-
-    public void setFormat(DateFormat format) {
-        this.format = format;
-    }
-
-    public String getFormattedDate() {
-        return format.format(date);
-    }
-
-    public void setParseFormat(String format) {
-        this.parser = new SimpleDateFormat(format);
-    }
-
-    public void setParser(DateFormat parser) {
-        this.parser = parser;
-    }
-
-    public void setTime(long time) {
-        date.setTime(time);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/FastByteArrayOutputStream.java b/trunk/core/src/main/java/org/apache/struts2/util/FastByteArrayOutputStream.java
deleted file mode 100644
index e3dde75..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/FastByteArrayOutputStream.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.RandomAccessFile;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-
-/**
- * A speedy implementation of ByteArrayOutputStream. It's not synchronized, and it
- * does not copy buffers when it's expanded. There's also no copying of the internal buffer
- * if it's contents is extracted with the writeTo(stream) method.
- *
- */
-public class FastByteArrayOutputStream extends OutputStream {
-
-    // Static --------------------------------------------------------
-    private static final int DEFAULT_BLOCK_SIZE = 8192;
-
-
-    private LinkedList buffers;
-
-    // Attributes ----------------------------------------------------
-    // internal buffer
-    private byte[] buffer;
-
-    // is the stream closed?
-    private boolean closed;
-    private int blockSize;
-    private int index;
-    private int size;
-
-
-    // Constructors --------------------------------------------------
-    public FastByteArrayOutputStream() {
-        this(DEFAULT_BLOCK_SIZE);
-    }
-
-    public FastByteArrayOutputStream(int aSize) {
-        blockSize = aSize;
-        buffer = new byte[blockSize];
-    }
-
-
-    public int getSize() {
-        return size + index;
-    }
-
-    public void close() {
-        closed = true;
-    }
-
-    public byte[] toByteArray() {
-        byte[] data = new byte[getSize()];
-
-        // Check if we have a list of buffers
-        int pos = 0;
-
-        if (buffers != null) {
-            Iterator iter = buffers.iterator();
-
-            while (iter.hasNext()) {
-                byte[] bytes = (byte[]) iter.next();
-                System.arraycopy(bytes, 0, data, pos, blockSize);
-                pos += blockSize;
-            }
-        }
-
-        // write the internal buffer directly
-        System.arraycopy(buffer, 0, data, pos, index);
-
-        return data;
-    }
-
-    public String toString() {
-        return new String(toByteArray());
-    }
-
-    // OutputStream overrides ----------------------------------------
-    public void write(int datum) throws IOException {
-        if (closed) {
-            throw new IOException("Stream closed");
-        } else {
-            if (index == blockSize) {
-                addBuffer();
-            }
-
-            // store the byte
-            buffer[index++] = (byte) datum;
-        }
-    }
-
-    public void write(byte[] data, int offset, int length) throws IOException {
-        if (data == null) {
-            throw new NullPointerException();
-        } else if ((offset < 0) || ((offset + length) > data.length) || (length < 0)) {
-            throw new IndexOutOfBoundsException();
-        } else if (closed) {
-            throw new IOException("Stream closed");
-        } else {
-            if ((index + length) > blockSize) {
-                int copyLength;
-
-                do {
-                    if (index == blockSize) {
-                        addBuffer();
-                    }
-
-                    copyLength = blockSize - index;
-
-                    if (length < copyLength) {
-                        copyLength = length;
-                    }
-
-                    System.arraycopy(data, offset, buffer, index, copyLength);
-                    offset += copyLength;
-                    index += copyLength;
-                    length -= copyLength;
-                } while (length > 0);
-            } else {
-                // Copy in the subarray
-                System.arraycopy(data, offset, buffer, index, length);
-                index += length;
-            }
-        }
-    }
-
-    // Public
-    public void writeTo(OutputStream out) throws IOException {
-        // Check if we have a list of buffers
-        if (buffers != null) {
-            Iterator iter = buffers.iterator();
-
-            while (iter.hasNext()) {
-                byte[] bytes = (byte[]) iter.next();
-                out.write(bytes, 0, blockSize);
-            }
-        }
-
-        // write the internal buffer directly
-        out.write(buffer, 0, index);
-    }
-
-    public void writeTo(RandomAccessFile out) throws IOException {
-        // Check if we have a list of buffers
-        if (buffers != null) {
-            Iterator iter = buffers.iterator();
-
-            while (iter.hasNext()) {
-                byte[] bytes = (byte[]) iter.next();
-                out.write(bytes, 0, blockSize);
-            }
-        }
-
-        // write the internal buffer directly
-        out.write(buffer, 0, index);
-    }
-
-    public void writeTo(Writer out, String encoding) throws IOException {
-        // Check if we have a list of buffers
-        if (buffers != null) {
-            Iterator iter = buffers.iterator();
-
-            while (iter.hasNext()) {
-                byte[] bytes = (byte[]) iter.next();
-
-                if (encoding != null) {
-                    out.write(new String(bytes, encoding));
-                } else {
-                    out.write(new String(bytes));
-                }
-            }
-        }
-
-        // write the internal buffer directly
-        if (encoding != null) {
-            out.write(new String(buffer, 0, index, encoding));
-        } else {
-            out.write(new String(buffer, 0, index));
-        }
-    }
-
-    /**
-     * Create a new buffer and store the
-     * current one in linked list
-     */
-    protected void addBuffer() {
-        if (buffers == null) {
-            buffers = new LinkedList();
-        }
-
-        buffers.addLast(buffer);
-
-        buffer = new byte[blockSize];
-        size += index;
-        index = 0;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/InvocationSessionStore.java b/trunk/core/src/main/java/org/apache/struts2/util/InvocationSessionStore.java
deleted file mode 100644
index 5311968..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/InvocationSessionStore.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * InvocationSessionStore
- *
- */
-public class InvocationSessionStore {
-
-    private static final String INVOCATION_MAP_KEY = "org.apache.struts2.util.InvocationSessionStore.invocationMap";
-
-
-    private InvocationSessionStore() {
-    }
-
-
-    /**
-     * Checks the Map in the Session for the key and the token. If the
-     * ActionInvocation is saved in the Session, the ValueStack from the
-     * ActionProxy associated with the ActionInvocation is set into the
-     * ActionContext and the ActionInvocation is returned.
-     *
-     * @param key the name the DefaultActionInvocation and ActionContext were saved as
-     * @return the DefaultActionInvocation saved using the key, or null if none was found
-     */
-    public static ActionInvocation loadInvocation(String key, String token) {
-        InvocationContext invocationContext = (InvocationContext) getInvocationMap().get(key);
-
-        if ((invocationContext == null) || !invocationContext.token.equals(token)) {
-            return null;
-        }
-
-        ValueStack stack = invocationContext.invocation.getStack();
-        ActionContext.getContext().setValueStack(stack);
-
-        return invocationContext.invocation;
-    }
-
-    /**
-     * Stores the DefaultActionInvocation and ActionContext into the Session using the provided key for loading later using
-     * {@link #loadInvocation}
-     *
-     * @param key
-     * @param invocation
-     */
-    public static void storeInvocation(String key, String token, ActionInvocation invocation) {
-        InvocationContext invocationContext = new InvocationContext(invocation, token);
-        Map invocationMap = getInvocationMap();
-        invocationMap.put(key, invocationContext);
-        setInvocationMap(invocationMap);
-    }
-
-    static void setInvocationMap(Map invocationMap) {
-        Map session = ActionContext.getContext().getSession();
-
-        if (session == null) {
-            throw new IllegalStateException("Unable to access the session.");
-        }
-
-        session.put(INVOCATION_MAP_KEY, invocationMap);
-    }
-
-    static Map getInvocationMap() {
-        Map session = ActionContext.getContext().getSession();
-
-        if (session == null) {
-            throw new IllegalStateException("Unable to access the session.");
-        }
-
-        Map invocationMap = (Map) session.get(INVOCATION_MAP_KEY);
-
-        if (invocationMap == null) {
-            invocationMap = new HashMap();
-            setInvocationMap(invocationMap);
-        }
-
-        return invocationMap;
-    }
-
-
-    private static class InvocationContext implements Serializable {
-    	
-		private static final long serialVersionUID = -286697666275777888L;
-		
-		ActionInvocation invocation;
-        String token;
-
-        public InvocationContext(ActionInvocation invocation, String token) {
-            this.invocation = invocation;
-            this.token = token;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/IteratorFilterSupport.java b/trunk/core/src/main/java/org/apache/struts2/util/IteratorFilterSupport.java
deleted file mode 100644
index 5f3a269..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/IteratorFilterSupport.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.Enumeration;
-import java.util.Iterator;
-
-
-/**
- * A base class for iterator filters
- *
- */
-public abstract class IteratorFilterSupport {
-
-    // Protected implementation --------------------------------------
-    protected Object getIterator(Object source) {
-        return MakeIterator.convert(source);
-    }
-
-
-    // Wrapper for enumerations
-    public class EnumerationIterator implements Iterator {
-        Enumeration enumeration;
-
-        public EnumerationIterator(Enumeration aEnum) {
-            enumeration = aEnum;
-        }
-
-        public boolean hasNext() {
-            return enumeration.hasMoreElements();
-        }
-
-        public Object next() {
-            return enumeration.nextElement();
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException("Remove is not supported in IteratorFilterSupport.");
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/IteratorGenerator.java b/trunk/core/src/main/java/org/apache/struts2/util/IteratorGenerator.java
deleted file mode 100644
index 6bf81d6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/IteratorGenerator.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.Action;
-
-
-/**
- * A bean that generates an iterator filled with a given object depending on the count,
- * separator and converter defined. It is being used by IteratorGeneratorTag. 
- *
- */
-public class IteratorGenerator implements Iterator, Action {
-	
-	private static final Log _log = LogFactory.getLog(IteratorGenerator.class);
-
-    List values;
-    Object value;
-    String separator;
-    Converter converter;
-
-    // Attributes ----------------------------------------------------
-    int count = 0;
-    int currentCount = 0;
-
-
-    public void setCount(int aCount) {
-        this.count = aCount;
-    }
-
-    public boolean getHasNext() {
-        return hasNext();
-    }
-
-    public Object getNext() {
-        return next();
-    }
-
-    public void setSeparator(String aChar) {
-        separator = aChar;
-    }
-    
-    public void setConverter(Converter aConverter) {
-    	converter = aConverter;
-    }
-
-    // Public --------------------------------------------------------
-    public void setValues(Object aValue) {
-        value = aValue;
-    }
-
-    // Action implementation -----------------------------------------
-    public String execute() {
-        if (value == null) {
-            return ERROR;
-        } else {
-            values = new ArrayList();
-
-            if (separator != null) {
-                StringTokenizer tokens = new StringTokenizer(value.toString(), separator);
-
-                while (tokens.hasMoreTokens()) {
-                	String token = tokens.nextToken().trim();
-                	if (converter != null) {
-                		try {
-                			Object convertedObj = converter.convert(token);
-                			values.add(convertedObj);
-                		}
-                		catch(Exception e) { // make sure things, goes on, we just ignore the bad ones
-                			_log.warn("unable to convert ["+token+"], skipping this token, it will not appear in the generated iterator", e);
-                		}
-                	}
-                	else {
-                		values.add(token);
-                	}
-                }
-            } else {
-                values.add(value.toString());
-            }
-
-            // Count default is the size of the list of values
-            if (count == 0) {
-                count = values.size();
-            }
-
-            return SUCCESS;
-        }
-    }
-
-    // Iterator implementation ---------------------------------------
-    public boolean hasNext() {
-        return (value == null) ? false : ((currentCount < count) || (count == -1));
-    }
-
-    public Object next() {
-        try {
-            return values.get(currentCount % values.size());
-        } finally {
-            currentCount++;
-        }
-    }
-
-    public void remove() {
-        throw new UnsupportedOperationException("Remove is not supported in IteratorGenerator.");
-    }
-    
-    
-    // Inner class --------------------------------------------------
-    /**
-     * Interface for converting each separated token into an Object of choice.
-     */
-    public static interface Converter {
-    	Object convert(String token) throws Exception;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/ListEntry.java b/trunk/core/src/main/java/org/apache/struts2/util/ListEntry.java
deleted file mode 100644
index db7b195..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/ListEntry.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-/**
- * Entry in a list.
- *
- */
-public class ListEntry {
-
-    final private Object key;
-    final private Object value;
-    final private boolean isSelected;
-
-
-    public ListEntry(Object key, Object value, boolean isSelected) {
-        this.key = key;
-        this.value = value;
-        this.isSelected = isSelected;
-    }
-
-
-    public boolean getIsSelected() {
-        return isSelected;
-    }
-
-    public Object getKey() {
-        return key;
-    }
-
-    public Object getValue() {
-        return value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/MakeIterator.java b/trunk/core/src/main/java/org/apache/struts2/util/MakeIterator.java
deleted file mode 100644
index fe59ec2..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/MakeIterator.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * MakeIterator.
- *
- */
-public class MakeIterator {
-
-    /**
-     * Determine whether a given object can be made into an <code>Iterator</code>
-     *
-     * @param object the object to check
-     * @return <code>true</code> if the object can be converted to an iterator and
-     *         <code>false</code> otherwise
-     */
-    public static boolean isIterable(Object object) {
-        if (object == null) {
-            return false;
-        }
-
-        if (object instanceof Map) {
-            return true;
-        } else if (object instanceof Collection) {
-            return true;
-        } else if (object.getClass().isArray()) {
-            return true;
-        } else if (object instanceof Enumeration) {
-            return true;
-        } else if (object instanceof Iterator) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public static Iterator convert(Object value) {
-        Iterator iterator;
-
-        if (value instanceof Iterator) {
-            return (Iterator) value;
-        }
-
-        if (value instanceof Map) {
-            value = ((Map) value).entrySet();
-        }
-
-        if (value == null) {
-            return null;
-        }
-
-        if (value instanceof Collection) {
-            iterator = ((Collection) value).iterator();
-        } else if (value.getClass().isArray()) {
-            //need ability to support primitives; therefore, cannot
-            //use Object[] casting.
-            ArrayList list = new ArrayList(Array.getLength(value));
-
-            for (int j = 0; j < Array.getLength(value); j++) {
-                list.add(Array.get(value, j));
-            }
-
-            iterator = list.iterator();
-        } else if (value instanceof Enumeration) {
-            Enumeration enumeration = (Enumeration) value;
-            ArrayList list = new ArrayList();
-
-            while (enumeration.hasMoreElements()) {
-                list.add(enumeration.nextElement());
-            }
-
-            iterator = list.iterator();
-        } else {
-            List list = new ArrayList(1);
-            list.add(value);
-            iterator = list.iterator();
-        }
-
-        return iterator;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/MergeIteratorFilter.java b/trunk/core/src/main/java/org/apache/struts2/util/MergeIteratorFilter.java
deleted file mode 100644
index e46ec46..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/MergeIteratorFilter.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import com.opensymphony.xwork2.Action;
-
-
-/**
- * A bean that takes several iterators and outputs the merge of them. Used by 
- * MergeIteratorTag.
- *
- * @see org.apache.struts2.views.jsp.iterator.MergeIteratorTag
- * @see org.apache.struts2.components.MergeIterator
- */
-public class MergeIteratorFilter extends IteratorFilterSupport implements Iterator, Action {
-
-    List iterators = new ArrayList();
-
-    // Attributes ----------------------------------------------------
-    List sources = new ArrayList();
-    int idx = 0;
-
-
-    // Public --------------------------------------------------------
-    public void setSource(Object anIterator) {
-        sources.add(anIterator);
-    }
-
-    // Action implementation -----------------------------------------
-    public String execute() {
-        // Make source transformations
-        for (int i = 0; i < sources.size(); i++) {
-            Object source = sources.get(i);
-            iterators.add(getIterator(source));
-        }
-
-        return SUCCESS;
-    }
-
-    // Iterator implementation ---------------------------------------
-    public boolean hasNext() {
-        while (iterators.size() > 0) {
-            if (((Iterator) iterators.get(idx)).hasNext()) {
-                return true;
-            } else {
-                iterators.remove(idx);
-
-                if (iterators.size() > 0) {
-                    idx = idx % iterators.size();
-                }
-            }
-        }
-
-        return false;
-    }
-
-    public Object next() {
-        try {
-            return ((Iterator) iterators.get(idx)).next();
-        } finally {
-            idx = (idx + 1) % iterators.size();
-        }
-    }
-
-    public void remove() {
-        throw new UnsupportedOperationException("Remove is not supported in MergeIteratorFilter.");
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/ObjectFactoryDestroyable.java b/trunk/core/src/main/java/org/apache/struts2/util/ObjectFactoryDestroyable.java
deleted file mode 100644
index c2e26b2..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/ObjectFactoryDestroyable.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-/**
- * An interface to be implemented by any ObjectFactory implementation 
- * if it requires shutdown hook whenever an ObjectFactory is to be 
- * destroyed. 
- * 
- * @see org.apache.struts2.dispatcher.FilterDispatcher
- * @see org.apache.struts2.dispatcher.Dispatcher
- */
-public interface ObjectFactoryDestroyable {
-	void destroy();
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/ObjectFactoryInitializable.java b/trunk/core/src/main/java/org/apache/struts2/util/ObjectFactoryInitializable.java
deleted file mode 100644
index 7db4f89..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/ObjectFactoryInitializable.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import javax.servlet.ServletContext;
-
-/**
- * Used to pass ServletContext init parameters to various
- * frameworks such as Spring, Plexus and Portlet.
- */
-public interface ObjectFactoryInitializable {
-
-    void init(ServletContext servletContext);
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/ObjectFactoryLifecycle.java b/trunk/core/src/main/java/org/apache/struts2/util/ObjectFactoryLifecycle.java
deleted file mode 100644
index 84356f4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/ObjectFactoryLifecycle.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-/**
- * An interface indicating the lifecycle of an ObjectFactory implementation.
- * 
- * @see ObjectFactoryLifecycle
- * @see com.opensymphony.xwork2.ObjectFactory
- * @see org.apache.struts2.util.ObjectFactoryInitializable
- * @see org.apache.struts2.util.ObjectFactoryDestroyable
- */
-public interface ObjectFactoryLifecycle extends ObjectFactoryInitializable, ObjectFactoryDestroyable {
-	
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/PrefixTrie.java b/trunk/core/src/main/java/org/apache/struts2/util/PrefixTrie.java
deleted file mode 100644
index 24288b1..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/PrefixTrie.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-/**
- * Quickly matches a prefix to an object.
- *
- */
-public class PrefixTrie {
-
-    // supports 7-bit chars.
-    private static final int SIZE = 128;
-
-    Node root = new Node();
-
-    public void put(String prefix, Object value) {
-        Node current = root;
-        for (int i = 0; i < prefix.length(); i++) {
-            char c = prefix.charAt(i);
-            if (c > SIZE)
-                throw new IllegalArgumentException("'" + c + "' is too big.");
-            if (current.next[c] == null)
-                current.next[c] = new Node();
-            current = current.next[c];
-        }
-        current.value = value;
-    }
-
-    public Object get(String key) {
-        Node current = root;
-        for (int i = 0; i < key.length(); i++) {
-            char c = key.charAt(i);
-            if (c > SIZE)
-                return null;
-            current = current.next[c];
-            if (current == null)
-                return null;
-            if (current.value != null)
-                return current.value;
-        }
-        return null;
-    }
-
-    static class Node {
-        Object value;
-        Node[] next = new Node[SIZE];
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/ResolverSetupServletContextListener.java b/trunk/core/src/main/java/org/apache/struts2/util/ResolverSetupServletContextListener.java
deleted file mode 100644
index 9f26f86..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/ResolverSetupServletContextListener.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.dispatcher.DispatcherListener;
-
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-
-
-/**
- * A Servlet Context Listener that will loop through all Reference Resolvers available in
- * the xwork Configuration and set the ServletContext on those that are ServletContextAware.
- * The Servlet Context can be used by the External Reference Resolver to initialise it's state. i.e. the
- * Spring framework uses a ContextServletListener to initialise it's IoC container, storing it's
- * container context (ApplicationContext in Spring terms) in the Servlet context, the External
- * Reference Resolver can get a reference to the container context from the servlet context.
- */
-public class ResolverSetupServletContextListener implements ServletContextListener {
-
-    Map<ServletContext,Listener> listeners = new HashMap<ServletContext,Listener>();
-    
-    public synchronized void contextDestroyed(ServletContextEvent event) {
-        Listener l = listeners.get(event.getServletContext());
-        Dispatcher.removeDispatcherListener(l);
-        listeners.remove(event.getServletContext());
-    }
-
-    public synchronized void contextInitialized(ServletContextEvent event) {
-        Listener l = new Listener(event.getServletContext());
-        Dispatcher.addDispatcherListener(l);
-        listeners.put(event.getServletContext(), l);
-    }
-    
-    private class Listener implements DispatcherListener {
-
-        private ServletContext servletContext;
-        
-        public Listener(ServletContext ctx) {
-            this.servletContext = ctx;
-        }
-        
-        public void dispatcherInitialized(Dispatcher du) {
-            Configuration config = du.getConfigurationManager().getConfiguration();
-            String key;
-            PackageConfig packageConfig;
-
-            for (Iterator iter = config.getPackageConfigNames().iterator();
-                 iter.hasNext();) {
-                key = (String) iter.next();
-                packageConfig = config.getPackageConfig(key);
-
-                if (packageConfig.getExternalRefResolver()instanceof ServletContextAware) {
-                    ((ServletContextAware) packageConfig.getExternalRefResolver()).setServletContext(servletContext);
-                }
-            }
-            
-        }
-
-        public void dispatcherDestroyed(Dispatcher du) {
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/ServletContextAware.java b/trunk/core/src/main/java/org/apache/struts2/util/ServletContextAware.java
deleted file mode 100644
index 17a60d2..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/ServletContextAware.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import javax.servlet.ServletContext;
-
-
-/**
- * For components that have a dependence on the Servlet context.
- */
-public interface ServletContextAware {
-
-    public void setServletContext(ServletContext context);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/SortIteratorFilter.java b/trunk/core/src/main/java/org/apache/struts2/util/SortIteratorFilter.java
deleted file mode 100644
index 9fdf2c5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/SortIteratorFilter.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.Action;
-
-
-/**
- * A bean that takes a source and comparator then attempt to sort the source
- * utilizing the comparator. It is being used in SortIteratorTag.
- *
- * @see org.apache.struts2.views.jsp.iterator.SortIteratorTag
- */
-public class SortIteratorFilter extends IteratorFilterSupport implements Iterator, Action {
-
-    Comparator comparator;
-    Iterator iterator;
-    List list;
-
-    // Attributes ----------------------------------------------------
-    Object source;
-
-
-    public void setComparator(Comparator aComparator) {
-        this.comparator = aComparator;
-    }
-
-    public List getList() {
-        return list;
-    }
-
-    // Public --------------------------------------------------------
-    public void setSource(Object anIterator) {
-        source = anIterator;
-    }
-
-    // Action implementation -----------------------------------------
-    public String execute() {
-        if (source == null) {
-            return ERROR;
-        } else {
-            try {
-                if (!MakeIterator.isIterable(source)) {
-                    LogFactory.getLog(SortIteratorFilter.class.getName()).warn("Cannot create SortIterator for source " + source);
-
-                    return ERROR;
-                }
-
-                list = new ArrayList();
-
-                Iterator i = MakeIterator.convert(source);
-
-                while (i.hasNext()) {
-                    list.add(i.next());
-                }
-
-                // Sort it
-                Collections.sort(list, comparator);
-                iterator = list.iterator();
-
-                return SUCCESS;
-            } catch (Exception e) {
-                LogFactory.getLog(SortIteratorFilter.class.getName()).warn("Error creating sort iterator.", e);
-
-                return ERROR;
-            }
-        }
-    }
-
-    // Iterator implementation ---------------------------------------
-    public boolean hasNext() {
-        return (source == null) ? false : iterator.hasNext();
-    }
-
-    public Object next() {
-        return iterator.next();
-    }
-
-    public void remove() {
-        throw new UnsupportedOperationException("Remove is not supported in SortIteratorFilter.");
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/Sorter.java b/trunk/core/src/main/java/org/apache/struts2/util/Sorter.java
deleted file mode 100644
index c1e929e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/Sorter.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.Comparator;
-
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- * Sorters. Utility sorters for use with the "sort" tag.
- *
- * @see org.apache.struts2.views.jsp.iterator.SortIteratorTag
- * @see SortIteratorFilter
- */
-public class Sorter {
-
-    public Comparator getAscending() {
-        return new Comparator() {
-            public int compare(Object o1, Object o2) {
-                if (o1 instanceof Comparable) {
-                    return ((Comparable) o1).compareTo(o2);
-                } else {
-                    String s1 = o1.toString();
-                    String s2 = o2.toString();
-
-                    return s1.compareTo(s2);
-                }
-            }
-        };
-    }
-
-    public Comparator getAscending(final String anExpression) {
-        return new Comparator() {
-            private ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-
-            public int compare(Object o1, Object o2) {
-                // Get value for first object
-                stack.push(o1);
-
-                Object v1 = stack.findValue(anExpression);
-                stack.pop();
-
-                // Get value for second object
-                stack.push(o2);
-
-                Object v2 = stack.findValue(anExpression);
-                stack.pop();
-
-                // Ensure non-null
-                if (v1 == null) {
-                    v1 = "";
-                }
-
-                if (v2 == null) {
-                    v2 = "";
-                }
-
-                // Compare them
-                if (v1 instanceof Comparable && v1.getClass().equals(v2.getClass())) {
-                    return ((Comparable) v1).compareTo(v2);
-                } else {
-                    String s1 = v1.toString();
-                    String s2 = v2.toString();
-
-                    return s1.compareTo(s2);
-                }
-            }
-        };
-    }
-
-    public Comparator getComparator(String anExpression, boolean ascending) {
-        if (ascending) {
-            return getAscending(anExpression);
-        } else {
-            return getDescending(anExpression);
-        }
-    }
-
-    public Comparator getDescending() {
-        return new Comparator() {
-            public int compare(Object o1, Object o2) {
-                if (o2 instanceof Comparable) {
-                    return ((Comparable) o2).compareTo(o1);
-                } else {
-                    String s1 = o1.toString();
-                    String s2 = o2.toString();
-
-                    return s2.compareTo(s1);
-                }
-            }
-        };
-    }
-
-    public Comparator getDescending(final String anExpression) {
-        return new Comparator() {
-            private ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-
-            public int compare(Object o1, Object o2) {
-                // Get value for first object
-                stack.push(o1);
-
-                Object v1 = stack.findValue(anExpression);
-                stack.pop();
-
-                // Get value for second object
-                stack.push(o2);
-
-                Object v2 = stack.findValue(anExpression);
-                stack.pop();
-
-                // Ensure non-null
-                if (v1 == null) {
-                    v1 = "";
-                }
-
-                if (v2 == null) {
-                    v2 = "";
-                }
-
-                // Compare them
-                if (v2 instanceof Comparable && v1.getClass().equals(v2.getClass())) {
-                    return ((Comparable) v2).compareTo(v1);
-                } else {
-                    String s1 = v1.toString();
-                    String s2 = v2.toString();
-
-                    return s2.compareTo(s1);
-                }
-            }
-        };
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/StrutsTypeConverter.java b/trunk/core/src/main/java/org/apache/struts2/util/StrutsTypeConverter.java
deleted file mode 100644
index e81c3b0..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/StrutsTypeConverter.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.Map;
-
-import ognl.DefaultTypeConverter;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Base class for type converters used in Struts. This class provides two abstract methods that are used to convert
- * both to and from strings -- the critical functionality that is core to Struts's type coversion system.
- *
- * <p/> Type converters do not have to use this class. It is merely a helper base class, although it is recommended that
- * you use this class as it provides the common type conversion contract required for all web-based type conversion.
- *
- * <p/> There's a hook (fall back method) called <code>performFallbackConversion</code> of which
- * could be used to perform some fallback conversion if <code>convertValue</code> method of this
- * failed. By default it just ask its super class (Ognl's DefaultTypeConverter) to do the conversion.
- *
- * <p/> To allow the framework to recognize that a conversion error has occurred, throw an XWorkException or
- * preferable a TypeConversionException.
- *
- * <!-- END SNIPPET: javadoc -->
- *
- */
-public abstract class StrutsTypeConverter extends DefaultTypeConverter {
-    public Object convertValue(Map context, Object o, Class toClass) {
-        if (toClass.equals(String.class)) {
-            return convertToString(context, o);
-        } else if (o instanceof String[]) {
-            return convertFromString(context, (String[]) o, toClass);
-        } else if (o instanceof String) {
-            return convertFromString(context, new String[]{(String) o}, toClass);
-        } else {
-        	return performFallbackConversion(context, o, toClass);
-        }
-    }
-
-    /**
-     * Hook to perform a fallback conversion if every default options failed. By default
-     * this will ask Ognl's DefaultTypeConverter (of which this class extends) to
-     * perform the conversion.
-     *
-     * @param context
-     * @param o
-     * @param toClass
-     * @return The fallback conversion
-     */
-    protected Object performFallbackConversion(Map context, Object o, Class toClass) {
-    	return super.convertValue(context, o, toClass);
-    }
-
-
-    /**
-     * Converts one or more String values to the specified class.
-     *
-     * @param context the action context
-     * @param values  the String values to be converted, such as those submitted from an HTML form
-     * @param toClass the class to convert to
-     * @return the converted object
-     */
-    public abstract Object convertFromString(Map context, String[] values, Class toClass);
-
-    /**
-     * Converts the specified object to a String.
-     *
-     * @param context the action context
-     * @param o       the object to be converted
-     * @return the converted String
-     */
-    public abstract String convertToString(Map context, Object o);
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java b/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java
deleted file mode 100644
index 0440e3d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.views.jsp.ui.OgnlTool;
-import org.apache.struts2.views.util.UrlHelper;
-
-import com.opensymphony.xwork2.util.TextUtils;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.ObjectFactory;
-
-
-/**
- * Struts base utility class, for use in Velocity and Freemarker templates
- *
- */
-public class StrutsUtil {
-
-    protected static final Log log = LogFactory.getLog(StrutsUtil.class);
-
-
-    protected HttpServletRequest request;
-    protected HttpServletResponse response;
-    protected Map classes = new Hashtable();
-    protected OgnlTool ognl = OgnlTool.getInstance();
-    protected ValueStack stack;
-
-
-    public StrutsUtil(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        this.stack = stack;
-        this.request = request;
-        this.response = response;
-    }
-
-
-    public Object bean(Object aName) throws Exception {
-        String name = aName.toString();
-        Class c = (Class) classes.get(name);
-
-        if (c == null) {
-            c = ClassLoaderUtils.loadClass(name, StrutsUtil.class);
-            classes.put(name, c);
-        }
-
-        return ObjectFactory.getObjectFactory().buildBean(c, stack.getContext());
-    }
-
-    public boolean isTrue(String expression) {
-        Boolean retVal = (Boolean) stack.findValue(expression, Boolean.class);
-        if (retVal == null) {
-            return false;
-        }
-        return retVal.booleanValue();
-    }
-
-    public Object findString(String name) {
-        return stack.findValue(name, String.class);
-    }
-
-    public String include(Object aName) throws Exception {
-        return include(aName, request, response);
-    }
-
-    /**
-     * @deprecated the request and response are stored in this util class, please use include(string)
-     */
-    public String include(Object aName, HttpServletRequest aRequest, HttpServletResponse aResponse) throws Exception {
-        try {
-            RequestDispatcher dispatcher = aRequest.getRequestDispatcher(aName.toString());
-
-            if (dispatcher == null) {
-                throw new IllegalArgumentException("Cannot find included file " + aName);
-            }
-
-            ResponseWrapper responseWrapper = new ResponseWrapper(aResponse);
-
-            dispatcher.include(aRequest, responseWrapper);
-
-            return responseWrapper.getData();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            throw e;
-        }
-    }
-
-    public String urlEncode(String s) {
-        try {
-            return URLEncoder.encode(s, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            return s;
-        }
-    }
-
-    public String buildUrl(String url) {
-        return UrlHelper.buildUrl(url, request, response, null);
-    }
-
-    public Object findValue(String expression, String className) throws ClassNotFoundException {
-        return stack.findValue(expression, Class.forName(className));
-    }
-
-    public String getText(String text) {
-        return (String) stack.findValue("getText('" + text + "')"); 
-    }
-
-    /*
-	 * @return the url ContextPath. An empty string if one does not exist.
-	 */
-	public String getContext() {
-		return (request == null)? "" : request.getContextPath();
-	}
-
-    /**
-     * the selectedList objects are matched to the list.listValue
-     * <p/>
-     * listKey and listValue are optional, and if not provided, the list item is used
-     *
-     * @param selectedList the name of the action property
-     *                     that contains the list of selected items
-     *                     or single item if its not an array or list
-     * @param list         the name of the action property
-     *                     that contains the list of selectable items
-     * @param listKey      an ognl expression that is exaluated relative to the list item
-     *                     to use as the key of the ListEntry
-     * @param listValue    an ognl expression that is exaluated relative to the list item
-     *                     to use as the value of the ListEntry
-     * @return a List of ListEntry
-     */
-    public List makeSelectList(String selectedList, String list, String listKey, String listValue) {
-        List selectList = new ArrayList();
-
-        Collection selectedItems = null;
-
-        Object i = stack.findValue(selectedList);
-
-        if (i != null) {
-            if (i.getClass().isArray()) {
-                selectedItems = Arrays.asList((Object[]) i);
-            } else if (i instanceof Collection) {
-                selectedItems = (Collection) i;
-            } else {
-                // treat it is a single item
-                selectedItems = new ArrayList();
-                selectedItems.add(i);
-            }
-        }
-
-        Collection items = (Collection) stack.findValue(list);
-
-        if (items != null) {
-            for (Iterator iter = items.iterator(); iter.hasNext();) {
-                Object element = (Object) iter.next();
-                Object key = null;
-
-                if ((listKey == null) || (listKey.length() == 0)) {
-                    key = element;
-                } else {
-                    key = ognl.findValue(listKey, element);
-                }
-
-                Object value = null;
-
-                if ((listValue == null) || (listValue.length() == 0)) {
-                    value = element;
-                } else {
-                    value = ognl.findValue(listValue, element);
-                }
-
-                boolean isSelected = false;
-
-                if ((value != null) && (selectedItems != null) && selectedItems.contains(value)) {
-                    isSelected = true;
-                }
-
-                selectList.add(new ListEntry(key, value, isSelected));
-            }
-        }
-
-        return selectList;
-    }
-
-    public String htmlEncode(Object obj) {
-        if (obj == null) {
-            return null;
-        }
-
-        return TextUtils.htmlEncode(obj.toString());
-    }
-
-    public int toInt(long aLong) {
-        return (int) aLong;
-    }
-
-    public long toLong(int anInt) {
-        return (long) anInt;
-    }
-
-    public long toLong(String aLong) {
-        if (aLong == null) {
-            return 0;
-        }
-
-        return Long.parseLong(aLong);
-    }
-
-    public String toString(long aLong) {
-        return Long.toString(aLong);
-    }
-
-    public String toString(int anInt) {
-        return Integer.toString(anInt);
-    }
-
-
-    static class ResponseWrapper extends HttpServletResponseWrapper {
-        StringWriter strout;
-        PrintWriter writer;
-        ServletOutputStream sout;
-
-        ResponseWrapper(HttpServletResponse aResponse) {
-            super(aResponse);
-            strout = new StringWriter();
-            sout = new ServletOutputStreamWrapper(strout);
-            writer = new PrintWriter(strout);
-        }
-
-        public String getData() {
-            writer.flush();
-
-            return strout.toString();
-        }
-
-        public ServletOutputStream getOutputStream() {
-            return sout;
-        }
-
-        public PrintWriter getWriter() throws IOException {
-            return writer;
-        }
-    }
-
-    static class ServletOutputStreamWrapper extends ServletOutputStream {
-        StringWriter writer;
-
-        ServletOutputStreamWrapper(StringWriter aWriter) {
-            writer = aWriter;
-        }
-
-        public void write(int aByte) {
-            writer.write(aByte);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/SubsetIteratorFilter.java b/trunk/core/src/main/java/org/apache/struts2/util/SubsetIteratorFilter.java
deleted file mode 100644
index 5909dc1..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/SubsetIteratorFilter.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.Action;
-
-
-/**
- * A bean that takes an iterator and outputs a subset of it.
- *
- */
-public class SubsetIteratorFilter extends IteratorFilterSupport implements Iterator, Action {
-
-	private static final Log _log = LogFactory.getLog(SubsetIteratorFilter.class);
-	
-    Iterator iterator;
-    Object source;
-    int count = -1;
-    int currentCount = 0;
-    
-    Decider decider;
-
-    // Attributes ----------------------------------------------------
-    int start = 0;
-
-
-    public void setCount(int aCount) {
-        this.count = aCount;
-    }
-
-    // Public --------------------------------------------------------
-    public void setSource(Object anIterator) {
-        source = anIterator;
-    }
-
-    public void setStart(int aStart) {
-        this.start = aStart;
-    }
-    
-    public void setDecider(Decider aDecider) {
-    	this.decider = aDecider;
-    }
-
-    // Action implementation -----------------------------------------
-    public String execute() {
-        if (source == null) {
-            LogFactory.getLog(SubsetIteratorFilter.class.getName()).warn("Source is null returning empty set.");
-
-            return ERROR;
-        }
-
-        // Make source transformations
-        source = getIterator(source);
-
-        // Calculate iterator filter
-        if (source instanceof Iterator) {
-            iterator = (Iterator) source;
-            
-
-            // Read away <start> items
-            for (int i = 0; (i < start) && iterator.hasNext(); i++) {
-                iterator.next();
-            }
-            
-            
-            // now let Decider decide if element should be added (if a decider exist)
-            if (decider != null) {
-            	List list = new ArrayList();
-            	while(iterator.hasNext()) {
-            		Object currentElement = iterator.next();
-            		if (decide(currentElement)) {
-            			list.add(currentElement);
-            		}
-            	}
-            	iterator = list.iterator();
-            }
-            
-        } else if (source.getClass().isArray()) {
-            ArrayList list = new ArrayList(((Object[]) source).length);
-            Object[] objects = (Object[]) source;
-            int len = objects.length;
-
-            if (count >= 0) {
-            	len = start + count;
-            	if (len > objects.length) {
-            		len = objects.length;
-            	}
-            }
-
-            for (int j = start; j < len; j++) {
-            	if (decide(objects[j])) {
-                    list.add(objects[j]);
-            	}
-            }
-
-            count = -1; // Don't have to check this in the iterator code
-            iterator = list.iterator();
-        }
-
-        if (iterator == null) {
-            throw new IllegalArgumentException("Source is not an iterator:" + source);
-        }
-
-        return SUCCESS;
-    }
-
-    // Iterator implementation ---------------------------------------
-    public boolean hasNext() {
-        return (iterator == null) ? false : (iterator.hasNext() && ((count < 0) || (currentCount < count)));
-    }
-
-    public Object next() {
-        currentCount++;
-
-        return iterator.next();
-    }
-
-    public void remove() {
-        iterator.remove();
-    }
-    
-    // inner class ---------------------------------------------------
-    /**
-     * A decider determines if the given element should be added to the list or not.
-     */
-    public static interface Decider {
-
-        /**
-         * Should the object be added to the list?
-         * @param element  the object
-         * @return true to add.
-         * @throws Exception can be thrown.
-         */
-        boolean decide(Object element) throws Exception;
-    }
-    
-    // protected -----------------------------------------------------
-    protected boolean decide(Object element) {
-    	if (decider != null) {
-    		try {
-    			boolean okToAdd = decider.decide(element);
-    			return okToAdd;
-    		}
-    		catch(Exception e) {
-    			_log.warn("decider ["+decider+"] encountered an error while decide adding element ["+element+"], element will be ignored, it will not appeared in subseted iterator", e);
-    			return false;
-    		}
-    	}
-    	return true;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/TabbedPane.java b/trunk/core/src/main/java/org/apache/struts2/util/TabbedPane.java
deleted file mode 100644
index 890bb73..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/TabbedPane.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.Vector;
-
-
-/**
- * A bean that helps implement a tabbed pane
- *
- */
-public class TabbedPane {
-
-    protected String tabAlign = null;
-
-    // Attributes ----------------------------------------------------
-    protected Vector content = null;
-    protected int selectedIndex = 0;
-
-
-    // Public --------------------------------------------------------
-    public TabbedPane(int defaultIndex) {
-        selectedIndex = defaultIndex;
-    }
-
-
-    public void setContent(Vector content) {
-        this.content = content;
-    }
-
-    public Vector getContent() {
-        return content;
-    }
-
-    public void setSelectedIndex(int selectedIndex) {
-        this.selectedIndex = selectedIndex;
-    }
-
-    public int getSelectedIndex() {
-        return selectedIndex;
-    }
-
-    public void setTabAlign(String tabAlign) {
-        this.tabAlign = tabAlign;
-    }
-
-    public String getTabAlign() {
-        return tabAlign;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/Timer.java b/trunk/core/src/main/java/org/apache/struts2/util/Timer.java
deleted file mode 100644
index c06ea18..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/Timer.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-
-/**
- * A bean that can be used to time execution of pages
- *
- */
-public class Timer {
-
-    // Attributes ----------------------------------------------------
-    long current = System.currentTimeMillis();
-    long start = current;
-
-
-    // Public --------------------------------------------------------
-    public long getTime() {
-        // Return how long time has passed since last check point
-        long now = System.currentTimeMillis();
-        long time = now - current;
-
-        // Reset so that next time we get from this point
-        current = now;
-
-        return time;
-    }
-
-    public long getTotal() {
-        // Reset start so that next time we get from this point
-        return System.currentTimeMillis() - start;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/TokenHelper.java b/trunk/core/src/main/java/org/apache/struts2/util/TokenHelper.java
deleted file mode 100644
index 8dce61b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/TokenHelper.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.math.BigInteger;
-import java.util.Map;
-import java.util.Random;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-
-/**
- * TokenHelper
- *
- */
-public class TokenHelper {
-
-    /**
-     * The default name to map the token value
-     */
-    public static final String DEFAULT_TOKEN_NAME = "struts.token";
-    
-    /**
-     * The name of the field which will hold the token name
-     */
-    public static final String TOKEN_NAME_FIELD = "struts.token.name";
-    private static final Log LOG = LogFactory.getLog(TokenHelper.class);
-    private static final Random RANDOM = new Random();
-
-
-    /**
-     * Sets a transaction token into the session using the default token name.
-     *
-     * @return the token string
-     */
-    public static String setToken() {
-        return setToken(DEFAULT_TOKEN_NAME);
-    }
-
-    /**
-     * Sets a transaction token into the session using the provided token name.
-     *
-     * @param tokenName the name to store into the session with the token as the value
-     * @return the token string
-     */
-    public static String setToken(String tokenName) {
-        Map session = ActionContext.getContext().getSession();
-        String token = generateGUID();
-        try {
-        	session.put(tokenName, token);
-        }
-        catch(IllegalStateException e) {
-        	// WW-1182 explain to user what the problem is
-        	String msg = "Error creating HttpSession due response is commited to client. You can use the CreateSessionInterceptor or create the HttpSession from your action before the result is rendered to the client: " + e.getMessage();
-        	LOG.error(msg, e);
-        	throw new IllegalArgumentException(msg);
-        }
-
-        return token;
-    }
-
-    
-    /**
-     * Gets a transaction token into the session using the default token name.
-     * 
-     * @return token
-     */
-    public static String getToken() {
-    	return getToken(DEFAULT_TOKEN_NAME);
-    }
-    
-    /**
-     * Gets the Token value from the params in the ServletActionContext using the given name
-     *
-     * @param tokenName the name of the parameter which holds the token value
-     * @return the token String or null, if the token could not be found
-     */
-    public static String getToken(String tokenName) {
-        Map params = ActionContext.getContext().getParameters();
-        String[] tokens = (String[]) params.get(tokenName);
-        String token;
-
-        if ((tokens == null) || (tokens.length < 1)) {
-            LOG.warn("Could not find token mapped to token name " + tokenName);
-
-            return null;
-        }
-
-        token = tokens[0];
-
-        return token;
-    }
-
-    /**
-     * Gets the token name from the Parameters in the ServletActionContext
-     *
-     * @return the token name found in the params, or null if it could not be found
-     */
-    public static String getTokenName() {
-        Map params = ActionContext.getContext().getParameters();
-
-        if (!params.containsKey(TOKEN_NAME_FIELD)) {
-            LOG.warn("Could not find token name in params.");
-
-            return null;
-        }
-
-        String[] tokenNames = (String[]) params.get(TOKEN_NAME_FIELD);
-        String tokenName;
-
-        if ((tokenNames == null) || (tokenNames.length < 1)) {
-            LOG.warn("Got a null or empty token name.");
-
-            return null;
-        }
-
-        tokenName = tokenNames[0];
-
-        return tokenName;
-    }
-
-    /**
-     * Checks for a valid transaction token in the current request params. If a valid token is found, it is
-     * removed so the it is not valid again.
-     *
-     * @return false if there was no token set into the params (check by looking for {@link #TOKEN_NAME_FIELD}), true if a valid token is found
-     */
-    public static boolean validToken() {
-        String tokenName = getTokenName();
-
-        if (tokenName == null) {
-        	if (LOG.isDebugEnabled())
-        		LOG.debug("no token name found -> Invalid token ");
-            return false;
-        }
-
-        String token = getToken(tokenName);
-
-        if (token == null) {
-        	if (LOG.isDebugEnabled()) 
-        		LOG.debug("no token found for token name "+tokenName+" -> Invalid token ");
-            return false;
-        }
-
-        Map session = ActionContext.getContext().getSession();
-        String sessionToken = (String) session.get(tokenName);
-
-        if (!token.equals(sessionToken)) {
-            LOG.warn(LocalizedTextUtil.findText(TokenHelper.class, "struts.internal.invalid.token", ActionContext.getContext().getLocale(), "Form token {0} does not match the session token {1}.", new Object[]{
-                    token, sessionToken
-            }));
-
-            return false;
-        }
-
-        // remove the token so it won't be used again
-        session.remove(tokenName);
-
-        return true;
-    }
-    
-    public static String generateGUID() {
-        return new BigInteger(165, RANDOM).toString(36).toUpperCase();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/URLBean.java b/trunk/core/src/main/java/org/apache/struts2/util/URLBean.java
deleted file mode 100644
index db5cd3d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/URLBean.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.views.util.UrlHelper;
-
-
-/**
- * A bean that can generate a URL.
- *
- */
-public class URLBean {
-
-    HashMap params;
-    HttpServletRequest request;
-    HttpServletResponse response;
-    String page;
-
-
-    public void setPage(String page) {
-        this.page = page;
-    }
-
-    public void setRequest(HttpServletRequest request) {
-        this.request = request;
-    }
-
-    public void setResponse(HttpServletResponse response) {
-        this.response = response;
-    }
-
-    public String getURL() {
-        // all this trickier with maps is to reduce the number of objects created
-        Map fullParams = null;
-
-        if (params != null) {
-            fullParams = new HashMap();
-        }
-
-        if (page == null) {
-            // No particular page requested, so go to "same page"
-            // Add query params to parameters
-            if (fullParams != null) {
-                fullParams.putAll(request.getParameterMap());
-            } else {
-                fullParams = request.getParameterMap();
-            }
-        }
-
-        // added parameters override, just like in URLTag
-        if (params != null) {
-            fullParams.putAll(params);
-        }
-
-        return UrlHelper.buildUrl(page, request, response, fullParams);
-    }
-
-    public URLBean addParameter(String name, Object value) {
-        if (params == null) {
-            params = new HashMap();
-        }
-
-        if (value == null) {
-            params.remove(name);
-        } else {
-            params.put(name, value.toString());
-        }
-
-        return this;
-    }
-
-    public String toString() {
-        return getURL();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/util/VelocityStrutsUtil.java b/trunk/core/src/main/java/org/apache/struts2/util/VelocityStrutsUtil.java
deleted file mode 100644
index 0f4f8c5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/util/VelocityStrutsUtil.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.io.CharArrayWriter;
-import java.io.IOException;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.views.velocity.VelocityManager;
-import org.apache.velocity.context.Context;
-import org.apache.velocity.exception.MethodInvocationException;
-import org.apache.velocity.exception.ParseErrorException;
-import org.apache.velocity.exception.ResourceNotFoundException;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * Struts velocity related util.
- *
- */
-public class VelocityStrutsUtil extends StrutsUtil {
-
-    private Context ctx;
-
-    public VelocityStrutsUtil(Context ctx, ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
-        super(stack, request, response);
-        this.ctx = ctx;
-    }
-
-    public String evaluate(String expression) throws IOException, ResourceNotFoundException, MethodInvocationException, ParseErrorException {
-        CharArrayWriter writer = new CharArrayWriter();
-        VelocityManager.getInstance().getVelocityEngine().evaluate(ctx, writer, "Error parsing " + expression, expression);
-
-        return writer.toString();
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/validators/DWRValidator.java b/trunk/core/src/main/java/org/apache/struts2/validators/DWRValidator.java
deleted file mode 100644
index 9c27d85..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/validators/DWRValidator.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.validators;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.dispatcher.ApplicationMap;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.dispatcher.RequestMap;
-import org.apache.struts2.dispatcher.SessionMap;
-
-import uk.ltd.getahead.dwr.WebContextFactory;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.DefaultActionInvocation;
-import com.opensymphony.xwork2.DefaultActionProxy;
-import com.opensymphony.xwork2.ValidationAware;
-import com.opensymphony.xwork2.ValidationAwareSupport;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-
-/**
- * <p/>
- * Use the dwr configuration as follows :-
- * 
- * <pre>
- * <!-- START SNIPPET: dwrConfiguration -->
- * 
- * &lt;dwr&lt;
- *    &lt;allow&lt;
- *      &lt;create creator="new" javascript="validator" class="org.apache.struts2.validators.DWRValidator"/&lt;
- *      &lt;convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/&lt;
- *    &lt;/allow&lt;
- * &lt;/dwr&lt;
- * 
- * <!-- END SNIPPET: dwrConfiguration -->
- * </pre>
- */
-public class DWRValidator {
-    private static final Log LOG = LogFactory.getLog(DWRValidator.class);
-
-    public ValidationAwareSupport doPost(String namespace, String action, Map params) throws Exception {
-        HttpServletRequest req = WebContextFactory.get().getHttpServletRequest();
-        ServletContext servletContext = WebContextFactory.get().getServletContext();
-        HttpServletResponse res = WebContextFactory.get().getHttpServletResponse();
-
-        Map requestParams = new HashMap(req.getParameterMap());
-        if (params != null) {
-            requestParams.putAll(params);
-        } else {
-            params = requestParams;
-        }
-        Map requestMap = new RequestMap(req);
-        Map session = new SessionMap(req);
-        Map application = new ApplicationMap(servletContext);
-        Dispatcher du = Dispatcher.getInstance();
-        HashMap ctx = du.createContextMap(requestMap,
-                params,
-                session,
-                application,
-                req,
-                res,
-                servletContext);
-
-        try {
-            Configuration cfg = du.getConfigurationManager().getConfiguration();
-            ValidatorActionProxy proxy = new ValidatorActionProxy(cfg, namespace, action, ctx);
-            proxy.execute();
-            Object a = proxy.getAction();
-
-            if (a instanceof ValidationAware) {
-                ValidationAware aware = (ValidationAware) a;
-                ValidationAwareSupport vas = new ValidationAwareSupport();
-                vas.setActionErrors(aware.getActionErrors());
-                vas.setActionMessages(aware.getActionMessages());
-                vas.setFieldErrors(aware.getFieldErrors());
-
-                return vas;
-            } else {
-                return null;
-            }
-        } catch (Exception e) {
-            LOG.error("Error while trying to validate", e);
-            return null;
-        }
-    }
-
-    public static class ValidatorActionInvocation extends DefaultActionInvocation {
-        private static final long serialVersionUID = -7645433725470191275L;
-
-        protected ValidatorActionInvocation(ActionProxy proxy, Map extraContext) throws Exception {
-            super(proxy, extraContext, true);
-        }
-
-        protected String invokeAction(Object action, ActionConfig actionConfig) throws Exception {
-            return Action.NONE; // don't actually execute the action
-        }
-    }
-
-    public static class ValidatorActionProxy extends DefaultActionProxy {
-        private static final long serialVersionUID = 5754781916414047963L;
-
-        protected ValidatorActionProxy(Configuration config, String namespace, String actionName, Map extraContext) throws Exception {
-            super(config, namespace, actionName, extraContext, false, true);
-        }
-
-        protected void prepare() throws Exception {
-            invocation = new ValidatorActionInvocation(this, extraContext);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/JspSupportServlet.java b/trunk/core/src/main/java/org/apache/struts2/views/JspSupportServlet.java
deleted file mode 100644
index 8fde4da..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/JspSupportServlet.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-
-/**
- */
-public class JspSupportServlet extends HttpServlet {
-	
-	private static final long serialVersionUID = 8302309812391541933L;
-	
-	public static JspSupportServlet jspSupportServlet;
-
-    public void init(ServletConfig servletConfig) throws ServletException {
-        super.init(servletConfig);
-
-        jspSupportServlet = this;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java
deleted file mode 100644
index 0a3c8d8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.servlet.GenericServlet;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.views.JspSupportServlet;
-import org.apache.struts2.views.freemarker.tags.StrutsModels;
-import org.apache.struts2.views.util.ContextUtil;
-
-import com.opensymphony.xwork2.util.FileManager;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.ObjectFactory;
-
-import freemarker.cache.FileTemplateLoader;
-import freemarker.cache.MultiTemplateLoader;
-import freemarker.cache.TemplateLoader;
-import freemarker.cache.WebappTemplateLoader;
-import freemarker.ext.beans.BeansWrapper;
-import freemarker.ext.jsp.TaglibFactory;
-import freemarker.ext.servlet.HttpRequestHashModel;
-import freemarker.ext.servlet.HttpRequestParametersHashModel;
-import freemarker.ext.servlet.HttpSessionHashModel;
-import freemarker.ext.servlet.ServletContextHashModel;
-import freemarker.template.ObjectWrapper;
-import freemarker.template.SimpleHash;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateExceptionHandler;
-import freemarker.template.TemplateModel;
-
-
-/**
- * Static Configuration Manager for the FreemarkerResult's configuration
- *
- * <p/>
- *
- * Possible extension points are :-
- * <ul>
- *   <li>createConfiguration method</li>
- *   <li>loadSettings method</li>
- *   <li>getTemplateLoader method</li>
- *   <li>populateContext method</li>
- * </ul>
- *
- * <p/>
- * <b> createConfiguration method </b><br/>
- * Create a freemarker Configuration.
- * <p/>
- *
- * <b> loadSettings method </b><br/>
- * Load freemarker settings, default to freemarker.properties (if found in classpath)
- * <p/>
- *
- * <b> getTemplateLoader method</b><br/>
- * create a freemarker TemplateLoader that loads freemarker template in the following order :-
- * <ol>
- *   <li>path defined in ServletContext init parameter named 'templatePath' or 'TemplatePath' (must be an absolute path)</li>
- *   <li>webapp classpath</li>
- *   <li>struts's static folder (under [STRUT2_SOURCE]/org/apache/struts2/static/</li>
- * </ol>
- * <p/>
- *
- * <b> populateContext method</b><br/>
- * populate the created model.
- *
- */
-public class FreemarkerManager {
-
-    private static final Log log = LogFactory.getLog(FreemarkerManager.class);
-    public static final String CONFIG_SERVLET_CONTEXT_KEY = "freemarker.Configuration";
-    public static final String KEY_EXCEPTION = "exception";
-
-    // coppied from freemarker servlet - since they are private
-    private static final String ATTR_APPLICATION_MODEL = ".freemarker.Application";
-    private static final String ATTR_JSP_TAGLIBS_MODEL = ".freemarker.JspTaglibs";
-    private static final String ATTR_REQUEST_MODEL = ".freemarker.Request";
-    private static final String ATTR_REQUEST_PARAMETERS_MODEL = ".freemarker.RequestParameters";
-
-    // coppied from freemarker servlet - so that there is no dependency on it
-    public static final String KEY_APPLICATION = "Application";
-    public static final String KEY_REQUEST_MODEL = "Request";
-    public static final String KEY_SESSION_MODEL = "Session";
-    public static final String KEY_JSP_TAGLIBS = "JspTaglibs";
-    public static final String KEY_REQUEST_PARAMETER_MODEL = "Parameters";
-    private static FreemarkerManager instance = null;
-
-
-    /**
-     * To allow for custom configuration of freemarker, sublcass this class "ConfigManager" and
-     * set the Struts configuration property
-     * <b>struts.freemarker.configmanager.classname</b> to the fully qualified classname.
-     * <p/>
-     * This allows you to override the protected methods in the ConfigMangaer
-     * to programatically create your own Configuration instance
-     */
-    public final static synchronized FreemarkerManager getInstance() {
-        if (instance == null) {
-            String classname = FreemarkerManager.class.getName();
-
-            if (Settings.isSet(StrutsConstants.STRUTS_FREEMARKER_MANAGER_CLASSNAME)) {
-                classname = Settings.get(StrutsConstants.STRUTS_FREEMARKER_MANAGER_CLASSNAME).trim();
-            }
-
-            try {
-                log.info("Instantiating Freemarker ConfigManager!, " + classname);
-                // singleton instances shouldn't be built accessing request or session-specific context data
-                instance = (FreemarkerManager) ObjectFactory.getObjectFactory().buildBean(classname, null);
-            } catch (Exception e) {
-                log.fatal("Fatal exception occurred while trying to instantiate a Freemarker ConfigManager instance, " + classname, e);
-            }
-        }
-
-        // if the instance creation failed, make sure there is a default instance
-        if (instance == null) {
-            instance = new FreemarkerManager();
-        }
-
-        return instance;
-    }
-
-    public final synchronized freemarker.template.Configuration getConfiguration(ServletContext servletContext) throws TemplateException {
-        freemarker.template.Configuration config = (freemarker.template.Configuration) servletContext.getAttribute(CONFIG_SERVLET_CONTEXT_KEY);
-
-        if (config == null) {
-            config = createConfiguration(servletContext);
-
-            // store this configuration in the servlet context
-            servletContext.setAttribute(CONFIG_SERVLET_CONTEXT_KEY, config);
-        }
-
-        config.setWhitespaceStripping(true);
-
-        return config;
-    }
-
-    protected ScopesHashModel buildScopesHashModel(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response, ObjectWrapper wrapper, ValueStack stack) {
-        ScopesHashModel model = new ScopesHashModel(wrapper, servletContext, request, stack);
-
-        // Create hash model wrapper for servlet context (the application)
-        // only need one thread to do this once, per servlet context
-        synchronized (servletContext) {
-            ServletContextHashModel servletContextModel = (ServletContextHashModel) servletContext.getAttribute(ATTR_APPLICATION_MODEL);
-
-            if (servletContextModel == null) {
-
-                GenericServlet servlet = JspSupportServlet.jspSupportServlet;
-                // TODO if the jsp support  servlet isn't load-on-startup then it won't exist
-                // if it hasn't been accessed, and a JSP page is accessed
-                if (servlet != null) {
-                    servletContextModel = new ServletContextHashModel(servlet, wrapper);
-                    servletContext.setAttribute(ATTR_APPLICATION_MODEL, servletContextModel);
-                    TaglibFactory taglibs = new TaglibFactory(servletContext);
-                    servletContext.setAttribute(ATTR_JSP_TAGLIBS_MODEL, taglibs);
-                }
-
-            }
-
-            model.put(KEY_APPLICATION, servletContextModel);
-            model.put(KEY_JSP_TAGLIBS, (TemplateModel) servletContext.getAttribute(ATTR_JSP_TAGLIBS_MODEL));
-        }
-
-        // Create hash model wrapper for session
-        HttpSession session = request.getSession(false);
-        if (session != null) {
-            model.put(KEY_SESSION_MODEL, new HttpSessionHashModel(session, wrapper));
-        } else {
-            // no session means no attributes ???
-            //            model.put(KEY_SESSION_MODEL, new SimpleHash());
-        }
-
-        // Create hash model wrapper for the request attributes
-        HttpRequestHashModel requestModel = (HttpRequestHashModel) request.getAttribute(ATTR_REQUEST_MODEL);
-
-        if ((requestModel == null) || (requestModel.getRequest() != request)) {
-            requestModel = new HttpRequestHashModel(request, response, wrapper);
-            request.setAttribute(ATTR_REQUEST_MODEL, requestModel);
-        }
-
-        model.put(KEY_REQUEST_MODEL, requestModel);
-
-
-        // Create hash model wrapper for request parameters
-        HttpRequestParametersHashModel reqParametersModel = (HttpRequestParametersHashModel) request.getAttribute(ATTR_REQUEST_PARAMETERS_MODEL);
-        if (reqParametersModel == null || requestModel.getRequest() != request) {
-        	reqParametersModel = new HttpRequestParametersHashModel(request);
-        	request.setAttribute(ATTR_REQUEST_PARAMETERS_MODEL, reqParametersModel);
-        }
-        model.put(KEY_REQUEST_PARAMETER_MODEL, reqParametersModel);
-
-        return model;
-    }
-
-    protected void populateContext(ScopesHashModel model, ValueStack stack, Object action, HttpServletRequest request, HttpServletResponse response) {
-        // put the same objects into the context that the velocity result uses
-        Map standard = ContextUtil.getStandardContext(stack, request, response);
-        model.putAll(standard);
-
-        // support for JSP exception pages, exposing the servlet or JSP exception
-        Throwable exception = (Throwable) request.getAttribute("javax.servlet.error.exception");
-
-        if (exception == null) {
-            exception = (Throwable) request.getAttribute("javax.servlet.error.JspException");
-        }
-
-        if (exception != null) {
-            model.put(KEY_EXCEPTION, exception);
-        }
-    }
-
-    protected BeansWrapper getObjectWrapper() {
-        return new StrutsBeanWrapper();
-    }
-
-    /**
-     * The default template loader is a MultiTemplateLoader which includes
-     * a ClassTemplateLoader and a WebappTemplateLoader (and a FileTemplateLoader depending on
-     * the init-parameter 'TemplatePath').
-     * <p/>
-     * The ClassTemplateLoader will resolve fully qualified template includes
-     * that begin with a slash. for example /com/company/template/common.ftl
-     * <p/>
-     * The WebappTemplateLoader attempts to resolve templates relative to the web root folder
-     */
-    protected TemplateLoader getTemplateLoader(ServletContext servletContext) {
-        // construct a FileTemplateLoader for the init-param 'TemplatePath'
-        FileTemplateLoader templatePathLoader = null;
-
-        String templatePath = servletContext.getInitParameter("TemplatePath");
-        if (templatePath == null) {
-            templatePath = servletContext.getInitParameter("templatePath");
-        }
-
-        if (templatePath != null) {
-            try {
-                templatePathLoader = new FileTemplateLoader(new File(templatePath));
-            } catch (IOException e) {
-                log.error("Invalid template path specified: " + e.getMessage(), e);
-            }
-        }
-
-        // presume that most apps will require the class and webapp template loader
-        // if people wish to
-        return templatePathLoader != null ?
-                new MultiTemplateLoader(new TemplateLoader[]{
-                        templatePathLoader,
-                        new WebappTemplateLoader(servletContext),
-                        new StrutsClassTemplateLoader()
-                })
-                : new MultiTemplateLoader(new TemplateLoader[]{
-                new WebappTemplateLoader(servletContext),
-                new StrutsClassTemplateLoader()
-        });
-    }
-
-    /**
-     * Create the instance of the freemarker Configuration object.
-     * <p/>
-     * this implementation
-     * <ul>
-     * <li>obtains the default configuration from Configuration.getDefaultConfiguration()
-     * <li>sets up template loading from a ClassTemplateLoader and a WebappTemplateLoader
-     * <li>sets up the object wrapper to be the BeansWrapper
-     * <li>loads settings from the classpath file /freemarker.properties
-     * </ul>
-     *
-     * @param servletContext
-     */
-    protected freemarker.template.Configuration createConfiguration(ServletContext servletContext) throws TemplateException {
-    	freemarker.template.Configuration configuration = new freemarker.template.Configuration();
-
-        configuration.setTemplateLoader(getTemplateLoader(servletContext));
-
-        configuration.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
-
-        configuration.setObjectWrapper(getObjectWrapper());
-
-        if (Settings.isSet(StrutsConstants.STRUTS_I18N_ENCODING)) {
-        	configuration.setDefaultEncoding(Settings.get(StrutsConstants.STRUTS_I18N_ENCODING));
-        }
-
-        loadSettings(servletContext, configuration);
-
-        return configuration;
-    }
-
-    /**
-     * Load the settings from the /freemarker.properties file on the classpath
-     *
-     * @see freemarker.template.Configuration#setSettings for the definition of valid settings
-     */
-    protected void loadSettings(ServletContext servletContext, freemarker.template.Configuration configuration) {
-        try {
-            InputStream in = FileManager.loadFile("freemarker.properties", FreemarkerManager.class);
-
-            if (in != null) {
-                Properties p = new Properties();
-                p.load(in);
-                configuration.setSettings(p);
-            }
-        } catch (IOException e) {
-            log.error("Error while loading freemarker settings from /freemarker.properties", e);
-        } catch (TemplateException e) {
-            log.error("Error while loading freemarker settings from /freemarker.properties", e);
-        }
-    }
-
-    public SimpleHash buildTemplateModel(ValueStack stack, Object action, ServletContext servletContext, HttpServletRequest request, HttpServletResponse response, ObjectWrapper wrapper) {
-        ScopesHashModel model = buildScopesHashModel(servletContext, request, response, wrapper, stack);
-        populateContext(model, stack, action, request, response);
-        model.put("s", new StrutsModels(stack, request, response));
-        return model;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
deleted file mode 100644
index ac6105d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Locale;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.dispatcher.StrutsResultSupport;
-import org.apache.struts2.views.util.ResourceUtil;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.LocaleProvider;
-import com.opensymphony.xwork2.util.ValueStack;
-
-import freemarker.template.Configuration;
-import freemarker.template.ObjectWrapper;
-import freemarker.template.Template;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-import freemarker.template.TemplateModelException;
-
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * Renders a view using the Freemarker template engine. 
- * <p>
- * The FreemarkarManager class configures the template loaders so that the
- * template location can be either
- * </p>
- *
- * <ul>
- *
- * <li>relative to the web root folder. eg <code>/WEB-INF/views/home.ftl</code>
- * </li>
- * 
- * <li>a classpath resuorce. eg <code>com/company/web/views/home.ftl</code></li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: description -->
- *
- * <b>This result type takes the following parameters:</b>
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li><b>location (default)</b> - the location of the template to process.</li>
- *
- * <li><b>parse</b> - true by default. If set to false, the location param will 
- * not be parsed for Ognl expressions.</li>
- *
- * <li><b>contentType</b> - defaults to "text/html" unless specified.</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- * <b>Example:</b>
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- * 
- * &lt;result name="success" type="freemarker"&gt;foo.ftl&lt;/result&gt;
- * 
- * <!-- END SNIPPET: example -->
- * </pre>
- */
-public class FreemarkerResult extends StrutsResultSupport {
-
-	private static final long serialVersionUID = -3778230771704661631L;
-	
-	protected ActionInvocation invocation;
-    protected Configuration configuration;
-    protected ObjectWrapper wrapper;
-
-    /*
-     * Struts results are constructed for each result execution
-     *
-     * the current context is availible to subclasses via these protected fields
-     */
-    protected String location;
-    private String pContentType = "text/html";
-
-    public FreemarkerResult() {
-    	super();
-    }
-    
-    public FreemarkerResult(String location) {
-    	super(location);
-    }
-
-    public void setContentType(String aContentType) {
-        pContentType = aContentType;
-    }
-
-    /**
-     * allow parameterization of the contentType
-     * the default being text/html
-     */
-    public String getContentType() {
-        return pContentType;
-    }
-
-    /**
-     * Execute this result, using the specified template location.
-     * <p/>
-     * The template location has already been interoplated for any variable substitutions
-     * <p/>
-     * this method obtains the freemarker configuration and the object wrapper from the provided hooks.
-     * It them implements the template processing workflow by calling the hooks for
-     * preTemplateProcess and postTemplateProcess
-     */
-    public void doExecute(String location, ActionInvocation invocation) throws IOException, TemplateException {
-        this.location = location;
-        this.invocation = invocation;
-        this.configuration = getConfiguration();
-        this.wrapper = getObjectWrapper();
-
-        if (!location.startsWith("/")) {
-            ActionContext ctx = invocation.getInvocationContext();
-            HttpServletRequest req = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
-            String base = ResourceUtil.getResourceBase(req);
-            location = base + "/" + location;
-        }
-        
-        Template template = configuration.getTemplate(location, deduceLocale());
-        TemplateModel model = createModel();
-
-        // Give subclasses a chance to hook into preprocessing
-        if (preTemplateProcess(template, model)) {
-            try {
-                // Process the template
-                template.process(model, getWriter());
-            } finally {
-                // Give subclasses a chance to hook into postprocessing
-                postTemplateProcess(template, model);
-            }
-        }
-    }
-
-    /**
-     * This method is called from {@link #doExecute(String, ActionInvocation)} to obtain the
-     * FreeMarker configuration object that this result will use for template loading. This is a
-     * hook that allows you to custom-configure the configuration object in a subclass, or to fetch
-     * it from an IoC container.
-     * <p/>
-     * <b>
-     * The default implementation obtains the configuration from the ConfigurationManager instance.
-     * </b>
-     */
-    protected Configuration getConfiguration() throws TemplateException {
-        return FreemarkerManager.getInstance().getConfiguration(ServletActionContext.getServletContext());
-    }
-
-    /**
-     * This method is called from {@link #doExecute(String, ActionInvocation)}  to obtain the
-     * FreeMarker object wrapper object that this result will use for adapting objects into template
-     * models. This is a hook that allows you to custom-configure the wrapper object in a subclass.
-     * <p/>
-     * <b>
-     * The default implementation returns {@link Configuration#getObjectWrapper()}
-     * </b>
-     */
-    protected ObjectWrapper getObjectWrapper() {
-        return configuration.getObjectWrapper();
-    }
-
-    /**
-     * The default writer writes directly to the response writer.
-     */
-    protected Writer getWriter() throws IOException {
-        return ServletActionContext.getResponse().getWriter();
-    }
-
-    /**
-     * Build the instance of the ScopesHashModel, including JspTagLib support
-     * <p/>
-     * Objects added to the model are
-     * <p/>
-     * <ul>
-     * <li>Application - servlet context attributes hash model
-     * <li>JspTaglibs - jsp tag lib factory model
-     * <li>Request - request attributes hash model
-     * <li>Session - session attributes hash model
-     * <li>request - the HttpServletRequst object for direct access
-     * <li>response - the HttpServletResponse object for direct access
-     * <li>stack - the OgnLValueStack instance for direct access
-     * <li>ognl - the instance of the OgnlTool
-     * <li>action - the action itself
-     * <li>exception - optional : the JSP or Servlet exception as per the servlet spec (for JSP Exception pages)
-     * <li>struts - instance of the StrutsUtil class
-     * </ul>
-     */
-    protected TemplateModel createModel() throws TemplateModelException {
-        ServletContext servletContext = ServletActionContext.getServletContext();
-        HttpServletRequest request = ServletActionContext.getRequest();
-        HttpServletResponse response = ServletActionContext.getResponse();
-        ValueStack stack = ServletActionContext.getContext().getValueStack();
-
-        Object action = null;
-        if(invocation!= null ) action = invocation.getAction(); //Added for NullPointException
-        return FreemarkerManager.getInstance().buildTemplateModel(stack, action, servletContext, request, response, wrapper);
-    }
-
-    /**
-     * Returns the locale used for the {@link Configuration#getTemplate(String, Locale)} call. The base implementation
-     * simply returns the locale setting of the action (assuming the action implements {@link LocaleProvider}) or, if
-     * the action does not the configuration's locale is returned. Override this method to provide different behaviour,
-     */
-    protected Locale deduceLocale() {
-        if (invocation.getAction() instanceof LocaleProvider) {
-            return ((LocaleProvider) invocation.getAction()).getLocale();
-        } else {
-            return configuration.getLocale();
-        }
-    }
-
-    /**
-     * the default implementation of postTemplateProcess applies the contentType parameter
-     */
-    protected void postTemplateProcess(Template template, TemplateModel data) throws IOException {
-    }
-
-    /**
-     * Called before the execution is passed to template.process().
-     * This is a generic hook you might use in subclasses to perform a specific
-     * action before the template is processed. By default does nothing.
-     * A typical action to perform here is to inject application-specific
-     * objects into the model root
-     *
-     * @return true to process the template, false to suppress template processing.
-     */
-    protected boolean preTemplateProcess(Template template, TemplateModel model) throws IOException {
-        Object attrContentType = template.getCustomAttribute("content_type");
-
-        if (attrContentType != null) {
-            ServletActionContext.getResponse().setContentType(attrContentType.toString());
-        } else {
-            String contentType = getContentType();
-
-            if (contentType == null) {
-                contentType = "text/html";
-            }
-
-            String encoding = template.getEncoding();
-
-            if (encoding != null) {
-                contentType = contentType + "; charset=" + encoding;
-            }
-
-            ServletActionContext.getResponse().setContentType(contentType);
-        }
-
-        return true;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java
deleted file mode 100644
index b5d3c5a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Locale;
-
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletException;
-import javax.portlet.PortletRequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.dispatcher.StrutsResultSupport;
-import org.apache.struts2.portlet.PortletActionConstants;
-import org.apache.struts2.portlet.context.PortletActionContext;
-import org.apache.struts2.views.util.ResourceUtil;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-
-import freemarker.template.Configuration;
-import freemarker.template.ObjectWrapper;
-import freemarker.template.Template;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-import freemarker.template.TemplateModelException;
-
-/**
- */
-public class PortletFreemarkerResult extends StrutsResultSupport {
-
-	private static final long serialVersionUID = -5570612389289887543L;
-
-	protected ActionInvocation invocation;
-
-    protected Configuration configuration;
-
-    protected ObjectWrapper wrapper;
-
-    /*
-     * Struts results are constructed for each result execeution
-     * 
-     * the current context is availible to subclasses via these protected fields
-     */
-    protected String location;
-
-    private String pContentType = "text/html";
-
-    public PortletFreemarkerResult() {
-    	super();
-    }
-    
-    public PortletFreemarkerResult(String location) {
-    	super(location);
-    }
-    
-    public void setContentType(String aContentType) {
-        pContentType = aContentType;
-    }
-
-    /**
-     * allow parameterization of the contentType the default being text/html
-     */
-    public String getContentType() {
-        return pContentType;
-    }
-
-    /**
-     * Execute this result, using the specified template location. <p/>The
-     * template location has already been interoplated for any variable
-     * substitutions <p/>this method obtains the freemarker configuration and
-     * the object wrapper from the provided hooks. It them implements the
-     * template processing workflow by calling the hooks for preTemplateProcess
-     * and postTemplateProcess
-     */
-    public void doExecute(String location, ActionInvocation invocation)
-            throws IOException, TemplateException, PortletException {
-        if (PortletActionContext.isEvent()) {
-            executeActionResult(location, invocation);
-        } else if (PortletActionContext.isRender()) {
-            executeRenderResult(location, invocation);
-        }
-    }
-
-    /**
-     * @param location
-     * @param invocation
-     */
-    private void executeActionResult(String location,
-                                     ActionInvocation invocation) {
-        ActionResponse res = PortletActionContext.getActionResponse();
-        // View is rendered outside an action...uh oh...
-        res.setRenderParameter(PortletActionConstants.ACTION_PARAM, "freemarkerDirect");
-        res.setRenderParameter("location", location);
-        res.setRenderParameter(PortletActionConstants.MODE_PARAM, PortletActionContext
-                .getRequest().getPortletMode().toString());
-
-    }
-
-    /**
-     * @param location
-     * @param invocation
-     * @throws TemplateException
-     * @throws IOException
-     * @throws TemplateModelException
-     */
-    private void executeRenderResult(String location,
-                                     ActionInvocation invocation) throws TemplateException, IOException,
-            TemplateModelException, PortletException {
-        prepareServletActionContext();
-        this.location = location;
-        this.invocation = invocation;
-        this.configuration = getConfiguration();
-        this.wrapper = getObjectWrapper();
-
-        HttpServletRequest req = ServletActionContext.getRequest();
-
-        if (!location.startsWith("/")) {
-            String base = ResourceUtil.getResourceBase(req);
-            location = base + "/" + location;
-        }
-
-        Template template = configuration.getTemplate(location, deduceLocale());
-        TemplateModel model = createModel();
-        // Give subclasses a chance to hook into preprocessing
-        if (preTemplateProcess(template, model)) {
-            try {
-                // Process the template
-                PortletActionContext.getRenderResponse().setContentType(pContentType);
-                template.process(model, getWriter());
-            } finally {
-                // Give subclasses a chance to hook into postprocessing
-                postTemplateProcess(template, model);
-            }
-        }
-    }
-
-    /**
-     *  
-     */
-    private void prepareServletActionContext() throws PortletException,
-            IOException {
-        PortletRequestDispatcher disp = PortletActionContext.getPortletConfig()
-                .getPortletContext().getNamedDispatcher("preparator");
-        disp.include(PortletActionContext.getRenderRequest(),
-                PortletActionContext.getRenderResponse());
-    }
-
-    /**
-     * This method is called from {@link #doExecute(String, ActionInvocation)}
-     * to obtain the FreeMarker configuration object that this result will use
-     * for template loading. This is a hook that allows you to custom-configure
-     * the configuration object in a subclass, or to fetch it from an IoC
-     * container. <p/><b>The default implementation obtains the configuration
-     * from the ConfigurationManager instance. </b>
-     */
-    protected Configuration getConfiguration() throws TemplateException {
-        return FreemarkerManager.getInstance().getConfiguration(
-                ServletActionContext.getServletContext());
-    }
-
-    /**
-     * This method is called from {@link #doExecute(String, ActionInvocation)}
-     * to obtain the FreeMarker object wrapper object that this result will use
-     * for adapting objects into template models. This is a hook that allows you
-     * to custom-configure the wrapper object in a subclass. <p/><b>The default
-     * implementation returns {@link Configuration#getObjectWrapper()}</b>
-     */
-    protected ObjectWrapper getObjectWrapper() {
-        return configuration.getObjectWrapper();
-    }
-
-    /**
-     * The default writer writes directly to the response writer.
-     */
-    protected Writer getWriter() throws IOException {
-        return PortletActionContext.getRenderResponse().getWriter();
-    }
-
-    /**
-     * Build the instance of the ScopesHashModel, including JspTagLib support
-     * <p/>Objects added to the model are <p/>
-     * <ul>
-     * <li>Application - servlet context attributes hash model
-     * <li>JspTaglibs - jsp tag lib factory model
-     * <li>Request - request attributes hash model
-     * <li>Session - session attributes hash model
-     * <li>request - the HttpServletRequst object for direct access
-     * <li>response - the HttpServletResponse object for direct access
-     * <li>stack - the OgnLValueStack instance for direct access
-     * <li>ognl - the instance of the OgnlTool
-     * <li>action - the action itself
-     * <li>exception - optional : the JSP or Servlet exception as per the
-     * servlet spec (for JSP Exception pages)
-     * <li>struts - instance of the StrutsUtil class
-     * </ul>
-     */
-    protected TemplateModel createModel() throws TemplateModelException {
-        ServletContext servletContext = ServletActionContext
-                .getServletContext();
-        HttpServletRequest request = ServletActionContext.getRequest();
-        HttpServletResponse response = ServletActionContext.getResponse();
-        ValueStack stack = ServletActionContext.getContext()
-                .getValueStack();
-        return FreemarkerManager.getInstance().buildTemplateModel(stack,
-                invocation.getAction(), servletContext, request, response,
-                wrapper);
-    }
-
-    /**
-     * Returns the locale used for the
-     * {@link Configuration#getTemplate(String, Locale)}call. The base
-     * implementation simply returns the locale setting of the configuration.
-     * Override this method to provide different behaviour,
-     */
-    protected Locale deduceLocale() {
-        return configuration.getLocale();
-    }
-
-    /**
-     * the default implementation of postTemplateProcess applies the contentType
-     * parameter
-     */
-    protected void postTemplateProcess(Template template, TemplateModel data)
-            throws IOException {
-    }
-
-    /**
-     * Called before the execution is passed to template.process(). This is a
-     * generic hook you might use in subclasses to perform a specific action
-     * before the template is processed. By default does nothing. A typical
-     * action to perform here is to inject application-specific objects into the
-     * model root
-     *
-     * @return true to process the template, false to suppress template
-     *         processing.
-     */
-    protected boolean preTemplateProcess(Template template, TemplateModel model)
-            throws IOException {
-        Object attrContentType = template.getCustomAttribute("content_type");
-
-        if (attrContentType != null) {
-            ServletActionContext.getResponse().setContentType(
-                    attrContentType.toString());
-        } else {
-            String contentType = getContentType();
-
-            if (contentType == null) {
-                contentType = "text/html";
-            }
-
-            String encoding = template.getEncoding();
-
-            if (encoding != null) {
-                contentType = contentType + "; charset=" + encoding;
-            }
-
-            ServletActionContext.getResponse().setContentType(contentType);
-        }
-
-        return true;
-    }
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java
deleted file mode 100644
index b8387d5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-import freemarker.template.ObjectWrapper;
-import freemarker.template.SimpleHash;
-import freemarker.template.TemplateModel;
-import freemarker.template.TemplateModelException;
-
-
-/**
- * Simple Hash model that also searches other scopes.
- * <p/>
- * If the key doesn't exist in this hash, this template model tries to
- * resolve the key within the attributes of the following scopes,
- * in the order stated: Request, Session, Servlet Context
- */
-public class ScopesHashModel extends SimpleHash {
-
-	private static final long serialVersionUID = 5551686380141886764L;
-	
-	private HttpServletRequest request;
-    private ServletContext servletContext;
-    private ValueStack stack;
-
-
-    public ScopesHashModel(ObjectWrapper objectWrapper, ServletContext context, HttpServletRequest request, ValueStack stack) {
-        super(objectWrapper);
-        this.servletContext = context;
-        this.request = request;
-        this.stack = stack;
-    }
-
-
-    public TemplateModel get(String key) throws TemplateModelException {
-        // Lookup in default scope
-        TemplateModel model = super.get(key);
-
-        if (model != null) {
-            return model;
-        }
-
-
-        if (stack != null) {
-            Object obj = stack.findValue(key);
-
-            if (obj != null) {
-                return wrap(obj);
-            }
-
-            // ok, then try the context
-            obj = stack.getContext().get(key);
-            if (obj != null) {
-                return wrap(obj);
-            }
-        }
-
-        if (request != null) {
-            // Lookup in request scope
-            Object obj = request.getAttribute(key);
-
-            if (obj != null) {
-                return wrap(obj);
-            }
-
-            // Lookup in session scope
-            HttpSession session = request.getSession(false);
-
-            if (session != null) {
-                obj = session.getAttribute(key);
-
-                if (obj != null) {
-                    return wrap(obj);
-                }
-            }
-        }
-
-        if (servletContext != null) {
-            // Lookup in application scope
-            Object obj = servletContext.getAttribute(key);
-
-            if (obj != null) {
-                return wrap(obj);
-            }
-        }
-
-        return null;
-    }
-
-    public void put(String string, boolean b) {
-        super.put(string, b);
-    }
-
-    public void put(String string, Object object) {
-        super.put(string, object);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java
deleted file mode 100644
index 1cf4284..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker;
-
-import java.util.Map;
-import java.util.Set;
-
-import freemarker.core.CollectionAndSequence;
-import freemarker.ext.beans.BeansWrapper;
-import freemarker.ext.beans.MapModel;
-import freemarker.ext.util.ModelFactory;
-import freemarker.template.ObjectWrapper;
-import freemarker.template.SimpleSequence;
-import freemarker.template.TemplateBooleanModel;
-import freemarker.template.TemplateCollectionModel;
-import freemarker.template.TemplateHashModelEx;
-import freemarker.template.TemplateModel;
-import freemarker.template.TemplateModelException;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * The StrutsBeanWrapper extends the default FreeMarker BeansWrapper and provides almost no change in functionality,
- * <b>except</b> for how it handles maps. Normally, FreeMarker has two modes of operation: either support for friendly
- * map built-ins (?keys, ?values, etc) but only support for String keys; OR no special built-in support (ie: ?keys
- * returns the methods on the map instead of the keys) but support for String and non-String keys alike. Struts
- * provides an alternative implementation that gives us the best of both worlds.
- *
- * <p/> It is possible that this special behavior may be confusing or can cause problems. Therefore, you can set the
- * <b>struts.freemarker.wrapper.altMap</b> property in struts.properties to false, allowing the normal BeansWrapper
- * logic to take place instead.
- *
- * <!-- END SNIPPET: javadoc -->
- */
-public class StrutsBeanWrapper extends BeansWrapper {
-    private static final boolean altMapWrapper
-            = "true".equals(org.apache.struts2.config.Settings.get("struts.freemarker.wrapper.altMap"));
-
-    public TemplateModel wrap(Object object) throws TemplateModelException {
-        if (object instanceof TemplateBooleanModel) {
-            return super.wrap(object);
-        }
-
-        // attempt to get the best of both the SimpleMapModel and the MapModel of FM.
-        if (altMapWrapper && object instanceof Map) {
-            return getInstance(object, FriendlyMapModel.FACTORY);
-        }
-
-        return super.wrap(object);
-    }
-
-    /**
-     * Attempting to get the best of both worlds of FM's MapModel and SimpleMapModel, by reimplementing the isEmpty(),
-     * keySet() and values() methods. ?keys and ?values built-ins are thus available, just as well as plain Map
-     * methods.
-     */
-    private final static class FriendlyMapModel extends MapModel implements TemplateHashModelEx {
-        static final ModelFactory FACTORY = new ModelFactory() {
-            public TemplateModel create(Object object, ObjectWrapper wrapper) {
-                return new FriendlyMapModel((Map) object, (BeansWrapper) wrapper);
-            }
-        };
-
-        public FriendlyMapModel(Map map, BeansWrapper wrapper) {
-            super(map, wrapper);
-        }
-
-        public boolean isEmpty() {
-            return ((Map) object).isEmpty();
-        }
-
-        protected Set keySet() {
-            return ((Map) object).keySet();
-        }
-
-        public TemplateCollectionModel values() {
-            return new CollectionAndSequence(new SimpleSequence(((Map) object).values(), wrapper));
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/StrutsClassTemplateLoader.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/StrutsClassTemplateLoader.java
deleted file mode 100644
index cda5b46..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/StrutsClassTemplateLoader.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker;
-
-import java.net.URL;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-
-import freemarker.cache.URLTemplateLoader;
-
-/**
- */
-public class StrutsClassTemplateLoader extends URLTemplateLoader {
-    protected URL getURL(String name) {
-        return ClassLoaderUtil.getResource(name, getClass());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionErrorModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionErrorModel.java
deleted file mode 100644
index 9e66613..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionErrorModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ActionError;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ActionError
- */
-public class ActionErrorModel extends TagModel {
-    public ActionErrorModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new ActionError(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionMessageModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionMessageModel.java
deleted file mode 100644
index a3c7508..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionMessageModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ActionMessage;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ActionMessage
- */
-public class ActionMessageModel extends TagModel {
-    public ActionMessageModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new ActionMessage(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionModel.java
deleted file mode 100644
index b057657..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ActionComponent;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ActionComponent
- */
-public class ActionModel extends TagModel {
-    public ActionModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new ActionComponent(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/AnchorModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/AnchorModel.java
deleted file mode 100644
index bb529ad..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/AnchorModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Anchor;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Anchor
- */
-public class AnchorModel extends TagModel {
-    public AnchorModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Anchor(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/BeanModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/BeanModel.java
deleted file mode 100644
index d3e7a26..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/BeanModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Bean;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Bean
- */
-public class BeanModel extends TagModel {
-    public BeanModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Bean(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/CallbackWriter.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/CallbackWriter.java
deleted file mode 100644
index cedd7b6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/CallbackWriter.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.Writer;
-
-import org.apache.struts2.components.Component;
-
-import freemarker.template.TemplateModelException;
-import freemarker.template.TransformControl;
-
-/**
- */
-public class CallbackWriter extends Writer implements TransformControl {
-    private Component bean;
-    private Writer writer;
-    private StringWriter body;
-    private boolean afterBody = false;
-
-    public CallbackWriter(Component bean, Writer writer) {
-        this.bean = bean;
-        this.writer = writer;
-
-        if (bean.usesBody()) {
-            this.body = new StringWriter();
-        }
-    }
-
-    public void close() throws IOException {
-        if (bean.usesBody()) {
-            body.close();
-        }
-    }
-
-    public void flush() throws IOException {
-        writer.flush();
-
-        if (bean.usesBody()) {
-            body.flush();
-        }
-    }
-
-    public void write(char cbuf[], int off, int len) throws IOException {
-        if (bean.usesBody() && !afterBody) {
-            body.write(cbuf, off, len);
-        } else {
-            writer.write(cbuf, off, len);
-        }
-    }
-
-    public int onStart() throws TemplateModelException, IOException {
-        boolean result = bean.start(this);
-
-        if (result) {
-            return EVALUATE_BODY;
-        } else {
-            return SKIP_BODY;
-        }
-    }
-
-    public int afterBody() throws TemplateModelException, IOException {
-        afterBody = true;
-        boolean result = bean.end(this, bean.usesBody() ? body.toString() : "");
-
-        if (result) {
-            return REPEAT_EVALUATION;
-        } else {
-            return END_EVALUATION;
-        }
-    }
-
-    public void onError(Throwable throwable) throws Throwable {
-        throw throwable;
-    }
-
-    public Component getBean() {
-        return bean;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxListModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxListModel.java
deleted file mode 100644
index fb9e284..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxListModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.CheckboxList;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see CheckboxList
- */
-public class CheckboxListModel extends TagModel {
-    public CheckboxListModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new CheckboxList(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxModel.java
deleted file mode 100644
index 75f68d8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Checkbox;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Checkbox
- */
-public class CheckboxModel extends TagModel {
-    public CheckboxModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Checkbox(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComboBoxModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComboBoxModel.java
deleted file mode 100644
index 48f620e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComboBoxModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ComboBox;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ComboBox
- */
-public class ComboBoxModel extends TagModel {
-    public ComboBoxModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new ComboBox(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComponentModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComponentModel.java
deleted file mode 100644
index 8e8b851..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComponentModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.GenericUIBean;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ComponentModel
- */
-public class ComponentModel extends TagModel {
-    public ComponentModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new GenericUIBean(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DateModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DateModel.java
deleted file mode 100644
index 56ac583..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DateModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Date;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <code>DateModel</code>
- *
- */
-public class DateModel extends TagModel {
-
-    public DateModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Date(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DatePickerModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DatePickerModel.java
deleted file mode 100644
index 51ee611..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DatePickerModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.DatePicker;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see DatePicker
- */
-public class DatePickerModel extends TextFieldModel {
-    public DatePickerModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new DatePicker(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DivModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DivModel.java
deleted file mode 100644
index 2d41345..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DivModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Div;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Div
- */
-public class DivModel extends TagModel {
-    public DivModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Div(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DoubleSelectModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DoubleSelectModel.java
deleted file mode 100644
index 4baea67..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/DoubleSelectModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.DoubleSelect;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see DoubleSelect
- */
-public class DoubleSelectModel extends TagModel {
-    public DoubleSelectModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new DoubleSelect(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ElseIfModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ElseIfModel.java
deleted file mode 100644
index 434324e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ElseIfModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.ElseIf;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @version $Date$ $Id$
- */
-public class ElseIfModel extends TagModel {
-
-	public ElseIfModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		super(stack, req, res);
-	}
-
-	protected Component getBean() {
-		return new ElseIf(stack);
-	}
-	
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ElseModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ElseModel.java
deleted file mode 100644
index 64ca5dd..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ElseModel.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Else;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * 
- * @version $Date$ $Id$
- */
-public class ElseModel extends TagModel {
-
-	public ElseModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		super(stack, req, res);
-	}
-
-	protected Component getBean() {
-		return new Else(stack);
-	}
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/FieldErrorModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/FieldErrorModel.java
deleted file mode 100644
index 93a5e30..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/FieldErrorModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.FieldError;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see FieldError
- */
-public class FieldErrorModel extends TagModel {
-    public FieldErrorModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new FieldError(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/FileModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/FileModel.java
deleted file mode 100644
index 4955136..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/FileModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.File;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see File
- */
-public class FileModel extends TagModel {
-    public FileModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new File(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/FormModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/FormModel.java
deleted file mode 100644
index a8b1b91..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/FormModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Form;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Form
- */
-public class FormModel extends TagModel {
-    public FormModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Form(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/HeadModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/HeadModel.java
deleted file mode 100644
index 9100ed4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/HeadModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Head;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Head
- */
-public class HeadModel extends TagModel {
-    public HeadModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Head(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/HiddenModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/HiddenModel.java
deleted file mode 100644
index 5d2a874..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/HiddenModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Hidden;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Hidden
- */
-public class HiddenModel extends TagModel {
-    public HiddenModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Hidden(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/I18nModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/I18nModel.java
deleted file mode 100644
index d2f9097..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/I18nModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.I18n;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see I18n
- */
-public class I18nModel extends TagModel {
-    public I18nModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new I18n(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/IfModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/IfModel.java
deleted file mode 100644
index ef008c2..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/IfModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.If;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @version $Date$ $Id$
- */
-public class IfModel extends TagModel {
-
-	
-	public IfModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		super(stack, req, res);
-	}
-
-	protected Component getBean() {
-		return new If(stack);
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/IncludeModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/IncludeModel.java
deleted file mode 100644
index a74a67a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/IncludeModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Include;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Include
- */
-public class IncludeModel extends TagModel {
-    public IncludeModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Include(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/IteratorModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/IteratorModel.java
deleted file mode 100644
index f4ea117..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/IteratorModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.IteratorComponent;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see IteratorComponent
- */
-public class IteratorModel extends TagModel {
-    public IteratorModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new IteratorComponent(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/LabelModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/LabelModel.java
deleted file mode 100644
index d8088e6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/LabelModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Label;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Label
- */
-public class LabelModel extends TagModel {
-    public LabelModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Label(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptGroupModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptGroupModel.java
deleted file mode 100644
index 8d193d7..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptGroupModel.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.OptGroup;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * Freemarker's TransformModel for OptGroup component.
- *
- */
-public class OptGroupModel extends TagModel {
-	public OptGroupModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		super(stack, req, res);
-	}
-
-	protected Component getBean() {
-		return new OptGroup(stack, req, res);
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptionTransferSelectModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptionTransferSelectModel.java
deleted file mode 100644
index 15b76a7..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptionTransferSelectModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.OptionTransferSelect;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see OptionTransferSelect
- */
-public class OptionTransferSelectModel extends TagModel {
-
-	public OptionTransferSelectModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		super(stack, req, res);
-	}
-
-	protected Component getBean() {
-		return new OptionTransferSelect(stack, req, res);
-	}
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PanelModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PanelModel.java
deleted file mode 100644
index 00dc085..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PanelModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Panel;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Panel
- */
-public class PanelModel extends TagModel {
-    public PanelModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Panel(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ParamModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ParamModel.java
deleted file mode 100644
index 74fb779..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ParamModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Param;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Param
- */
-public class ParamModel extends TagModel {
-    public ParamModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Param(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PasswordModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PasswordModel.java
deleted file mode 100644
index 6f9a4d8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PasswordModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Password;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Password
- */
-public class PasswordModel extends TagModel {
-    public PasswordModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Password(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PropertyModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PropertyModel.java
deleted file mode 100644
index 61e9fa0..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PropertyModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Property;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Property
- */
-public class PropertyModel extends TagModel {
-    public PropertyModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Property(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PushModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PushModel.java
deleted file mode 100644
index dc74f0d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/PushModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Push;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Push
- */
-public class PushModel extends TagModel {
-    public PushModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Push(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/RadioModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/RadioModel.java
deleted file mode 100644
index 358be7f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/RadioModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Radio;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Radio
- */
-public class RadioModel extends TagModel {
-    public RadioModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Radio(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ResetModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ResetModel.java
deleted file mode 100644
index 40efe93..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/ResetModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Reset;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see org.apache.struts2.components.Reset
- */
-public class ResetModel extends TagModel {
-    public ResetModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Reset(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/SelectModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/SelectModel.java
deleted file mode 100644
index 43bc746..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/SelectModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Select;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Select
- */
-public class SelectModel extends TagModel {
-    public SelectModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Select(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/SetModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/SetModel.java
deleted file mode 100644
index f382865..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/SetModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Set;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Set
- */
-public class SetModel extends TagModel {
-    public SetModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Set(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java
deleted file mode 100644
index 298a838..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * Provides @s.tag access for various tags.
- *
- */
-public class StrutsModels {
-    protected ValueStack stack;
-    protected HttpServletRequest req;
-    protected HttpServletResponse res;
-
-    protected ActionModel action;
-    protected BeanModel bean;
-    protected CheckboxModel checkbox;
-    protected CheckboxListModel checkboxlist;
-    protected ComboBoxModel comboBox;
-    protected ComponentModel component;
-    protected DateModel date;
-    protected DatePickerModel datepicker;
-    protected DivModel div;
-    protected DoubleSelectModel doubleselect;
-    protected FileModel file;
-    protected FormModel form;
-    protected HeadModel head;
-    protected HiddenModel hidden;
-    protected AnchorModel a;
-    protected I18nModel i18n;
-    protected IncludeModel include;
-    protected LabelModel label;
-    protected PanelModel panel;
-    protected PasswordModel password;
-    protected PushModel push;
-    protected ParamModel param;
-    protected RadioModel radio;
-    protected SelectModel select;
-    protected SetModel set;
-    protected SubmitModel submit;
-    protected ResetModel reset;
-    protected TabbedPanelModel tabbedPanel;
-    protected TextAreaModel textarea;
-    protected TextModel text;
-    protected TextFieldModel textfield;
-    protected TokenModel token;
-    protected URLModel url;
-    protected WebTableModel table;
-    protected PropertyModel property;
-    protected IteratorModel iterator;
-    protected ActionErrorModel actionerror;
-    protected ActionMessageModel actionmessage;
-    protected FieldErrorModel fielderror;
-    protected OptionTransferSelectModel optiontransferselect;
-    protected TreeModel treeModel;
-    protected UpDownSelectModel updownselect;
-    protected OptGroupModel optGroupModel;
-    protected IfModel ifModel;
-    protected ElseModel elseModel;
-    protected ElseIfModel elseIfModel;
-    protected TimePickerModel timePickerModel;
-    
-
-    public StrutsModels(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        this.stack = stack;
-        this.req = req;
-        this.res = res;
-    }
-
-    public CheckboxListModel getCheckboxlist() {
-        if (checkboxlist == null) {
-            checkboxlist = new CheckboxListModel(stack, req, res);
-        }
-
-        return checkboxlist;
-    }
-
-    public CheckboxModel getCheckbox() {
-        if (checkbox == null) {
-            checkbox = new CheckboxModel(stack, req, res);
-        }
-
-        return checkbox;
-    }
-
-    public ComboBoxModel getComboBox() {
-        if (comboBox == null) {
-            comboBox = new ComboBoxModel(stack, req, res);
-        }
-
-        return comboBox;
-    }
-
-    public ComponentModel getComponent() {
-        if (component == null) {
-            component = new ComponentModel(stack, req, res);
-        }
-
-        return component;
-    }
-
-    public DoubleSelectModel getDoubleselect() {
-        if (doubleselect == null) {
-            doubleselect = new DoubleSelectModel(stack, req, res);
-        }
-
-        return doubleselect;
-    }
-
-    public FileModel getFile() {
-        if (file == null) {
-            file = new FileModel(stack, req, res);
-        }
-
-        return file;
-    }
-
-    public FormModel getForm() {
-        if (form == null) {
-            form = new FormModel(stack, req, res);
-        }
-
-        return form;
-    }
-
-    public HeadModel getHead() {
-        if (head == null) {
-            head = new HeadModel(stack, req, res);
-        }
-
-        return head;
-    }
-
-    public HiddenModel getHidden() {
-        if (hidden == null) {
-            hidden = new HiddenModel(stack, req, res);
-        }
-
-        return hidden;
-    }
-    public LabelModel getLabel() {
-        if (label == null) {
-            label = new LabelModel(stack, req, res);
-        }
-
-        return label;
-    }
-
-    public PasswordModel getPassword() {
-        if (password == null) {
-            password = new PasswordModel(stack, req, res);
-        }
-
-        return password;
-    }
-
-    public RadioModel getRadio() {
-        if (radio == null) {
-            radio = new RadioModel(stack, req, res);
-        }
-
-        return radio;
-    }
-
-    public SelectModel getSelect() {
-        if (select == null) {
-            select = new SelectModel(stack, req, res);
-        }
-
-        return select;
-    }
-
-    public SubmitModel getSubmit() {
-        if (submit == null) {
-            submit = new SubmitModel(stack, req, res);
-        }
-
-        return submit;
-    }
-
-    public ResetModel getReset() {
-        if (reset == null) {
-            reset = new ResetModel(stack, req, res);
-        }
-
-        return reset;
-    }
-
-    public TextAreaModel getTextarea() {
-        if (textarea == null) {
-            textarea = new TextAreaModel(stack, req, res);
-        }
-
-        return textarea;
-    }
-
-    public TextFieldModel getTextfield() {
-        if (textfield == null) {
-            textfield = new TextFieldModel(stack, req, res);
-        }
-
-        return textfield;
-    }
-
-    public DateModel getDate() {
-        if (date == null) {
-            date = new DateModel(stack, req, res);
-        }
-
-        return date;
-    }
-
-    public DatePickerModel getDatepicker() {
-        if (datepicker == null) {
-            datepicker = new DatePickerModel(stack, req, res);
-        }
-
-        return datepicker;
-    }
-
-    public TokenModel getToken() {
-        if (token == null) {
-            token = new TokenModel(stack, req, res);
-        }
-
-        return token;
-    }
-
-    public WebTableModel getTable() {
-        if (table == null) {
-            table = new WebTableModel(stack, req, res);
-        }
-
-        return table;
-    }
-
-    public URLModel getUrl() {
-        if (url == null) {
-            url = new URLModel(stack, req, res);
-        }
-
-        return url;
-    }
-
-    public IncludeModel getInclude() {
-        if (include == null) {
-            include = new IncludeModel(stack, req, res);
-        }
-
-        return include;
-    }
-
-    public ParamModel getParam() {
-        if (param == null) {
-            param = new ParamModel(stack, req, res);
-        }
-
-        return param;
-    }
-
-    public ActionModel getAction() {
-        if (action == null) {
-            action = new ActionModel(stack, req, res);
-        }
-
-        return action;
-    }
-
-    public AnchorModel getA() {
-        if (a == null) {
-            a = new AnchorModel(stack, req, res);
-        }
-
-        return a;
-    }
-
-    public AnchorModel getHref() {
-        if (a == null) {
-            a = new AnchorModel(stack, req, res);
-        }
-
-        return a;
-    }
-
-    public DivModel getDiv() {
-        if (div == null) {
-            div = new DivModel(stack, req, res);
-        }
-
-        return div;
-    }
-
-    public TextModel getText() {
-        if (text == null) {
-            text = new TextModel(stack, req, res);
-        }
-
-        return text;
-    }
-
-    public TabbedPanelModel getTabbedPanel() {
-        if (tabbedPanel == null) {
-            tabbedPanel = new TabbedPanelModel(stack, req, res);
-        }
-
-        return tabbedPanel;
-    }
-
-    public PanelModel getPanel() {
-        if (panel == null) {
-            panel = new PanelModel(stack, req, res);
-        }
-
-        return panel;
-    }
-
-    public BeanModel getBean() {
-        if (bean == null) {
-            bean = new BeanModel(stack, req, res);
-        }
-
-        return bean;
-    }
-
-    public I18nModel getI18n() {
-        if (i18n == null) {
-            i18n = new I18nModel(stack, req, res);
-        }
-
-        return i18n;
-    }
-
-    public PushModel getPush() {
-        if (push == null) {
-            push = new PushModel(stack, req, res);
-        }
-
-        return push;
-    }
-
-    public SetModel getSet() {
-        if (set == null) {
-            set = new SetModel(stack, req, res);
-        }
-
-        return set;
-    }
-
-    public PropertyModel getProperty() {
-        if (property == null) {
-            property = new PropertyModel(stack, req, res);
-        }
-
-        return property;
-    }
-
-    public IteratorModel getIterator() {
-        if (iterator == null) {
-            iterator = new IteratorModel(stack, req, res);
-        }
-
-        return iterator;
-    }
-
-    public ActionErrorModel getActionerror() {
-        if (actionerror == null) {
-            actionerror = new ActionErrorModel(stack, req, res);
-        }
-
-        return actionerror;
-    }
-
-    public ActionMessageModel getActionmessage() {
-        if (actionmessage == null) {
-            actionmessage = new ActionMessageModel(stack, req, res);
-        }
-
-        return actionmessage;
-    }
-
-    public FieldErrorModel getFielderror() {
-        if (fielderror == null) {
-            fielderror = new FieldErrorModel(stack, req, res);
-        }
-
-        return fielderror;
-    }
-    
-    public OptionTransferSelectModel getOptiontransferselect() {
-    	if (optiontransferselect == null) {
-    		optiontransferselect = new OptionTransferSelectModel(stack, req, res);
-    	}
-    	return optiontransferselect;
-    }
-
-    public TreeModel getTree() {
-        if (treeModel == null) {
-            treeModel = new TreeModel(stack,req, res);
-        }
-        return treeModel;
-    }
-    
-    public UpDownSelectModel getUpdownselect() {
-    	if (updownselect == null)  {
-    		updownselect = new UpDownSelectModel(stack, req, res);
-    	}
-    	return updownselect;
-    }
-    
-    public OptGroupModel getOptgroup() {
-    	if (optGroupModel == null) {
-    		optGroupModel = new OptGroupModel(stack, req, res);
-    	}
-    	return optGroupModel;
-    }
-    
-    public IfModel getIf() {
-    	if (ifModel == null) {
-    		ifModel = new IfModel(stack, req, res);
-    	}
-    	return ifModel;
-    }
-    
-    public ElseModel getElse() {
-    	if (elseModel == null) {
-    		elseModel = new ElseModel(stack, req, res);
-    	}
-    	return elseModel;
-    }
-    
-    public ElseIfModel getElseif() {
-    	if (elseIfModel == null) {
-    		elseIfModel = new ElseIfModel(stack, req, res);
-    	}
-    	return elseIfModel;
-    }
-    
-    public TimePickerModel getTimepicker() {
-    	if (timePickerModel == null) {
-    		timePickerModel = new TimePickerModel(stack, req, res);
-    	}
-    	return timePickerModel;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/SubmitModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/SubmitModel.java
deleted file mode 100644
index 6d91e4f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/SubmitModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Submit;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Submit
- */
-public class SubmitModel extends TagModel {
-    public SubmitModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Submit(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TabbedPanelModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TabbedPanelModel.java
deleted file mode 100644
index 00db842..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TabbedPanelModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TabbedPanel;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see TabbedPanel
- */
-public class TabbedPanelModel extends TagModel {
-    public TabbedPanelModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new TabbedPanel(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TagModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TagModel.java
deleted file mode 100644
index 4b89a65..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TagModel.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-import freemarker.template.SimpleNumber;
-import freemarker.template.SimpleSequence;
-import freemarker.template.TemplateModelException;
-import freemarker.template.TemplateTransformModel;
-
-public abstract class TagModel implements TemplateTransformModel {
-    private static final Log LOG = LogFactory.getLog(TagModel.class);
-
-    protected ValueStack stack;
-    protected HttpServletRequest req;
-    protected HttpServletResponse res;
-
-    public TagModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        this.stack = stack;
-        this.req = req;
-        this.res = res;
-    }
-
-    public Writer getWriter(Writer writer, Map params) throws TemplateModelException, IOException {
-        Component bean = getBean();
-        Map basicParams = convertParams(params);
-        bean.copyParams(basicParams);
-        bean.addAllParameters(getComplexParams(params));
-        return new CallbackWriter(bean, writer);
-    }
-
-    protected abstract Component getBean();
-
-    private Map convertParams(Map params) {
-        HashMap map = new HashMap(params.size());
-        for (Iterator iterator = params.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            Object value = entry.getValue();
-            if (value != null && !complexType(value)) {
-                map.put(entry.getKey(), value.toString());
-            }
-        }
-        return map;
-    }
-
-    private Map getComplexParams(Map params) {
-        HashMap map = new HashMap(params.size());
-        for (Iterator iterator = params.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            Object value = entry.getValue();
-            if (value != null && complexType(value)) {
-                if (value instanceof freemarker.ext.beans.BeanModel) {
-                    map.put(entry.getKey(), ((freemarker.ext.beans.BeanModel) value).getWrappedObject());
-                } else if (value instanceof SimpleNumber) {
-                    map.put(entry.getKey(), ((SimpleNumber) value).getAsNumber());
-                } else if (value instanceof SimpleSequence) {
-                    try {
-                        map.put(entry.getKey(), ((SimpleSequence) value).toList());
-                    } catch (TemplateModelException e) {
-                        LOG.error("There was a problem converting a SimpleSequence to a list", e);
-                    }
-                }
-            }
-        }
-        return map;
-    }
-
-    private boolean complexType(Object value) {
-        return value instanceof freemarker.ext.beans.BeanModel
-                || value instanceof SimpleNumber
-                || value instanceof SimpleSequence;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextAreaModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextAreaModel.java
deleted file mode 100644
index 69f7ada..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextAreaModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TextArea;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see TextArea
- */
-public class TextAreaModel extends TagModel {
-    public TextAreaModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new TextArea(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextFieldModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextFieldModel.java
deleted file mode 100644
index d80d5c6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextFieldModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TextField;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see TextField
- */
-public class TextFieldModel extends TagModel {
-    public TextFieldModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new TextField(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextModel.java
deleted file mode 100644
index e14f051..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Text;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Text
- */
-public class TextModel extends TagModel {
-    public TextModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Text(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TimePickerModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TimePickerModel.java
deleted file mode 100644
index fef0b76..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TimePickerModel.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.apache.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TimePicker;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-public class TimePickerModel extends TagModel {
-
-	public TimePickerModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		super(stack, req, res);
-	}
-
-	protected Component getBean() {
-		return new TimePicker(stack, req, res);
-	}
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TokenModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TokenModel.java
deleted file mode 100644
index 0d800a9..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TokenModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Token;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Token
- */
-public class TokenModel extends TagModel {
-    public TokenModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Token(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeModel.java
deleted file mode 100644
index b27a238..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Tree;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * TreeModel
- * @see Tree
- *
- */
-public class TreeModel extends TagModel {
-    public TreeModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new Tree(stack,req,res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeNodeModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeNodeModel.java
deleted file mode 100644
index c2735e3..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeNodeModel.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TreeNode;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * TreeNodeModel
- * @see TreeNode
- */
-public class TreeNodeModel extends TagModel {
-    public TreeNodeModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new TreeNode(stack,req,res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/URLModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/URLModel.java
deleted file mode 100644
index 0b3cd85..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/URLModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.URL;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see URL
- */
-public class URLModel extends TagModel {
-    public URLModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new URL(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/UpDownSelectModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/UpDownSelectModel.java
deleted file mode 100644
index 484cacb..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/UpDownSelectModel.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.UpDownSelect;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see UpDownSelect
- * 
- */
-public class UpDownSelectModel extends TagModel {
-
-	public UpDownSelectModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		super(stack, req, res);
-	}
-
-	protected Component getBean() {
-		return new UpDownSelect(stack, req, res);
-	}
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/WebTableModel.java b/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/WebTableModel.java
deleted file mode 100644
index 2757dbf..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/WebTableModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker.tags;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.table.WebTable;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see WebTable
- */
-public class WebTableModel extends TagModel {
-    public WebTableModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        super(stack, req, res);
-    }
-
-    protected Component getBean() {
-        return new WebTable(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ActionTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ActionTag.java
deleted file mode 100644
index 59fe8dc..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ActionTag.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ActionComponent;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ActionComponent
- */
-public class ActionTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = -5384167073331678855L;
-	
-	protected String name;
-    protected String namespace;
-    protected boolean executeResult;
-    protected boolean ignoreContextParams;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new ActionComponent(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ActionComponent action = (ActionComponent) component;
-        action.setName(name);
-        action.setNamespace(namespace);
-        action.setExecuteResult(executeResult);
-        action.setIgnoreContextParams(ignoreContextParams);
-        action.start(pageContext.getOut());
-    }
-
-    protected void addParameter(String name, Object value) {
-        ActionComponent ac = (ActionComponent) component;
-        ac.addParameter(name, value);
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    public void setExecuteResult(boolean executeResult) {
-        this.executeResult = executeResult;
-    }
-
-    public void setIgnoreContextParams(boolean ignoreContextParams) {
-        this.ignoreContextParams = ignoreContextParams;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/BeanTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/BeanTag.java
deleted file mode 100644
index 1316ace..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/BeanTag.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.components.Bean;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Bean
- */
-public class BeanTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = -3863152522071209267L;
-
-	protected static Log log = LogFactory.getLog(BeanTag.class);
-
-    protected String name;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Bean(stack);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ((Bean) component).setName(name);
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ComponentTagSupport.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ComponentTagSupport.java
deleted file mode 100644
index 32ba716..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ComponentTagSupport.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspException;
-
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- */
-public abstract class ComponentTagSupport extends StrutsBodyTagSupport {
-    protected Component component;
-
-    public abstract Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res);
-
-    public int doEndTag() throws JspException {
-        component.end(pageContext.getOut(), getBody());
-        component = null;
-        return EVAL_PAGE;
-    }
-
-    public int doStartTag() throws JspException {
-        component = getBean(getStack(), (HttpServletRequest) pageContext.getRequest(), (HttpServletResponse) pageContext.getResponse());
-        populateParams();
-        boolean evalBody = component.start(pageContext.getOut());
-
-        if (evalBody) {
-            return component.usesBody() ? EVAL_BODY_BUFFERED : EVAL_BODY_INCLUDE;
-        } else {
-            return SKIP_BODY;
-        }
-    }
-
-    protected void populateParams() {
-        component.setId(id);
-    }
-
-    public Component getComponent() {
-        return component;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/DateTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/DateTag.java
deleted file mode 100644
index 893cb83..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/DateTag.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Date;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Date
- */
-public class DateTag extends ComponentTagSupport {
-
-	private static final long serialVersionUID = -6216963123295613440L;
-	
-	protected String name;
-    protected String format;
-    protected boolean nice;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Date(stack);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-        Date d = (Date)component;
-        d.setName(name);
-        d.setFormat(format);
-        d.setNice(nice);
-
-    }
-
-    public void setFormat(String format) {
-        this.format = format;
-    }
-
-    public void setNice(boolean nice) {
-        this.nice = nice;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ElseIfTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ElseIfTag.java
deleted file mode 100644
index d52c853..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ElseIfTag.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.ElseIf;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ElseIf
- */
-public class ElseIfTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = -3872016920741400345L;
-	
-	protected String test;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new ElseIf(stack);
-    }
-
-    protected void populateParams() {
-        ((ElseIf) getComponent()).setTest(test);
-    }
-
-    public void setTest(String test) {
-        this.test = test;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ElseTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ElseTag.java
deleted file mode 100644
index 7954e26..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ElseTag.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Else;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Else
- */
-public class ElseTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = 8166807953193406785L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Else(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/I18nTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/I18nTag.java
deleted file mode 100644
index 49b24a9..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/I18nTag.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.I18n;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see I18n
- */
-public class I18nTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = -7914587341936116887L;
-	
-	protected String name;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new I18n(stack);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ((I18n) component).setName(name);
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/IfTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/IfTag.java
deleted file mode 100644
index 6f5bdcd..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/IfTag.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.If;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see If
- */
-public class IfTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = 4448870162549923833L;
-	
-	String test;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new If(stack);
-    }
-
-    protected void populateParams() {
-        ((If) getComponent()).setTest(test);
-    }
-
-    public void setTest(String test) {
-        this.test = test;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/IncludeTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/IncludeTag.java
deleted file mode 100644
index a2d45bf..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/IncludeTag.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Include;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Include
- */
-public class IncludeTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = -1585165567043278243L;
-	
-	protected String value;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Include(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ((Include) component).setValue(value);
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/IteratorStatus.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/IteratorStatus.java
deleted file mode 100644
index ff216b0..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/IteratorStatus.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-
-/**
- * The iterator tag can export an IteratorStatus object so that
- * one can get information about the status of the iteration, such as
- * the size, current index, and whether any more items are available.
- *
- */
-public class IteratorStatus {
-    protected StatusState state;
-
-    public IteratorStatus(StatusState aState) {
-        state = aState;
-    }
-
-    public int getCount() {
-        return state.index + 1;
-    }
-
-    public boolean isEven() {
-        return ((state.index + 1) % 2) == 0;
-    }
-
-    public boolean isFirst() {
-        return state.index == 0;
-    }
-
-    public int getIndex() {
-        return state.index;
-    }
-
-    public boolean isLast() {
-        return state.last;
-    }
-
-    public boolean isOdd() {
-        return ((state.index + 1) % 2) == 1;
-    }
-
-    public int modulus(int operand) {
-        return (state.index + 1) % operand;
-    }
-
-    public static class StatusState {
-        boolean last = false;
-        int index = 0;
-
-        public void setLast(boolean isLast) {
-            last = isLast;
-        }
-
-        public void next() {
-            index++;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/IteratorTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/IteratorTag.java
deleted file mode 100644
index 1c944ff..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/IteratorTag.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspException;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.IteratorComponent;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see IteratorComponent
- */
-public class IteratorTag extends ComponentTagSupport {
-
-	private static final long serialVersionUID = -1827978135193581901L;
-	
-	protected String statusAttr;
-    protected String value;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new IteratorComponent(stack);
-    }
-
-    protected void populateParams() {
-    	super.populateParams();
-    	
-        IteratorComponent tag = (IteratorComponent) getComponent();
-        tag.setStatus(statusAttr);
-        tag.setValue(value);
-    }
-
-    public void setStatus(String status) {
-        this.statusAttr = status;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public int doEndTag() throws JspException {
-        component = null;
-        return EVAL_PAGE;
-    }
-
-    public int doAfterBody() throws JspException {
-        boolean again = component.end(pageContext.getOut(), getBody());
-
-        if (again) {
-            return EVAL_BODY_AGAIN;
-        } else {
-            if (bodyContent != null) {
-                try {
-                    bodyContent.writeOut(bodyContent.getEnclosingWriter());
-                } catch (Exception e) {
-                    throw new JspException(e.getMessage());
-                }
-            }
-            return SKIP_BODY;
-        }
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ParamTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ParamTag.java
deleted file mode 100644
index fd67c5d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ParamTag.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Param;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Param
- */
-public class ParamTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = -968332732207156408L;
-	
-	protected String name;
-    protected String value;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Param(stack);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        Param param = (Param) component;
-        param.setName(name);
-        param.setValue(value);
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java
deleted file mode 100644
index ffd925a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Property;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Property
- */
-public class PropertyTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = 435308349113743852L;
-	
-	private String defaultValue;
-    private String value;
-    private boolean escape = true;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Property(stack);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        Property tag = (Property) component;
-        tag.setDefault(defaultValue);
-        tag.setValue(value);
-        tag.setEscape(escape);
-    }
-
-    public void setDefault(String defaultValue) {
-        this.defaultValue = defaultValue;
-    }
-
-    public void setEscape(boolean escape) {
-        this.escape = escape;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/PushTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/PushTag.java
deleted file mode 100644
index 6645f4a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/PushTag.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Push;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Push
- */
-public class PushTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = -1357895305148907931L;
-	
-	protected String value;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Push(stack);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ((Push) component).setValue(value);
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java
deleted file mode 100644
index 13170ed..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Set;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Set
- */
-public class SetTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = -5074213926790716974L;
-	
-	protected String name;
-    protected String scope;
-    protected String value;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Set(stack);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        Set set = (Set) component;
-        set.setName(name);
-        set.setScope(scope);
-        set.setValue(value);
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setScope(String scope) {
-        this.scope = scope;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java
deleted file mode 100644
index 8b7b7e5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.io.PrintWriter;
-
-import javax.servlet.jsp.tagext.BodyTagSupport;
-
-import org.apache.struts2.util.FastByteArrayOutputStream;
-import org.apache.struts2.views.util.ContextUtil;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * Contains common functonalities for Struts JSP Tags.
- * 
- */
-public class StrutsBodyTagSupport extends BodyTagSupport {
-
-    private static final long serialVersionUID = -1201668454354226175L;
-
-    /**
-     * @s.tagattribute required="false" type="String"
-     * description="The id of the tag element."
-     */
-    public void setId(String string) {
-        super.setId(string);
-    }
-    
-    protected boolean altSyntax() {
-        return ContextUtil.isUseAltSyntax(getStack().getContext());
-    }
-
-    protected ValueStack getStack() {
-        return TagUtils.getStack(pageContext);
-    }
-
-    protected String findString(String expr) {
-        return (String) findValue(expr, String.class);
-    }
-
-    protected Object findValue(String expr) {
-        if (altSyntax()) {
-            // does the expression start with %{ and end with }? if so, just cut it off!
-            if (expr.startsWith("%{") && expr.endsWith("}")) {
-                expr = expr.substring(2, expr.length() - 1);
-            }
-        }
-
-        return getStack().findValue(expr);
-    }
-
-    protected Object findValue(String expr, Class toType) {
-        if (altSyntax() && toType == String.class) {
-            return translateVariables(expr, getStack());
-        } else {
-            if (altSyntax()) {
-                // does the expression start with %{ and end with }? if so, just cut it off!
-                if (expr.startsWith("%{") && expr.endsWith("}")) {
-                    expr = expr.substring(2, expr.length() - 1);
-                }
-            }
-
-            return getStack().findValue(expr, toType);
-        }
-    }
-
-    protected String toString(Throwable t) {
-        FastByteArrayOutputStream bout = new FastByteArrayOutputStream();
-        PrintWriter wrt = new PrintWriter(bout);
-        t.printStackTrace(wrt);
-        wrt.close();
-
-        return bout.toString();
-    }
-
-    protected String getBody() {
-        if (bodyContent == null) {
-            return "";
-        } else {
-            return bodyContent.getString().trim();
-        }
-    }
-    
-    public static String translateVariables(String expression, ValueStack stack) {
-        while (true) {
-            int x = expression.indexOf("%{");
-            int y = expression.indexOf("}", x);
-
-            if ((x != -1) && (y != -1)) {
-                String var = expression.substring(x + 2, y);
-
-                Object o = stack.findValue(var, String.class);
-
-                if (o != null) {
-                    expression = expression.substring(0, x) + o + expression.substring(y + 1);
-                } else {
-                    // the variable doesn't exist, so don't display anything
-                    expression = expression.substring(0, x) + expression.substring(y + 1);
-                }
-            } else {
-                break;
-            }
-        }
-
-        return expression;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
deleted file mode 100644
index cb7c1d7..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.struts2.RequestUtils;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.dispatcher.ApplicationMap;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.dispatcher.RequestMap;
-import org.apache.struts2.dispatcher.SessionMap;
-import org.apache.struts2.dispatcher.mapper.ActionMapper;
-import org.apache.struts2.dispatcher.mapper.ActionMapperFactory;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-import org.apache.struts2.util.AttributeMap;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- */
-public class TagUtils {
-
-    public static ValueStack getStack(PageContext pageContext) {
-        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
-        ValueStack stack = (ValueStack) req.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);
-
-        if (stack == null) {
-            stack = ValueStackFactory.getFactory().createValueStack();
-
-            HttpServletResponse res = (HttpServletResponse) pageContext.getResponse();
-            Dispatcher du = Dispatcher.getInstance();
-            Map extraContext = du.createContextMap(new RequestMap(req),
-                    req.getParameterMap(),
-                    new SessionMap(req),
-                    new ApplicationMap(pageContext.getServletContext()),
-                    req,
-                    res,
-                    pageContext.getServletContext());
-            extraContext.put(ServletActionContext.PAGE_CONTEXT, pageContext);
-            stack.getContext().putAll(extraContext);
-            req.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
-
-            // also tie this stack/context to the ThreadLocal
-            ActionContext.setContext(new ActionContext(stack.getContext()));
-        } else {
-            // let's make sure that the current page context is in the action context
-            Map context = stack.getContext();
-            context.put(ServletActionContext.PAGE_CONTEXT, pageContext);
-
-            AttributeMap attrMap = new AttributeMap(context);
-            context.put("attr", attrMap);
-        }
-
-        return stack;
-    }
-
-    public static String buildNamespace(ValueStack stack, HttpServletRequest request) {
-        ActionContext context = new ActionContext(stack.getContext());
-        ActionInvocation invocation = context.getActionInvocation();
-
-        if (invocation == null) {
-            ActionMapper mapper = ActionMapperFactory.getMapper();
-            ActionMapping mapping = mapper.getMapping(request,
-                    Dispatcher.getInstance().getConfigurationManager());
-
-            if (mapping != null) {
-                return mapping.getNamespace();
-            } else {
-                // well, if the ActionMapper can't tell us, and there is no existing action invocation,
-                // let's just go with a default guess that the namespace is the last the path minus the
-                // last part (/foo/bar/baz.xyz -> /foo/bar)
-
-                String path = RequestUtils.getServletPath(request);
-                return path.substring(0, path.lastIndexOf("/"));
-            }
-        } else {
-            return invocation.getProxy().getNamespace();
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/TextTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/TextTag.java
deleted file mode 100644
index ebcdc54..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/TextTag.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Text;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Text
- */
-public class TextTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = -3075088084198264581L;
-	
-	protected String name;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Text(stack);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ((Text) component).setName(name);
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/URLTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/URLTag.java
deleted file mode 100644
index 9fbf778..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/URLTag.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.URL;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see URL
- */
-public class URLTag extends ComponentTagSupport {
-	
-	private static final long serialVersionUID = 1722460444125206226L;
-
-	protected String includeParams;
-    protected String scheme;
-    protected String value;
-    protected String action;
-    protected String namespace;
-    protected String method;
-    protected String encode;
-    protected String includeContext;
-    protected String portletMode;
-    protected String windowState;
-    protected String portletUrlType;
-    protected String anchor;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new URL(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        URL url = (URL) component;
-        url.setIncludeParams(includeParams);
-        url.setScheme(scheme);
-        url.setValue(value);
-        url.setMethod(method);
-        url.setNamespace(namespace);
-        url.setAction(action);
-        url.setPortletMode(portletMode);
-        url.setPortletUrlType(portletUrlType);
-        url.setWindowState(windowState);
-        url.setAnchor(anchor);
-
-        if (encode != null) {
-            url.setEncode(Boolean.valueOf(encode).booleanValue());
-        }
-        if (includeContext != null) {
-            url.setIncludeContext(Boolean.valueOf(includeContext).booleanValue());
-        }
-    }
-
-    public void setEncode(String encode) {
-        this.encode = encode;
-    }
-
-    public void setIncludeContext(String includeContext) {
-        this.includeContext = includeContext;
-    }
-
-    public void setIncludeParams(String name) {
-        includeParams = name;
-    }
-
-    public void setAction(String action) {
-        this.action = action;
-    }
-
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-    public void setScheme(String scheme) {
-        this.scheme = scheme;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-    public void setPortletMode(String portletMode) {
-        this.portletMode = portletMode;
-    }
-    public void setPortletUrlType(String portletUrlType) {
-        this.portletUrlType = portletUrlType;
-    }
-    public void setWindowState(String windowState) {
-        this.windowState = windowState;
-    }
-
-    public void setAnchor(String anchor) {
-        this.anchor = anchor;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/AppendIteratorTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/AppendIteratorTag.java
deleted file mode 100644
index 0d68b35..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/AppendIteratorTag.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.iterator;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.AppendIterator;
-import org.apache.struts2.components.Component;
-import org.apache.struts2.views.jsp.ComponentTagSupport;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * Append a list of iterators. The values of the iterators will be merged
- * into one iterator.
- *
- * @see AppendIterator
- */
-public class AppendIteratorTag extends ComponentTagSupport {
-
-	private static final long serialVersionUID = -6017337859763283691L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new AppendIterator(stack);
-	}
-	
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/IteratorGeneratorTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/IteratorGeneratorTag.java
deleted file mode 100644
index 90e4c92..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/IteratorGeneratorTag.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.iterator;
-
-import javax.servlet.jsp.JspException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.util.IteratorGenerator;
-import org.apache.struts2.util.IteratorGenerator.Converter;
-import org.apache.struts2.views.jsp.StrutsBodyTagSupport;
-
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <b>NOTE: JSP-TAG</b>
- * 
- * <p>Generate an iterator based on the val attribute supplied.</P>
- * 
- * <b>NOTE:</b> The generated iterator will <b>ALWAYS</b> be pushed into the top of the stack, and poped
- * at the end of the tag.
- * <!-- END SNIPPET: javadoc -->
- *
- * <!-- START SNIPPET: params -->
- * <ul>
- * 		<li>val* (Object) - the source to be parsed into an iterator </li>
- * 		<li>count (Object) - the max number (Integer, Float, Double, Long, String) entries to be in the iterator</li>
- * 		<li>separator (String) - the separator to be used in separating the <i>val</i> into entries of the iterator</li>
- *  	<li>id (String) - the id to store the resultant iterator into page context, if such id is supplied</li>
- *  	<li>converter (Object) - the converter (must extends off IteratorGenerator.Converter interface) to convert the String entry parsed from <i>val</i> into an object</li>
- * </ul>
- * <!-- END SNIPPET: params -->
- *
- *
- * <!-- START SNIPPET: example -->
- * Example One:
- * <pre>
- * Generate a simple iterator
- * &lt;s:generator val="%{'aaa,bbb,ccc,ddd,eee'}"&gt;
- *	&lt;s:iterator&gt;
- *		&lt;s:property /&gt;&lt;br/&gt;
- *	&lt;/s:iterator&gt;
- * &lt;/s:generator&gt;
- * </pre>
- * This generates an iterator and print it out using the iterator tag.
- *
- * Example Two:
- * <pre>
- * Generate an iterator with count attribute
- * &lt;s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3"&gt;
- *	&lt;s:iterator&gt;
- *		&lt;s:property /&gt;&lt;br/&gt;
- *	&lt;/s:iterator&gt;
- * &lt;/s:generator&gt;
- * </pre>
- * This generates an iterator, but only 3 entries will be available in the iterator
- * generated, namely aaa, bbb and ccc respectively because count attribute is set to 3
- *
- * Example Three:
- * <pre>
- * Generate an iterator with id attribute
- * &lt;s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" /&gt;
- * &lt;%
- * 	Iterator i = (Iterator) pageContext.getAttribute("myAtt");
- * 	while(i.hasNext()) {
- * 		String s = (String) i.next(); %>
- * 		&lt;%=s%&gt; &lt;br/&gt;
- * &lt;% 	}
- * %&gt;
- * </pre>
- * This generates an iterator and put it in the PageContext under the key as specified
- * by the id attribute.
- *
- *
- * Example Four:
- * <pre>
- * Generate an iterator with comparator attribute
- * &lt;s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}"&gt;
- *	&lt;s:iterator&gt;
- * 		&lt;s:property /&gt;&lt;br/&gt;
- * 	&lt;/s:iterator&gt;
- * &lt;/s:generator&gt;
- *
- *
- * public class GeneratorTagAction extends ActionSupport {
- *
- *   ....
- *
- *	 public Converter getMyConverter() {
- *		return new Converter() {
- *			public Object convert(String value) throws Exception {
- *				return "converter-"+value;
- *			}
- *		};
- *	 }
- *
- *   ...
- *
- * }
- * </pre>
- * This will generate an iterator with each entries decided by the converter supplied. With
- * this converter, it simply add "converter-" to each entries.
- * <!-- END SNIPPET: example -->
- *
- * @see org.apache.struts2.util.IteratorGenerator
- *
- * @s.tag name="generator" tld-body-content="JSP"
- * description="Generate an iterator for a iterable source."
- */
-public class IteratorGeneratorTag extends StrutsBodyTagSupport {
-
-	private static final long serialVersionUID = 2968037295463973936L;
-
-	public static final String DEFAULT_SEPARATOR = ",";
-
-	private static final Log _log = LogFactory.getLog(IteratorGeneratorTag.class);
-
-    String countAttr;
-    String separatorAttr;
-    String valueAttr;
-    String converterAttr;
-
-    IteratorGenerator iteratorGenerator = null;
-
-    /**
-     * @s.tagattribute required="false" type="Integer"
-     * description="the max number entries to be in the iterator"
-     */
-    public void setCount(String count) {
-        countAttr = count;
-    }
-
-    /**
-     * @s.tagattribute required="true" type="String"
-     * description="the separator to be used in separating the <i>val</i> into entries of the iterator"
-     */
-    public void setSeparator(String separator) {
-        separatorAttr = separator;
-    }
-
-    /**
-     * @s.tagattribute required="true"
-     * description="the source to be parsed into an iterator"
-     */
-    public void setVal(String val) {
-        valueAttr = val;
-    }
-
-    /**
-     * @s.tagattribute required="false" type="org.apache.struts2.util.IteratorGenerator.Converter"
-     * description="the converter to convert the String entry parsed from <i>val</i> into an object"
-     */
-    public void setConverter(String aConverter) {
-    	converterAttr = aConverter;
-    }
-
-    /**
-     * @s.tagattribute required="false" type="String"
-     * description="the id to store the resultant iterator into page context, if such id is supplied"
-     */
-    public void setId(String string) {
-        super.setId(string);
-    }
-
-    public int doStartTag() throws JspException {
-
-    	// value
-    	Object value = findValue(valueAttr);
-
-    	// separator
-    	String separator = DEFAULT_SEPARATOR;
-    	if (separatorAttr != null && separatorAttr.length() > 0) {
-    		separator = findString(separatorAttr);
-    	}
-
-    	// TODO: maybe this could be put into an Util class, or there is already one?
-    	// count
-    	int count = 0;
-    	if (countAttr != null && countAttr.length() > 0) {
-    		Object countObj = findValue(countAttr);
-    		if (countObj instanceof Integer) {
-    			count = ((Integer)countObj).intValue();
-    		}
-    		else if (countObj instanceof Float) {
-    			count = ((Float)countObj).intValue();
-    		}
-    		else if (countObj instanceof Long) {
-    			count = ((Long)countObj).intValue();
-    		}
-    		else if (countObj instanceof Double) {
-    			count = ((Long)countObj).intValue();
-    		}
-    		else if (countObj instanceof String) {
-    			try {
-    				count = Integer.parseInt((String)countObj);
-    			}
-    			catch(NumberFormatException e) {
-    				_log.warn("unable to convert count attribute ["+countObj+"] to number, ignore count attribute", e);
-    			}
-    		}
-    	}
-
-    	// converter
-    	Converter converter = null;
-    	if (converterAttr != null && converterAttr.length() > 0) {
-    		converter = (Converter) findValue(converterAttr);
-    	}
-
-
-    	iteratorGenerator = new IteratorGenerator();
-    	iteratorGenerator.setValues(value);
-    	iteratorGenerator.setCount(count);
-    	iteratorGenerator.setSeparator(separator);
-    	iteratorGenerator.setConverter(converter);
-
-    	iteratorGenerator.execute();
-
-
-
-    	// push resulting iterator into stack
-    	getStack().push(iteratorGenerator);
-    	if (getId() != null && getId().length() > 0) {
-    		// if an id is specified, we have the resulting iterator set into
-    		// the pageContext attribute as well
-    		pageContext.setAttribute(getId(), iteratorGenerator);
-    	}
-
-        return EVAL_BODY_INCLUDE;
-    }
-
-    public int doEndTag() throws JspException {
-    	// pop resulting iterator from stack at end tag
-    	getStack().pop();
-    	iteratorGenerator = null; // clean up
-
-    	return EVAL_PAGE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/MergeIteratorTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/MergeIteratorTag.java
deleted file mode 100644
index 9d3eec5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/MergeIteratorTag.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.iterator;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.MergeIterator;
-import org.apache.struts2.views.jsp.ComponentTagSupport;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * Append a list of iterators. The values of the iterators will be merged
- * into one iterator.
- *
- * @see MergeIterator
- * @see org.apache.struts2.util.MergeIteratorFilter
- */
-public class MergeIteratorTag extends ComponentTagSupport {
-
-	private static final long serialVersionUID = 4999729472466011218L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new MergeIterator(stack);
-	}
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/SortIteratorTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/SortIteratorTag.java
deleted file mode 100644
index 2c7f6e6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/SortIteratorTag.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.iterator;
-
-import java.util.Comparator;
-
-import javax.servlet.jsp.JspException;
-
-import org.apache.struts2.util.MakeIterator;
-import org.apache.struts2.util.SortIteratorFilter;
-import org.apache.struts2.views.jsp.StrutsBodyTagSupport;
-
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * <b>NOTE: JSP-TAG</b>
- * 
- * <p>A Tag that sorts a List using a Comparator both passed in as the tag attribute.
- * If 'id' attribute is specified, the sorted list will be placed into the PageContext
- * attribute using the key specified by 'id'. The sorted list will ALWAYS be
- * pushed into the stack and poped at the end of this tag.</p>
- *
- * <!-- END SNIPPET: javadoc -->
- *
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- * 		<li>id (String) - if specified, the sorted iterator will be place with this id under page context</li>
- * 		<li>source (Object) - the source for the sort to take place (should be iteratable) else JspException will be thrown</li>
- * 		<li>comparator* (Object) - the comparator used to do sorting (should be a type of Comparator or its decendent) else JspException will be thrown</li>
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- *
- *
- * <pre>
- * <!-- START SNIPPET: example -->
- *
- * USAGE 1:
- * &lt;s:sort comparator="myComparator" source="myList"&gt;
- *      &lt;s:iterator&gt;
- * 		&lt;!-- do something with each sorted elements --&gt;
- * 		&lt;s:property value="..." /&gt;
- *      &lt;/s:iterator&gt;
- * &lt;/s:sort&gt;
- *
- * USAGE 2:
- * &lt;s:sort id="mySortedList" comparator="myComparator" source="myList" /&gt;
- *
- * &lt;%
- *    Iterator sortedIterator = (Iterator) pageContext.getAttribute("mySortedList");
- *    for (Iterator i = sortedIterator; i.hasNext(); ) {
- *    	// do something with each of the sorted elements
- *    }
- * %&gt;
- *
- * <!-- END SNIPPET: example -->
- * </pre>
- *
- *
- * @see org.apache.struts2.util.SortIteratorFilter
- *
- * @s.tag name="sort" tld-body-content="JSP"
- * description="Sort a List using a Comparator both passed in as the tag attribute."
- */
-public class SortIteratorTag extends StrutsBodyTagSupport {
-
-	private static final long serialVersionUID = -7835719609764092235L;
-
-	String comparatorAttr;
-    String sourceAttr;
-
-    SortIteratorFilter sortIteratorFilter = null;
-
-    /**
-     * @s.tagattribute required="true" type="java.util.Comparator"
-     * description="The comparator to use"
-     */
-    public void setComparator(String comparator) {
-        comparatorAttr = comparator;
-    }
-
-    /**
-     * @s.tagattribute required="false"
-     * description="The iterable source to sort"
-     */
-    public void setSource(String source) {
-        sourceAttr = source;
-    }
-
-    public int doStartTag() throws JspException {
-    	// Source
-        Object srcToSort;
-        if (sourceAttr == null) {
-            srcToSort = findValue("top");
-        } else {
-            srcToSort = findValue(sourceAttr);
-        }
-        if (! MakeIterator.isIterable(srcToSort)) { // see if source is Iteratable
-        	throw new JspException("source ["+srcToSort+"] is not iteratable");
-        }
-
-        // Comparator
-        Object comparatorObj = findValue(comparatorAttr);
-        if (! (comparatorObj instanceof Comparator)) {
-        	throw new JspException("comparator ["+comparatorObj+"] does not implements Comparator interface");
-        }
-        Comparator c = (Comparator) findValue(comparatorAttr);
-
-        // SortIteratorFilter
-        sortIteratorFilter = new SortIteratorFilter();
-        sortIteratorFilter.setComparator(c);
-        sortIteratorFilter.setSource(srcToSort);
-        sortIteratorFilter.execute();
-
-        // push sorted iterator into stack, so nexted tag have access to it
-    	getStack().push(sortIteratorFilter);
-        if (getId() != null && getId().length() > 0) {
-        	pageContext.setAttribute(getId(), sortIteratorFilter);
-        }
-
-        return EVAL_BODY_INCLUDE;
-    }
-
-    public int doEndTag() throws JspException {
-    	int returnVal =  super.doEndTag();
-
-   		// pop sorted list from stack at the end of tag
-   		getStack().pop();
-   		sortIteratorFilter = null;
-
-    	return returnVal;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/SubsetIteratorTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/SubsetIteratorTag.java
deleted file mode 100644
index 47a7b5e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/iterator/SubsetIteratorTag.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.iterator;
-
-import javax.servlet.jsp.JspException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.util.SubsetIteratorFilter;
-import org.apache.struts2.util.SubsetIteratorFilter.Decider;
-import org.apache.struts2.views.jsp.StrutsBodyTagSupport;
-
-
-/**
- * <!-- START SNIPPET: javadoc -->
- * <b>NOTE: JSP-TAG</b>
- * 
- * <p>A tag that takes an iterator and outputs a subset of it. It delegates to
- * {@link org.apache.struts2.util.SubsetIteratorFilter} internally to
- * perform the subset functionality.</p>
- * <!-- END SNIPPET: javadoc -->
- *
- * <!-- START SNIPPET: params -->
- * <ul>
- * 		<li>count (Object) - Indicate the number of entries to be in the resulting subset iterator</li>
- * 		<li>source* (Object) - Indicate the source of which the resulting subset iterator is to be derived base on</li>
- * 		<li>start (Object) - Indicate the starting index (eg. first entry is 0) of entries in the source to be available as the first entry in the resulting subset iterator</li>
- * 		<li>decider (Object) - Extension to plug-in a decider to determine if that particular entry is to be included in the resulting subset iterator</li>
- * 		<li>id (String) - Indicate the pageContext attribute id to store the resultant subset iterator in</li>
- * </ul>
- * <!-- END SNIPPET: params -->
- *
- *
- * <pre>
- * <!-- START SNIPPET: action -->
- * public class MySubsetTagAction extends ActionSupport {
- *      public String execute() throws Exception {
- *		   l = new ArrayList();
- *		   l.add(new Integer(1));
- *		   l.add(new Integer(2));
- *		   l.add(new Integer(3));
- *		   l.add(new Integer(4));
- *		   l.add(new Integer(5));
- *		   return "done";
- *	    }
- *
- *
- *	    public Integer[] getMyArray() {
- *		   return a;
- *	    }
- *
- *	    public List getMyList() {
- *		   return l;
- *	     }
- *
- *      public Decider getMyDecider() {
- *		return new Decider() {
- *			public boolean decide(Object element) throws Exception {
- *				int i = ((Integer)element).intValue();
- *				return (((i % 2) == 0)?true:false);
- *			}
- *		};
- *		}
- *	}
- * <!-- END SNIPPET: action -->
- * </pre>
- *
- *
- * <pre>
- * <!-- START SNIPPET: example1 -->
- * &lt;!-- s: List basic --&gt;
- *    &lt;s:subset source="myList"&gt;
- *	     &lt;s:iterator&gt;
- *		    &lt;s:property /&gt;
- *	     &lt;/s:iterator&gt;
- *    &lt;/s:subset&gt;
- * <!-- END SNIPPET: example1 -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: example2 -->
- * &lt;!-- B: List with count --&gt;
- *    &lt;s:subset source="myList" count="3"&gt;
- * 	     &lt;s:iterator&gt;
- * 		     &lt;s:property /&gt;
- * 	     &lt;/s:iterator&gt;
- *     &lt;/s:subset&gt;
- * <!-- END SNIPPET: example2 -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: example3 -->
- * &lt;!--  C: List with start -->
- *      &lt;s:subset source="myList" count="13" start="3"&gt;
- * 	       &lt;s:iterator&gt;
- * 		     &lt;s:property /&gt;
- * 	       &lt;/s:iterator&gt;
- *      &lt;/s:subset&gt;
- * <!-- END SNIPPET: example3 -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: example4 -->
- * &lt;!--  D: List with id --&gt;
- *      &lt;s:subset id="mySubset" source="myList" count="13" start="3" /&gt;
- *      &lt;%
- * 	        Iterator i = (Iterator) pageContext.getAttribute("mySubset");
- *          while(i.hasNext()) {
- *      %&gt;
- *      &lt;%=i.next() %&gt;
- *      &lt;%  } %&gt;
- * <!-- END SNIPPET: example4 -->
- * </pre>
- *
- * <pre>
- * <!-- START SNIPPET: example5 -->
- *  &lt;!--  D: List with Decider --&gt;
- *      &lt;s:subset source="myList" decider="myDecider"&gt;
- * 	           &lt;s:iterator&gt;
- *		            &lt;s:property /&gt;
- *	           &lt;/s:iterator&gt;
- *      &lt;/s:subset&gt;
- * <!-- END SNIPPET: example5 -->
- * </pre>
- *
- *
- * @s.tag name="subset" tld-body-content="JSP"
- * description="Takes an iterator and outputs a subset of it"
- */
-public class SubsetIteratorTag extends StrutsBodyTagSupport {
-
-	private static final long serialVersionUID = -6252696081713080102L;
-
-	private static final Log _log = LogFactory.getLog(SubsetIteratorTag.class);
-
-    String countAttr;
-    String sourceAttr;
-    String startAttr;
-    String deciderAttr;
-
-    SubsetIteratorFilter subsetIteratorFilter = null;
-
-
-    /**
-     * @s.tagattribute required="false" type="Integer"
-     * description="Indicate the number of entries to be in the resulting subset iterator"
-     */
-    public void setCount(String count) {
-        countAttr = count;
-    }
-
-    /**
-     * @s.tagattribute required="false"
-     * description="Indicate the source of which the resulting subset iterator is to be derived base on"
-     */
-    public void setSource(String source) {
-        sourceAttr = source;
-    }
-
-    /**
-     * @s.tagattribute required="false" type="Integer"
-     * description="Indicate the starting index (eg. first entry is 0) of entries in the source to be available as the first entry in the resulting subset iterator"
-     */
-    public void setStart(String start) {
-        startAttr = start;
-    }
-
-    /**
-     * @s.tagattribute required="false" type="org.apache.struts2.util.SubsetIteratorFilter.Decider"
-     * description="Extension to plug-in a decider to determine if that particular entry is to be included in the resulting subset iterator"
-     */
-    public void setDecider(String decider) {
-    	deciderAttr = decider;
-    }
-
-
-    public int doStartTag() throws JspException {
-
-        // source
-        Object source = null;
-        if (sourceAttr == null && sourceAttr.length() <= 0) {
-        	source = findValue("top");
-        } else {
-            source = findValue(sourceAttr);
-        }
-
-        // count
-        int count = -1;
-    	if (countAttr != null && countAttr.length() > 0) {
-    		Object countObj = findValue(countAttr);
-    		if (countObj instanceof Integer) {
-    			count = ((Integer)countObj).intValue();
-    		}
-    		else if (countObj instanceof Float) {
-    			count = ((Float)countObj).intValue();
-    		}
-    		else if (countObj instanceof Long) {
-    			count = ((Long)countObj).intValue();
-    		}
-    		else if (countObj instanceof Double) {
-    			count = ((Long)countObj).intValue();
-    		}
-    		else if (countObj instanceof String) {
-    			try {
-    				count = Integer.parseInt((String)countObj);
-    			}
-    			catch(NumberFormatException e) {
-    				_log.warn("unable to convert count attribute ["+countObj+"] to number, ignore count attribute", e);
-    			}
-    		}
-    	}
-
-        // start
-    	int start = 0;
-        if (startAttr != null && startAttr.length() > 0) {
-            Object startObj = findValue(startAttr);
-            if (startObj instanceof Integer) {
-    			start = ((Integer)startObj).intValue();
-    		}
-    		else if (startObj instanceof Float) {
-    			start = ((Float)startObj).intValue();
-    		}
-    		else if (startObj instanceof Long) {
-    			start = ((Long)startObj).intValue();
-    		}
-    		else if (startObj instanceof Double) {
-    			start = ((Long)startObj).intValue();
-    		}
-    		else if (startObj instanceof String) {
-    			try {
-    				start = Integer.parseInt((String)startObj);
-    			}
-    			catch(NumberFormatException e) {
-    				_log.warn("unable to convert count attribute ["+startObj+"] to number, ignore count attribute", e);
-    			}
-    		}
-        }
-
-        // decider
-        Decider decider = null;
-        if (deciderAttr != null && deciderAttr.length() > 0) {
-        	Object deciderObj = findValue(deciderAttr);
-        	if (! (deciderObj instanceof Decider)) {
-        		throw new JspException("decider found from stack ["+deciderObj+"] does not implement "+Decider.class);
-        	}
-        	decider = (Decider) deciderObj;
-        }
-
-
-        subsetIteratorFilter = new SubsetIteratorFilter();
-        subsetIteratorFilter.setCount(count);
-        subsetIteratorFilter.setDecider(decider);
-        subsetIteratorFilter.setSource(source);
-        subsetIteratorFilter.setStart(start);
-        subsetIteratorFilter.execute();
-
-        getStack().push(subsetIteratorFilter);
-        if (getId() != null) {
-        	pageContext.setAttribute(getId(), subsetIteratorFilter);
-        }
-
-        return EVAL_BODY_INCLUDE;
-    }
-
-    public int doEndTag() throws JspException {
-
-    	getStack().pop();
-
-    	subsetIteratorFilter = null;
-
-    	return EVAL_PAGE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/package.html b/trunk/core/src/main/java/org/apache/struts2/views/jsp/package.html
deleted file mode 100644
index f17fa99..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Struts's JSP tag library.</body>
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractClosingTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractClosingTag.java
deleted file mode 100644
index f6feec8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractClosingTag.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.components.ClosingUIBean;
-
-/**
- */
-public abstract class AbstractClosingTag extends AbstractUITag {
-    protected String openTemplate;
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ((ClosingUIBean) component).setOpenTemplate(openTemplate);
-    }
-
-    public void setOpenTemplate(String openTemplate) {
-        this.openTemplate = openTemplate;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractDoubleListTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractDoubleListTag.java
deleted file mode 100644
index 26d3d1c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractDoubleListTag.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.components.DoubleListUIBean;
-
-
-/**
- */
-public abstract class AbstractDoubleListTag extends AbstractRequiredListTag {
-	
-    protected String doubleList;
-    protected String doubleListKey;
-    protected String doubleListValue;
-    protected String doubleName;
-    protected String doubleValue;
-    protected String formName;
-    
-    protected String emptyOption;
-    protected String headerKey;
-    protected String headerValue;
-    protected String multiple;
-    protected String size;
-    
-    protected String doubleId;
-    protected String doubleDisabled;
-    protected String doubleMultiple;
-    protected String doubleSize;
-    protected String doubleHeaderKey;
-    protected String doubleHeaderValue;
-    protected String doubleEmptyOption;
-    
-    protected String doubleCssClass;
-    protected String doubleCssStyle;
-    
-    protected String doubleOnclick;
-    protected String doubleOndblclick;
-    protected String doubleOnmousedown;
-    protected String doubleOnmouseup;
-    protected String doubleOnmouseover;
-    protected String doubleOnmousemove;
-    protected String doubleOnmouseout;
-    protected String doubleOnfocus;
-    protected String doubleOnblur;
-    protected String doubleOnkeypress;
-    protected String doubleOnkeydown;
-    protected String doubleOnkeyup;
-    protected String doubleOnselect;
-    protected String doubleOnchange;
-    
-    protected String doubleAccesskey;
-
-    protected void populateParams() {
-        super.populateParams();
-
-        DoubleListUIBean bean = ((DoubleListUIBean) this.component);
-        bean.setDoubleList(doubleList);
-        bean.setDoubleListKey(doubleListKey);
-        bean.setDoubleListValue(doubleListValue);
-        bean.setDoubleName(doubleName);
-        bean.setDoubleValue(doubleValue);
-        bean.setFormName(formName);
-        
-        bean.setDoubleId(doubleId);
-        bean.setDoubleDisabled(doubleDisabled);
-        bean.setDoubleMultiple(doubleMultiple);
-        bean.setDoubleSize(doubleSize);
-        bean.setDoubleHeaderKey(doubleHeaderKey);
-        bean.setDoubleHeaderValue(doubleHeaderValue);
-        bean.setDoubleEmptyOption(doubleEmptyOption);
-        
-        bean.setDoubleCssClass(doubleCssClass);
-        bean.setDoubleCssStyle(doubleCssStyle);
-        
-        bean.setDoubleOnclick(doubleOnclick);
-        bean.setDoubleOndblclick(doubleOndblclick);
-        bean.setDoubleOnmousedown(doubleOnmousedown);
-        bean.setDoubleOnmouseup(doubleOnmouseup);
-        bean.setDoubleOnmouseover(doubleOnmouseover);
-        bean.setDoubleOnmousemove(doubleOnmousemove);
-        bean.setDoubleOnmouseout(doubleOnmouseout);
-        bean.setDoubleOnfocus(doubleOnfocus);
-        bean.setDoubleOnblur(doubleOnblur);
-        bean.setDoubleOnkeypress(doubleOnkeypress);
-        bean.setDoubleOnkeydown(doubleOnkeydown);
-        bean.setDoubleOnkeyup(doubleOnkeyup);
-        bean.setDoubleOnselect(doubleOnselect);
-        bean.setDoubleOnchange(doubleOnchange);
-        
-        bean.setDoubleAccesskey(doubleAccesskey);
-        
-        bean.setEmptyOption(emptyOption);
-        bean.setHeaderKey(headerKey);
-        bean.setHeaderValue(headerValue);
-        bean.setMultiple(multiple);
-        bean.setSize(size);
-    }
-
-    public void setDoubleList(String list) {
-        this.doubleList = list;
-    }
-
-    public void setDoubleListKey(String listKey) {
-        this.doubleListKey = listKey;
-    }
-
-    public void setDoubleListValue(String listValue) {
-        this.doubleListValue = listValue;
-    }
-
-    public void setDoubleName(String aName) {
-        doubleName = aName;
-    }
-
-    public void setDoubleValue(String doubleValue) {
-        this.doubleValue = doubleValue;
-    }
-
-    public void setFormName(String formName) {
-        this.formName = formName;
-    }
-
-	public String getDoubleCssClass() {
-		return doubleCssClass;
-	}
-
-	public void setDoubleCssClass(String doubleCssClass) {
-		this.doubleCssClass = doubleCssClass;
-	}
-
-	public String getDoubleCssStyle() {
-		return doubleCssStyle;
-	}
-
-	public void setDoubleCssStyle(String doubleCssStyle) {
-		this.doubleCssStyle = doubleCssStyle;
-	}
-
-	public String getDoubleDisabled() {
-		return doubleDisabled;
-	}
-
-	public void setDoubleDisabled(String doubleDisabled) {
-		this.doubleDisabled = doubleDisabled;
-	}
-
-	public String getDoubleEmptyOption() {
-		return doubleEmptyOption;
-	}
-
-	public void setDoubleEmptyOption(String doubleEmptyOption) {
-		this.doubleEmptyOption = doubleEmptyOption;
-	}
-
-	public String getDoubleHeaderKey() {
-		return doubleHeaderKey;
-	}
-
-	public void setDoubleHeaderKey(String doubleHeaderKey) {
-		this.doubleHeaderKey = doubleHeaderKey;
-	}
-
-	public String getDoubleHeaderValue() {
-		return doubleHeaderValue;
-	}
-
-	public void setDoubleHeaderValue(String doubleHeaderValue) {
-		this.doubleHeaderValue = doubleHeaderValue;
-	}
-
-	public String getDoubleId() {
-		return doubleId;
-	}
-
-	public void setDoubleId(String doubleId) {
-		this.doubleId = doubleId;
-	}
-
-	public String getDoubleMultiple() {
-		return doubleMultiple;
-	}
-
-	public void setDoubleMultiple(String doubleMultiple) {
-		this.doubleMultiple = doubleMultiple;
-	}
-
-	public String getDoubleOnblur() {
-		return doubleOnblur;
-	}
-
-	public void setDoubleOnblur(String doubleOnblur) {
-		this.doubleOnblur = doubleOnblur;
-	}
-
-	public String getDoubleOnchange() {
-		return doubleOnchange;
-	}
-
-	public void setDoubleOnchange(String doubleOnchange) {
-		this.doubleOnchange = doubleOnchange;
-	}
-
-	public String getDoubleOnclick() {
-		return doubleOnclick;
-	}
-
-	public void setDoubleOnclick(String doubleOnclick) {
-		this.doubleOnclick = doubleOnclick;
-	}
-
-	public String getDoubleOndblclick() {
-		return doubleOndblclick;
-	}
-
-	public void setDoubleOndblclick(String doubleOndblclick) {
-		this.doubleOndblclick = doubleOndblclick;
-	}
-
-	public String getDoubleOnfocus() {
-		return doubleOnfocus;
-	}
-
-	public void setDoubleOnfocus(String doubleOnfocus) {
-		this.doubleOnfocus = doubleOnfocus;
-	}
-
-	public String getDoubleOnkeydown() {
-		return doubleOnkeydown;
-	}
-
-	public void setDoubleOnkeydown(String doubleOnkeydown) {
-		this.doubleOnkeydown = doubleOnkeydown;
-	}
-
-	public String getDoubleOnkeypress() {
-		return doubleOnkeypress;
-	}
-
-	public void setDoubleOnkeypress(String doubleOnkeypress) {
-		this.doubleOnkeypress = doubleOnkeypress;
-	}
-
-	public String getDoubleOnkeyup() {
-		return doubleOnkeyup;
-	}
-
-	public void setDoubleOnkeyup(String doubleOnkeyup) {
-		this.doubleOnkeyup = doubleOnkeyup;
-	}
-
-	public String getDoubleOnmousedown() {
-		return doubleOnmousedown;
-	}
-
-	public void setDoubleOnmousedown(String doubleOnmousedown) {
-		this.doubleOnmousedown = doubleOnmousedown;
-	}
-
-	public String getDoubleOnmousemove() {
-		return doubleOnmousemove;
-	}
-
-	public void setDoubleOnmousemove(String doubleOnmousemove) {
-		this.doubleOnmousemove = doubleOnmousemove;
-	}
-
-	public String getDoubleOnmouseout() {
-		return doubleOnmouseout;
-	}
-
-	public void setDoubleOnmouseout(String doubleOnmouseout) {
-		this.doubleOnmouseout = doubleOnmouseout;
-	}
-
-	public String getDoubleOnmouseover() {
-		return doubleOnmouseover;
-	}
-
-	public void setDoubleOnmouseover(String doubleOnmouseover) {
-		this.doubleOnmouseover = doubleOnmouseover;
-	}
-
-	public String getDoubleOnmouseup() {
-		return doubleOnmouseup;
-	}
-
-	public void setDoubleOnmouseup(String doubleOnmouseup) {
-		this.doubleOnmouseup = doubleOnmouseup;
-	}
-
-	public String getDoubleOnselect() {
-		return doubleOnselect;
-	}
-
-	public void setDoubleOnselect(String doubleOnselect) {
-		this.doubleOnselect = doubleOnselect;
-	}
-
-	public String getDoubleSize() {
-		return doubleSize;
-	}
-
-	public void setDoubleSize(String doubleSize) {
-		this.doubleSize = doubleSize;
-	}
-
-	public String getDoubleList() {
-		return doubleList;
-	}
-
-	public String getDoubleListKey() {
-		return doubleListKey;
-	}
-
-	public String getDoubleListValue() {
-		return doubleListValue;
-	}
-
-	public String getDoubleName() {
-		return doubleName;
-	}
-
-	public String getDoubleValue() {
-		return doubleValue;
-	}
-
-	public String getFormName() {
-		return formName;
-	}
-	
-	public void setEmptyOption(String emptyOption) {
-        this.emptyOption = emptyOption;
-    }
-
-    public void setHeaderKey(String headerKey) {
-        this.headerKey = headerKey;
-    }
-
-    public void setHeaderValue(String headerValue) {
-        this.headerValue = headerValue;
-    }
-
-    public void setMultiple(String multiple) {
-        this.multiple = multiple;
-    }
-
-    public void setSize(String size) {
-        this.size = size;
-    }
-    
-    public void setDoubleAccesskey(String doubleAccesskey) {
-    	this.doubleAccesskey = doubleAccesskey;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractListTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractListTag.java
deleted file mode 100644
index 372f93e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractListTag.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.components.ListUIBean;
-
-/**
- */
-public abstract class AbstractListTag extends AbstractUITag {
-    protected String list;
-    protected String listKey;
-    protected String listValue;
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ListUIBean listUIBean = ((ListUIBean) component);
-        listUIBean.setList(list);
-        listUIBean.setListKey(listKey);
-        listUIBean.setListValue(listValue);
-    }
-
-    public void setList(String list) {
-        this.list = list;
-    }
-
-    public void setListKey(String listKey) {
-        this.listKey = listKey;
-    }
-
-    public void setListValue(String listValue) {
-        this.listValue = listValue;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractRequiredListTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractRequiredListTag.java
deleted file mode 100644
index db6ed4a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractRequiredListTag.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-
-import org.apache.struts2.components.ListUIBean;
-
-/**
- */
-public abstract class AbstractRequiredListTag extends AbstractListTag {
-
-	protected void populateParams() {
-		super.populateParams();
-		
-		ListUIBean listUIBean = (ListUIBean) component;
-		listUIBean.setThrowExceptionOnNullValueAttribute(true);
-	}
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java
deleted file mode 100644
index cf9dbe4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.components.UIBean;
-import org.apache.struts2.views.jsp.ComponentTagSupport;
-
-
-/**
- * Abstract base class for all UI tags.
- *
- */
-public abstract class AbstractUITag extends ComponentTagSupport {
-    protected String cssClass;
-    protected String cssStyle;
-    protected String title;
-    protected String disabled;
-    protected String label;
-    protected String labelPosition;
-    protected String requiredposition;
-    protected String name;
-    protected String required;
-    protected String tabindex;
-    protected String value;
-    protected String template;
-    protected String theme;
-    protected String templateDir;
-    protected String onclick;
-    protected String ondblclick;
-    protected String onmousedown;
-    protected String onmouseup;
-    protected String onmouseover;
-    protected String onmousemove;
-    protected String onmouseout;
-    protected String onfocus;
-    protected String onblur;
-    protected String onkeypress;
-    protected String onkeydown;
-    protected String onkeyup;
-    protected String onselect;
-    protected String onchange;
-    protected String accesskey;
-    
-    // tooltip attributes
-    protected String tooltip;
-    protected String tooltipConfig;
-
-
-    protected void populateParams() {
-        super.populateParams();
-
-        UIBean uiBean = (UIBean) component;
-        uiBean.setCssClass(cssClass);
-        uiBean.setCssClass(cssClass);
-        uiBean.setCssStyle(cssStyle);
-        uiBean.setTitle(title);
-        uiBean.setDisabled(disabled);
-        uiBean.setLabel(label);
-        uiBean.setLabelposition(labelPosition);
-        uiBean.setRequiredposition(requiredposition);
-        uiBean.setName(name);
-        uiBean.setRequired(required);
-        uiBean.setTabindex(tabindex);
-        uiBean.setValue(value);
-        uiBean.setTemplate(template);
-        uiBean.setTheme(theme);
-        uiBean.setTemplateDir(templateDir);
-        uiBean.setOnclick(onclick);
-        uiBean.setOndblclick(ondblclick);
-        uiBean.setOnmousedown(onmousedown);
-        uiBean.setOnmouseup(onmouseup);
-        uiBean.setOnmouseover(onmouseover);
-        uiBean.setOnmousemove(onmousemove);
-        uiBean.setOnmouseout(onmouseout);
-        uiBean.setOnfocus(onfocus);
-        uiBean.setOnblur(onblur);
-        uiBean.setOnkeypress(onkeypress);
-        uiBean.setOnkeydown(onkeydown);
-        uiBean.setOnkeyup(onkeyup);
-        uiBean.setOnselect(onselect);
-        uiBean.setOnchange(onchange);
-        uiBean.setTooltip(tooltip);
-        uiBean.setTooltipConfig(tooltipConfig);
-        uiBean.setAccesskey(accesskey);
-    }
-
-    public void setCssClass(String cssClass) {
-        this.cssClass = cssClass;
-    }
-
-    public void setCssStyle(String cssStyle) {
-        this.cssStyle = cssStyle;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public void setDisabled(String disabled) {
-        this.disabled = disabled;
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    public void setLabelposition(String labelPosition) {
-        this.labelPosition = labelPosition;
-    }
-
-    public void setRequiredposition(String requiredPosition) {
-        this.requiredposition = requiredPosition;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setRequired(String required) {
-        this.required = required;
-    }
-
-    public void setTabindex(String tabindex) {
-        this.tabindex = tabindex;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public void setTemplateDir(String templateDir) {
-    	this.templateDir = templateDir;
-    }
-    
-    public void setTemplate(String template) {
-        this.template = template;
-    }
-
-    public void setTheme(String theme) {
-        this.theme = theme;
-    }
-
-    public void setOnclick(String onclick) {
-        this.onclick = onclick;
-    }
-
-    public void setOndblclick(String ondblclick) {
-        this.ondblclick = ondblclick;
-    }
-
-    public void setOnmousedown(String onmousedown) {
-        this.onmousedown = onmousedown;
-    }
-
-    public void setOnmouseup(String onmouseup) {
-        this.onmouseup = onmouseup;
-    }
-
-    public void setOnmouseover(String onmouseover) {
-        this.onmouseover = onmouseover;
-    }
-
-    public void setOnmousemove(String onmousemove) {
-        this.onmousemove = onmousemove;
-    }
-
-    public void setOnmouseout(String onmouseout) {
-        this.onmouseout = onmouseout;
-    }
-
-    public void setOnfocus(String onfocus) {
-        this.onfocus = onfocus;
-    }
-
-    public void setOnblur(String onblur) {
-        this.onblur = onblur;
-    }
-
-    public void setOnkeypress(String onkeypress) {
-        this.onkeypress = onkeypress;
-    }
-
-    public void setOnkeydown(String onkeydown) {
-        this.onkeydown = onkeydown;
-    }
-
-    public void setOnkeyup(String onkeyup) {
-        this.onkeyup = onkeyup;
-    }
-
-    public void setOnselect(String onselect) {
-        this.onselect = onselect;
-    }
-
-    public void setOnchange(String onchange) {
-        this.onchange = onchange;
-    }
-    
-    public void setTooltip(String tooltip) {
-    	this.tooltip = tooltip;
-    }
-    
-    public void setTooltipConfig(String tooltipConfig) {
-    	this.tooltipConfig = tooltipConfig;
-    }
-    
-    public void setAccesskey(String accesskey) {
-    	this.accesskey = accesskey;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionErrorTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionErrorTag.java
deleted file mode 100644
index 0202298..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionErrorTag.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ActionError;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * ActionError Tag.
- * 
- */
-public class ActionErrorTag extends AbstractUITag {
-
-	private static final long serialVersionUID = -3710234378022378639L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new ActionError(stack, req, res);
-	}
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionMessageTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionMessageTag.java
deleted file mode 100644
index 54d6bd5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionMessageTag.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ActionMessage;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * ActionMessage Tag.
- * 
- */
-public class ActionMessageTag extends AbstractUITag {
-
-	private static final long serialVersionUID = 243396927554182506L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new ActionMessage(stack, req, res);
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AnchorTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AnchorTag.java
deleted file mode 100644
index 79f88b8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/AnchorTag.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Anchor;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Anchor
- */
-public class AnchorTag extends AbstractClosingTag {
-	
-	private static final long serialVersionUID = -1034616578492431113L;
-	
-	protected String href;
-    protected String errorText;
-    protected String showErrorTransportText;
-    protected String notifyTopics;
-    protected String afterLoading;
-    protected String preInvokeJS;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Anchor(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        Anchor link = (Anchor) component;
-        
-        link.setHref(href);
-        link.setErrorText(errorText);
-        link.setShowErrorTransportText(showErrorTransportText);
-        link.setNotifyTopics(notifyTopics);
-        link.setAfterLoading(afterLoading);
-        link.setPreInvokeJS(preInvokeJS);
-    }
-
-    public void setHref(String href) {
-        this.href = href;
-    }
-
-    public void setErrorText(String errorText) {
-        this.errorText = errorText;
-    }
-
-    public void setShowErrorTransportText(String showErrorTransportText) {
-        this.showErrorTransportText = showErrorTransportText;
-    }
-
-    public void setNotifyTopics(String notifyTopics) {
-        this.notifyTopics = notifyTopics;
-    }
-
-    public void setAfterLoading(String afterLoading) {
-        this.afterLoading = afterLoading;
-    }
-
-    public void setPreInvokeJS(String preInvokeJS) {
-        this.preInvokeJS = preInvokeJS;
-    }
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxListTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxListTag.java
deleted file mode 100644
index 6108568..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxListTag.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.CheckboxList;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see CheckboxList
- */
-public class CheckboxListTag extends AbstractRequiredListTag {
-	
-	private static final long serialVersionUID = 4023034029558150010L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new CheckboxList(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxTag.java
deleted file mode 100644
index 4bc493c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxTag.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Checkbox;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Checkbox
- */
-public class CheckboxTag extends AbstractUITag {
-	
-	private static final long serialVersionUID = -350752809266337636L;
-	
-	protected String fieldValue;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Checkbox(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ((Checkbox) component).setFieldValue(fieldValue);
-    }
-
-    public void setFieldValue(String aValue) {
-        this.fieldValue = aValue;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ComboBoxTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ComboBoxTag.java
deleted file mode 100644
index c699c0a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ComboBoxTag.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ComboBox;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ComboBox
- */
-public class ComboBoxTag extends TextFieldTag {
-	
-	private static final long serialVersionUID = 3509392460170385605L;
-	
-	protected String list;
-	protected String listKey;
-	protected String listValue;
-	protected String headerKey;
-	protected String headerValue;
-	protected String emptyOption;
-
-    public void setEmptyOption(String emptyOption) {
-		this.emptyOption = emptyOption;
-	}
-
-	public void setHeaderKey(String headerKey) {
-		this.headerKey = headerKey;
-	}
-
-	public void setHeaderValue(String headerValue) {
-		this.headerValue = headerValue;
-	}
-
-	public void setListKey(String listKey) {
-		this.listKey = listKey;
-	}
-
-	public void setListValue(String listValue) {
-		this.listValue = listValue;
-	}
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new ComboBox(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ((ComboBox) component).setList(list);
-        ((ComboBox) component).setListKey(listKey);
-        ((ComboBox) component).setListValue(listValue);
-        ((ComboBox) component).setHeaderKey(headerKey);
-        ((ComboBox) component).setHeaderValue(headerValue);
-        ((ComboBox) component).setEmptyOption(emptyOption);
-    }
-
-    public void setList(String list) {
-        this.list = list;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ComponentTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ComponentTag.java
deleted file mode 100644
index 4aa464f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ComponentTag.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.GenericUIBean;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see GenericUIBean
- */
-public class ComponentTag extends AbstractUITag {
-	
-	private static final long serialVersionUID = 5448365363044104731L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new GenericUIBean(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java
deleted file mode 100644
index e10d924..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.DatePicker;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see DatePicker
- */
-public class DatePickerTag extends TextFieldTag {
-
-	private static final long serialVersionUID = 4054114507143447232L;
-	
-    protected String format;
-    protected String dateIconPath;
-    protected String templatePath;
-    protected String templateCssPath;
-    
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new DatePicker(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        final DatePicker datePicker = (DatePicker) component;
-        datePicker.setFormat(format);
-        datePicker.setDateIconPath(dateIconPath);
-        datePicker.setTemplatePath(templatePath);
-        datePicker.setTemplateCssPath(templateCssPath);
-    }
-
-    public void setFormat(String format) {
-        this.format = format;
-    }
-    
-    public void setDateIconPath(String dateIconPath) {
-    	this.dateIconPath = dateIconPath;
-    }
-    
-    public void setTemplatePath(String templatePath) {
-    	this.templatePath = templatePath;
-    }
-    
-    public void setTemplateCssPath(String templateCsspath) {
-    	this.templateCssPath = templateCsspath;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DebugTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DebugTag.java
deleted file mode 100644
index a49391c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DebugTag.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.apache.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Debug;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-public class DebugTag extends AbstractUITag {
-
-    private static final long serialVersionUID = 3487684841317160628L;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Debug(stack, req, res);
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DivTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DivTag.java
deleted file mode 100644
index 20ce6fc..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DivTag.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Div;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-public class DivTag extends AbstractClosingTag {
-	
-	private static final long serialVersionUID = 5309231035916461758L;
-	
-	protected String href;
-    protected String updateFreq;
-    protected String delay="1";
-    protected String loadingText;
-    protected String errorText;
-    protected String showErrorTransportText;
-    protected String listenTopics;
-    protected String afterLoading;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Div(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        Div div = (Div) component;
-        div.setHref(href);
-        div.setUpdateFreq(updateFreq);
-        div.setDelay(delay);
-        div.setLoadingText(loadingText);
-        div.setErrorText(errorText);
-        div.setShowErrorTransportText(showErrorTransportText);
-        div.setListenTopics(listenTopics);
-        div.setAfterLoading(afterLoading);
-    }
-
-    public void setHref(String href) {
-        this.href = href;
-    }
-
-    public void setUpdateFreq(String updateFreq) {
-        this.updateFreq = updateFreq;
-    }
-
-    public void setDelay(String delay) {
-        this.delay = delay;
-    }
-
-    public void setLoadingText(String loadingText) {
-        this.loadingText = loadingText;
-    }
-
-    public void setErrorText(String errorText) {
-        this.errorText = errorText;
-    }
-
-    public void setShowErrorTransportText(String showErrorTransportText) {
-        this.showErrorTransportText = showErrorTransportText;
-    }
-
-    public void setListenTopics(String listenTopics) {
-        this.listenTopics = listenTopics;
-    }
-
-    public void setAfterLoading(String afterLoading) {
-        this.afterLoading = afterLoading;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DoubleSelectTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DoubleSelectTag.java
deleted file mode 100644
index 832ecae..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DoubleSelectTag.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.DoubleSelect;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see DoubleSelect
- */
-public class DoubleSelectTag extends AbstractDoubleListTag {
-    
-	private static final long serialVersionUID = 7426011596359509386L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new DoubleSelect(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        DoubleSelect doubleSelect = ((DoubleSelect) component);
-        doubleSelect.setEmptyOption(emptyOption);
-        doubleSelect.setHeaderKey(headerKey);
-        doubleSelect.setHeaderValue(headerValue);
-        doubleSelect.setMultiple(multiple);
-        doubleSelect.setSize(size);
-        
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/FieldErrorTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/FieldErrorTag.java
deleted file mode 100644
index ce4e86f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/FieldErrorTag.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.FieldError;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * FieldError Tag.
- */
-public class FieldErrorTag extends AbstractUITag {
-
-	private static final long serialVersionUID = -182532967507726323L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new FieldError(stack, req, res);
-	}
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/FileTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/FileTag.java
deleted file mode 100644
index 75be076..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/FileTag.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.File;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see File
- */
-public class FileTag extends AbstractUITag {
-	
-	private static final long serialVersionUID = -2154950640215144864L;
-	
-	protected String accept;
-    protected String size;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new File(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        File file = ((File) component);
-        file.setAccept(accept);
-        file.setSize(size);
-    }
-
-    public void setAccept(String accept) {
-        this.accept = accept;
-    }
-
-    public void setSize(String size) {
-        this.size = size;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/FormTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/FormTag.java
deleted file mode 100644
index 82aa833..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/FormTag.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Form;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Form
- */
-public class FormTag extends AbstractClosingTag {
-	
-	private static final long serialVersionUID = 2792301046860819658L;
-	
-	protected String action;
-    protected String target;
-    protected String enctype;
-    protected String method;
-    protected String namespace;
-    protected String validate;
-    protected String onsubmit;
-    protected String portletMode;
-    protected String windowState;
-    protected String acceptcharset;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Form(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-        Form form = ((Form) component);
-        form.setAction(action);
-        form.setTarget(target);
-        form.setEnctype(enctype);
-        form.setMethod(method);
-        form.setNamespace(namespace);
-        form.setValidate(validate);
-        form.setOnsubmit(onsubmit);
-        form.setPortletMode(portletMode);
-        form.setWindowState(windowState);
-        form.setAcceptcharset(acceptcharset);
-    }
-
-
-    public void setAction(String action) {
-        this.action = action;
-    }
-
-    public void setTarget(String target) {
-        this.target = target;
-    }
-
-    public void setEnctype(String enctype) {
-        this.enctype = enctype;
-    }
-
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    public void setValidate(String validate) {
-        this.validate = validate;
-    }
-
-    public void setOnsubmit(String onsubmit) {
-        this.onsubmit = onsubmit;
-    }
-
-    public void setPortletMode(String portletMode) {
-        this.portletMode = portletMode;
-    }
-
-    public void setWindowState(String windowState) {
-        this.windowState = windowState;
-    }
-
-    public void setAcceptcharset(String acceptcharset) {
-        this.acceptcharset = acceptcharset;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/HeadTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/HeadTag.java
deleted file mode 100644
index e7af7db..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/HeadTag.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Head;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Head
- */
-public class HeadTag extends AbstractUITag {
-
-	private static final long serialVersionUID = 6876765769175246030L;
-	
-	private String calendarcss;
-    private String debug;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Head(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-        if (calendarcss != null) {
-        	((Head) component).setCalendarcss(calendarcss);
-        }
-        if (debug != null) {
-        	((Head) component).setDebug(Boolean.valueOf(debug).booleanValue());
-        }
-    }
-
-    public String getCalendarcss() {
-        return calendarcss;
-    }
-
-    public void setCalendarcss(String calendarcss) {
-        this.calendarcss = calendarcss;
-    }
-
-    public void setDebug(String debug) {
-        this.debug = debug;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/HiddenTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/HiddenTag.java
deleted file mode 100644
index 45a9aa6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/HiddenTag.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Hidden;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Hidden
- */
-public class HiddenTag extends AbstractUITag {
-	
-	private static final long serialVersionUID = -1124367972048371675L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Hidden(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/LabelTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/LabelTag.java
deleted file mode 100644
index 29052fd..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/LabelTag.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Label;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Label
- */
-public class LabelTag extends AbstractUITag {
-	
-	private static final long serialVersionUID = 4008321310097730458L;
-	
-	protected String forAttr;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Label(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ((Label) component).setFor(forAttr);
-    }
-
-    public void setFor(String aFor) {
-        this.forAttr = aFor;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java
deleted file mode 100644
index f94b412..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import ognl.Ognl;
-import ognl.OgnlException;
-
-import com.opensymphony.xwork2.util.OgnlUtil;
-
-
-/**
- */
-public class OgnlTool {
-    private static OgnlTool instance = new OgnlTool();
-
-    private OgnlTool() {
-    }
-
-    public static OgnlTool getInstance() {
-        return instance;
-    }
-
-    public Object findValue(String expr, Object context) {
-        try {
-            return Ognl.getValue(OgnlUtil.compile(expr), context);
-        } catch (OgnlException e) {
-            return null;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OptGroupTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OptGroupTag.java
deleted file mode 100644
index 9578f8d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OptGroupTag.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.OptGroup;
-import org.apache.struts2.views.jsp.ComponentTagSupport;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * 
- */
-public class OptGroupTag extends ComponentTagSupport {
-
-	private static final long serialVersionUID = 7367401003498678762L;
-
-	protected String list;
-	protected String label;
-	protected String disabled;
-	protected String listKey;
-	protected String listValue;
-	
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new OptGroup(stack, req, res);
-	}
-
-	protected void populateParams() {
-		super.populateParams();
-		
-		OptGroup optGroup = (OptGroup) component;
-		optGroup.setList(list);
-		optGroup.setLabel(label);
-		optGroup.setDisabled(disabled);
-		optGroup.setListKey(listKey);
-		optGroup.setListValue(listValue);
-	}
-	
-	public void setList(String list) {
-		this.list = list;
-	}
-	
-	public void setLabel(String label) {
-		this.label = label;
-	}
-	
-	public void setDisabled(String disabled) {
-		this.disabled = disabled;
-	}
-	
-	public void setListKey(String listKey) {
-		this.listKey = listKey;
-	}
-
-	public void setListValue(String listValue) {
-		this.listValue = listValue;
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OptionTransferSelectTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OptionTransferSelectTag.java
deleted file mode 100644
index c6e4164..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OptionTransferSelectTag.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.OptionTransferSelect;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * OptionTransferSelect jsp tag.
- */
-public class OptionTransferSelectTag extends AbstractDoubleListTag {
-
-	private static final long serialVersionUID = 250474334495763536L;
-	
-	protected String allowAddToLeft;
-	protected String allowAddToRight;
-	protected String allowAddAllToLeft;
-	protected String allowAddAllToRight;
-	protected String allowSelectAll;
-	protected String allowUpDownOnLeft;
-	protected String allowUpDownOnRight;
-	
-	protected String leftTitle;
-	protected String rightTitle;
-	
-	protected String buttonCssClass;
-	protected String buttonCssStyle;
-
-	protected String addToLeftLabel;
-	protected String addToRightLabel;
-	protected String addAllToLeftLabel;
-	protected String addAllToRightLabel;
-	protected String selectAllLabel;
-	protected String leftUpLabel;
-	protected String leftDownLabel;
-	protected String rightUpLabel;
-	protected String rightDownLabel;
-	
-	
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new OptionTransferSelect(stack, req, res);
-	}
-	
-	protected void populateParams() {
-		super.populateParams();
-		
-		OptionTransferSelect optionTransferSelect = (OptionTransferSelect) component;
-		optionTransferSelect.setAllowAddToLeft(allowAddToLeft);
-		optionTransferSelect.setAllowAddToRight(allowAddToRight);
-		optionTransferSelect.setAllowAddAllToLeft(allowAddAllToLeft);
-		optionTransferSelect.setAllowAddAllToRight(allowAddAllToRight);
-		optionTransferSelect.setAllowSelectAll(allowSelectAll);
-		optionTransferSelect.setAllowUpDownOnLeft(allowUpDownOnLeft);
-		optionTransferSelect.setAllowUpDownOnRight(allowUpDownOnRight);
-		
-		optionTransferSelect.setAddToLeftLabel(addToLeftLabel);
-		optionTransferSelect.setAddToRightLabel(addToRightLabel);
-		optionTransferSelect.setAddAllToLeftLabel(addAllToLeftLabel);
-		optionTransferSelect.setAddAllToRightLabel(addAllToRightLabel);
-		optionTransferSelect.setSelectAllLabel(selectAllLabel);
-		optionTransferSelect.setLeftUpLabel(leftUpLabel);
-		optionTransferSelect.setLeftDownLabel(leftDownLabel);
-		optionTransferSelect.setRightUpLabel(rightUpLabel);
-		optionTransferSelect.setRightDownLabel(rightDownLabel);
-		
-		optionTransferSelect.setButtonCssClass(buttonCssClass);
-		optionTransferSelect.setButtonCssStyle(buttonCssStyle);
-		
-		optionTransferSelect.setLeftTitle(leftTitle);
-		optionTransferSelect.setRightTitle(rightTitle);
-	}
-
-
-	public String getAddAllToLeftLabel() {
-		return addAllToLeftLabel;
-	}
-
-
-	public void setAddAllToLeftLabel(String addAllToLeftLabel) {
-		this.addAllToLeftLabel = addAllToLeftLabel;
-	}
-
-
-	public String getAddAllToRightLabel() {
-		return addAllToRightLabel;
-	}
-
-
-	public void setAddAllToRightLabel(String addAllToRightLabel) {
-		this.addAllToRightLabel = addAllToRightLabel;
-	}
-
-
-	public String getAddToLeftLabel() {
-		return addToLeftLabel;
-	}
-
-
-	public void setAddToLeftLabel(String addToLeftLabel) {
-		this.addToLeftLabel = addToLeftLabel;
-	}
-
-
-	public String getAddToRightLabel() {
-		return addToRightLabel;
-	}
-
-
-	public void setAddToRightLabel(String addToRightLabel) {
-		this.addToRightLabel = addToRightLabel;
-	}
-
-
-	public String getAllowAddAllToLeft() {
-		return allowAddAllToLeft;
-	}
-
-
-	public void setAllowAddAllToLeft(String allowAddAllToLeft) {
-		this.allowAddAllToLeft = allowAddAllToLeft;
-	}
-
-
-	public String getAllowAddAllToRight() {
-		return allowAddAllToRight;
-	}
-
-
-	public void setAllowAddAllToRight(String allowAddAllToRight) {
-		this.allowAddAllToRight = allowAddAllToRight;
-	}
-
-
-	public String getAllowAddToLeft() {
-		return allowAddToLeft;
-	}
-
-
-	public void setAllowAddToLeft(String allowAddToLeft) {
-		this.allowAddToLeft = allowAddToLeft;
-	}
-
-
-	public String getAllowAddToRight() {
-		return allowAddToRight;
-	}
-
-
-	public void setAllowAddToRight(String allowAddToRight) {
-		this.allowAddToRight = allowAddToRight;
-	}
-
-
-	public String getLeftTitle() {
-		return leftTitle;
-	}
-
-
-	public void setLeftTitle(String leftTitle) {
-		this.leftTitle = leftTitle;
-	}
-
-
-	public String getRightTitle() {
-		return rightTitle;
-	}
-
-
-	public void setRightTitle(String rightTitle) {
-		this.rightTitle = rightTitle;
-	}
-	
-	
-	public void setAllowSelectAll(String allowSelectAll) {
-		this.allowSelectAll = allowSelectAll;
-	}
-	
-	public String getAllowSelectAll() {
-		return this.allowSelectAll;
-	}
-	
-	public void setSelectAllLabel(String selectAllLabel) {
-		this.selectAllLabel = selectAllLabel;
-	}
-	
-	public String getSelectAllLabel() {
-		return this.selectAllLabel;
-	}
-	
-	public void setButtonCssClass(String buttonCssId) {
-		this.buttonCssClass = buttonCssId;
-	}
-	
-	public String getButtonCssClass() {
-		return buttonCssClass;
-	}
-	
-	public void setButtonCssStyle(String buttonCssStyle) {
-		this.buttonCssStyle = buttonCssStyle;
-	}
-	
-	public String getButtonCssStyle() {
-		return this.buttonCssStyle;
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/PanelTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/PanelTag.java
deleted file mode 100644
index 67245f7..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/PanelTag.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Panel;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Panel
- */
-public class PanelTag extends DivTag {
-	
-	private static final long serialVersionUID = -1698805503599998611L;
-	
-	protected String tabName;
-    protected String subscribeTopicName;
-    protected String remote;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Panel(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        Panel panel = ((Panel) component);
-        panel.setTabName(tabName);
-        panel.setSubscribeTopicName(subscribeTopicName);
-        panel.setRemote(remote);
-    }
-
-    public void setTabName(String tabName) {
-        this.tabName = tabName;
-    }
-
-    public void setSubscribeTopicName(String subscribeTopicName) {
-        this.subscribeTopicName = subscribeTopicName;
-    }
-
-    public void setRemote(String remote) {
-        this.remote = remote;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/PasswordTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/PasswordTag.java
deleted file mode 100644
index f6ca252..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/PasswordTag.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Password;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Password
- */
-public class PasswordTag extends TextFieldTag {
-	
-	private static final long serialVersionUID = 6802043323617377573L;
-	
-	protected String showPassword;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Password(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        ((Password) component).setShowPassword(showPassword);
-    }
-
-    public void setShow(String showPassword) {
-        this.showPassword = showPassword;
-    }
-
-    public void setShowPassword(String showPassword) {
-        this.showPassword = showPassword;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/RadioTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/RadioTag.java
deleted file mode 100644
index fdc1fe9..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/RadioTag.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Radio;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Radio
- */
-public class RadioTag extends AbstractRequiredListTag {
-	
-	private static final long serialVersionUID = -6497403399521333624L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Radio(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ResetTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ResetTag.java
deleted file mode 100644
index af54594..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/ResetTag.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Reset;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see org.apache.struts2.components.Reset
- */
-public class ResetTag extends AbstractUITag {
-	
-	private static final long serialVersionUID = 4742704832277392108L;
-	
-	protected String action;
-    protected String method;
-    protected String align;
-    protected String type;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Reset(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        Reset reset = ((Reset) component);
-        reset.setAction(action);
-        reset.setMethod(method);
-        reset.setAlign(align);
-        reset.setType(type);
-    }
-
-    public void setAction(String action) {
-        this.action = action;
-    }
-
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-    public void setAlign(String align) {
-        this.align = align;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/SelectTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/SelectTag.java
deleted file mode 100644
index 878865c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/SelectTag.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Select;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Select
- */
-public class SelectTag extends AbstractRequiredListTag {
-	
-	private static final long serialVersionUID = 6121715260335609618L;
-	
-	protected String emptyOption;
-    protected String headerKey;
-    protected String headerValue;
-    protected String multiple;
-    protected String size;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Select(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        Select select = ((Select) component);
-        select.setEmptyOption(emptyOption);
-        select.setHeaderKey(headerKey);
-        select.setHeaderValue(headerValue);
-        select.setMultiple(multiple);
-        select.setSize(size);
-    }
-
-    public void setEmptyOption(String emptyOption) {
-        this.emptyOption = emptyOption;
-    }
-
-    public void setHeaderKey(String headerKey) {
-        this.headerKey = headerKey;
-    }
-
-    public void setHeaderValue(String headerValue) {
-        this.headerValue = headerValue;
-    }
-
-    public void setMultiple(String multiple) {
-        this.multiple = multiple;
-    }
-
-    public void setSize(String size) {
-        this.size = size;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/SubmitTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/SubmitTag.java
deleted file mode 100644
index da73a87..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/SubmitTag.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Submit;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Submit
- */
-public class SubmitTag extends AbstractUITag {
-	
-	private static final long serialVersionUID = 2179281109958301343L;
-	
-	protected String action;
-    protected String method;
-    protected String align;
-    protected String resultDivId;
-    protected String onLoadJS;
-    protected String notifyTopics;
-    protected String listenTopics;
-    protected String preInvokeJS;
-    protected String type;
-    protected String src;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Submit(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        Submit submit = ((Submit) component);
-        submit.setAction(action);
-        submit.setMethod(method);
-        submit.setAlign(align);
-        submit.setResultDivId(resultDivId);
-        submit.setOnLoadJS(onLoadJS);
-        submit.setNotifyTopics(notifyTopics);
-        submit.setListenTopics(listenTopics);
-        submit.setPreInvokeJS(preInvokeJS);
-        submit.setType(type);
-        submit.setSrc(src);
-    }
-
-    public void setAction(String action) {
-        this.action = action;
-    }
-
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-    public void setAlign(String align) {
-        this.align = align;
-    }
-
-    public void setResultDivId(String resultDivId) {
-        this.resultDivId = resultDivId;
-    }
-
-    public void setOnLoadJS(String onLoadJS) {
-        this.onLoadJS = onLoadJS;
-    }
-
-    public void setNotifyTopics(String notifyTopics) {
-        this.notifyTopics = notifyTopics;
-    }
-
-    public void setListenTopics(String listenTopics) {
-        this.listenTopics = listenTopics;
-    }
-
-    public void setPreInvokeJS(String preInvokeJS) {
-        this.preInvokeJS = preInvokeJS;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getSrc() {
-        return src;
-    }
-
-    public void setSrc(String src) {
-        this.src = src;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TabbedPanelTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TabbedPanelTag.java
deleted file mode 100644
index eb8e65d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TabbedPanelTag.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Panel;
-import org.apache.struts2.components.TabbedPanel;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see TabbedPanel
- */
-public class TabbedPanelTag extends AbstractClosingTag {
-	
-	private static final long serialVersionUID = -4719930205515386252L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new TabbedPanel(stack, req, res);
-    }
-
-    public List getTabs() {
-        return ((TabbedPanel) component).getTabs();
-    }
-
-    public void addTab(Panel pane) {
-        ((TabbedPanel) component).addTab(pane);
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TextFieldTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TextFieldTag.java
deleted file mode 100644
index fcd6937..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TextFieldTag.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TextField;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see TextField
- */
-public class TextFieldTag extends AbstractUITag {
-	
-	private static final long serialVersionUID = 5811285953670562288L;
-
-	protected String maxlength;
-    protected String readonly;
-    protected String size;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new TextField(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        TextField textField = ((TextField) component);
-        textField.setMaxlength(maxlength);
-        textField.setReadonly(readonly);
-        textField.setSize(size);
-    }
-
-    /**
-     * @deprecated please use {@link #setMaxlength} instead
-     */
-    public void setMaxLength(String maxlength) {
-        this.maxlength = maxlength;
-    }
-
-    public void setMaxlength(String maxlength) {
-        this.maxlength = maxlength;
-    }
-
-    public void setReadonly(String readonly) {
-        this.readonly = readonly;
-    }
-
-    public void setSize(String size) {
-        this.size = size;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TextareaTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TextareaTag.java
deleted file mode 100644
index 7ad2239..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TextareaTag.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TextArea;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see TextArea
- */
-public class TextareaTag extends AbstractUITag {
-	
-	private static final long serialVersionUID = -4107122506712927927L;
-	
-	protected String cols;
-    protected String readonly;
-    protected String rows;
-    protected String wrap;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new TextArea(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        TextArea textArea = ((TextArea) component);
-        textArea.setCols(cols);
-        textArea.setReadonly(readonly);
-        textArea.setRows(rows);
-        textArea.setWrap(wrap);
-    }
-
-    public void setCols(String cols) {
-        this.cols = cols;
-    }
-
-    public void setReadonly(String readonly) {
-        this.readonly = readonly;
-    }
-
-    public void setRows(String rows) {
-        this.rows = rows;
-    }
-
-    public void setWrap(String wrap) {
-        this.wrap = wrap;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TimePickerTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TimePickerTag.java
deleted file mode 100644
index 5d6e4af..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TimePickerTag.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TimePicker;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @version $Date$ $Id$
- */
-public class TimePickerTag extends TextFieldTag {
-
-	private static final long serialVersionUID = 3527737048468381376L;
-	
-	protected String format;
-	protected String timeIconPath;
-	protected String templatePath;
-	protected String templateCssPath;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new TimePicker(stack, req, res);
-	}
-	
-	protected void populateParams() {
-		super.populateParams();
-		
-		final TimePicker timePicker = (TimePicker) component;
-		timePicker.setFormat(format);
-		timePicker.setTimeIconPath(timeIconPath);
-		timePicker.setTemplatePath(templatePath);
-		timePicker.setTemplateCssPath(templateCssPath);
-	}
-	
-	public void setFormat(String format) {
-        this.format = format;
-    }
-    
-    public void setTimeIconPath(String timeIconPath) {
-    	this.timeIconPath = timeIconPath;
-    }
-    
-    public void setTemplatePath(String templatePath) {
-    	this.templatePath = templatePath;
-    }
-    
-    public void setTemplateCssPath(String templateCssPath) {
-    	this.templateCssPath = templateCssPath;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TokenTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TokenTag.java
deleted file mode 100644
index e3fdd98..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TokenTag.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Token;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see Token
- */
-public class TokenTag extends AbstractUITag {
-	
-	private static final long serialVersionUID = 722480798151703457L;
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Token(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeNodeTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeNodeTag.java
deleted file mode 100644
index 4020dcb..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeNodeTag.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TreeNode;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see TreeNode
- */
-public class TreeNodeTag extends AbstractClosingTag {
-	
-	private static final long serialVersionUID = 7340746943017900803L;
-	
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new TreeNode(stack,req,res);
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    // NOTE: not necessary, label property is inherited, will be populated 
-    // by super-class
-    /*protected void populateParams() {
-        if (label != null) {
-            TreeNode treeNode = (TreeNode)component;
-            treeNode.setLabel(label);
-        }
-        super.populateParams();
-    }*/
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeTag.java
deleted file mode 100644
index be672bd..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeTag.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Tree;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Tree
- */
-public class TreeTag extends AbstractClosingTag {
-	
-	private static final long serialVersionUID = 2735218501058548013L;
-	
-	private String toggle;
-    private String treeSelectedTopic;
-    private String treeExpandedTopic;
-    private String treeCollapsedTopic; 
-    private String rootNode;
-    private String childCollectionProperty;
-    private String nodeTitleProperty;
-    private String nodeIdProperty;
-    private String showRootGrid;
-    
-    private String showGrid;
-	private String blankIconSrc;
-	private String gridIconSrcL;
-	private String gridIconSrcV;
-	private String gridIconSrcP;
-	private String gridIconSrcC;
-	private String gridIconSrcX;
-	private String gridIconSrcY;
-	private String expandIconSrcPlus;
-	private String expandIconSrcMinus;
-	private String iconWidth;
-	private String iconHeight;
-	private String toggleDuration;
-    private String templateCssPath;
-     
-
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Tree(stack,req,res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        Tree tree = (Tree) component;
-        if (childCollectionProperty != null)
-        	tree.setChildCollectionProperty(childCollectionProperty);
-        if (nodeIdProperty != null)
-        	tree.setNodeIdProperty(nodeIdProperty);
-        if (nodeTitleProperty != null)
-        	tree.setNodeTitleProperty(nodeTitleProperty);
-        if (rootNode != null)
-        	tree.setRootNode(rootNode);
-        if (toggle != null)
-        	tree.setToggle(toggle);
-        if (treeCollapsedTopic != null)
-        	tree.setTreeCollapsedTopic(treeCollapsedTopic);
-        if (treeExpandedTopic != null)
-        	tree.setTreeExpandedTopic(treeExpandedTopic);
-        if (treeSelectedTopic != null)
-        	tree.setTreeSelectedTopic(treeSelectedTopic);
-        if (showRootGrid != null)
-        	tree.setShowRootGrid(showRootGrid);
-        
-        if (showGrid != null)
-        	tree.setShowGrid(showGrid);
-        if (blankIconSrc != null)
-        	tree.setBlankIconSrc(blankIconSrc);
-        if (gridIconSrcL != null)
-        	tree.setGridIconSrcL(gridIconSrcC);
-        if (gridIconSrcV != null) 
-        	tree.setGridIconSrcV(gridIconSrcV);
-        if (gridIconSrcP != null)
-        	tree.setGridIconSrcP(gridIconSrcP);
-        if (gridIconSrcC != null)
-        	tree.setGridIconSrcC(gridIconSrcC);
-        if (gridIconSrcX != null)
-        	tree.setGridIconSrcX(gridIconSrcX);
-        if (gridIconSrcY != null)
-        	tree.setGridIconSrcY(gridIconSrcY);
-        if (expandIconSrcPlus != null) 
-        	tree.setExpandIconSrcPlus(expandIconSrcPlus);
-    	if (expandIconSrcMinus != null) 
-    		tree.setExpandIconSrcMinus(expandIconSrcMinus);
-    	if (iconWidth != null) 
-    		tree.setIconWidth(iconWidth);
-    	if (iconHeight != null)
-    		tree.setIconHeight(iconHeight);
-    	if (toggleDuration != null)
-    		tree.setToggleDuration(toggleDuration);
-    	if (templateCssPath != null)
-    		tree.setTemplateCssPath(templateCssPath);
-    }
-
-    public String getToggle() {
-        return toggle;
-    }
-
-    public void setToggle(String toggle) {
-        this.toggle = toggle;
-    }
-
-    public String getTreeSelectedTopic() {
-        return treeSelectedTopic;
-    }
-
-    public void setTreeSelectedTopic(String treeSelectedTopic) {
-        this.treeSelectedTopic = treeSelectedTopic;
-    }
-
-    public String getTreeExpandedTopic() {
-        return treeExpandedTopic;
-    }
-
-    public void setTreeExpandedTopic(String treeExpandedTopic) {
-        this.treeExpandedTopic = treeExpandedTopic;
-    }
-
-    public String getTreeCollapsedTopic() {
-        return treeCollapsedTopic;
-    }
-
-    public void setTreeCollapsedTopic(String treeCollapsedTopic) {
-        this.treeCollapsedTopic = treeCollapsedTopic;
-    }
-
-    public String getRootNode() {
-        return rootNode;
-    }
-
-    public void setRootNode(String rootNode) {
-        this.rootNode = rootNode;
-    }
-
-    public String getChildCollectionProperty() {
-        return childCollectionProperty;
-    }
-
-    public void setChildCollectionProperty(String childCollectionProperty) {
-        this.childCollectionProperty = childCollectionProperty;
-    }
-
-    public String getNodeTitleProperty() {
-        return nodeTitleProperty;
-    }
-
-    public void setNodeTitleProperty(String nodeTitleProperty) {
-        this.nodeTitleProperty = nodeTitleProperty;
-    }
-
-    public String getNodeIdProperty() {
-        return nodeIdProperty;
-    }
-
-    public void setNodeIdProperty(String nodeIdProperty) {
-        this.nodeIdProperty = nodeIdProperty;
-    }
-    
-    public String getShowRootGrid() {
-    	return showRootGrid;
-    }
-    
-    public void setShowRootGrid(String showRootGrid) {
-    	this.showRootGrid = showRootGrid;
-    }
-    
-    public String getBlankIconSrc() {
-		return blankIconSrc;
-	}
-
-	public void setBlankIconSrc(String blankIconSrc) {
-		this.blankIconSrc = blankIconSrc;
-	}
-
-	public String getExpandIconSrcMinus() {
-		return expandIconSrcMinus;
-	}
-
-	public void setExpandIconSrcMinus(String expandIconSrcMinus) {
-		this.expandIconSrcMinus = expandIconSrcMinus;
-	}
-
-	public String getExpandIconSrcPlus() {
-		return expandIconSrcPlus;
-	}
-
-	public void setExpandIconSrcPlus(String expandIconSrcPlus) {
-		this.expandIconSrcPlus = expandIconSrcPlus;
-	}
-
-	public String getGridIconSrcC() {
-		return gridIconSrcC;
-	}
-
-	public void setGridIconSrcC(String gridIconSrcC) {
-		this.gridIconSrcC = gridIconSrcC;
-	}
-
-	public String getGridIconSrcL() {
-		return gridIconSrcL;
-	}
-
-	public void setGridIconSrcL(String gridIconSrcL) {
-		this.gridIconSrcL = gridIconSrcL;
-	}
-
-	public String getGridIconSrcP() {
-		return gridIconSrcP;
-	}
-
-	public void setGridIconSrcP(String gridIconSrcP) {
-		this.gridIconSrcP = gridIconSrcP;
-	}
-
-	public String getGridIconSrcV() {
-		return gridIconSrcV;
-	}
-
-	public void setGridIconSrcV(String gridIconSrcV) {
-		this.gridIconSrcV = gridIconSrcV;
-	}
-
-	public String getGridIconSrcX() {
-		return gridIconSrcX;
-	}
-
-	public void setGridIconSrcX(String gridIconSrcX) {
-		this.gridIconSrcX = gridIconSrcX;
-	}
-
-	public String getGridIconSrcY() {
-		return gridIconSrcY;
-	}
-
-	public void setGridIconSrcY(String gridIconSrcY) {
-		this.gridIconSrcY = gridIconSrcY;
-	}
-
-	public String getIconHeight() {
-		return iconHeight;
-	}
-
-	public void setIconHeight(String iconHeight) {
-		this.iconHeight = iconHeight;
-	}
-
-	public String getIconWidth() {
-		return iconWidth;
-	}
-
-	public void setIconWidth(String iconWidth) {
-		this.iconWidth = iconWidth;
-	}
-
-	public String getTemplateCssPath() {
-		return templateCssPath;
-	}
-
-	public void setTemplateCssPath(String templateCssPath) {
-		this.templateCssPath = templateCssPath;
-	}
-
-	public String getToggleDuration() {
-		return toggleDuration;
-	}
-
-	public void setToggleDuration(String toggleDuration) {
-		this.toggleDuration = toggleDuration;
-	}
-
-	public String getShowGrid() {
-		return showGrid;
-	}
-
-	public void setShowGrid(String showGrid) {
-		this.showGrid = showGrid;
-	}
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/UpDownSelectTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/UpDownSelectTag.java
deleted file mode 100644
index 3879901..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/UpDownSelectTag.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.UpDownSelect;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see UpDownSelect
- */
-public class UpDownSelectTag extends SelectTag {
-
-	private static final long serialVersionUID = -8136573053799541353L;
-	
-	protected String allowMoveUp;
-	protected String allowMoveDown;
-	protected String allowSelectAll;
-	
-	protected String moveUpLabel;
-	protected String moveDownLabel;
-	protected String selectAllLabel;
-	
-	
-	public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new UpDownSelect(stack, req, res);
-	}
-	
-	protected void populateParams() {
-		super.populateParams();
-		
-		UpDownSelect c = (UpDownSelect) component;
-		
-		c.setAllowMoveUp(allowMoveUp);
-		c.setAllowMoveDown(allowMoveDown);
-		c.setAllowSelectAll(allowSelectAll);
-		
-		c.setMoveUpLabel(moveUpLabel);
-		c.setMoveDownLabel(moveDownLabel);
-		c.setSelectAllLabel(selectAllLabel);
-	
-	}
-	
-	
-	public String getAllowMoveUp() { 
-		return allowMoveUp;
-	}
-	
-	public void setAllowMoveUp(String allowMoveUp) {
-		this.allowMoveUp = allowMoveUp;
-	}
-	
-	
-	
-	public String getAllowMoveDown() {
-		return allowMoveDown;
-	}
-	
-	public void setAllowMoveDown(String allowMoveDown) {
-		this.allowMoveDown = allowMoveDown;
-	}
-	
-	
-	
-	public String getAllowSelectAll() {
-		return allowSelectAll;
-	}
-	
-	public void setAllowSelectAll(String allowSelectAll) {
-		this.allowSelectAll = allowSelectAll;
-	}
-	
-	
-	public String getMoveUpLabel() {
-		return moveUpLabel;
-	}
-	
-	public void setMoveUpLabel(String moveUpLabel) {
-		this.moveUpLabel = moveUpLabel;
-	}
-	
-	
-	
-	public String getMoveDownLabel() {
-		return moveDownLabel;
-	}
-	
-	public void setMoveDownLabel(String moveDownLabel) {
-		this.moveDownLabel = moveDownLabel;
-	}
-	
-
-	
-	public String getSelectAllLabel() {
-		return selectAllLabel;
-	}
-	
-	public void setSelectAllLabel(String selectAllLabel) {
-		this.selectAllLabel = selectAllLabel;
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/table/WebTableTag.java b/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/table/WebTableTag.java
deleted file mode 100644
index 6234723..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/table/WebTableTag.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui.table;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.table.WebTable;
-import org.apache.struts2.views.jsp.ui.ComponentTag;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @see WebTable
- */
-public class WebTableTag extends ComponentTag {
-
-	private static final long serialVersionUID = 2978932111492397942L;
-	
-	protected String sortOrder;
-    protected String modelName;
-    protected boolean sortable;
-    protected int sortColumn;
-
-    public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new WebTable(stack, req, res);
-    }
-
-    protected void populateParams() {
-        super.populateParams();
-
-        WebTable table = (WebTable) component;
-        table.setSortOrder(sortOrder);
-        table.setSortable(sortable);
-        table.setModelName(modelName);
-        table.setSortOrder(sortOrder);
-    }
-
-    public void setSortOrder(String sortOrder) {
-        this.sortOrder = sortOrder;
-    }
-
-    public void setModelName(String modelName) {
-        this.modelName = modelName;
-    }
-
-    public void setSortable(boolean sortable) {
-        this.sortable = sortable;
-    }
-
-    public void setSortColumn(int sortColumn) {
-        this.sortColumn = sortColumn;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java b/trunk/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java
deleted file mode 100644
index e3cf240..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.util.StrutsUtil;
-import org.apache.struts2.views.jsp.ui.OgnlTool;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * Value Stack's Context related Utilities.
- * 
- */
-public class ContextUtil {
-    public static final String REQUEST = "request";
-    public static final String REQUEST2 = "request";
-    public static final String RESPONSE = "response";
-    public static final String RESPONSE2 = "response";
-    public static final String SESSION = "session";
-    public static final String BASE = "base";
-    public static final String STACK = "stack";
-    public static final String OGNL = "ognl";
-    public static final String STRUTS = "struts";
-    public static final String ACTION = "action";
-
-    public static Map getStandardContext(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        HashMap map = new HashMap();
-        map.put(REQUEST, req);
-        map.put(REQUEST2, req);
-        map.put(RESPONSE, res);
-        map.put(RESPONSE2, res);
-        map.put(SESSION, req.getSession(false));
-        map.put(BASE, req.getContextPath());
-        map.put(STACK, stack);
-        map.put(OGNL, OgnlTool.getInstance());
-        map.put(STRUTS, new StrutsUtil(stack, req, res));
-
-        ActionInvocation invocation = (ActionInvocation) stack.getContext().get(ActionContext.ACTION_INVOCATION);
-        if (invocation != null) {
-            map.put(ACTION, invocation.getAction());
-        }
-        return map;
-    }
-    
-    /**
-     * Return true if either Configuration's altSyntax is on or the stack context's useAltSyntax is on
-     * @param context stack's context
-     * @return boolean
-     */
-    public static boolean isUseAltSyntax(Map context) {
-        // We didn't make altSyntax static cause, if so, struts.configuration.xml.reload will not work
-        // plus the Configuration implementation should cache the properties, which the framework's
-        // configuration implementation does
-        boolean altSyntax = "true".equals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX));
-        return altSyntax ||(
-                (context.containsKey("useAltSyntax") &&
-                        context.get("useAltSyntax") != null &&
-                        "true".equals(context.get("useAltSyntax").toString())));
-    }
-
-    /**
-     * Returns a String for overriding the default templateSuffix if templateSuffix is on the stack
-     * @param context stack's context
-     * @return String
-     */
-    public static String getTemplateSuffix(Map context) {
-        return context.containsKey("templateSuffix") ? (String) context.get("templateSuffix") : null;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/util/ResourceUtil.java b/trunk/core/src/main/java/org/apache/struts2/views/util/ResourceUtil.java
deleted file mode 100644
index a0f8fd1..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/util/ResourceUtil.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.util;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts2.RequestUtils;
-
-/**
- */
-public class ResourceUtil {
-    public static String getResourceBase(HttpServletRequest req) {
-        String path = RequestUtils.getServletPath(req);
-        if (path == null || "".equals(path)) {
-            return "";
-        }
-
-        return path.substring(0, path.lastIndexOf('/'));
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/util/TextUtil.java b/trunk/core/src/main/java/org/apache/struts2/views/util/TextUtil.java
deleted file mode 100644
index 21d5c99..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/util/TextUtil.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.util;
-
-
-/**
- * This class handles HTML escaping of text.
- * It was written and optimized to be as fast as possible.
- *
- */
-public class TextUtil {
-
-    protected static final int MAX_LENGTH = 300;
-
-    /**
-     * We use arrays of char in the lookup table because it is faster
-     * appending this to a StringBuffer than appending a String
-     */
-    protected static final char[][] _stringChars = new char[MAX_LENGTH][];
-
-    static {
-        // Initialize the mapping table
-        initMapping();
-    }
-
-
-    /**
-     * Call escapeHTML(s, false)
-     */
-    public static final String escapeHTML(String s) {
-        return escapeHTML(s, false);
-    }
-
-    /**
-     * Escape HTML.
-     *
-     * @param s           string to be escaped
-     * @param escapeEmpty if true, then empty string will be escaped.
-     */
-    public static final String escapeHTML(String s, boolean escapeEmpty) {
-        int len = s.length();
-
-        if (len == 0) {
-            return s;
-        }
-
-        if (!escapeEmpty) {
-            String trimmed = s.trim();
-
-            if ((trimmed.length() == 0) || ("\"\"").equals(trimmed)) {
-                return s;
-            }
-        }
-
-        int i = 0;
-
-        // First loop through String and check if escaping is needed at all
-        // No buffers are copied at this time
-        do {
-            int index = s.charAt(i);
-
-            if (index >= MAX_LENGTH) {
-                if (index != 0x20AC) { // If not euro symbol
-
-                    continue;
-                }
-
-                break;
-            } else if (_stringChars[index] != null) {
-                break;
-            }
-        } while (++i < len);
-
-        // If the check went to the end with no escaping then i should be == len now
-        // otherwise we must continue escaping for real
-        if (i == len) {
-            return s;
-        }
-
-        // We found a character to escape and broke out at position i
-        // Now copy all characters before that to StringBuffer sb
-        // Since a char[] will be used for copying we might as well get
-        // a complete copy of it so that we can use array indexing instead of charAt
-        StringBuffer sb = new StringBuffer(len + 40);
-        char[] chars = new char[len];
-
-        // Copy all chars from the String s to the chars buffer
-        s.getChars(0, len, chars, 0);
-
-        // Append the first i characters that we have checked to the resulting StringBuffer
-        sb.append(chars, 0, i);
-
-        int last = i;
-        char[] subst;
-
-        for (; i < len; i++) {
-            char c = chars[i];
-            int index = c;
-
-            if (index < MAX_LENGTH) {
-                subst = _stringChars[index];
-
-                // It is faster to append a char[] than a String which is why we use this
-                if (subst != null) {
-                    if (i > last) {
-                        sb.append(chars, last, i - last);
-                    }
-
-                    sb.append(subst);
-                    last = i + 1;
-                }
-            }
-            // Check if it is the euro symbol. This could be changed to check in a second lookup
-            // table in case one wants to convert more characters in that area
-            else if (index == 0x20AC) {
-                if (i > last) {
-                    sb.append(chars, last, i - last);
-                }
-
-                sb.append("&euro;");
-                last = i + 1;
-            }
-        }
-
-        if (i > last) {
-            sb.append(chars, last, i - last);
-        }
-
-        return sb.toString();
-    }
-
-    protected static void addMapping(int c, String txt, String[] strings) {
-        strings[c] = txt;
-    }
-
-    protected static void initMapping() {
-        String[] strings = new String[MAX_LENGTH];
-
-        addMapping(0x22, "&quot;", strings); // "
-        addMapping(0x26, "&amp;", strings); // &
-        addMapping(0x3c, "&lt;", strings); // <
-        addMapping(0x3e, "&gt;", strings); // >
-
-        addMapping(0xa1, "&iexcl;", strings); //
-        addMapping(0xa2, "&cent;", strings); //
-        addMapping(0xa3, "&pound;", strings); //
-        addMapping(0xa9, "&copy;", strings); // �
-        addMapping(0xae, "&reg;", strings); // �
-        addMapping(0xbf, "&iquest;", strings); //
-
-        addMapping(0xc0, "&Agrave;", strings); // �
-        addMapping(0xc1, "&Aacute;", strings); // �
-        addMapping(0xc2, "&Acirc;", strings); // �
-        addMapping(0xc3, "&Atilde;", strings); // �
-        addMapping(0xc4, "&Auml;", strings); // �
-        addMapping(0xc5, "&Aring;", strings); // �
-        addMapping(0xc6, "&AElig;", strings); // �
-        addMapping(0xc7, "&Ccedil;", strings); // �
-        addMapping(0xc8, "&Egrave;", strings); //
-        addMapping(0xc9, "&Eacute;", strings); //
-        addMapping(0xca, "&Ecirc;", strings); //
-        addMapping(0xcb, "&Euml;", strings); //
-        addMapping(0xcc, "&Igrave;", strings); //
-        addMapping(0xcd, "&Iacute;", strings); //
-        addMapping(0xce, "&Icirc;", strings); //
-        addMapping(0xcf, "&Iuml;", strings); //
-
-        addMapping(0xd0, "&ETH;", strings); //
-        addMapping(0xd1, "&Ntilde;", strings); //
-        addMapping(0xd2, "&Ograve;", strings); //
-        addMapping(0xd3, "&Oacute;", strings); //
-        addMapping(0xd4, "&Ocirc;", strings); //
-        addMapping(0xd5, "&Otilde;", strings); //
-        addMapping(0xd6, "&Ouml;", strings); // �
-        addMapping(0xd7, "&times;", strings); //
-        addMapping(0xd8, "&Oslash;", strings); //
-        addMapping(0xd9, "&Ugrave;", strings); //
-        addMapping(0xda, "&Uacute;", strings); //
-        addMapping(0xdb, "&Ucirc;", strings); //
-        addMapping(0xdc, "&Uuml;", strings); //
-        addMapping(0xdd, "&Yacute;", strings); //
-        addMapping(0xde, "&THORN;", strings); //
-        addMapping(0xdf, "&szlig;", strings); //
-
-        addMapping(0xe0, "&agrave;", strings); //
-        addMapping(0xe1, "&aacute;", strings); //
-        addMapping(0xe2, "&acirc;", strings); //
-        addMapping(0xe3, "&atilde;", strings); //
-        addMapping(0xe4, "&auml;", strings); // �
-        addMapping(0xe5, "&aring;", strings); // �
-        addMapping(0xe6, "&aelig;", strings); //
-        addMapping(0xe7, "&ccedil;", strings); //
-        addMapping(0xe8, "&egrave;", strings); //
-        addMapping(0xe9, "&eacute;", strings); //
-        addMapping(0xea, "&ecirc;", strings); //
-        addMapping(0xeb, "&euml;", strings); //
-        addMapping(0xec, "&igrave;", strings); //
-        addMapping(0xed, "&iacute;", strings); //
-        addMapping(0xee, "&icirc;", strings); //
-        addMapping(0xef, "&iuml;", strings); //
-
-        addMapping(0xf0, "&eth;", strings); //
-        addMapping(0xf1, "&ntilde;", strings); //
-        addMapping(0xf2, "&ograve;", strings); //
-        addMapping(0xf3, "&oacute;", strings); //
-        addMapping(0xf4, "&ocirc;", strings); //
-        addMapping(0xf5, "&otilde;", strings); //
-        addMapping(0xf6, "&ouml;", strings); // �
-        addMapping(0xf7, "&divide;", strings); //
-        addMapping(0xf8, "&oslash;", strings); //
-        addMapping(0xf9, "&ugrave;", strings); //
-        addMapping(0xfa, "&uacute;", strings); //
-        addMapping(0xfb, "&ucirc;", strings); //
-        addMapping(0xfc, "&uuml;", strings); //
-        addMapping(0xfd, "&yacute;", strings); //
-        addMapping(0xfe, "&thorn;", strings); //
-        addMapping(0xff, "&yuml;", strings); //
-
-        for (int i = 0; i < strings.length; i++) {
-            String str = strings[i];
-
-            if (str != null) {
-                _stringChars[i] = str.toCharArray();
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java b/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
deleted file mode 100644
index 75f81cf..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.util;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.net.URLEncoder;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.TextParseUtil;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.XWorkContinuationConfig;
-
-
-/**
- * UrlHelper
- *
- */
-public class UrlHelper {
-    private static final Log LOG = LogFactory.getLog(UrlHelper.class);
-
-    /**
-     * Default HTTP port (80).
-     */
-    private static final int DEFAULT_HTTP_PORT = 80;
-
-    /**
-     * Default HTTPS port (443).
-     */
-    private static final int DEFAULT_HTTPS_PORT = 443;
-
-    private static final String AMP = "&amp;";
-
-    public static String buildUrl(String action, HttpServletRequest request, HttpServletResponse response, Map params) {
-        return buildUrl(action, request, response, params, null, true, true);
-    }
-    
-    public static String buildUrl(String action, HttpServletRequest request, HttpServletResponse response, Map params, String scheme, boolean includeContext, boolean encodeResult) {
-    	return buildUrl(action, request, response, params, scheme, includeContext, encodeResult, false);
-    }
-
-    public static String buildUrl(String action, HttpServletRequest request, HttpServletResponse response, Map params, String scheme, boolean includeContext, boolean encodeResult, boolean forceAddSchemeHostAndPort) {
-        StringBuffer link = new StringBuffer();
-
-        boolean changedScheme = false;
-
-        int httpPort = DEFAULT_HTTP_PORT;
-
-        try {
-            httpPort = Integer.parseInt((String) Settings.get(StrutsConstants.STRUTS_URL_HTTP_PORT));
-        } catch (Exception ex) {
-        }
-
-        int httpsPort = DEFAULT_HTTPS_PORT;
-
-        try {
-            httpsPort = Integer.parseInt((String) Settings.get(StrutsConstants.STRUTS_URL_HTTPS_PORT));
-        } catch (Exception ex) {
-        }
-
-        // only append scheme if it is different to the current scheme *OR*
-        // if we explicity want it to be appended by having forceAddSchemeHostAndPort = true
-        if (forceAddSchemeHostAndPort) {
-        	String reqScheme = request.getScheme();
-        	changedScheme = true;
-        	link.append(scheme != null ? scheme : reqScheme);
-        	link.append("://");
-        	link.append(request.getServerName());
-        	
-        	if ((scheme.equals("http") && (httpPort != DEFAULT_HTTP_PORT)) || (scheme.equals("https") && httpsPort != DEFAULT_HTTPS_PORT))
-            {
-                link.append(":");
-                link.append(scheme.equals("http") ? httpPort : httpsPort);
-            }
-        }
-        else if (  
-           (scheme != null) && !scheme.equals(request.getScheme())) {
-            changedScheme = true;
-            link.append(scheme);
-            link.append("://");
-            link.append(request.getServerName());
-
-            if ((scheme.equals("http") && (httpPort != DEFAULT_HTTP_PORT)) || (scheme.equals("https") && httpsPort != DEFAULT_HTTPS_PORT))
-            {
-                link.append(":");
-                link.append(scheme.equals("http") ? httpPort : httpsPort);
-            }
-        }
-
-        if (action != null) {
-            // Check if context path needs to be added
-            // Add path to absolute links
-            if (action.startsWith("/") && includeContext) {
-                String contextPath = request.getContextPath();
-                if (!contextPath.equals("/")) {
-                    link.append(contextPath);
-                }
-            } else if (changedScheme) {
-                
-                // (Applicable to Servlet 2.4 containers)
-                // If the request was forwarded, the attribute below will be set with the original URL
-                String uri = (String) request.getAttribute("javax.servlet.forward.request_uri");
-                
-                // If the attribute wasn't found, default to the value in the request object
-                if (uri == null) {
-                    uri = request.getRequestURI();
-                }
-                
-                link.append(uri.substring(0, uri.lastIndexOf('/') + 1));
-            }
-
-            // Add page
-            link.append(action);
-        } else {
-            // Go to "same page"
-            String requestURI = (String) request.getAttribute("struts.request_uri");
-
-            // (Applicable to Servlet 2.4 containers)
-            // If the request was forwarded, the attribute below will be set with the original URL
-            if (requestURI == null) {
-                requestURI = (String) request.getAttribute("javax.servlet.forward.request_uri");
-            }
-            
-            // If neither request attributes were found, default to the value in the request object
-            if (requestURI == null) {
-                requestURI = request.getRequestURI();
-            }
-
-            link.append(requestURI);
-        }
-
-        // tie in the continuation parameter
-        String continueId = (String) ActionContext.getContext().get(XWorkContinuationConfig.CONTINUE_KEY);
-        if (continueId != null) {
-            if (params == null) {
-                params = Collections.singletonMap(XWorkContinuationConfig.CONTINUE_PARAM, continueId);
-            } else {
-                params.put(XWorkContinuationConfig.CONTINUE_PARAM, continueId);
-            }
-        }
-
-        //if the action was not explicitly set grab the params from the request
-        buildParametersString(params, link);
-
-        String result;
-
-        try {
-            result = encodeResult ? response.encodeURL(link.toString()) : link.toString();
-        } catch (Exception ex) {
-            // Could not encode the URL for some reason
-            // Use it unchanged
-            result = link.toString();
-        }
-
-        return result;
-    }
-
-    public static void buildParametersString(Map params, StringBuffer link) {
-    	buildParametersString(params, link, AMP);
-    }
-    
-    public static void buildParametersString(Map params, StringBuffer link, String paramSeparator) {
-        if ((params != null) && (params.size() > 0)) {
-            if (link.toString().indexOf("?") == -1) {
-                link.append("?");
-            } else {
-                link.append(paramSeparator);
-            }
-
-            // Set params
-            Iterator iter = params.entrySet().iterator();
-
-            String[] valueHolder = new String[1];
-
-            while (iter.hasNext()) {
-                Map.Entry entry = (Map.Entry) iter.next();
-                String name = (String) entry.getKey();
-                Object value = entry.getValue();
-
-                String[] values;
-
-                if (value instanceof String[]) {
-                    values = (String[]) value;
-                } else {
-                    valueHolder[0] = value.toString();
-                    values = valueHolder;
-                }
-
-                for (int i = 0; i < values.length; i++) {
-                    if (values[i] != null) {
-                        link.append(name);
-                        link.append('=');
-                        link.append(translateAndEncode(values[i]));
-                    }
-
-                    if (i < (values.length - 1)) {
-                        link.append(paramSeparator);
-                    }
-                }
-
-                if (iter.hasNext()) {
-                    link.append(paramSeparator);
-                }
-            }
-        }
-    }
-
-    /**
-     * Translates any script expressions using {@link com.opensymphony.xwork2.util.TextParseUtil#translateVariables} and
-     * encodes the URL using {@link java.net.URLEncoder#encode} with the encoding specified in the configuration.
-     *
-     * @param input
-     * @return the translated and encoded string
-     */
-    public static String translateAndEncode(String input) {
-        String translatedInput = translateVariable(input);
-        String encoding = getEncodingFromConfiguration();
-
-        try {
-            return URLEncoder.encode(translatedInput, encoding);
-        } catch (UnsupportedEncodingException e) {
-            LOG.warn("Could not encode URL parameter '" + input + "', returning value un-encoded");
-            return translatedInput;
-        }
-    }
-    
-    public static String translateAndDecode(String input) {
-    	String translatedInput = translateVariable(input);
-    	String encoding = getEncodingFromConfiguration();
-
-        try {
-            return URLDecoder.decode(translatedInput, encoding);
-        } catch (UnsupportedEncodingException e) {
-            LOG.warn("Could not encode URL parameter '" + input + "', returning value un-encoded");
-            return translatedInput;
-        }
-    }
-    
-    private static String translateVariable(String input) {
-    	ValueStack valueStack = ServletActionContext.getContext().getValueStack();
-        String output = TextParseUtil.translateVariables(input, valueStack);
-        return output;
-    }
-    
-    private static String getEncodingFromConfiguration() {
-    	final String encoding;
-        if (Settings.isSet(StrutsConstants.STRUTS_I18N_ENCODING)) {
-            encoding = Settings.get(StrutsConstants.STRUTS_I18N_ENCODING);
-        } else {
-            encoding = "UTF-8";
-        }
-        return encoding;
-    }
-    
-    public static Map parseQueryString(String queryString) {
-    	Map queryParams = new LinkedHashMap();
-    	if (queryString != null) {
-    		String[] params = queryString.split("&");
-    		for (int a=0; a< params.length; a++) {
-    			if (params[a].trim().length() > 0) {
-    				String[] tmpParams = params[a].split("=");
-    				String paramName = null;
-    				String paramValue = "";
-    				if (tmpParams.length > 0) {
-    					paramName = tmpParams[0];
-    				}
-    				if (tmpParams.length > 1) {
-    					paramValue = tmpParams[1];
-    				}
-    				if (paramName != null) {
-    					String translatedParamValue = translateAndDecode(paramValue);
-    					queryParams.put(paramName, translatedParamValue);
-    				}
-    			}
-    		}
-    	}
-    	return queryParams;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/util/package.html b/trunk/core/src/main/java/org/apache/struts2/views/util/package.html
deleted file mode 100644
index 27945fa..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/util/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Miscellaneous helper classes for all views.</body>
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java
deleted file mode 100644
index 59c9099..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity;
-
-import java.io.InputStream;
-
-import org.apache.struts2.util.ClassLoaderUtils;
-import org.apache.velocity.exception.ResourceNotFoundException;
-import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
-
-
-/**
- * Loads resource from the Thread's context ClassLoader.
- *
- */
-public class StrutsResourceLoader extends ClasspathResourceLoader {
-
-    public synchronized InputStream getResourceStream(String name) throws ResourceNotFoundException {
-        if ((name == null) || (name.length() == 0)) {
-            throw new ResourceNotFoundException("No template name provided");
-        }
-
-        if (name.startsWith("/")) {
-            name = name.substring(1);
-        }
-
-        try {
-            return ClassLoaderUtils.getResourceAsStream(name, StrutsResourceLoader.class);
-        } catch (Exception e) {
-            throw new ResourceNotFoundException(e.getMessage());
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
deleted file mode 100644
index e163c53..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity;
-
-import org.apache.velocity.VelocityContext;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- */
-public class StrutsVelocityContext extends VelocityContext {
-
-    private static final long serialVersionUID = 8497212428904436963L;
-    ValueStack stack;
-    VelocityContext[] chainedContexts;
-
-
-    public StrutsVelocityContext(ValueStack stack) {
-        this(null, stack);
-    }
-
-    public StrutsVelocityContext(VelocityContext[] chainedContexts, ValueStack stack) {
-        this.chainedContexts = chainedContexts;
-        this.stack = stack;
-    }
-
-
-    public boolean internalContainsKey(Object key) {
-        boolean contains = super.internalContainsKey(key);
-
-        // first let's check to see if we contain the requested key
-        if (contains) {
-            return true;
-        }
-
-        // if not, let's search for the key in the ognl value stack
-        if (stack != null) {
-            Object o = stack.findValue(key.toString());
-
-            if (o != null) {
-                return true;
-            }
-
-            o = stack.getContext().get(key.toString());
-            if (o != null) {
-                return true;
-            }
-        }
-
-        // if we still haven't found it, le's search through our chained contexts
-        if (chainedContexts != null) {
-            for (int index = 0; index < chainedContexts.length; index++) {
-                if (chainedContexts[index].containsKey(key)) {
-                    return true;
-                }
-            }
-        }
-
-        // nope, i guess it's really not here
-        return false;
-    }
-
-    public Object internalGet(String key) {
-        // first, let's check to see if have the requested value
-        if (super.internalContainsKey(key)) {
-            return super.internalGet(key);
-        }
-
-        // still no luck?  let's look against the value stack
-        if (stack != null) {
-            Object object = stack.findValue(key);
-
-            if (object != null) {
-                return object;
-            }
-
-            object = stack.getContext().get(key);
-            if (object != null) {
-                return object;
-            }
-
-        }
-
-        // finally, if we're chained to other contexts, let's look in them
-        if (chainedContexts != null) {
-            for (int index = 0; index < chainedContexts.length; index++) {
-                if (chainedContexts[index].containsKey(key)) {
-                    return chainedContexts[index].internalGet(key);
-                }
-            }
-        }
-
-        // nope, i guess it's really not here
-        return null;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityServlet.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityServlet.java
deleted file mode 100644
index 7107561..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityServlet.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.io.Writer;
-import java.util.Properties;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspFactory;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.struts2.RequestUtils;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.views.util.ContextUtil;
-import org.apache.velocity.Template;
-import org.apache.velocity.context.Context;
-import org.apache.velocity.exception.MethodInvocationException;
-import org.apache.velocity.exception.ParseErrorException;
-import org.apache.velocity.exception.ResourceNotFoundException;
-import org.apache.velocity.runtime.RuntimeSingleton;
-import org.apache.velocity.servlet.VelocityServlet;
-
-import com.opensymphony.xwork2.ActionContext;
-
-
-/**
- * @deprecated please use {@link org.apache.struts2.dispatcher.VelocityResult} instead of direct access
- */
-public class StrutsVelocityServlet extends VelocityServlet {
-    private static final long serialVersionUID = -2078492831396251182L;
-    private VelocityManager velocityManager;
-
-    public StrutsVelocityServlet() {
-        velocityManager = VelocityManager.getInstance();
-    }
-
-    public void init(ServletConfig servletConfig) throws ServletException {
-        super.init(servletConfig);
-
-        // initialize our VelocityManager
-        velocityManager.init(servletConfig.getServletContext());
-    }
-
-    protected Context createContext(HttpServletRequest request, HttpServletResponse response) {
-        return velocityManager.createContext(ActionContext.getContext().getValueStack(), request, response);
-    }
-
-    protected Template handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Context context) throws Exception {
-        String servletPath = (String) httpServletRequest.getAttribute("javax.servlet.include.servlet_path");
-
-        if (servletPath == null) {
-            servletPath = RequestUtils.getServletPath(httpServletRequest);
-        }
-
-        return getTemplate(servletPath, getEncoding());
-    }
-
-    /**
-     * This method extends the VelocityServlet's loadConfiguration method by performing the following actions:
-     * <ul>
-     * <li>invokes VelocityServlet.loadConfiguration to create a properties object</li>
-     * <li>alters the RESOURCE_LOADER to include a class loader</li>
-     * <li>configures the class loader using the StrutsResourceLoader</li>
-     * </ul>
-     *
-     * @param servletConfig
-     * @throws IOException
-     * @throws FileNotFoundException
-     * @see org.apache.velocity.servlet.VelocityServlet#loadConfiguration
-     */
-    protected Properties loadConfiguration(ServletConfig servletConfig) throws IOException, FileNotFoundException {
-        return velocityManager.loadConfiguration(servletConfig.getServletContext());
-    }
-
-    /**
-     * create a PageContext and render the template to PageContext.getOut()
-     *
-     * @see VelocityServlet#mergeTemplate(Template, Context, HttpServletResponse) for additional documentation
-     */
-    protected void mergeTemplate(Template template, Context context, HttpServletResponse response) throws ResourceNotFoundException, ParseErrorException, MethodInvocationException, IOException, UnsupportedEncodingException, Exception {
-        // save the old PageContext
-        PageContext oldPageContext = ServletActionContext.getPageContext();
-
-        // create a new PageContext
-        JspFactory jspFactory = JspFactory.getDefaultFactory();
-        HttpServletRequest request = (HttpServletRequest) context.get(ContextUtil.REQUEST);
-        PageContext pageContext = jspFactory.getPageContext(this, request, response, null, true, 8192, true);
-
-        // put the new PageContext into ActionContext
-        ActionContext actionContext = ActionContext.getContext();
-        actionContext.put(ServletActionContext.PAGE_CONTEXT, pageContext);
-
-        try {
-            Writer writer = pageContext.getOut();
-            template.merge(context, writer);
-            writer.flush();
-        } finally {
-            // perform cleanup
-            jspFactory.releasePageContext(pageContext);
-            actionContext.put(ServletActionContext.PAGE_CONTEXT, oldPageContext);
-        }
-    }
-
-    private String getEncoding() {
-        // todo look into converting this to using XWork/Struts encoding rules
-        try {
-            return Settings.get(StrutsConstants.STRUTS_I18N_ENCODING);
-        } catch (IllegalArgumentException e) {
-            return RuntimeSingleton.getString(RuntimeSingleton.OUTPUT_ENCODING, DEFAULT_OUTPUT_ENCODING);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
deleted file mode 100644
index 62477a8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
+++ /dev/null
@@ -1,672 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.util.VelocityStrutsUtil;
-import org.apache.struts2.views.jsp.ui.OgnlTool;
-import org.apache.struts2.views.util.ContextUtil;
-import org.apache.struts2.views.velocity.components.ActionDirective;
-import org.apache.struts2.views.velocity.components.ActionErrorDirective;
-import org.apache.struts2.views.velocity.components.ActionMessageDirective;
-import org.apache.struts2.views.velocity.components.AnchorDirective;
-import org.apache.struts2.views.velocity.components.BeanDirective;
-import org.apache.struts2.views.velocity.components.CheckBoxDirective;
-import org.apache.struts2.views.velocity.components.CheckBoxListDirective;
-import org.apache.struts2.views.velocity.components.ComboBoxDirective;
-import org.apache.struts2.views.velocity.components.ComponentDirective;
-import org.apache.struts2.views.velocity.components.DateDirective;
-import org.apache.struts2.views.velocity.components.DatePickerDirective;
-import org.apache.struts2.views.velocity.components.DivDirective;
-import org.apache.struts2.views.velocity.components.DoubleSelectDirective;
-import org.apache.struts2.views.velocity.components.FieldErrorDirective;
-import org.apache.struts2.views.velocity.components.FileDirective;
-import org.apache.struts2.views.velocity.components.FormDirective;
-import org.apache.struts2.views.velocity.components.HeadDirective;
-import org.apache.struts2.views.velocity.components.HiddenDirective;
-import org.apache.struts2.views.velocity.components.I18nDirective;
-import org.apache.struts2.views.velocity.components.IncludeDirective;
-import org.apache.struts2.views.velocity.components.LabelDirective;
-import org.apache.struts2.views.velocity.components.OptionTransferSelectDirective;
-import org.apache.struts2.views.velocity.components.PanelDirective;
-import org.apache.struts2.views.velocity.components.ParamDirective;
-import org.apache.struts2.views.velocity.components.PasswordDirective;
-import org.apache.struts2.views.velocity.components.PropertyDirective;
-import org.apache.struts2.views.velocity.components.PushDirective;
-import org.apache.struts2.views.velocity.components.RadioDirective;
-import org.apache.struts2.views.velocity.components.ResetDirective;
-import org.apache.struts2.views.velocity.components.SelectDirective;
-import org.apache.struts2.views.velocity.components.SetDirective;
-import org.apache.struts2.views.velocity.components.SubmitDirective;
-import org.apache.struts2.views.velocity.components.TabbedPanelDirective;
-import org.apache.struts2.views.velocity.components.TextAreaDirective;
-import org.apache.struts2.views.velocity.components.TextDirective;
-import org.apache.struts2.views.velocity.components.TextFieldDirective;
-import org.apache.struts2.views.velocity.components.TokenDirective;
-import org.apache.struts2.views.velocity.components.TreeDirective;
-import org.apache.struts2.views.velocity.components.TreeNodeDirective;
-import org.apache.struts2.views.velocity.components.URLDirective;
-import org.apache.struts2.views.velocity.components.UpDownSelectDirective;
-import org.apache.struts2.views.velocity.components.WebTableDirective;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.Velocity;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.context.Context;
-import org.apache.velocity.tools.view.ToolboxManager;
-import org.apache.velocity.tools.view.context.ChainedContext;
-import org.apache.velocity.tools.view.servlet.ServletToolboxManager;
-
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * Manages the environment for Velocity result types
- *
- */
-public class VelocityManager {
-    private static final Log log = LogFactory.getLog(VelocityManager.class);
-    private static VelocityManager instance;
-    public static final String STRUTS = "struts";
-
-    /**
-     * the parent JSP tag
-     */
-    public static final String PARENT = "parent";
-
-    /**
-     * the current JSP tag
-     */
-    public static final String TAG = "tag";
-
-    private VelocityEngine velocityEngine;
-
-    /**
-     * A reference to the toolbox manager.
-     */
-    protected ToolboxManager toolboxManager = null;
-    private String toolBoxLocation;
-
-
-    /**
-     * Names of contexts that will be chained on every request
-     */
-    private String[] chainedContextNames;
-    
-    private Properties velocityProperties;
-
-    protected VelocityManager() {
-        init();
-    }
-
-    /**
-     * retrieve an instance to the current VelocityManager
-     */
-    public synchronized static VelocityManager getInstance() {
-        if (instance == null) {
-            String classname = VelocityManager.class.getName();
-
-            if (Settings.isSet(StrutsConstants.STRUTS_VELOCITY_MANAGER_CLASSNAME)) {
-                classname = Settings.get(StrutsConstants.STRUTS_VELOCITY_MANAGER_CLASSNAME).trim();
-            }
-
-            if (!classname.equals(VelocityManager.class.getName())) {
-                try {
-                    log.info("Instantiating VelocityManager!, " + classname);
-                    // singleton instances shouldn't be built accessing request or session-specific context data
-                    instance = (VelocityManager) ObjectFactory.getObjectFactory().buildBean(classname, null);
-                } catch (Exception e) {
-                    log.fatal("Fatal exception occurred while trying to instantiate a VelocityManager instance, " + classname, e);
-                    instance = new VelocityManager();
-                }
-            } else {
-                instance = new VelocityManager();
-            }
-        }
-
-        return instance;
-    }
-
-    /**
-     * @return a reference to the VelocityEngine used by <b>all</b> struts velocity thingies with the exception of
-     *         directly accessed *.vm pages
-     */
-    public VelocityEngine getVelocityEngine() {
-        return velocityEngine;
-    }
-
-    /**
-     * This method is responsible for creating the standard VelocityContext used by all WW2 velocity views.  The
-     * following context parameters are defined:
-     * <p/>
-     * <ul>
-     * <li><strong>request</strong> - the current HttpServletRequest</li>
-     * <li><strong>response</strong> - the current HttpServletResponse</li>
-     * <li><strong>stack</strong> - the current {@link ValueStack}</li>
-     * <li><strong>ognl</strong> - an {@link OgnlTool}</li>
-     * <li><strong>struts</strong> - an instance of {@link org.apache.struts2.util.StrutsUtil}</li>
-     * <li><strong>action</strong> - the current Struts action</li>
-     * </ul>
-     *
-     * @return a new StrutsVelocityContext
-     */
-    public Context createContext(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        VelocityContext[] chainedContexts = prepareChainedContexts(req, res, stack.getContext());
-        StrutsVelocityContext context = new StrutsVelocityContext(chainedContexts, stack);
-        Map standardMap = ContextUtil.getStandardContext(stack, req, res);
-        for (Iterator iterator = standardMap.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            context.put((String) entry.getKey(), entry.getValue());
-        }
-        context.put(STRUTS, new VelocityStrutsUtil(context, stack, req, res));
-
-
-        ServletContext ctx = null;
-        try {
-            ctx = ServletActionContext.getServletContext();
-        } catch (NullPointerException npe) {
-            // in case this was used outside the lifecycle of struts servlet
-            log.debug("internal toolbox context ignored");
-        }
-
-        if (toolboxManager != null && ctx != null) {
-            ChainedContext chained = new ChainedContext(context, req, res, ctx);
-            chained.setToolbox(toolboxManager.getToolboxContext(chained));
-            return chained;
-        } else {
-            return context;
-        }
-
-    }
-
-    /**
-     * constructs contexts for chaining on this request.  This method does not
-     * perform any initialization of the contexts.  All that must be done in the
-     * context itself.
-     *
-     * @param servletRequest
-     * @param servletResponse
-     * @param extraContext
-     * @return an VelocityContext[] of contexts to chain
-     */
-    protected VelocityContext[] prepareChainedContexts(HttpServletRequest servletRequest, HttpServletResponse servletResponse, Map extraContext) {
-        if (this.chainedContextNames == null) {
-            return null;
-        }
-        List contextList = new ArrayList();
-        for (int i = 0; i < chainedContextNames.length; i++) {
-            String className = chainedContextNames[i];
-            try {
-                VelocityContext velocityContext = (VelocityContext) ObjectFactory.getObjectFactory().buildBean(className, null);
-                contextList.add(velocityContext);
-            } catch (Exception e) {
-                log.warn("Warning.  " + e.getClass().getName() + " caught while attempting to instantiate a chained VelocityContext, " + className + " -- skipping");
-            }
-        }
-        if (contextList.size() > 0) {
-            VelocityContext[] extraContexts = new VelocityContext[contextList.size()];
-            contextList.toArray(extraContexts);
-            return extraContexts;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * initializes the VelocityManager.  this should be called during the initialization process, say by
-     * ServletDispatcher.  this may be called multiple times safely although calls beyond the first won't do anything
-     *
-     * @param context the current servlet context
-     */
-    public synchronized void init(ServletContext context) {
-        if (velocityEngine == null) {
-            velocityEngine = newVelocityEngine(context);
-        }
-        this.initToolbox(context);
-    }
-
-    /**
-     * load optional velocity properties using the following loading strategy
-     * <ul>
-     * <li>relative to the servlet context path</li>
-     * <li>relative to the WEB-INF directory</li>
-     * <li>on the classpath</li>
-     * </ul>
-     *
-     * @param context the current ServletContext.  may <b>not</b> be null
-     * @return the optional properties if struts.velocity.configfile was specified, an empty Properties file otherwise
-     */
-    public Properties loadConfiguration(ServletContext context) {
-        if (context == null) {
-            String gripe = "Error attempting to create a loadConfiguration from a null ServletContext!";
-            log.error(gripe);
-            throw new IllegalArgumentException(gripe);
-        }
-
-        Properties properties = new Properties();
-
-        // now apply our systemic defaults, then allow user to override
-        applyDefaultConfiguration(context, properties);
-        
-
-        String defaultUserDirective = properties.getProperty("userdirective");
-
-        /**
-         * if the user has specified an external velocity configuration file, we'll want to search for it in the
-         * following order
-         *
-         * 1. relative to the context path
-         * 2. relative to /WEB-INF
-         * 3. in the class path
-         */
-        String configfile;
-
-        if (Settings.isSet(StrutsConstants.STRUTS_VELOCITY_CONFIGFILE)) {
-            configfile = Settings.get(StrutsConstants.STRUTS_VELOCITY_CONFIGFILE);
-        } else {
-            configfile = "velocity.properties";
-        }
-
-        configfile = configfile.trim();
-
-        InputStream in = null;
-        String resourceLocation = null;
-
-        try {
-            if (context.getRealPath(configfile) != null) {
-                // 1. relative to context path, i.e. /velocity.properties
-                String filename = context.getRealPath(configfile);
-
-                if (filename != null) {
-                    File file = new File(filename);
-
-                    if (file.isFile()) {
-                        resourceLocation = file.getCanonicalPath() + " from file system";
-                        in = new FileInputStream(file);
-                    }
-
-                    // 2. if nothing was found relative to the context path, search relative to the WEB-INF directory
-                    if (in == null) {
-                        file = new File(context.getRealPath("/WEB-INF/" + configfile));
-
-                        if (file.isFile()) {
-                            resourceLocation = file.getCanonicalPath() + " from file system";
-                            in = new FileInputStream(file);
-                        }
-                    }
-                }
-            }
-
-            // 3. finally, if there's no physical file, how about something in our classpath
-            if (in == null) {
-                in = VelocityManager.class.getClassLoader().getResourceAsStream(configfile);
-                if (in != null) {
-                    resourceLocation = configfile + " from classloader";
-                }
-            }
-
-            // if we've got something, load 'er up
-            if (in != null) {
-                log.info("Initializing velocity using " + resourceLocation);
-                properties.load(in);
-            }
-        } catch (IOException e) {
-            log.warn("Unable to load velocity configuration " + resourceLocation, e);
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException e) {
-                }
-            }
-        }
-        
-        // overide with programmatically set properties
-        if (this.velocityProperties != null) {
-        	Iterator keys = this.velocityProperties.keySet().iterator();
-        	while (keys.hasNext()) {
-        		String key = (String) keys.next();
-        		properties.setProperty(key, this.velocityProperties.getProperty(key));
-			}
-        }
-
-        String userdirective = properties.getProperty("userdirective");
-
-        if ((userdirective == null) || userdirective.trim().equals("")) {
-            userdirective = defaultUserDirective;
-        } else {
-            userdirective = userdirective.trim() + "," + defaultUserDirective;
-        }
-
-        properties.setProperty("userdirective", userdirective);
-
-        
-        // for debugging purposes, allows users to dump out the properties that have been configured
-        if (log.isDebugEnabled()) {
-            log.debug("Initializing Velocity with the following properties ...");
-
-            for (Iterator iter = properties.keySet().iterator();
-                 iter.hasNext();) {
-                String key = (String) iter.next();
-                String value = properties.getProperty(key);
-
-                if (log.isDebugEnabled()) {
-                    log.debug("    '" + key + "' = '" + value + "'");
-                }
-            }
-        }
-
-        return properties;
-    }
-
-    /**
-     * performs one-time initializations
-     */
-    protected void init() {
-
-        // read in the names of contexts to add to each request
-        initChainedContexts();
-
-
-        if (Settings.isSet(StrutsConstants.STRUTS_VELOCITY_TOOLBOXLOCATION)) {
-            toolBoxLocation = Settings.get(StrutsConstants.STRUTS_VELOCITY_TOOLBOXLOCATION).toString();
-        }
-
-    }
-
-
-    /**
-     * Initializes the ServletToolboxManager for this servlet's
-     * toolbox (if any).
-     */
-    protected void initToolbox(ServletContext context) {
-        /* if we have a toolbox, get a manager for it */
-        if (toolBoxLocation != null) {
-            toolboxManager = ServletToolboxManager.getInstance(context, toolBoxLocation);
-        } else {
-            Velocity.info("VelocityViewServlet: No toolbox entry in configuration.");
-        }
-    }
-
-
-    /**
-     * allow users to specify via the struts.properties file a set of additional VelocityContexts to chain to the
-     * the StrutsVelocityContext.  The intent is to allow these contexts to store helper objects that the ui
-     * developer may want access to.  Examples of reasonable VelocityContexts would be an IoCVelocityContext, a
-     * SpringReferenceVelocityContext, and a ToolboxVelocityContext
-     */
-    protected void initChainedContexts() {
-
-        if (Settings.isSet(StrutsConstants.STRUTS_VELOCITY_CONTEXTS)) {
-            // we expect contexts to be a comma separated list of classnames
-            String contexts = Settings.get(StrutsConstants.STRUTS_VELOCITY_CONTEXTS).toString();
-            StringTokenizer st = new StringTokenizer(contexts, ",");
-            List contextList = new ArrayList();
-
-            while (st.hasMoreTokens()) {
-                String classname = st.nextToken();
-                contextList.add(classname);
-            }
-            if (contextList.size() > 0) {
-                String[] chainedContexts = new String[contextList.size()];
-                contextList.toArray(chainedContexts);
-                this.chainedContextNames = chainedContexts;
-            }
-
-
-        }
-
-    }
-
-    /**
-     * <p/>
-     * Instantiates a new VelocityEngine.
-     * </p>
-     * <p/>
-     * The following is the default Velocity configuration
-     * </p>
-     * <pre>
-     *  resource.loader = file, class
-     *  file.resource.loader.path = real path of webapp
-     *  class.resource.loader.description = Velocity Classpath Resource Loader
-     *  class.resource.loader.class = org.apache.struts2.views.velocity.StrutsResourceLoader
-     * </pre>
-     * <p/>
-     * this default configuration can be overridden by specifying a struts.velocity.configfile property in the
-     * struts.properties file.  the specified config file will be searched for in the following order:
-     * </p>
-     * <ul>
-     * <li>relative to the servlet context path</li>
-     * <li>relative to the WEB-INF directory</li>
-     * <li>on the classpath</li>
-     * </ul>
-     *
-     * @param context the current ServletContext.  may <b>not</b> be null
-     */
-    protected VelocityEngine newVelocityEngine(ServletContext context) {
-        if (context == null) {
-            String gripe = "Error attempting to create a new VelocityEngine from a null ServletContext!";
-            log.error(gripe);
-            throw new IllegalArgumentException(gripe);
-        }
-
-        Properties p = loadConfiguration(context);
-
-        VelocityEngine velocityEngine = new VelocityEngine();
-        
-        //	Set the velocity attribute for the servlet context
-        //  if this is not set the webapp loader WILL NOT WORK
-        velocityEngine.setApplicationAttribute(ServletContext.class.getName(),
-                context);
-
-        try {
-            velocityEngine.init(p);
-        } catch (Exception e) {
-            String gripe = "Unable to instantiate VelocityEngine!";
-            throw new StrutsException(gripe, e);
-        }
-
-        return velocityEngine;
-    }
-
-    /**
-     * once we've loaded up the user defined configurations, we will want to apply Struts specification configurations.
-     * <ul>
-     * <li>if Velocity.RESOURCE_LOADER has not been defined, then we will use the defaults which is a joined file,
-     * class loader for unpackaed wars and a straight class loader otherwise</li>
-     * <li>we need to define the various Struts custom user directives such as #param, #tag, and #bodytag</li>
-     * </ul>
-     *
-     * @param context
-     * @param p
-     */
-    private void applyDefaultConfiguration(ServletContext context, Properties p) {
-        // ensure that caching isn't overly aggressive
-
-        /**
-         * Load a default resource loader definition if there isn't one present.
-         * Ben Hall (22/08/2003)
-         */
-        if (p.getProperty(Velocity.RESOURCE_LOADER) == null) {
-            p.setProperty(Velocity.RESOURCE_LOADER, "strutsfile, strutsclass");
-        }
-
-        /**
-         * If there's a "real" path add it for the strutsfile resource loader.
-         * If there's no real path and they haven't configured a loader then we change
-         * resource loader property to just use the strutsclass loader
-         * Ben Hall (22/08/2003)
-         */
-        if (context.getRealPath("") != null) {
-            p.setProperty("strutsfile.resource.loader.description", "Velocity File Resource Loader");
-            p.setProperty("strutsfile.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
-            p.setProperty("strutsfile.resource.loader.path", context.getRealPath(""));
-            p.setProperty("strutsfile.resource.loader.modificationCheckInterval", "2");
-            p.setProperty("strutsfile.resource.loader.cache", "true");
-        } else {
-            // remove strutsfile from resource loader property
-            String prop = p.getProperty(Velocity.RESOURCE_LOADER);
-            if (prop.indexOf("strutsfile,") != -1) {
-                prop = replace(prop, "strutsfile,", "");
-            } else if (prop.indexOf(", strutsfile") != -1) {
-                prop = replace(prop, ", strutsfile", "");
-            } else if (prop.indexOf("strutsfile") != -1) {
-                prop = replace(prop, "strutsfile", "");
-            }
-
-            p.setProperty(Velocity.RESOURCE_LOADER, prop);
-        }
-
-        /**
-         * Refactored the Velocity templates for the Struts taglib into the classpath from the web path.  This will
-         * enable Struts projects to have access to the templates by simply including the Struts jar file.
-         * Unfortunately, there does not appear to be a macro for the class loader keywords
-         * Matt Ho - Mon Mar 17 00:21:46 PST 2003
-         */
-        p.setProperty("strutsclass.resource.loader.description", "Velocity Classpath Resource Loader");
-        p.setProperty("strutsclass.resource.loader.class", "org.apache.struts2.views.velocity.StrutsResourceLoader");
-        p.setProperty("strutsclass.resource.loader.modificationCheckInterval", "2");
-        p.setProperty("strutsclass.resource.loader.cache", "true");
-
-        // components
-        StringBuffer sb = new StringBuffer();
-
-        addDirective(sb, ActionDirective.class);
-        addDirective(sb, BeanDirective.class);
-        addDirective(sb, CheckBoxDirective.class);
-        addDirective(sb, CheckBoxListDirective.class);
-        addDirective(sb, ComboBoxDirective.class);
-        addDirective(sb, ComponentDirective.class);
-        addDirective(sb, DateDirective.class);
-        addDirective(sb, DatePickerDirective.class);
-        addDirective(sb, DivDirective.class);
-        addDirective(sb, DoubleSelectDirective.class);
-        addDirective(sb, FileDirective.class);
-        addDirective(sb, FormDirective.class);
-        addDirective(sb, HeadDirective.class);
-        addDirective(sb, HiddenDirective.class);
-        addDirective(sb, AnchorDirective.class);
-        addDirective(sb, I18nDirective.class);
-        addDirective(sb, IncludeDirective.class);
-        addDirective(sb, LabelDirective.class);
-        addDirective(sb, PanelDirective.class);
-        addDirective(sb, ParamDirective.class);
-        addDirective(sb, PasswordDirective.class);
-        addDirective(sb, PushDirective.class);
-        addDirective(sb, PropertyDirective.class);
-        addDirective(sb, RadioDirective.class);
-        addDirective(sb, SelectDirective.class);
-        addDirective(sb, SetDirective.class);
-        addDirective(sb, SubmitDirective.class);
-        addDirective(sb, ResetDirective.class);
-        addDirective(sb, TabbedPanelDirective.class);
-        addDirective(sb, TextAreaDirective.class);
-        addDirective(sb, TextDirective.class);
-        addDirective(sb, TextFieldDirective.class);
-        addDirective(sb, TokenDirective.class);
-        addDirective(sb, TreeDirective.class);
-        addDirective(sb, TreeNodeDirective.class);
-        addDirective(sb, URLDirective.class);
-        addDirective(sb, WebTableDirective.class);
-        addDirective(sb, ActionErrorDirective.class);
-        addDirective(sb, ActionMessageDirective.class);
-        addDirective(sb, FieldErrorDirective.class);
-        addDirective(sb, OptionTransferSelectDirective.class);
-        addDirective(sb, UpDownSelectDirective.class);
-
-        String directives = sb.toString();
-
-        String userdirective = p.getProperty("userdirective");
-        if ((userdirective == null) || userdirective.trim().equals("")) {
-            userdirective = directives;
-        } else {
-            userdirective = userdirective.trim() + "," + directives;
-        }
-
-        p.setProperty("userdirective", userdirective);
-    }
-
-    private void addDirective(StringBuffer sb, Class clazz) {
-        sb.append(clazz.getName()).append(",");
-    }
-
-    private static final String replace(String string, String oldString, String newString) {
-        if (string == null) {
-            return null;
-        }
-        // If the newString is null, just return the string since there's nothing to replace.
-        if (newString == null) {
-            return string;
-        }
-        int i = 0;
-        // Make sure that oldString appears at least once before doing any processing.
-        if ((i = string.indexOf(oldString, i)) >= 0) {
-            // Use char []'s, as they are more efficient to deal with.
-            char[] string2 = string.toCharArray();
-            char[] newString2 = newString.toCharArray();
-            int oLength = oldString.length();
-            StringBuffer buf = new StringBuffer(string2.length);
-            buf.append(string2, 0, i).append(newString2);
-            i += oLength;
-            int j = i;
-            // Replace all remaining instances of oldString with newString.
-            while ((i = string.indexOf(oldString, i)) > 0) {
-                buf.append(string2, j, i - j).append(newString2);
-                i += oLength;
-                j = i;
-            }
-            buf.append(string2, j, string2.length - j);
-            return buf.toString();
-        }
-        return string;
-    }
-
-	/**
-	 * @return the velocityProperties
-	 */
-	public Properties getVelocityProperties() {
-		return velocityProperties;
-	}
-
-	/**
-	 * @param velocityProperties the velocityProperties to set
-	 */
-	public void setVelocityProperties(Properties velocityProperties) {
-		this.velocityProperties = velocityProperties;
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java
deleted file mode 100644
index 633e002..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.components.Component;
-import org.apache.velocity.context.InternalContextAdapter;
-import org.apache.velocity.exception.MethodInvocationException;
-import org.apache.velocity.exception.ParseErrorException;
-import org.apache.velocity.exception.ResourceNotFoundException;
-import org.apache.velocity.runtime.directive.Directive;
-import org.apache.velocity.runtime.parser.node.Node;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-public abstract class AbstractDirective extends Directive {
-    public String getName() {
-        return "s" + getBeanName();
-    }
-
-    public abstract String getBeanName();
-
-    /**
-     * All components, unless otherwise stated, are LINE-level directives.
-     */
-    public int getType() {
-        return LINE;
-    }
-
-    protected abstract Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res);
-
-    public boolean render(InternalContextAdapter ctx, Writer writer, Node node) throws IOException, ResourceNotFoundException, ParseErrorException, MethodInvocationException {
-        // get the bean
-        ValueStack stack = (ValueStack) ctx.get("stack");
-        HttpServletRequest req = (HttpServletRequest) stack.getContext().get(ServletActionContext.HTTP_REQUEST);
-        HttpServletResponse res = (HttpServletResponse) stack.getContext().get(ServletActionContext.HTTP_RESPONSE);
-        Component bean = getBean(stack, req, res);
-
-        // get the parameters
-        Map params = createPropertyMap(ctx, node);
-        bean.copyParams(params);
-        //bean.addAllParameters(params);
-        bean.start(writer);
-
-        if (getType() == BLOCK) {
-            Node body = node.jjtGetChild(node.jjtGetNumChildren() - 1);
-            body.render(ctx, writer);
-        }
-
-        bean.end(writer, "");
-        return true;
-    }
-
-    /**
-     * create a Map of properties that the user has passed in.  for example,
-     * <pre>
-     * #xxx("name=hello" "value=world" "template=foo")
-     * </pre>
-     * would yield a params that contains {["name", "hello"], ["value", "world"], ["template", "foo"]}
-     *
-     * @param node the Node passed in to the render method
-     * @return a Map of the user specified properties
-     * @throws org.apache.velocity.exception.ParseErrorException
-     *          if the was an error in the format of the property
-     */
-    protected Map createPropertyMap(InternalContextAdapter contextAdapter, Node node) throws ParseErrorException, MethodInvocationException {
-        Map propertyMap = new HashMap();
-
-        int children = node.jjtGetNumChildren();
-        if (getType() == BLOCK) {
-            children--;
-        }
-
-        for (int index = 0, length = children; index < length; index++) {
-            this.putProperty(propertyMap, contextAdapter, node.jjtGetChild(index));
-        }
-
-        return propertyMap;
-    }
-
-    /**
-     * adds a given Node's key/value pair to the propertyMap.  For example, if this Node contained the value "rows=20",
-     * then the key, rows, would be added to the propertyMap with the String value, 20.
-     *
-     * @param propertyMap a params containing all the properties that we wish to set
-     * @param node        the parameter to set expressed in "name=value" format
-     */
-    protected void putProperty(Map propertyMap, InternalContextAdapter contextAdapter, Node node) throws ParseErrorException, MethodInvocationException {
-        // node.value uses the StrutsValueStack to evaluate the directive's value parameter
-        String param = node.value(contextAdapter).toString();
-
-        int idx = param.indexOf("=");
-
-        if (idx != -1) {
-            String property = param.substring(0, idx);
-
-            String value = param.substring(idx + 1);
-            propertyMap.put(property, value);
-        } else {
-            throw new ParseErrorException("#" + this.getName() + " arguments must include an assignment operator!  For example #tag( Component \"template=mytemplate\" ).  #tag( TextField \"mytemplate\" ) is illegal!");
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java
deleted file mode 100644
index a0b4eb1..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ActionComponent;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ActionComponent
- */
-public class ActionDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "action";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new ActionComponent(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java
deleted file mode 100644
index 435e1c8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ActionError;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ActionError
- */
-public class ActionErrorDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "actionerror";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new ActionError(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java
deleted file mode 100644
index 0e56e74..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ActionMessage;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ActionMessage
- */
-public class ActionMessageDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "actionmessage";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new ActionMessage(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java
deleted file mode 100644
index fbf9db2..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Anchor;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Anchor
- */
-public class AnchorDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "a";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Anchor(stack, req, res);
-    }
-
-    public int getType() {
-        return BLOCK;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java
deleted file mode 100644
index 38ca4bd..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Bean;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Bean
- */
-public class BeanDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "bean";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Bean(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java
deleted file mode 100644
index 664857b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Checkbox;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Checkbox
- */
-public class CheckBoxDirective extends AbstractDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Checkbox(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "checkbox";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java
deleted file mode 100644
index 1fb6fb8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.CheckboxList;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see CheckboxList
- */
-public class CheckBoxListDirective extends AbstractDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new CheckboxList(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "checkboxlist";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java
deleted file mode 100644
index 124c413..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.ComboBox;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see ComboBox
- */
-public class ComboBoxDirective extends AbstractDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new ComboBox(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "combobox";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java
deleted file mode 100644
index 3d295d7..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.GenericUIBean;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see GenericUIBean
- */
-public class ComponentDirective extends AbstractDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new GenericUIBean(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "component";
-    }
-
-    public int getType() {
-        return BLOCK;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java
deleted file mode 100644
index 28ac708..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Date;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <code>DateDirective</code>
- */
-public class DateDirective extends AbstractDirective {
-
-    public String getBeanName() {
-        return "date";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Date(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DatePickerDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DatePickerDirective.java
deleted file mode 100644
index 77aa7e2..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DatePickerDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.DatePicker;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see DatePicker
- */
-public class DatePickerDirective extends TextFieldDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new DatePicker(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "datepicker";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DivDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DivDirective.java
deleted file mode 100644
index 0a8da49..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DivDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Div;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Div
- */
-public class DivDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "div";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Div(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java
deleted file mode 100644
index 29015be..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.DoubleSelect;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see DoubleSelect
- */
-public class DoubleSelectDirective extends AbstractDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new DoubleSelect(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "doubleselect";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java
deleted file mode 100644
index 799f1a8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.FieldError;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see FieldError
- */
-public class FieldErrorDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "fielderror";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new FieldError(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java
deleted file mode 100644
index b4b7f0b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.File;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see File
- */
-public class FileDirective extends AbstractDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new File(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "file";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java
deleted file mode 100644
index 60361a7..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Form;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Form
- */
-public class FormDirective extends AbstractDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Form(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "form";
-    }
-
-    public int getType() {
-        return BLOCK;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java
deleted file mode 100644
index 974d264..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Head;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Head
- */
-public class HeadDirective extends AbstractDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Head(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "head";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java
deleted file mode 100644
index dd4a946..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Hidden;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Hidden
- */
-public class HiddenDirective extends AbstractDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Hidden(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "hidden";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java
deleted file mode 100644
index 922508f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.I18n;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see I18n
- */
-public class I18nDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "i18n";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new I18n(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java
deleted file mode 100644
index 3219a0a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Include;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Include
- */
-public class IncludeDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "include";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Include(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java
deleted file mode 100644
index 20c5665..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Label;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Label
- */
-public class LabelDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "label";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Label(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java
deleted file mode 100644
index 36b4dae..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.OptGroup;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * OptGroup velocity directive.
- */
-public class OptGroupDirective extends AbstractDirective {
-
-	protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new OptGroup(stack, req, res);
-	}
-
-	public String getBeanName() {
-		return "optgroup";
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java
deleted file mode 100644
index 0ac1745..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.OptionTransferSelect;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see OptionTransferSelect
- */
-public class OptionTransferSelectDirective extends AbstractDirective {
-
-	public String getBeanName() {
-		return "optiontransferselect";
-	}
-
-	protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new OptionTransferSelect(stack, req, res);
-	}
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PanelDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PanelDirective.java
deleted file mode 100644
index f62239f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PanelDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Panel;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Panel
- */
-public class PanelDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "panel";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Panel(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java
deleted file mode 100644
index 7c0ef6d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Param;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Param
- */
-public class ParamDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "param";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Param(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java
deleted file mode 100644
index d9b396c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Password;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Password
- */
-public class PasswordDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "password";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Password(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java
deleted file mode 100644
index 3291338..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Property;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- */
-public class PropertyDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "property";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Property(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java
deleted file mode 100644
index 91d5339..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Push;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Push
- */
-public class PushDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "push";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Push(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java
deleted file mode 100644
index 14289cd..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Radio;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Radio
- */
-public class RadioDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "radio";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Radio(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java
deleted file mode 100644
index 73e62fa..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Reset;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see org.apache.struts2.components.Reset
- */
-public class ResetDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "reset";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Reset(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java
deleted file mode 100644
index cd57a2c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Select;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Select
- */
-public class SelectDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "select";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Select(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java
deleted file mode 100644
index 2e9ce67..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Set;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Set
- */
-public class SetDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "set";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Set(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java
deleted file mode 100644
index 40b99c5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Submit;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Submit
- */
-public class SubmitDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "submit";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Submit(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TabbedPanelDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TabbedPanelDirective.java
deleted file mode 100644
index 9a256a4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TabbedPanelDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TabbedPanel;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see TabbedPanel
- */
-public class TabbedPanelDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "tabbedpanel";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new TabbedPanel(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java
deleted file mode 100644
index 8315da5..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TextArea;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see TextArea
- */
-public class TextAreaDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "textarea";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new TextArea(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java
deleted file mode 100644
index a3def01..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Text;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Text
- */
-public class TextDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "text";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Text(stack);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java
deleted file mode 100644
index d1dcb02..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TextField;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see TextField
- */
-public class TextFieldDirective extends AbstractDirective {
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new TextField(stack, req, res);
-    }
-
-    public String getBeanName() {
-        return "textfield";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java
deleted file mode 100644
index 0002eec..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Token;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see Token
- */
-public class TokenDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "token";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Token(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TreeDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TreeDirective.java
deleted file mode 100644
index bdcfb1e..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TreeDirective.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.Tree;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <code>TreeDirective</code>
- * @see Tree
- */
-public class TreeDirective  extends AbstractDirective {
-    public String getBeanName() {
-        return "tree";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new Tree(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TreeNodeDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TreeNodeDirective.java
deleted file mode 100644
index 3f6392c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/TreeNodeDirective.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.TreeNode;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <code>TreeNodeDirective</code>
- * @see TreeNode
- */
-public class TreeNodeDirective  extends AbstractDirective {
-    public String getBeanName() {
-        return "treenode";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new TreeNode(stack, req, res);
-    }
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java
deleted file mode 100644
index bed53d8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.URL;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see URL
- */
-public class URLDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "url";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new URL(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java
deleted file mode 100644
index d5cb969..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.UpDownSelect;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see UpDownSelect
- * 
- */
-public class UpDownSelectDirective extends AbstractDirective {
-
-	public String getBeanName() {
-		return "updownselect";
-	}
-
-	protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-		return new UpDownSelect(stack, req, res);
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/WebTableDirective.java b/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/WebTableDirective.java
deleted file mode 100644
index e9570f4..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/WebTableDirective.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.velocity.components;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.components.Component;
-import org.apache.struts2.components.table.WebTable;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * @see WebTable
- */
-public class WebTableDirective extends AbstractDirective {
-    public String getBeanName() {
-        return "table";
-    }
-
-    protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
-        return new WebTable(stack, req, res);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/velocity/package.html b/trunk/core/src/main/java/org/apache/struts2/views/velocity/package.html
deleted file mode 100644
index 82188fd..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/velocity/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Classes for views using Velocity.</body>
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterElement.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterElement.java
deleted file mode 100644
index 5e5ed16..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterElement.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.TypeInfo;
-
-/**
- * AbstractAdapterElement extends the abstract Node type and implements
- * the DOM Element interface.
- */
-public abstract class AbstractAdapterElement extends AbstractAdapterNode implements Element {
-
-    private Map attributeAdapters;
-
-    public AbstractAdapterElement() { }
-
-    public void setAttribute(String string, String string1) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    protected Map getAttributeAdapters() {
-        if ( attributeAdapters == null )
-            attributeAdapters = buildAttributeAdapters();
-        return attributeAdapters;
-    }
-
-    protected Map buildAttributeAdapters() {
-        return new HashMap();
-    }
-
-    /**
-     * No attributes, return empty attributes if asked.
-     */
-    public String getAttribute(String string) {
-        return "";
-    }
-
-    public void setAttributeNS(String string, String string1, String string2) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public String getAttributeNS(String string, String string1) {
-        return null;
-    }
-
-    public Attr setAttributeNode(Attr attr) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public Attr getAttributeNode( String name ) {
-        return (Attr)getAttributes().getNamedItem( name );
-    }
-
-    public Attr setAttributeNodeNS(Attr attr) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public Attr getAttributeNodeNS(String string, String string1) {
-        throw operationNotSupported();
-    }
-
-    public String getNodeName() {
-        return getTagName();
-    }
-
-    public short getNodeType() {
-        return Node.ELEMENT_NODE;
-    }
-
-    public String getTagName() {
-        return getPropertyName();
-    }
-
-    public boolean hasAttribute(String string) {
-        return false;
-    }
-
-    public boolean hasAttributeNS(String string, String string1) {
-        return false;
-    }
-
-    public boolean hasChildNodes() {
-        return getElementsByTagName("*").getLength() > 0;
-    }
-
-    public void removeAttribute(String string) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public void removeAttributeNS(String string, String string1) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public Attr removeAttributeNode(Attr attr) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public void setIdAttributeNode(Attr attr, boolean b) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public TypeInfo getSchemaTypeInfo() {
-        throw operationNotSupported();
-    }
-
-    public void setIdAttribute(String string, boolean b) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public void setIdAttributeNS(String string, String string1, boolean b) throws DOMException {
-        throw operationNotSupported();
-    }
-
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterNode.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterNode.java
deleted file mode 100644
index 5ce4f3c..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterNode.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsException;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.UserDataHandler;
-
-/**
- * AbstractAdapterNode is the base for childAdapters that expose a read-only view
- * of a Java object as a DOM Node.  This class implements the core parent-child
- * and sibling node traversal functionality shared by all adapter type nodes
- * and used in proxy node support.
- *
- * @see AbstractAdapterElement
- */
-public abstract class AbstractAdapterNode implements AdapterNode {
-
-    private static final NamedNodeMap EMPTY_NAMEDNODEMAP =
-            new NamedNodeMap() {
-                public int getLength() {
-                    return 0;
-                }
-
-                public Node item(int index) {
-                    return null;
-                }
-
-                public Node getNamedItem(String name) {
-                    return null;
-                }
-
-                public Node removeNamedItem(String name) throws DOMException {
-                    return null;
-                }
-
-                public Node setNamedItem(Node arg) throws DOMException {
-                    return null;
-                }
-
-                public Node setNamedItemNS(Node arg) throws DOMException {
-                    return null;
-                }
-
-                public Node getNamedItemNS(String namespaceURI, String localName) {
-                    return null;
-                }
-
-                public Node removeNamedItemNS(String namespaceURI, String localName) throws DOMException {
-                    return null;
-                }
-            };
-
-    private List<Node> childAdapters;
-    private Log log = LogFactory.getLog(this.getClass());
-
-    // The domain object that we are adapting
-    private Object propertyValue;
-    private String propertyName;
-    private AdapterNode parent;
-    private AdapterFactory adapterFactory;
-
-
-    public AbstractAdapterNode() {
-        if (LogFactory.getLog(getClass()).isDebugEnabled()) {
-            LogFactory.getLog(getClass()).debug("Creating " + this);
-        }
-    }
-
-    /**
-     *
-     * @param adapterFactory
-     * @param parent
-     * @param propertyName
-     * @param value
-     */
-    protected void setContext(AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Object value) {
-        setAdapterFactory(adapterFactory);
-        setParent(parent);
-        setPropertyName(propertyName);
-        setPropertyValue(value);
-    }
-
-    /**
-     * subclasses override to produce their children
-     *
-     * @return List of child adapters.
-     */
-    protected List<Node> buildChildAdapters() {
-        return new ArrayList<Node>();
-    }
-
-    /**
-     * Lazily initialize child childAdapters
-     */
-    protected List<Node> getChildAdapters() {
-        if (childAdapters == null) {
-            childAdapters = buildChildAdapters();
-        }
-        return childAdapters;
-    }
-
-    public Node getChildBeforeOrAfter(Node child, boolean before) {
-        log.debug("getChildBeforeOrAfter: ");
-        List adapters = getChildAdapters();
-        log.debug("childAdapters = " + adapters);
-        log.debug("child = " + child);
-        int index = adapters.indexOf(child);
-        if (index < 0)
-            throw new StrutsException(child + " is no child of " + this);
-        int siblingIndex = before ? index - 1 : index + 1;
-        return ((0 < siblingIndex) && (siblingIndex < adapters.size())) ?
-                ((Node) adapters.get(siblingIndex)) : null;
-    }
-
-    public Node getChildAfter(Node child) {
-        log.trace("getChildafter");
-        return getChildBeforeOrAfter(child, false/*after*/);
-    }
-
-    public Node getChildBefore(Node child) {
-        log.trace("getchildbefore");
-        return getChildBeforeOrAfter(child, true/*after*/);
-    }
-
-    public NodeList getElementsByTagName(String tagName) {
-        if (tagName.equals("*")) {
-            return getChildNodes();
-        } else {
-            LinkedList<Node> filteredChildren = new LinkedList<Node>();
-
-            for (Node adapterNode : getChildAdapters()) {
-                if (adapterNode.getNodeName().equals(tagName)) {
-                    filteredChildren.add(adapterNode);
-                }
-            }
-
-            return new SimpleNodeList(filteredChildren);
-        }
-    }
-
-    public NodeList getElementsByTagNameNS(String string, String string1) {
-        // TODO:
-        return null;
-    }
-
-    // Begin Node methods
-
-    public NamedNodeMap getAttributes() {
-        return EMPTY_NAMEDNODEMAP;
-    }
-
-    public NodeList getChildNodes() {
-        NodeList nl = new SimpleNodeList(getChildAdapters());
-        if (log.isDebugEnabled())
-            log.debug("getChildNodes for tag: "
-                    + getNodeName() + " num children: " + nl.getLength());
-        return nl;
-    }
-
-    public Node getFirstChild() {
-        return (getChildNodes().getLength() > 0) ? getChildNodes().item(0) : null;
-    }
-
-    public Node getLastChild() {
-        return (getChildNodes().getLength() > 0) ? getChildNodes().item(getChildNodes().getLength() - 1) : null;
-    }
-
-
-    public String getLocalName() {
-        return null;
-    }
-
-    public String getNamespaceURI() {
-        return null;
-    }
-
-    public void setNodeValue(String string) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public String getNodeValue() throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public Document getOwnerDocument() {
-        return null;
-    }
-
-    public Node getParentNode() {
-        log.trace("getParentNode");
-        return getParent();
-    }
-
-    public AdapterNode getParent() {
-        return parent;
-    }
-
-    public void setParent(AdapterNode parent) {
-        this.parent = parent;
-    }
-
-    public Object getPropertyValue() {
-        return propertyValue;
-    }
-
-    public void setPropertyValue(Object prop) {
-        this.propertyValue = prop;
-    }
-
-    public void setPrefix(String string) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public String getPrefix() {
-        return null;
-    }
-
-    public Node getNextSibling() {
-        Node next = getParent().getChildAfter(this);
-        if (log.isTraceEnabled()) {
-            log.trace("getNextSibling on " + getNodeName() + ": "
-                    + ((next == null) ? "null" : next.getNodeName()));
-        }
-
-        return getParent().getChildAfter(this);
-    }
-
-    public Node getPreviousSibling() {
-        return getParent().getChildBefore(this);
-    }
-
-    public String getPropertyName() {
-        return propertyName;
-    }
-
-    public void setPropertyName(String name) {
-        this.propertyName = name;
-    }
-
-    public AdapterFactory getAdapterFactory() {
-        return adapterFactory;
-    }
-
-    public void setAdapterFactory(AdapterFactory adapterFactory) {
-        this.adapterFactory = adapterFactory;
-    }
-
-    public boolean isSupported(String string, String string1) {
-        throw operationNotSupported();
-    }
-
-    public Node appendChild(Node node) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public Node cloneNode(boolean b) {
-        log.trace("cloneNode");
-        throw operationNotSupported();
-    }
-
-    public boolean hasAttributes() {
-        return false;
-    }
-
-    public boolean hasChildNodes() {
-        return false;
-    }
-
-    public Node insertBefore(Node node, Node node1) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public void normalize() {
-        log.trace("normalize");
-        throw operationNotSupported();
-    }
-
-    public Node removeChild(Node node) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public Node replaceChild(Node node, Node node1) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    // Begin DOM 3 methods
-
-    public boolean isDefaultNamespace(String string) {
-        throw operationNotSupported();
-    }
-
-    public String lookupNamespaceURI(String string) {
-        throw operationNotSupported();
-    }
-
-    public String getNodeName() {
-        throw operationNotSupported();
-    }
-
-    public short getNodeType() {
-        throw operationNotSupported();
-    }
-
-    public String getBaseURI() {
-        throw operationNotSupported();
-    }
-
-    public short compareDocumentPosition(Node node) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public String getTextContent() throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public void setTextContent(String string) throws DOMException {
-        throw operationNotSupported();
-
-    }
-
-    public boolean isSameNode(Node node) {
-        throw operationNotSupported();
-    }
-
-    public String lookupPrefix(String string) {
-        throw operationNotSupported();
-    }
-
-    public boolean isEqualNode(Node node) {
-        throw operationNotSupported();
-    }
-
-    public Object getFeature(String string, String string1) {
-        throw operationNotSupported();
-    }
-
-    public Object setUserData(String string, Object object, UserDataHandler userDataHandler) {
-        throw operationNotSupported();
-    }
-
-    public Object getUserData(String string) {
-        throw operationNotSupported();
-    }
-
-    // End node methods
-
-    protected StrutsException operationNotSupported() {
-        return new StrutsException("Operation not supported.");
-    }
-
-    public String toString() {
-        return getClass() + ": " + getNodeName() + " parent=" + getParentNode();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/AdapterFactory.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/AdapterFactory.java
deleted file mode 100644
index f3cb037..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/AdapterFactory.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.StrutsException;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-
-/**
- * AdapterFactory produces Node adapters for Java object types.
- * Adapter classes are generally instantiated dynamically via a no-args constructor
- * and populated with their context information via the AdapterNode interface.
- *
- * This factory supports proxying of generic DOM Node trees, allowing arbitrary
- * Node types to be mixed together.  You may simply return a Document or Node
- * type as an object property and it will appear as a sub-tree in the XML as
- * you'd expect. See #proxyNode().
- *
- * Customization of the result XML can be accomplished by providing
- * alternate adapters for Java types.  Adapters are associated with Java
- * types through the registerAdapterType() method.
- *
- * For example, since there is no default Date adapter, Date objects will be
- * rendered with the generic Bean introspecting adapter, producing output
- * like:
- * <pre>
-     <date>
-        <date>19</date>
-        <day>1</day>
-        <hours>0</hours>
-        <minutes>7</minutes>
-        <month>8</month>
-        <seconds>4</seconds>
-        <time>1127106424531</time>
-        <timezoneOffset>300</timezoneOffset>
-        <year>105</year>
-    </date>
- * </pre>
- *
- * By extending the StringAdapter and overriding its normal behavior we can
- * create a custom Date formatter:
- *
- * <pre>
-      public static class CustomDateAdapter extends StringAdapter {
-        protected String getStringValue() {
-            Date date = (Date)getPropertyValue();
-            return DateFormat.getTimeInstance( DateFormat.FULL ).format( date );
-        }
-    }
- * </pre>
- *
- * Producing output like:
- *
-<pre>
-     <date>12:02:54 AM CDT</date>
- </pre>
- *
- * The StringAdapter (which is normally invoked only to adapt String values)
- * is a useful base for these kinds of customizations and can produce
- * structured XML output as well as plain text by setting its parseStringAsXML()
- * property to true.
- *
- * See provided examples.
- */
-public class AdapterFactory {
-
-    /**
-     * Map<Class, Class<AdapterNode>>
-     */
-    private Map<Class, Class> adapterTypes = new HashMap<Class, Class>();
-
-    /**
-     * Register an adapter type for a Java class type.
-     *
-     * @param type        the Java class type which is to be handled by the adapter.
-     * @param adapterType The adapter class, which implements AdapterNode.
-     */
-    public void registerAdapterType(Class type, Class adapterType) {
-        adapterTypes.put(type, adapterType);
-    }
-
-    /**
-     * Create a top level Document adapter for the specified Java object.
-     * The document will have a root element with the specified property name
-     * and contain the specified Java object content.
-     *
-     * @param propertyName The name of the root document element
-     * @return
-     * @throws IllegalAccessException
-     * @throws InstantiationException
-     */
-    public Document adaptDocument(String propertyName, Object propertyValue)
-            throws IllegalAccessException, InstantiationException {
-        //if ( propertyValue instanceof Document )
-        //	return (Document)propertyValue;
-
-        return new SimpleAdapterDocument(this, null, propertyName, propertyValue);
-    }
-
-
-    /**
-     * Create an Node adapter for a child element.
-     * Note that the parent of the created node must be an AdapterNode, however
-     * the child node itself may be any type of Node.
-     *
-     * @see #adaptDocument( String, Object )
-     */
-    public Node adaptNode(AdapterNode parent, String propertyName, Object value) {
-        Class adapterClass = getAdapterForValue(value);
-        if (adapterClass != null)
-            return constructAdapterInstance(adapterClass, parent, propertyName, value);
-
-        // If the property is a Document, "unwrap" it to the root element
-        if (value instanceof Document)
-            value = ((Document) value).getDocumentElement();
-
-        // If the property is already a Node, proxy it
-        if (value instanceof Node)
-            return proxyNode(parent, (Node) value);
-
-        // Check other supported types or default to generic JavaBean introspecting adapter
-        Class valueType = value.getClass();
-
-        if (valueType.isArray())
-            adapterClass = ArrayAdapter.class;
-        else if (value instanceof String || value instanceof Number || valueType.isPrimitive())
-            adapterClass = StringAdapter.class;
-        else if (value instanceof Collection)
-            adapterClass = CollectionAdapter.class;
-        else if (value instanceof Map)
-            adapterClass = MapAdapter.class;
-        else
-            adapterClass = BeanAdapter.class;
-
-        return constructAdapterInstance(adapterClass, parent, propertyName, value);
-    }
-
-    /**
-     * Construct a proxy adapter for a value that is an existing DOM Node.
-     * This allows arbitrary DOM Node trees to be mixed in with our results.
-     * The proxied nodes are read-only and currently support only
-     * limited types of Nodes including Element, Text, and Attributes.  (Other
-     * Node types may be ignored by the proxy and not appear in the result tree).
-     * <p/>
-     * // TODO:
-     * NameSpaces are not yet supported.
-     * <p/>
-     * This method is primarily for use by the adapter node classes.
-     */
-    public Node proxyNode(AdapterNode parent, Node node) {
-        // If the property is a Document, "unwrap" it to the root element
-        if (node instanceof Document)
-            node = ((Document) node).getDocumentElement();
-
-        if (node == null)
-            return null;
-        if (node.getNodeType() == Node.ELEMENT_NODE)
-            return new ProxyElementAdapter(this, parent, (Element) node);
-        if (node.getNodeType() == Node.TEXT_NODE)
-            return new ProxyTextNodeAdapter(this, parent, (Text) node);
-        if (node.getNodeType() == Node.ATTRIBUTE_NODE)
-            return new ProxyAttrAdapter(this, parent, (Attr) node);
-
-        return null; // Unsupported Node type - ignore for now
-    }
-
-    public NamedNodeMap proxyNamedNodeMap(AdapterNode parent, NamedNodeMap nnm) {
-        return new ProxyNamedNodeMap(this, parent, nnm);
-    }
-
-    /**
-     * Create an instance of an adapter dynamically and set its context via
-     * the AdapterNode interface.
-     */
-    private Node constructAdapterInstance(Class adapterClass, AdapterNode parent, String propertyName, Object propertyValue) {
-        // Check to see if the class has a no-args constructor
-        try {
-            adapterClass.getConstructor(new Class []{});
-        } catch (NoSuchMethodException e1) {
-            throw new StrutsException("Adapter class: " + adapterClass
-                    + " does not have a no-args consructor.");
-        }
-
-        try {
-            AdapterNode adapterNode = (AdapterNode) adapterClass.newInstance();
-            adapterNode.setAdapterFactory(this);
-            adapterNode.setParent(parent);
-            adapterNode.setPropertyName(propertyName);
-            adapterNode.setPropertyValue(propertyValue);
-
-            return adapterNode;
-
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-            throw new StrutsException("Cannot adapt " + propertyValue + " (" + propertyName + ") :" + e.getMessage());
-        } catch (InstantiationException e) {
-            e.printStackTrace();
-            throw new StrutsException("Cannot adapt " + propertyValue + " (" + propertyName + ") :" + e.getMessage());
-        }
-    }
-
-    /**
-     * Create an appropriate adapter for a null value.
-     *
-     * @param parent
-     * @param propertyName
-     */
-    public Node adaptNullValue(BeanAdapter parent, String propertyName) {
-        return new StringAdapter(this, parent, propertyName, "null");
-    }
-
-    //TODO: implement Configuration option to provide additional adapter classes
-    public Class getAdapterForValue(Object value) {
-        return adapterTypes.get(value.getClass());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/AdapterNode.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/AdapterNode.java
deleted file mode 100644
index fa6c70f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/AdapterNode.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import org.w3c.dom.Node;
-
-/**
- */
-public interface AdapterNode extends Node {
-
-    /**
-     * The adapter factory that created this node.
-     */
-    AdapterFactory getAdapterFactory();
-
-    /**
-     * The adapter factory that created this node.
-     */
-    void setAdapterFactory(AdapterFactory factory);
-
-    /**
-     * The parent adapter node of this node. Note that our parent must be another adapter node, but our children may be any
-     * kind of Node.
-     */
-    AdapterNode getParent();
-
-    /**
-     * The parent adapter node of this node. Note that our parent must be another adapter node, but our children may be any
-     * kind of Node.
-     */
-    void setParent(AdapterNode parent);
-
-    /**
-     * The child node before the specified sibling
-     */
-    Node getChildBefore(Node thisNode);
-
-    /**
-     * The child node after the specified sibling
-     */
-    Node getChildAfter(Node thisNode);
-
-    /**
-     * The name of the Java object (property) that we are adapting
-     */
-    String getPropertyName();
-
-    /**
-     * The name of the Java object (property) that we are adapting
-     */
-    void setPropertyName(String name);
-
-    /**
-     * The Java object (property) that we are adapting
-     */
-    Object getPropertyValue();
-
-    /** The Java object (property) that we are adapting */
-    void setPropertyValue(Object prop );
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ArrayAdapter.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/ArrayAdapter.java
deleted file mode 100644
index a434d63..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ArrayAdapter.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.w3c.dom.Node;
-
-
-/**
- */
-public class ArrayAdapter extends AbstractAdapterElement {
-
-    private Log log = LogFactory.getLog(this.getClass());
-
-    public ArrayAdapter() {
-    }
-
-    public ArrayAdapter(AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Object value) {
-        setContext(adapterFactory, parent, propertyName, value);
-    }
-
-    protected List<Node> buildChildAdapters() {
-        List<Node> children = new ArrayList<Node>();
-        Object[] values = (Object[]) getPropertyValue();
-
-        for (Object value : values) {
-            Node childAdapter = getAdapterFactory().adaptNode(this, "item", value);
-            if (childAdapter != null)
-                children.add(childAdapter);
-
-            if (log.isDebugEnabled()) {
-                log.debug(this + " adding adapter: " + childAdapter);
-            }
-        }
-
-        return children;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/BeanAdapter.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/BeanAdapter.java
deleted file mode 100644
index 822c84d..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/BeanAdapter.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsException;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-
-/**
- * This class is the most general type of adapter, utilizing reflective introspection to present a DOM view of all of
- * the public properties of its value.  For example, a property returning a JavaBean such as:
- *
- * <pre>
- * public Person getMyPerson() { ... }
- * ...
- * class Person {
- * 		public String getFirstName();
- * 		public String getLastName();
- * }
- * </pre>
- *
- * would be rendered as: <myPerson> <firstName>...</firstName> <lastName>...</lastName> </myPerson>
- */
-public class BeanAdapter extends AbstractAdapterElement {
-    //~ Static fields/initializers /////////////////////////////////////////////
-
-    private static final Object[] NULLPARAMS = new Object[0];
-
-    /**
-     * Cache can savely be static because the cached information is the same for all instances of this class.
-     */
-    private static Map<Class, PropertyDescriptor[]> propertyDescriptorCache;
-
-    //~ Instance fields ////////////////////////////////////////////////////////
-
-    private Log log = LogFactory.getLog(this.getClass());
-
-    //~ Constructors ///////////////////////////////////////////////////////////
-
-    public BeanAdapter() {
-    }
-
-    public BeanAdapter(
-            AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Object value) {
-        setContext(adapterFactory, parent, propertyName, value);
-    }
-
-    //~ Methods ////////////////////////////////////////////////////////////////
-
-    public String getTagName() {
-        return getPropertyName();
-    }
-
-    public NodeList getChildNodes() {
-        NodeList nl = super.getChildNodes();
-        // Log child nodes for debug:
-        if (log.isDebugEnabled() && nl != null) {
-            log.debug("BeanAdapter getChildNodes for: " + getTagName());
-            log.debug(nl.toString());
-        }
-        return nl;
-    }
-
-    protected List<Node> buildChildAdapters() {
-        log.debug("BeanAdapter building children.  PropName = " + getPropertyName());
-        List<Node> newAdapters = new ArrayList<Node>();
-        Class type = getPropertyValue().getClass();
-        PropertyDescriptor[] props = getPropertyDescriptors(getPropertyValue());
-
-        if (props.length > 0) {
-            for (PropertyDescriptor prop : props) {
-                Method m = prop.getReadMethod();
-                log.debug("Bean reading property method: " + m.getName());
-
-                if (m == null) {
-                    //FIXME: write only property or indexed access
-                    continue;
-                }
-
-                String propertyName = prop.getName();
-                Object propertyValue;
-
-                /*
-                    Unwrap any invocation target exceptions and log them.
-                    We really need a way to control which properties are accessed.
-                    Perhaps with annotations in Java5?
-                */
-                try {
-                    propertyValue = m.invoke(getPropertyValue(), NULLPARAMS);
-                } catch (Exception e) {
-                    if (e instanceof InvocationTargetException)
-                        e = (Exception) ((InvocationTargetException) e).getTargetException();
-                    log.error(e);
-                    continue;
-                }
-
-                Node childAdapter;
-
-                if (propertyValue == null) {
-                    childAdapter = getAdapterFactory().adaptNullValue(this, propertyName);
-                } else {
-                    childAdapter = getAdapterFactory().adaptNode(this, propertyName, propertyValue);
-                }
-
-                if (childAdapter != null)
-                    newAdapters.add(childAdapter);
-
-                if (log.isDebugEnabled()) {
-                    log.debug(this + " adding adapter: " + childAdapter);
-                }
-            }
-        } else {
-            // No properties found
-            log.info(
-                    "Class " + type.getName() + " has no readable properties, " + " trying to adapt " + getPropertyName() + " with StringAdapter...");
-        }
-
-        return newAdapters;
-    }
-
-    /**
-     * Caching facade method to Introspector.getBeanInfo(Class, Class).getPropertyDescriptors();
-     */
-    private synchronized PropertyDescriptor[] getPropertyDescriptors(Object bean) {
-        try {
-            if (propertyDescriptorCache == null) {
-                propertyDescriptorCache = new HashMap<Class, PropertyDescriptor[]>();
-            }
-
-            PropertyDescriptor[] props = propertyDescriptorCache.get(bean.getClass());
-
-            if (props == null) {
-                log.debug("Caching property descriptor for " + bean.getClass().getName());
-                props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();
-                propertyDescriptorCache.put(bean.getClass(), props);
-            }
-
-            return props;
-        } catch (IntrospectionException e) {
-            e.printStackTrace();
-            throw new StrutsException("Error getting property descriptors for " + bean + " : " + e.getMessage());
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/CollectionAdapter.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/CollectionAdapter.java
deleted file mode 100644
index 4fa7dc8..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/CollectionAdapter.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.w3c.dom.Node;
-
-
-/**
- */
-public class CollectionAdapter extends AbstractAdapterElement {
-
-    private Log log = LogFactory.getLog(this.getClass());
-
-	public CollectionAdapter() { }
-
-	public CollectionAdapter(AdapterFactory rootAdapterFactory, AdapterNode parent, String propertyName, Object value) {
-        setContext(rootAdapterFactory, parent, propertyName, value);
-    }
-
-    protected List<Node> buildChildAdapters() {
-        Collection values = (Collection) getPropertyValue();
-        List<Node> children = new ArrayList<Node>(values.size());
-
-        for (Object value : values) {
-            Node childAdapter = getAdapterFactory().adaptNode(this, "item", value);
-            if (childAdapter != null)
-                children.add(childAdapter);
-
-            if (log.isDebugEnabled()) {
-                log.debug(this + " adding adapter: " + childAdapter);
-            }
-        }
-
-        return children;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/MapAdapter.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/MapAdapter.java
deleted file mode 100644
index 5c83594..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/MapAdapter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.w3c.dom.Node;
-
-/**
- * MapAdapter adapters a java.util.Map type to an XML DOM with the following
- * structure:
- * <pre>
- * 	<myMap>
- * 		<entry>
- * 			<key>...</key>
- * 			<value>...</value>
- * 		</entry>
- * 		...
- * 	</myMap>
- * </pre>
- */
-public class MapAdapter extends AbstractAdapterElement {
-
-    public MapAdapter() { }
-
-    public MapAdapter(AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Map value) {
-        setContext( adapterFactory, parent, propertyName, value );
-    }
-
-    public Map map() {
-        return (Map)getPropertyValue();
-    }
-
-    protected List<Node> buildChildAdapters() {
-        List<Node> children = new ArrayList<Node>(map().entrySet().size());
-
-        for (Object o : map().entrySet()) {
-            Map.Entry entry = (Map.Entry) o;
-            Object key = entry.getKey();
-            Object value = entry.getValue();
-            EntryElement child = new EntryElement(
-                    getAdapterFactory(), this, "entry", key, value);
-            children.add(child);
-        }
-
-        return children;
-    }
-
-    class EntryElement extends AbstractAdapterElement {
-        Object key, value;
-
-        public EntryElement(  AdapterFactory adapterFactory,
-                              AdapterNode parent, String propertyName, Object key, Object value ) {
-            setContext( adapterFactory, parent, propertyName, null/*we have two values*/ );
-            this.key = key;
-            this.value = value;
-        }
-
-        protected List<Node> buildChildAdapters() {
-            List<Node> children = new ArrayList<Node>();
-            children.add( getAdapterFactory().adaptNode( this, "key", key ) );
-            children.add( getAdapterFactory().adaptNode( this, "value", value ) );
-            return children;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyAttrAdapter.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyAttrAdapter.java
deleted file mode 100644
index 1e0e4c6..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyAttrAdapter.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.TypeInfo;
-
-/**
- * ProxyAttrAdapter is a pass-through adapter for objects which already
- * implement the Attr interface.  All methods are proxied to the underlying
- * Node except node traversal (e.g. getParent()) related methods which
- * are implemented by the abstract adapter node to work with the parent adapter.
- */
-public class ProxyAttrAdapter extends ProxyNodeAdapter implements Attr {
-
-    public ProxyAttrAdapter(AdapterFactory factory, AdapterNode parent, Attr value) {
-        super(factory, parent, value);
-    }
-
-    // convenience
-    protected Attr attr() {
-        return (Attr) getPropertyValue();
-    }
-
-    // Proxied Attr methods
-
-    public String getName() {
-        return attr().getName();
-    }
-
-    public boolean getSpecified() {
-        return attr().getSpecified();
-    }
-
-    public String getValue() {
-        return attr().getValue();
-    }
-
-    public void setValue(String string) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public Element getOwnerElement() {
-        return (Element) getParent();
-    }
-
-    // DOM level 3
-
-    public TypeInfo getSchemaTypeInfo() {
-        throw operationNotSupported();
-    }
-
-    public boolean isId() {
-        throw operationNotSupported();
-    }
-
-    // end DOM level 3
-
-    // End Proxied Attr methods
-
-    public String toString() {
-        return "ProxyAttribute for: " + attr();
-    }
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyElementAdapter.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyElementAdapter.java
deleted file mode 100644
index c3a073f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyElementAdapter.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.w3c.dom.Attr;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.TypeInfo;
-
-/**
- * ProxyElementAdapter is a pass-through adapter for objects which already
- * implement the Element interface.  All methods are proxied to the underlying
- * Node except getParent(), getNextSibling() and getPreviousSibling(), which
- * are implemented by the abstract adapter node to work with the parent adapter.
- *
- * Note: this class wants to be (extend) both an AbstractElementAdapter
- * and ProxyElementAdapter, but its proxy-ness is winning right now.
- */
-public class ProxyElementAdapter extends ProxyNodeAdapter implements Element {
-
-    private Log log = LogFactory.getLog(this.getClass());
-
-    public ProxyElementAdapter(AdapterFactory factory, AdapterNode parent, Element value) {
-        super(factory, parent, value);
-    }
-
-    /**
-     * Get the proxied Element
-     */
-    protected Element element() {
-        return (Element) getPropertyValue();
-    }
-
-    protected List<Node> buildChildAdapters() {
-        List<Node> adapters = new ArrayList<Node>();
-        NodeList children = node().getChildNodes();
-        for (int i = 0; i < children.getLength(); i++) {
-            Node child = children.item(i);
-            Node adapter = wrap(child);
-            if (adapter != null) {
-                log.debug("wrapped child node: " + child.getNodeName());
-                adapters.add(adapter);
-            }
-        }
-        return adapters;
-    }
-
-    // Proxied Element methods
-
-    public String getTagName() {
-        return element().getTagName();
-    }
-
-    public boolean hasAttribute(String name) {
-        return element().hasAttribute(name);
-    }
-
-    public String getAttribute(String name) {
-        return element().getAttribute(name);
-    }
-
-    public boolean hasAttributeNS(String namespaceURI, String localName) {
-        return element().hasAttributeNS(namespaceURI, localName);
-    }
-
-    public Attr getAttributeNode(String name) {
-        log.debug("wrapping attribute");
-        return (Attr) wrap(element().getAttributeNode(name));
-    }
-
-    // I'm overriding this just for clarity.  The base impl is correct.
-    public NodeList getElementsByTagName(String name) {
-        return super.getElementsByTagName(name);
-    }
-
-    public String getAttributeNS(String namespaceURI, String localName) {
-        return element().getAttributeNS(namespaceURI, localName);
-    }
-
-    public Attr getAttributeNodeNS(String namespaceURI, String localName) {
-        return (Attr) wrap(element().getAttributeNodeNS(namespaceURI, localName));
-    }
-
-    public NodeList getElementsByTagNameNS(String namespaceURI, String localName) {
-        return super.getElementsByTagNameNS(namespaceURI, localName);
-    }
-
-    // Unsupported mutators of Element
-
-    public void removeAttribute(String name) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public void removeAttributeNS(String namespaceURI, String localName) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public void setAttribute(String name, String value) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public Attr removeAttributeNode(Attr oldAttr) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public Attr setAttributeNode(Attr newAttr) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public Attr setAttributeNodeNS(Attr newAttr) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public void setAttributeNS(String namespaceURI, String qualifiedName, String value) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    // end proxied Element methods
-
-    // unsupported DOM level 3 methods
-
-    public TypeInfo getSchemaTypeInfo() {
-        throw operationNotSupported();
-    }
-
-    public void setIdAttribute(String string, boolean b) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public void setIdAttributeNS(String string, String string1, boolean b) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public void setIdAttributeNode(Attr attr, boolean b) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    // end DOM level 3 methods
-
-    public String toString() {
-        return "ProxyElement for: " + element();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyNamedNodeMap.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyNamedNodeMap.java
deleted file mode 100644
index fd3166b..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyNamedNodeMap.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import org.w3c.dom.DOMException;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-/**
- * A NamedNodeMap that wraps the Nodes returned in their proxies.
- *
- * Note: Since maps have no guaranteed order we don't need to worry about identity
- * here as we do with "child" adapters.  In that case we need to preserve identity
- * in order to support finding the next/previous siblings.
- */
-public class ProxyNamedNodeMap implements NamedNodeMap {
-
-    private NamedNodeMap nodes;
-    private AdapterFactory adapterFactory;
-    private AdapterNode parent;
-
-    public ProxyNamedNodeMap(AdapterFactory factory, AdapterNode parent, NamedNodeMap nodes) {
-        this.nodes = nodes;
-        this.adapterFactory = factory;
-        this.parent = parent;
-    }
-
-    protected Node wrap(Node node) {
-        return adapterFactory.proxyNode(parent, node);
-    }
-
-    public int getLength() {
-        return nodes.getLength();
-    }
-
-    public Node item(int index) {
-        return wrap(nodes.item(index));
-    }
-
-    public Node getNamedItem(String name) {
-        return wrap(nodes.getNamedItem(name));
-    }
-
-    public Node removeNamedItem(String name) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public Node setNamedItem(Node arg) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public Node setNamedItemNS(Node arg) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public Node getNamedItemNS(String namespaceURI, String localName) {
-        return wrap(nodes.getNamedItemNS(namespaceURI, localName));
-    }
-
-    public Node removeNamedItemNS(String namespaceURI, String localName) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyNodeAdapter.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyNodeAdapter.java
deleted file mode 100644
index 247c42a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyNodeAdapter.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-/**
- * ProxyNodeAdapter is a read-only delegating adapter for objects which already
- * implement the Node interface.  All methods are proxied to the underlying
- * Node except getParent(), getNextSibling() and getPreviousSibling(), which
- * are implemented by the abstract adapter node to work with the parent adapter.
- */
-public abstract class ProxyNodeAdapter extends AbstractAdapterNode {
-    
-    private Log log = LogFactory.getLog(this.getClass());
-
-    public ProxyNodeAdapter(AdapterFactory factory, AdapterNode parent, Node value) {
-        setContext(factory, parent, "document"/*propname unused*/, value);
-        log.debug("proxied node is: " + value);
-        log.debug("node class is: " + value.getClass());
-        log.debug("node type is: " + value.getNodeType());
-        log.debug("node name is: " + value.getNodeName());
-    }
-
-    /**
-     * Get the proxied Node value
-     */
-    protected Node node() {
-        return (Node) getPropertyValue();
-    }
-
-    /**
-     * Get and adapter to wrap the proxied node.
-     *
-     * @param node
-     */
-    protected Node wrap(Node node) {
-        return getAdapterFactory().proxyNode(this, node);
-    }
-
-    protected NamedNodeMap wrap(NamedNodeMap nnm) {
-        return getAdapterFactory().proxyNamedNodeMap(this, nnm);
-    }
-    //protected NodeList wrap( NodeList nl ) { }
-
-    //protected Node unwrap( Node child ) {
-    //	return ((ProxyNodeAdapter)child).node();
-    //}
-
-    // Proxied Node methods
-
-    public String getNodeName() {
-        log.trace("getNodeName");
-        return node().getNodeName();
-    }
-
-    public String getNodeValue() throws DOMException {
-        log.trace("getNodeValue");
-        return node().getNodeValue();
-    }
-
-    public short getNodeType() {
-        if (log.isTraceEnabled())
-            log.trace("getNodeType: " + getNodeName() + ": " + node().getNodeType());
-        return node().getNodeType();
-    }
-
-    public NamedNodeMap getAttributes() {
-        NamedNodeMap nnm = wrap(node().getAttributes());
-        if (log.isTraceEnabled())
-            log.trace("getAttributes: " + nnm);
-        return nnm;
-    }
-
-    public boolean hasChildNodes() {
-        log.trace("hasChildNodes");
-        return node().hasChildNodes();
-    }
-
-    public boolean isSupported(String s, String s1) {
-        log.trace("isSupported");
-        // Is this ok?  What kind of features are they asking about?
-        return node().isSupported(s, s1);
-    }
-
-    public String getNamespaceURI() {
-        log.trace("getNamespaceURI");
-        return node().getNamespaceURI();
-    }
-
-    public String getPrefix() {
-        log.trace("getPrefix");
-        return node().getPrefix();
-    }
-
-    public String getLocalName() {
-        log.trace("getLocalName");
-        return node().getLocalName();
-    }
-
-    public boolean hasAttributes() {
-        log.trace("hasAttributes");
-        return node().hasAttributes();
-    }
-
-    // End proxied Node methods
-
-    public String toString() {
-        return "ProxyNode for: " + node();
-    }
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyTextNodeAdapter.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyTextNodeAdapter.java
deleted file mode 100644
index 0fc9ccc..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ProxyTextNodeAdapter.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Text;
-
-/**
- * ProxyTextNodeAdapter is a pass-through adapter for objects which already
- * implement the Text interface.  All methods are proxied to the underlying
- * Node except getParent(), getNextSibling() and getPreviousSibling(), which
- * are implemented by the abstract adapter node to work with the parent adapter.
- */
-public class ProxyTextNodeAdapter extends ProxyNodeAdapter implements Text {
-
-    public ProxyTextNodeAdapter(AdapterFactory factory, AdapterNode parent, Text value) {
-        super(factory, parent, value);
-    }
-
-    // convenience
-    Text text() {
-        return (Text) getPropertyValue();
-    }
-
-    public String toString() {
-        return "ProxyTextNode for: " + text();
-    }
-
-    public Text splitText(int offset) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public int getLength() {
-        return text().getLength();
-    }
-
-    public void deleteData(int offset, int count) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public String getData() throws DOMException {
-        return text().getData();
-    }
-
-    public String substringData(int offset, int count) throws DOMException {
-        return text().substringData(offset, count);
-    }
-
-    public void replaceData(int offset, int count, String arg) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public void insertData(int offset, String arg) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public void appendData(String arg) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    public void setData(String data) throws DOMException {
-        throw new UnsupportedOperationException();
-    }
-
-    // DOM level 3
-
-    public boolean isElementContentWhitespace() {
-        throw operationNotSupported();
-    }
-
-    public String getWholeText() {
-        throw operationNotSupported();
-    }
-
-    public Text replaceWholeText(String string) throws DOMException {
-        throw operationNotSupported();
-    }
-}
-
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ServletURIResolver.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/ServletURIResolver.java
deleted file mode 100644
index c295d4f..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/ServletURIResolver.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.io.InputStream;
-
-import javax.servlet.ServletContext;
-import javax.xml.transform.Source;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.URIResolver;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-
-/**
- * ServletURIResolver is a URIResolver that can retrieve resources from the servlet context using the scheme "response".
- * e.g.
- *
- * A URI resolver is called when a stylesheet uses an xsl:include, xsl:import, or document() function to find the
- * resource (file).
- */
-public class ServletURIResolver implements URIResolver {
-
-    private Log log = LogFactory.getLog(getClass());
-    static final String PROTOCOL = "response:";
-
-    private ServletContext sc;
-
-    public ServletURIResolver(ServletContext sc) {
-        log.trace("ServletURIResolver: " + sc);
-        this.sc = sc;
-    }
-
-    public Source resolve(String href, String base) throws TransformerException {
-        log.debug("ServletURIResolver resolve(): href=" + href + ", base=" + base);
-        if (href.startsWith(PROTOCOL)) {
-            String res = href.substring(PROTOCOL.length());
-            log.debug("Resolving resource <" + res + ">");
-
-            InputStream is = sc.getResourceAsStream(res);
-
-            if (is == null) {
-                throw new TransformerException(
-                        "Resource " + res + " not found in resources.");
-            }
-
-            return new StreamSource(is);
-        }
-
-        throw new TransformerException(
-                "Cannot handle procotol of resource " + href);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/SimpleAdapterDocument.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/SimpleAdapterDocument.java
deleted file mode 100644
index 3879b30..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/SimpleAdapterDocument.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.struts2.StrutsException;
-import org.w3c.dom.Attr;
-import org.w3c.dom.CDATASection;
-import org.w3c.dom.Comment;
-import org.w3c.dom.DOMConfiguration;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.Element;
-import org.w3c.dom.EntityReference;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.ProcessingInstruction;
-import org.w3c.dom.Text;
-
-/**
- * SimpleAdapterDocument adapted a Java object and presents it as
- * a Document.  This class represents the Document container and uses
- * the AdapterFactory to produce a child adapter for the wrapped object.
- * The adapter produced must be of an Element type or an exception is thrown.
- *
- * Note: in theory we could base this on AbstractAdapterElement and then allow
- * the wrapped object to be a more general Node type.  We would just use
- * ourselves as the root element.  However I don't think this is an issue as
- * people expect Documents to wrap Elements.
- */
-public class SimpleAdapterDocument extends AbstractAdapterNode implements Document {
-
-    private Element rootElement;
-
-    public SimpleAdapterDocument(
-            AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Object value) {
-        setContext(adapterFactory, parent, propertyName, value);
-
-    }
-
-    public void setPropertyValue(Object prop) {
-        super.setPropertyValue(prop);
-        rootElement = null; // recreate the root element
-    }
-
-    /**
-     * Lazily construct the root element adapter from the value object.
-     */
-    private Element getRootElement() {
-        if (rootElement != null)
-            return rootElement;
-
-        Node node = getAdapterFactory().adaptNode(
-                this, getPropertyName(), getPropertyValue());
-        if (node instanceof Element)
-            rootElement = (Element) node;
-        else
-            throw new StrutsException(
-                    "Document adapter expected to wrap an Element type.  Node is not an element:" + node);
-
-        return rootElement;
-    }
-
-    protected List<Node> getChildAdapters() {
-        return Arrays.asList(new Node[]{getRootElement()});
-    }
-
-    public NodeList getChildNodes() {
-        return new NodeList() {
-            public Node item(int i) {
-                return getRootElement();
-            }
-
-            public int getLength() {
-                return 1;
-            }
-        };
-    }
-
-    public DocumentType getDoctype() {
-        return null;
-    }
-
-    public Element getDocumentElement() {
-        return getRootElement();
-    }
-
-    public Element getElementById(String string) {
-        return null;
-    }
-
-    public NodeList getElementsByTagName(String string) {
-        return null;
-    }
-
-    public NodeList getElementsByTagNameNS(String string, String string1) {
-        return null;
-    }
-
-    public Node getFirstChild() {
-        return getRootElement();
-    }
-
-    public DOMImplementation getImplementation() {
-        return null;
-    }
-
-    public Node getLastChild() {
-        return getRootElement();
-    }
-
-    public String getNodeName() {
-        return "#document";
-    }
-
-    public short getNodeType() {
-        return Node.DOCUMENT_NODE;
-    }
-
-    public Attr createAttribute(String string) throws DOMException {
-        return null;
-    }
-
-    public Attr createAttributeNS(String string, String string1) throws DOMException {
-        return null;
-    }
-
-    public CDATASection createCDATASection(String string) throws DOMException {
-        return null;
-    }
-
-    public Comment createComment(String string) {
-        return null;
-    }
-
-    public DocumentFragment createDocumentFragment() {
-        return null;
-    }
-
-    public Element createElement(String string) throws DOMException {
-        return null;
-    }
-
-    public Element createElementNS(String string, String string1) throws DOMException {
-        return null;
-    }
-
-    public EntityReference createEntityReference(String string) throws DOMException {
-        return null;
-    }
-
-    public ProcessingInstruction createProcessingInstruction(String string, String string1) throws DOMException {
-        return null;
-    }
-
-    public Text createTextNode(String string) {
-        return null;
-    }
-
-    public boolean hasChildNodes() {
-        return true;
-    }
-
-    public Node importNode(Node node, boolean b) throws DOMException {
-        return null;
-    }
-
-    public Node getChildAfter(Node child) {
-        return null;
-    }
-
-    public Node getChildBefore(Node child) {
-        return null;
-    }
-
-    // DOM level 3
-
-    public String getInputEncoding() {
-        throw operationNotSupported();
-    }
-
-    public String getXmlEncoding() {
-        throw operationNotSupported();
-    }
-
-    public boolean getXmlStandalone() {
-        throw operationNotSupported();
-    }
-
-    public void setXmlStandalone(boolean b) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public String getXmlVersion() {
-        throw operationNotSupported();
-    }
-
-    public void setXmlVersion(String string) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public boolean getStrictErrorChecking() {
-        throw operationNotSupported();
-    }
-
-    public void setStrictErrorChecking(boolean b) {
-        throw operationNotSupported();
-    }
-
-    public String getDocumentURI() {
-        throw operationNotSupported();
-    }
-
-    public void setDocumentURI(String string) {
-        throw operationNotSupported();
-    }
-
-    public Node adoptNode(Node node) throws DOMException {
-        throw operationNotSupported();
-    }
-
-    public DOMConfiguration getDomConfig() {
-        throw operationNotSupported();
-    }
-
-    public void normalizeDocument() {
-        throw operationNotSupported();
-    }
-
-    public Node renameNode(Node node, String string, String string1) throws DOMException {
-        return null;
-    }
-    // end DOM level 3
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/SimpleNodeList.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/SimpleNodeList.java
deleted file mode 100644
index ba49931..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/SimpleNodeList.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-public class SimpleNodeList implements NodeList {
-
-    private Log log = LogFactory.getLog(SimpleNodeList.class);
-
-    private List<Node> nodes;
-
-    public SimpleNodeList(List<Node> nodes) {
-        this.nodes = nodes;
-    }
-
-    public int getLength() {
-        if (log.isTraceEnabled())
-            log.trace("getLength: " + nodes.size());
-        return nodes.size();
-    }
-
-    public Node item(int i) {
-        log.trace("getItem: " + i);
-        return nodes.get(i);
-    }
-
-    public String toString() {
-        StringBuffer sb = new StringBuffer("SimpleNodeList: [");
-        for (int i = 0; i < getLength(); i++)
-            sb.append(item(i).getNodeName() + ',');
-        sb.append("]");
-        return sb.toString();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/SimpleTextNode.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/SimpleTextNode.java
deleted file mode 100644
index 152d933..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/SimpleTextNode.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import org.apache.struts2.StrutsException;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-
-
-/**
- * 
- */
-public class SimpleTextNode extends AbstractAdapterNode implements Node, Text {
-
-    public SimpleTextNode(AdapterFactory rootAdapterFactory, AdapterNode parent, String propertyName, Object value) {
-        setContext(rootAdapterFactory, parent, propertyName, value);
-    }
-
-    protected String getStringValue() {
-        return getPropertyValue().toString();
-    }
-
-    public void setData(String string) throws DOMException {
-        throw new StrutsException("Operation not supported");
-    }
-
-    public String getData() throws DOMException {
-        return getStringValue();
-    }
-
-    public int getLength() {
-        return getStringValue().length();
-    }
-
-    public String getNodeName() {
-        return "#text";
-    }
-
-    public short getNodeType() {
-        return Node.TEXT_NODE;
-    }
-
-    public String getNodeValue() throws DOMException {
-        return getStringValue();
-    }
-
-    public void appendData(String string) throws DOMException {
-        throw new StrutsException("Operation not supported");
-    }
-
-    public void deleteData(int i, int i1) throws DOMException {
-        throw new StrutsException("Operation not supported");
-    }
-
-    public void insertData(int i, String string) throws DOMException {
-        throw new StrutsException("Operation not supported");
-    }
-
-    public void replaceData(int i, int i1, String string) throws DOMException {
-        throw new StrutsException("Operation not supported");
-    }
-
-    public Text splitText(int i) throws DOMException {
-        throw new StrutsException("Operation not supported");
-    }
-
-    public String substringData(int beginIndex, int endIndex) throws DOMException {
-        return getStringValue().substring(beginIndex, endIndex);
-    }
-
-    // DOM level 3
-
-    public boolean isElementContentWhitespace() {
-        throw operationNotSupported();
-    }
-
-    public String getWholeText() {
-        throw operationNotSupported();
-    }
-
-    public Text replaceWholeText(String string) throws DOMException {
-        throw operationNotSupported();
-    }
-    // end DOM level 3
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/StringAdapter.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/StringAdapter.java
deleted file mode 100644
index fe3a5eb..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/StringAdapter.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.w3c.dom.Node;
-
-import org.xml.sax.InputSource;
-
-import com.opensymphony.xwork2.util.DomHelper;
-
-/**
- * StringAdapter adapts a Java String value to a DOM Element with the specified
- * property name containing the String's text.
- * e.g. a property <pre>String getFoo() { return "My Text!"; }</pre>
- * will appear in the result DOM as:
- * <foo>MyText!</foo>
- *
- * Subclasses may override the getStringValue() method in order to use StringAdapter
- * as a simplified custom XML adapter for Java types.  A subclass can enable XML
- * parsing of the value string via the setParseStringAsXML() method and then
- * override getStringValue() to return a String containing the custom formatted XML.
- *
- */
-public class StringAdapter extends AbstractAdapterElement {
-
-    private Log log = LogFactory.getLog(this.getClass());
-    boolean parseStringAsXML;
-
-    public StringAdapter() {
-    }
-
-    public StringAdapter(AdapterFactory adapterFactory, AdapterNode parent, String propertyName, String value) {
-        setContext(adapterFactory, parent, propertyName, value);
-    }
-
-    /**
-     * Get the object to be adapted as a String value.
-     * <p/>
-     * This method can be overridden by subclasses that wish to use StringAdapter
-     * as a simplified customizable XML adapter for Java types. A subclass can
-     * enable parsing of the value string as containing XML text via the
-     * setParseStringAsXML() method and then override getStringValue() to return a
-     * String containing the custom formatted XML.
-     */
-    protected String getStringValue() {
-        return getPropertyValue().toString();
-    }
-
-    protected List<Node> buildChildAdapters() {
-        Node node;
-        if (getParseStringAsXML()) {
-            log.debug("parsing string as xml: " + getStringValue());
-            // Parse the String to a DOM, then proxy that as our child
-            node = DomHelper.parse(new InputSource(new StringReader(getStringValue())));
-            node = getAdapterFactory().proxyNode(this, node);
-        } else {
-            log.debug("using string as is: " + getStringValue());
-            // Create a Text node as our child
-            node = new SimpleTextNode(getAdapterFactory(), this, "text", getStringValue());
-        }
-
-        List<Node> children = new ArrayList<Node>();
-        children.add(node);
-        return children;
-    }
-
-    /**
-     * Is this StringAdapter to interpret its string values as containing
-     * XML Text?
-     *
-     * @see #setParseStringAsXML(boolean)
-     */
-    public boolean getParseStringAsXML() {
-        return parseStringAsXML;
-    }
-
-    /**
-     * When set to true the StringAdapter will interpret its String value
-     * as containing XML text and parse it to a DOM Element.  The new DOM
-     * Element will be a child of this String element. (i.e. wrapped in an
-     * element of the property name specified for this StringAdapter).
-     *
-     * @param parseStringAsXML
-     * @see #getParseStringAsXML()
-     */
-    public void setParseStringAsXML(boolean parseStringAsXML) {
-        this.parseStringAsXML = parseStringAsXML;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java b/trunk/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
deleted file mode 100644
index b0ee149..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Source;
-import javax.xml.transform.Templates;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.URIResolver;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.config.Settings;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.util.TextParseUtil;
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * XSLTResult uses XSLT to transform action object to XML. Recent version has 
- * been specifically modified to deal with Xalan flaws. When using Xalan you may
- * notice that even though you have very minimal stylesheet like this one
- * <pre>
- * &lt;xsl:template match="/result"&gt;
- *   &lt;result /&gt;
- * &lt;/xsl:template&gt;</pre>
- *
- * <p>
- * then Xalan would still iterate through every property of your action and it's
- * all descendants.
- * </p>
- *
- * <p>
- * If you had double-linked objects then Xalan would work forever analysing
- * infinite object tree. Even if your stylesheet was not constructed to process
- * them all. It's becouse current Xalan eagerly and extensively converts
- * everything to it's internal DTM model before further processing.
- * </p>
- * 
- * <p>
- * Thet's why there's a loop eliminator added that works by indexing every
- * object-property combination during processing. If it notices that some
- * object's property were already walked through, it doesn't get any deeper.
- * Say, you have two objects x and y with the following properties set
- * (pseudocode):
- * </p>
- * <pre>
- * x.y = y;
- * and
- * y.x = x;
- * action.x=x;</pre>
- *
- * <p>
- * Due to that modification the resulting XML document based on x would be:
- * </p>
- *
- * <pre>
- * &lt;result&gt;
- *   &lt;x&gt;
- *     &lt;y/&gt;
- *   &lt;/x&gt;
- * &lt;/result&gt;</pre>
- *
- * <p>
- * Without it there would be an endless x/y/x/y/x/y/... elements.
- * </p>
- *
- * <p>
- * The XSLTResult code tries also to deal with the fact that DTM model is built
- * in a manner that childs are processed before siblings. The result is that if
- * there is object x that is both set in action's x property, and very deeply
- * under action's a property then it would only appear under a, not under x.
- * That's not what we expect, and that's why XSLTResult allows objects to repeat
- * in various places to some extent.
- * </p>
- *
- * <p>
- * Sometimes the object mesh is still very dense and you may notice that even
- * though you have relatively simple stylesheet execution takes a tremendous
- * amount of time. To help you to deal with that obstacle of Xalan you may
- * attach regexp filters to elements paths (xpath). 
- * </p>
- *
- * <p>
- * <b>Note:</b> In your .xsl file the root match must be named <tt>result</tt>.
- * <br/>This example will output the username by using <tt>getUsername</tt> on your
- * action class:
- * <pre>
- * &lt;xsl:template match="result"&gt;
- *   &lt;html&gt;
- *   &lt;body&gt;
- *   Hello &lt;xsl:value-of select="username"/&gt; how are you?
- *   &lt;/body&gt;
- *   &lt;html&gt;
- * &lt;xsl:template/&gt;
- * </pre>
- *
- * <p>
- * In the following example the XSLT result would only walk through action's
- * properties without their childs. It would also skip every property that has
- * "hugeCollection" in their name. Element's path is first compared to
- * excludingPattern - if it matches it's no longer processed. Then it is
- * compared to matchingPattern and processed only if there's a match.
- * </p>
- *
- * <!-- END SNIPPET: description -->
- *
- * <pre><!-- START SNIPPET: description.example -->
- * &lt;result name="success" type="xslt"&gt;
- *   &lt;param name="location"&gt;foo.xslt&lt;/param&gt;
- *   &lt;param name="matchingPattern"&gt;^/result/[^/*]$&lt;/param&gt;
- *   &lt;param name="excludingPattern"&gt;.*(hugeCollection).*&lt;/param&gt;
- * &lt;/result&gt;
- * <!-- END SNIPPET: description.example --></pre>
- *
- * <b>This result type takes the following parameters:</b>
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li><b>location (default)</b> - the location to go to after execution.</li>
- *
- * <li><b>parse</b> - true by default. If set to false, the location param will 
- * not be parsed for Ognl expressions.</li>
- *
- * <li><b>matchingPattern</b> - Pattern that matches only desired elements, by
- * default it matches everything.</li>
- *
- * <li><b>excludingPattern</b> - Pattern that eliminates unwanted elements, by
- * default it matches none.</li>
- *
- * </ul>
- *
- * <p>
- * <code>struts.properties</code> related configuration:
- * </p>
- * <ul>
- *
- * <li><b>struts.xslt.nocache</b> - Defaults to false. If set to true, disables
- * stylesheet caching. Good for development, bad for production.</li>
- *
- * </ul>
- *
- * <!-- END SNIPPET: params -->
- *
- * <b>Example:</b>
- *
- * <pre><!-- START SNIPPET: example -->
- * &lt;result name="success" type="xslt"&gt;foo.xslt&lt;/result&gt;
- * <!-- END SNIPPET: example --></pre>
- *
- */
-public class XSLTResult implements Result {
-
-    private static final long serialVersionUID = 6424691441777176763L;
-    private static final Log log = LogFactory.getLog(XSLTResult.class);
-    public static final String DEFAULT_PARAM = "stylesheetLocation";
-
-    protected boolean noCache;
-    private final Map<String, Templates> templatesCache;
-    private String stylesheetLocation;
-    private boolean parse;
-    private AdapterFactory adapterFactory;
-
-    public XSLTResult() {
-        templatesCache = new HashMap<String, Templates>();
-        noCache = Settings.get("struts.xslt.nocache").trim().equalsIgnoreCase("true");
-    }
-    
-    public XSLTResult(String stylesheetLocation) {
-    	this();
-    	setStylesheetLocation(stylesheetLocation);
-    }
-
-    /**
-     * @deprecated Use #setStylesheetLocation(String)
-     */
-    public void setLocation(String location) {
-        setStylesheetLocation(location);
-    }
-
-    public void setStylesheetLocation(String location) {
-        if (location == null)
-            throw new IllegalArgumentException("Null location");
-        this.stylesheetLocation = location;
-    }
-
-    public String getStylesheetLocation() {
-        return stylesheetLocation;
-    }
-
-    /**
-     * If true, parse the stylesheet location for OGNL expressions.
-     *
-     * @param parse
-     */
-    public void setParse(boolean parse) {
-        this.parse = parse;
-    }
-
-    public void execute(ActionInvocation invocation) throws Exception {
-        long startTime = System.currentTimeMillis();
-        String location = getStylesheetLocation();
-
-        if (parse) {
-            ValueStack stack = ActionContext.getContext().getValueStack();
-            location = TextParseUtil.translateVariables(location, stack);
-        }
-
-        try {
-            HttpServletResponse response = ServletActionContext.getResponse();
-
-            Writer writer = response.getWriter();
-
-            // Create a transformer for the stylesheet.
-            Templates templates = null;
-            Transformer transformer;
-            if (location != null) {
-                templates = getTemplates(location);
-                transformer = templates.newTransformer();
-            } else
-                transformer = TransformerFactory.newInstance().newTransformer();
-
-            transformer.setURIResolver(getURIResolver());
-
-            String mimeType;
-            if (templates == null)
-                mimeType = "text/xml"; // no stylesheet, raw xml
-            else
-                mimeType = templates.getOutputProperties().getProperty(OutputKeys.MEDIA_TYPE);
-            if (mimeType == null) {
-                // guess (this is a servlet, so text/html might be the best guess)
-                mimeType = "text/html";
-            }
-
-            response.setContentType(mimeType);
-
-            Source xmlSource = getDOMSourceForStack(invocation.getAction());
-
-            // Transform the source XML to System.out.
-            PrintWriter out = response.getWriter();
-
-            log.debug("xmlSource = " + xmlSource);
-            transformer.transform(xmlSource, new StreamResult(out));
-
-            out.close(); // ...and flush...
-
-            if (log.isDebugEnabled()) {
-                log.debug("Time:" + (System.currentTimeMillis() - startTime) + "ms");
-            }
-
-            writer.flush();
-        } catch (Exception e) {
-            log.error("Unable to render XSLT Template, '" + location + "'", e);
-            throw e;
-        }
-    }
-
-    protected AdapterFactory getAdapterFactory() {
-        if (adapterFactory == null)
-            adapterFactory = new AdapterFactory();
-        return adapterFactory;
-    }
-
-    protected void setAdapterFactory(AdapterFactory adapterFactory) {
-        this.adapterFactory = adapterFactory;
-    }
-
-    /**
-     * Get the URI Resolver to be called by the processor when it encounters an xsl:include, xsl:import, or document()
-     * function. The default is an instance of ServletURIResolver, which operates relative to the servlet context.
-     */
-    protected URIResolver getURIResolver() {
-        return new ServletURIResolver(
-                ServletActionContext.getServletContext());
-    }
-
-    protected Templates getTemplates(String path) throws TransformerException, IOException {
-        String pathFromRequest = ServletActionContext.getRequest().getParameter("xslt.location");
-
-        if (pathFromRequest != null)
-            path = pathFromRequest;
-
-        if (path == null)
-            throw new TransformerException("Stylesheet path is null");
-
-        Templates templates = templatesCache.get(path);
-
-        if (noCache || (templates == null)) {
-            synchronized (templatesCache) {
-                URL resource = ServletActionContext.getServletContext().getResource(path);
-
-                if (resource == null) {
-                    throw new TransformerException("Stylesheet " + path + " not found in resources.");
-                }
-
-                log.debug("Preparing XSLT stylesheet templates: " + path);
-
-                TransformerFactory factory = TransformerFactory.newInstance();
-                templates = factory.newTemplates(new StreamSource(resource.openStream()));
-                templatesCache.put(path, templates);
-            }
-        }
-
-        return templates;
-    }
-
-    protected Source getDOMSourceForStack(Object action)
-            throws IllegalAccessException, InstantiationException {
-        return new DOMSource(getAdapterFactory().adaptDocument("result", action) );
-	}
-}
diff --git a/trunk/core/src/main/java/org/apache/struts2/views/xslt/package.html b/trunk/core/src/main/java/org/apache/struts2/views/xslt/package.html
deleted file mode 100644
index ed05a0a..0000000
--- a/trunk/core/src/main/java/org/apache/struts2/views/xslt/package.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<body>
-<p>
-The new xslt view supports an extensible Java XML adapter framework that makes
-it easy to customize the XML rendering of objects and to incorporate structured
-XML text and arbitarary DOM fragments into the output.
-</p>
-<p>
-The XSLTResult class now uses an extensible adapter factory for rendering the
-Struts action Java object tree to an XML DOM for consumption by the
-stylesheet.  Users can easily register their own adapters to produce custom XML
-views of Java types or simply extend a default "String" adapter and return
-plain or XML text to be incorporated into the DOM.  The new adapter mechanism
-is capable of proxying existing DOM trees and incorporating them into the
-results, so you can freely mix DOMs produced from other sources into your
-result tree.
-</p>
-<p>
-A default java.util.Map adapter is also now provided to render Maps to XML.
-</p>
-<p>
-Please see the javadoc on the AdapterFactory for more details.
-</p>
-
-</body>
diff --git a/trunk/core/src/main/resources/META-INF/struts-tags.tld b/trunk/core/src/main/resources/META-INF/struts-tags.tld
deleted file mode 100644
index 1a515f1..0000000
--- a/trunk/core/src/main/resources/META-INF/struts-tags.tld
+++ /dev/null
@@ -1,11308 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-<taglib>
-
-    <tlib-version>2.2.3</tlib-version>
-    <jsp-version>1.2</jsp-version>
-    <short-name>s</short-name>
-
-    <uri>/struts-tags</uri>
-
-    <display-name>Struts Tags</display-name>
-    <description><![CDATA[
-    To make it easier to access dynamic data,
-    the Apache Struts framework includes a library of custom tags.
-    The tags interact with the framework's validation and internationalization features,
-    to ensure that input is correct and output is localized.
-    The Struts Tags can be used with JSP, FreeMarker, or Velocity.
-    ]]></description>
-    <tag>
-
-        <name>head</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.HeadTag</tag-class>
-        <body-content>empty</body-content>
-        <description><![CDATA[Render a chunk of HEAD for your HTML file]]></description>
-
-        <attribute>
-            <name>calendarcss</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The jscalendar css theme to use" default="calendar-blue.css]]></description>
-
-        </attribute>
-        <attribute>
-            <name>debug</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set to true to enable debugging mode for AJAX themes]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>push</name>
-        <tag-class>org.apache.struts2.views.jsp.PushTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Push value on stack for simplified usage.]]></description>
-
-        <attribute>
-            <name>value</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Value to push on stack]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>table</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.table.WebTableTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Instantiate a JavaBean and place it in the context.]]></description>
-
-        <attribute>
-            <name>modelName</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name of model to use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>sortColumn</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Index of column to sort data by]]></description>
-
-        </attribute>
-        <attribute>
-            <name>sortOrder</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set sort order. Allowed values are NONE, ASC and DESC]]></description>
-
-        </attribute>
-        <attribute>
-            <name>sortable</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Whether the table should be sortable. Requires that model implements org.apache.struts2.components.table.SortableTableModel if set to true.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>component</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.ComponentTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a custom ui widget]]></description>
-
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>token</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.TokenTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Stop double-submission of forms]]></description>
-
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>set</name>
-        <tag-class>org.apache.struts2.views.jsp.SetTag</tag-class>
-        <body-content>empty</body-content>
-        <description><![CDATA[Assigns a value to a variable in a specified scope]]></description>
-
-        <attribute>
-            <name>name</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The name of the new variable that is assigned the value of <i>value</i>]]></description>
-
-        </attribute>
-        <attribute>
-            <name>scope</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The scope in which to assign the variable. Can be <b>application</b>, <b>session</b>, <b>request</b>, <b>page</b>, or <b>action</b>.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The value that is assigned to the variable named <i>name</i>]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>i18n</name>
-        <tag-class>org.apache.struts2.views.jsp.I18nTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Get a resource bundle and place it on the value stack]]></description>
-
-        <attribute>
-            <name>name</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Name of ressource bundle to use (eg foo/bar/customBundle)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>merge</name>
-        <tag-class>org.apache.struts2.views.jsp.iterator.MergeIteratorTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Merge the values of a list of iterators into one iterator]]></description>
-
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[the id where the resultant merged iterator will be stored in the stack's context]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>password</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.PasswordTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render an HTML input tag of type password]]></description>
-
-        <attribute>
-            <name>showPassword</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether to show input]]></description>
-
-        </attribute>
-        <attribute>
-            <name>maxlength</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML maxlength attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>maxLength</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Deprecated. Use maxlength instead.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>readonly</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether the input is readonly]]></description>
-
-        </attribute>
-        <attribute>
-            <name>size</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML size attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>submit</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.SubmitTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a submit button]]></description>
-
-        <attribute>
-            <name>resultDivId</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The id of the HTML element to place the result (this can the the form's id or any id on the page.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onLoadJS</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Javascript code that will be executed after the form has been submitted. The format is onLoadJS='yourMethodName(data,type)'. NOTE: the words data and type must be left like that if you want the event type and the returned data.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>notifyTopics</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Topic names to post an event to after the form has been submitted.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listenTopics</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set listenTopics attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>preInvokeJS</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Javascript code that will be executed before invokation. The format is preInvokeJS='yourMethodName(data,type)'.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Supply a submit button text apart from submit value. Will have no effect for <i>input</i> type submit, since button text will always be the value parameter. For the type <i>image</i>, alt parameter will be set to this value.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>src</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Supply an image src for <i>image</i> type submit button. Will have no effect for types <i>input</i> and <i>button</i>.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>action</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set action attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>method</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set method attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>align</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML align attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>type</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The type of submit to use. Valid values are <i>input</i>, <i>button</i> and <i>image</i>.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>form</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.FormTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Renders an input form]]></description>
-
-        <attribute>
-            <name>onsubmit</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML onsubmit attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>action</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set action nane to submit to, without .action suffix]]></description>
-
-        </attribute>
-        <attribute>
-            <name>target</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML form target attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>enctype</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML form enctype attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>method</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML form method attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>namespace</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[namespace for action to submit to]]></description>
-
-        </attribute>
-        <attribute>
-            <name>validate</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Whether client side/remote validation should be performed. Only useful with theme xhtml/ajax]]></description>
-
-        </attribute>
-        <attribute>
-            <name>portletMode</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The portlet mode to display after the form submit]]></description>
-
-        </attribute>
-        <attribute>
-            <name>windowState</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The window state to display after the form submit]]></description>
-
-        </attribute>
-        <attribute>
-            <name>acceptcharset</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The accepted charsets for this form. The values may be comma or blank delimited.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>openTemplate</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set template to use for opening the rendered html.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>include</name>
-        <tag-class>org.apache.struts2.views.jsp.IncludeTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Include a servlet's output (result of servlet or a JSP page)]]></description>
-
-        <attribute>
-            <name>value</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The jsp/servlet output to include]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>div</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.DivTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render HTML div providing content from remote call via AJAX]]></description>
-
-        <attribute>
-            <name>updateFreq</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[How often to re-fetch the content (in milliseconds)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>delay</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[How long to wait before fetching the content (in milliseconds)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>loadingText</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The text to display to the user while the new content is being fetched (especially good if the content will take awhile)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listenTopics</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Topic name to listen to (comma delimited), that will cause the DIV's content to be re-fetched]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The theme to use for the element. <b>This tag will usually use the ajax theme.</b>]]></description>
-
-        </attribute>
-        <attribute>
-            <name>href</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The URL to call to obtain the content]]></description>
-
-        </attribute>
-        <attribute>
-            <name>errorText</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The text to display to the user if the is an error fetching the content]]></description>
-
-        </attribute>
-        <attribute>
-            <name>showErrorTransportText</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[when to show the error message as content when the URL had problems]]></description>
-
-        </attribute>
-        <attribute>
-            <name>afterLoading</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Javascript code that will be executed after the content has been fetched]]></description>
-
-        </attribute>
-        <attribute>
-            <name>openTemplate</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set template to use for opening the rendered html.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>label</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.LabelTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a label that displays read-only information]]></description>
-
-        <attribute>
-            <name>for</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML for attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>action</name>
-        <tag-class>org.apache.struts2.views.jsp.ActionTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Execute an action from within a view]]></description>
-
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[the id (if speficied) to put the action under stack's context.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[name of the action to be executed (without the extension suffix eg. .action)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>namespace</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[namespace for action to call]]></description>
-
-        </attribute>
-        <attribute>
-            <name>executeResult</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[whether the result of this action (probably a view) should be executed/rendered]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ignoreContextParams</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[whether the request parameters are to be included when the action is invoked]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>bean</name>
-        <tag-class>org.apache.struts2.views.jsp.BeanTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Instantiate a JavaBean and place it in the context.]]></description>
-
-        <attribute>
-            <name>name</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[the class name of the bean to be instantiated (must respect JavaBean specification)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>sort</name>
-        <tag-class>org.apache.struts2.views.jsp.iterator.SortIteratorTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Sort a List using a Comparator both passed in as the tag attribute.]]></description>
-
-        <attribute>
-            <name>comparator</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The comparator to use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>source</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The iterable source to sort]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The id of the tag element.]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>optgroup</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.OptGroupTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Renders a Select Tag's OptGroup Tag]]></description>
-
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the label attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the disable attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>list</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the list attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the listKey attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the listValue attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>hidden</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.HiddenTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a hidden input field]]></description>
-
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>iterator</name>
-        <tag-class>org.apache.struts2.views.jsp.IteratorTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Iterate over a iterable value]]></description>
-
-        <attribute>
-            <name>status</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[if specified, an instanceof IteratorStatus will be pushed into stack upon each iteration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[the iteratable source to iterate over, else an the object itself will be put into a newly created List]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>actionerror</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.ActionErrorTag</tag-class>
-        <body-content>empty</body-content>
-        <description><![CDATA[Render action errors if they exists]]></description>
-
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>if</name>
-        <tag-class>org.apache.struts2.views.jsp.IfTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[If tag]]></description>
-
-        <attribute>
-            <name>test</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Expression to determine if body of tag is to be displayed]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>select</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.SelectTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a select element]]></description>
-
-        <attribute>
-            <name>emptyOption</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether or not to add an empty (--) option after the header option]]></description>
-
-        </attribute>
-        <attribute>
-            <name>headerKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Key for first item in list. Must not be empty! "'-1'" and "''" is correct, "" is bad.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>headerValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Value expression for first item in list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>multiple</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute. Passing a Collection may work too? Haven't tested this.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>size</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Size of the element box (# of elements to show)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>list</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field value from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field content from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>reset</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.ResetTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a reset button]]></description>
-
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Supply a reset button text apart from reset value. Will have no effect for <i>input</i> type reset, since button text will always be the value parameter.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>action</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set action attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>method</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set method attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>align</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML align attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>type</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The type of submit to use. Valid values are <i>input</i>, <i>button</i> and <i>image</i>.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>append</name>
-        <tag-class>org.apache.struts2.views.jsp.iterator.AppendIteratorTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Append the values of a list of iterators to one iterator]]></description>
-
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[the id of which if supplied will have the resultant appended iterator stored under in the stack's context]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>updownselect</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.UpDownSelectTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a up down select element]]></description>
-
-        <attribute>
-            <name>allowMoveUp</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether move up button should be displayed]]></description>
-
-        </attribute>
-        <attribute>
-            <name>allowMoveDown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether move down button should be displayed]]></description>
-
-        </attribute>
-        <attribute>
-            <name>allowSelectAll</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether or not select all button should be displayed]]></description>
-
-        </attribute>
-        <attribute>
-            <name>moveUpLabel</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Text to display on the move up button]]></description>
-
-        </attribute>
-        <attribute>
-            <name>moveDownLabel</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Text to display on the move down button]]></description>
-
-        </attribute>
-        <attribute>
-            <name>selectAllLabel</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Text to display on the select all button]]></description>
-
-        </attribute>
-        <attribute>
-            <name>emptyOption</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether or not to add an empty (--) option after the header option]]></description>
-
-        </attribute>
-        <attribute>
-            <name>headerKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Key for first item in list. Must not be empty! "'-1'" and "''" is correct, "" is bad.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>headerValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Value expression for first item in list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>multiple</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute. Passing a Collection may work too? Haven't tested this.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>size</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Size of the element box (# of elements to show)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>list</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field value from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field content from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>else</name>
-        <tag-class>org.apache.struts2.views.jsp.ElseTag</tag-class>
-        <description><![CDATA[Else tag]]></description>
-
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>debug</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.DebugTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render debug tag]]></description>
-
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>param</name>
-        <tag-class>org.apache.struts2.views.jsp.ParamTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Parametrize other tags]]></description>
-
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Name of Parameter to set]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Value expression for Parameter to set]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>optiontransferselect</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.OptionTransferSelectTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Renders an input form]]></description>
-
-        <attribute>
-            <name>addAllToLeftLabel</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[set Add To Left button label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>addAllToRightLabel</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[set Add All To Right button label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>addToLeftLabel</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[set Add To Left button label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>addToRightLabel</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[set Add To Right button label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>allowAddAllToLeft</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[enable Add All To Left button]]></description>
-
-        </attribute>
-        <attribute>
-            <name>allowAddAllToRight</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[enable Add All To Right button]]></description>
-
-        </attribute>
-        <attribute>
-            <name>allowAddToLeft</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[enable Add To Left button]]></description>
-
-        </attribute>
-        <attribute>
-            <name>allowAddToRight</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[enable Add To Right button]]></description>
-
-        </attribute>
-        <attribute>
-            <name>leftTitle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[set Left title]]></description>
-
-        </attribute>
-        <attribute>
-            <name>rightTitle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[set Right title]]></description>
-
-        </attribute>
-        <attribute>
-            <name>allowSelectAll</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[enable Select All button]]></description>
-
-        </attribute>
-        <attribute>
-            <name>selectAllLabel</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[set Select All button label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>buttonCssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[set buttons css class]]></description>
-
-        </attribute>
-        <attribute>
-            <name>buttonCssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[set button css style]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleList</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The second iterable source to populate from.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleListKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The key expression to use for second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleListValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The value expression to use for second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleName</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name for complete component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The value expression for complete component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>formName</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The form name this component resides in and populates to]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleCssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class for the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleCssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style for the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleHeaderKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The header key for the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleHeaderValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The header value for the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleEmptyOption</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Decides if the second list will add an empty option]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleDisabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Decides if a disable attribute should be added to the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleId</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The id of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleMultiple</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Decides if multiple attribute should be set on the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onblur attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onchange attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onclick attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOndblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the ondbclick attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onfocus attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onkeydown attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onkeypress attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onkeyup attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onmousedown attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onmousemove attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onmouseout attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onmouseover attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onmouseup attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onselect attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleSize</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the size attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleListKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the list key of the second attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>emptyOption</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Decides of an empty option is to be inserted in the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>headerKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Set the header key of the second list. Must not be empty! "'-1'" and "''" is correct, "" is bad.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>headerValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the header value of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>multiple</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>size</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Size of the element box (# of elements to show)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>list</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field value from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field content from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>textfield</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.TextFieldTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render an HTML input field of type text]]></description>
-
-        <attribute>
-            <name>maxlength</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML maxlength attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>maxLength</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Deprecated. Use maxlength instead.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>readonly</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether the input is readonly]]></description>
-
-        </attribute>
-        <attribute>
-            <name>size</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML size attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>doubleselect</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.DoubleSelectTag</tag-class>
-        <body-content>JSP</body-content>
-        <description>
-            <![CDATA[Renders two HTML select elements with second one changing displayed values depending on selected entry of first one.]]></description>
-
-        <attribute>
-            <name>doubleList</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The second iterable source to populate from.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleListKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The key expression to use for second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleListValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The value expression to use for second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleName</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name for complete component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The value expression for complete component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>formName</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The form name this component resides in and populates to]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleCssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class for the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleCssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style for the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleHeaderKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The header key for the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleHeaderValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The header value for the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleEmptyOption</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Decides if the second list will add an empty option]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleDisabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Decides if a disable attribute should be added to the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleId</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The id of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleMultiple</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Decides if multiple attribute should be set on the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onblur attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onchange attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onclick attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOndblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the ondbclick attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onfocus attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onkeydown attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onkeypress attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onkeyup attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onmousedown attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onmousemove attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onmouseout attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onmouseover attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onmouseup attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleOnselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the onselect attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleSize</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the size attribute of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleListKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the list key of the second attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>emptyOption</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Decides of an empty option is to be inserted in the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>headerKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Set the header key of the second list. Must not be empty! "'-1'" and "''" is correct, "" is bad.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>headerValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the header value of the second list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>multiple</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>size</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Size of the element box (# of elements to show)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>doubleAccesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>list</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field value from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field content from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>textarea</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.TextareaTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render HTML textarea tag.]]></description>
-
-        <attribute>
-            <name>cols</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML cols attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>readonly</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether the textarea is readonly]]></description>
-
-        </attribute>
-        <attribute>
-            <name>rows</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML rows attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>wrap</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML wrap attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>generator</name>
-        <tag-class>org.apache.struts2.views.jsp.iterator.IteratorGeneratorTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Generate an iterator for a iterable source.]]></description>
-
-        <attribute>
-            <name>count</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[the max number entries to be in the iterator]]></description>
-
-        </attribute>
-        <attribute>
-            <name>separator</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[the separator to be used in separating the <i>val</i> into entries of the iterator]]></description>
-
-        </attribute>
-        <attribute>
-            <name>val</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[the source to be parsed into an iterator]]></description>
-
-        </attribute>
-        <attribute>
-            <name>converter</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[the converter to convert the String entry parsed from <i>val</i> into an object]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[the id to store the resultant iterator into page context, if such id is supplied]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>checkbox</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.CheckboxTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a checkbox input field]]></description>
-
-        <attribute>
-            <name>fieldValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The actual HTML value attribute of the checkbox.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>date</name>
-        <tag-class>org.apache.struts2.views.jsp.DateTag</tag-class>
-        <body-content>empty</body-content>
-        <description><![CDATA[Render a formatted date.]]></description>
-
-        <attribute>
-            <name>format</name>
-            <required>false</required>
-            <rtexprvalue>false</rtexprvalue>
-
-            <description><![CDATA[Date or DateTime format pattern]]></description>
-
-        </attribute>
-        <attribute>
-            <name>nice</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether to print out the date nicely]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The date value to format]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>a</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.AnchorTag</tag-class>
-        <body-content>JSP</body-content>
-        <description>
-            <![CDATA[Render a HTML href element that when clicked calls a URL via remote XMLHttpRequest]]></description>
-
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The id to assign the component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>notifyTopics</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Topic names to post an event to after the remote call has been made]]></description>
-
-        </attribute>
-        <attribute>
-            <name>preInvokeJS</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[A javascript snippet that will be invoked prior to the execution of the target href. If provided must return true or false. True indicates to continue executing target, false says do not execute link target. Possible uses are for confirm dialogs.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The theme to use for the element. <b>This tag will usually use the ajax theme.</b>]]></description>
-
-        </attribute>
-        <attribute>
-            <name>href</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The URL to call to obtain the content]]></description>
-
-        </attribute>
-        <attribute>
-            <name>errorText</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The text to display to the user if the is an error fetching the content]]></description>
-
-        </attribute>
-        <attribute>
-            <name>showErrorTransportText</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[when to show the error message as content when the URL had problems]]></description>
-
-        </attribute>
-        <attribute>
-            <name>afterLoading</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Javascript code that will be executed after the content has been fetched]]></description>
-
-        </attribute>
-        <attribute>
-            <name>openTemplate</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set template to use for opening the rendered html.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>file</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.FileTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a file input field]]></description>
-
-        <attribute>
-            <name>accept</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML accept attribute to indicate accepted file mimetypes]]></description>
-
-        </attribute>
-        <attribute>
-            <name>size</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML size attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>url</name>
-        <tag-class>org.apache.struts2.views.jsp.URLTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[This tag is used to create a URL]]></description>
-
-        <attribute>
-            <name>includeParams</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The includeParams attribute may have the value 'none', 'get' or 'all'.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>scheme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set scheme attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The target value to use, if not using action]]></description>
-
-        </attribute>
-        <attribute>
-            <name>action</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The action generate url for, if not using value]]></description>
-
-        </attribute>
-        <attribute>
-            <name>namespace</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The namespace to use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>method</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The method of action to use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>encode</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[whether to encode parameters]]></description>
-
-        </attribute>
-        <attribute>
-            <name>includeContext</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[whether actual context should be included in url]]></description>
-
-        </attribute>
-        <attribute>
-            <name>portletMode</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The resulting portlet mode]]></description>
-
-        </attribute>
-        <attribute>
-            <name>windowState</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The resulting portlet window state]]></description>
-
-        </attribute>
-        <attribute>
-            <name>portletUrlType</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Specifies if this should be a portlet render or action url]]></description>
-
-        </attribute>
-        <attribute>
-            <name>anchor</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The anchor for this URL]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>radio</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.RadioTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Renders a radio button input field]]></description>
-
-        <attribute>
-            <name>list</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field value from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field content from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>combobox</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.ComboBoxTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Widget that fills a text box from a select]]></description>
-
-        <attribute>
-            <name>list</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Iteratable source to populate from. If this is missing, the select widget is simply not displayed.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>maxlength</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML maxlength attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>maxLength</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Deprecated. Use maxlength instead.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>readonly</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether the input is readonly]]></description>
-
-        </attribute>
-        <attribute>
-            <name>size</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML size attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>checkboxlist</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.CheckboxListTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a list of checkboxes]]></description>
-
-        <attribute>
-            <name>list</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listKey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field value from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listValue</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Property of list objects to get field content from]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>panel</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.PanelTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a panel for tabbedPanel]]></description>
-
-        <attribute>
-            <name>tabName</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The text of the tab to display in the header tab list]]></description>
-
-        </attribute>
-        <attribute>
-            <name>subscribeTopicName</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set subscribeTopicName attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>remote</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[determines whether this is a remote panel (ajax) or a local panel (content loaded into visible/hidden containers)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>updateFreq</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[How often to re-fetch the content (in milliseconds)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>delay</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[How long to wait before fetching the content (in milliseconds)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>loadingText</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The text to display to the user while the new content is being fetched (especially good if the content will take awhile)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>listenTopics</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Topic name to listen to (comma delimited), that will cause the DIV's content to be re-fetched]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The theme to use for the element. <b>This tag will usually use the ajax theme.</b>]]></description>
-
-        </attribute>
-        <attribute>
-            <name>href</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The URL to call to obtain the content]]></description>
-
-        </attribute>
-        <attribute>
-            <name>errorText</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The text to display to the user if the is an error fetching the content]]></description>
-
-        </attribute>
-        <attribute>
-            <name>showErrorTransportText</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[when to show the error message as content when the URL had problems]]></description>
-
-        </attribute>
-        <attribute>
-            <name>afterLoading</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Javascript code that will be executed after the content has been fetched]]></description>
-
-        </attribute>
-        <attribute>
-            <name>openTemplate</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set template to use for opening the rendered html.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>actionmessage</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.ActionMessageTag</tag-class>
-        <body-content>empty</body-content>
-        <description><![CDATA[Render action messages if they exists]]></description>
-
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>tree</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.TreeTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a tree widget.]]></description>
-
-        <attribute>
-            <name>toggle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The toggle property.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>treeSelectedTopic</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The treeSelectedTopic property.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>treeExpandedTopic</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The treeExpandedTopic property.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>treeCollapsedTopic</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The treeCollapsedTopic property.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>rootNode</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The rootNode property.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>childCollectionProperty</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The childCollectionProperty property.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>nodeTitleProperty</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The nodeTitleProperty property.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>nodeIdProperty</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The nodeIdProperty property.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>showRootGrid</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The showRootGrid property (default true).]]></description>
-
-        </attribute>
-        <attribute>
-            <name>blankIconSrc</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Blank icon image source.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>expandIconSrcMinus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Expand icon (-) image source.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>expandIconSrcPlus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Expand Icon (+) image source.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>gridIconSrcC</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Image source for under child item child icons.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>gridIconSrcL</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Image source for last child grid.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>gridIconSrcP</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Image source for under parent item child icons.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>gridIconSrcV</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Image source for vertical line.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>gridIconSrcX</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Image source for grid for sole root item.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>gridIconSrcY</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Image source for grid for last root item.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>iconHeight</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Icon height (default 18 pixels).]]></description>
-
-        </attribute>
-        <attribute>
-            <name>iconWidth</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Icon width (default 19 pixels).]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateCssPath</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Template css path (default {contextPath}/struts/tree.css.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>toggleDuration</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Toggle duration (default 150 ms)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>showGrid</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Show grid (default true).]]></description>
-
-        </attribute>
-        <attribute>
-            <name>openTemplate</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set template to use for opening the rendered html.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>property</name>
-        <tag-class>org.apache.struts2.views.jsp.PropertyTag</tag-class>
-        <body-content>empty</body-content>
-        <description><![CDATA[Print out expression which evaluates against the stack]]></description>
-
-        <attribute>
-            <name>default</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The default value to be used if <u>value</u> attribute is null]]></description>
-
-        </attribute>
-        <attribute>
-            <name>escape</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether to escape HTML]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[value to be displayed]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>tabbedPanel</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.TabbedPanelTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a tabbedPanel widget.]]></description>
-
-        <attribute>
-            <name>id</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The id to assign to the component.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>openTemplate</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set template to use for opening the rendered html.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>treenode</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.TreeNodeTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a tree node within a tree widget.]]></description>
-
-        <attribute>
-            <name>label</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering tree node label.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>openTemplate</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set template to use for opening the rendered html.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>fielderror</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.FieldErrorTag</tag-class>
-        <body-content>JSP</body-content>
-        <description>
-            <![CDATA[Render field error (all or partial depending on param tag nested)if they exists]]></description>
-
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>subset</name>
-        <tag-class>org.apache.struts2.views.jsp.iterator.SubsetIteratorTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Takes an iterator and outputs a subset of it]]></description>
-
-        <attribute>
-            <name>count</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Indicate the number of entries to be in the resulting subset iterator]]></description>
-
-        </attribute>
-        <attribute>
-            <name>source</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Indicate the source of which the resulting subset iterator is to be derived base on]]></description>
-
-        </attribute>
-        <attribute>
-            <name>start</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Indicate the starting index (eg. first entry is 0) of entries in the source to be available as the first entry in the resulting subset iterator]]></description>
-
-        </attribute>
-        <attribute>
-            <name>decider</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Extension to plug-in a decider to determine if that particular entry is to be included in the resulting subset iterator]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The id of the tag element.]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>elseif</name>
-        <tag-class>org.apache.struts2.views.jsp.ElseIfTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Elseif tag]]></description>
-
-        <attribute>
-            <name>test</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Expression to determine if body of tag is to be displayed]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>text</name>
-        <tag-class>org.apache.struts2.views.jsp.TextTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render a I18n text message.]]></description>
-
-        <attribute>
-            <name>name</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Name of resource property to fetch]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-    <tag>
-
-        <name>datepicker</name>
-        <tag-class>org.apache.struts2.views.jsp.ui.DatePickerTag</tag-class>
-        <body-content>JSP</body-content>
-        <description><![CDATA[Render datepicker]]></description>
-
-        <attribute>
-            <name>language</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The language to use for the widget texts and localization presets.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>format</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The format to use for date field.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>showstime</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[Whether time selector is to be shown. Valid values are &quot;true&quot;, &quot;false&quot;, &quot;24&quot; and &quot;12&quot;.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>singleclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether to use selected value after single or double click.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>maxlength</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML maxlength attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>maxLength</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Deprecated. Use maxlength instead.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>readonly</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Whether the input is readonly]]></description>
-
-        </attribute>
-        <attribute>
-            <name>size</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[HTML size attribute]]></description>
-
-        </attribute>
-        <attribute>
-            <name>theme</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>templateDir</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[The template directory (other than default) to used to find the themes and hence the template.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>template</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssClass</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css class to use for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>cssStyle</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The css style definitions for element ro use]]></description>
-
-        </attribute>
-        <attribute>
-            <name>title</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html title attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>disabled</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>label</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Label expression used for rendering a element specific label]]></description>
-
-        </attribute>
-        <attribute>
-            <name>labelposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define label position of form element (top/left)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>requiredposition</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[define required position of required form element (left|right)]]></description>
-
-        </attribute>
-        <attribute>
-            <name>name</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[The name to set for element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>required</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tabindex</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>value</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Preset the value of input element.]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>ondblclick</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousedown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseover</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmousemove</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onmouseout</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onfocus</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onblur</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onblur attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeypress</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeydown</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onkeyup</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onselect</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>onchange</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
-
-        </attribute>
-        <attribute>
-            <name>accesskey</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the html accesskey attribute on rendered html ekement]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltip</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip of this particular component]]></description>
-
-        </attribute>
-        <attribute>
-            <name>tooltipConfig</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description><![CDATA[Set the tooltip configuration]]></description>
-
-        </attribute>
-        <attribute>
-            <name>id</name>
-            <required>false</required>
-            <rtexprvalue>true</rtexprvalue>
-
-            <description>
-                <![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
-
-        </attribute>
-
-    </tag>
-
-</taglib>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/default.properties b/trunk/core/src/main/resources/org/apache/struts2/default.properties
deleted file mode 100644
index 275322c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/default.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-### START SNIPPET: complete_file
-
-### Struts default properties
-###(can be overridden by a struts.properties file in the root of the classpath)
-###
-
-### Specifies the Configuration used to configure Struts 
-### one could extend org.apache.struts2.config.Configuration
-### to build one's customize way of getting the configurations parameters into Struts
-# struts.configuration=org.apache.struts2.config.DefaultConfiguration
-
-### This can be used to set your default locale and encoding scheme
-# struts.locale=en_US
-struts.i18n.encoding=UTF-8
-
-### if specified, the default object factory can be overridden here
-### Note: short-hand notation is supported in some cases, such as "spring"
-###       Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here  
-# struts.objectFactory = spring
-
-### specifies the autoWiring logic when using the SpringObjectFactory.
-### valid values are: name, type, auto, and constructor (name is the default)
-struts.objectFactory.spring.autoWire = name
-
-### indicates to the struts-spring integration if Class instances should be cached
-### this should, until a future Spring release makes it possible, be left as true
-### unless you know exactly what you are doing!
-### valid values are: true, false (true is the default)
-struts.objectFactory.spring.useClassCache = true
-
-### if specified, the default object type determiner can be overridden here
-### Note: short-hand notation is supported in some cases, such as "tiger" or "notiger"
-###       Alternatively, you can provide a com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation name here
-### Note: if you have the xwork-tiger.jar within your classpath, GenericsObjectTypeDeterminer is used by default
-###       To disable tiger support use the "notiger" property value here.
-#struts.objectTypeDeterminer = tiger
-#struts.objectTypeDeterminer = notiger
-
-### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
-# struts.multipart.parser=cos
-# struts.multipart.parser=pell
-struts.multipart.parser=jakarta
-# uses javax.servlet.context.tempdir by default
-struts.multipart.saveDir=
-struts.multipart.maxSize=2097152
-
-### Load custom property files (does not override struts.properties!)
-# struts.custom.properties=application,org/apache/struts2/extension/custom
-
-### How request URLs are mapped to and from actions
-struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper
-
-### Used by the DefaultActionMapper
-### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
-struts.action.extension=action
-
-### Used by FilterDispatcher
-### If true then Struts serves static content from inside its jar. 
-### If false then the static content must be available at <context_path>/struts
-struts.serve.static=true
-
-### Used by FilterDispatcher
-### This is good for development where one wants changes to the static content be
-### fetch on each request. 
-### NOTE: This will only have effect if struts.serve.static=true
-### If true -> Struts will write out header for static contents such that they will
-###             be cached by web browsers (using Date, Cache-Content, Pragma, Expires)
-###             headers).
-### If false -> Struts will write out header for static contents such that they are
-###            NOT to be cached by web browser (using Cache-Content, Pragma, Expires
-###            headers)
-struts.serve.static.browserCache=true
-
-### Set this to false if you wish to disable implicit dynamic method invocation
-### via the URL request. This includes URLs like foo!bar.action, as well as params
-### like method:bar (but not action:foo). 
-### An alternative to implicit dynamic method invocation is to use wildcard 
-### mappings, such as <action name="*/*" method="{2}" class="actions.{1}">
-struts.enable.DynamicMethodInvocation = true
-
-### use alternative syntax that requires %{} in most places
-### to evaluate expressions for String attributes for tags
-struts.tag.altSyntax=true
-
-### when set to true, Struts will act much more friendly for developers. This
-### includes:
-### - struts.i18n.reload = true
-### - struts.configuration.xml.reload = true
-### - raising various debug or ignorable problems to errors
-###   For example: normally a request to foo.action?someUnknownField=true should
-###                be ignored (given that any value can come from the web and it
-###                should not be trusted). However, during development, it may be
-###                useful to know when these errors are happening and be told of
-###                them right away.
-struts.devMode = false
-
-### when set to true, resource bundles will be reloaded on _every_ request.
-### this is good during development, but should never be used in production
-struts.i18n.reload=false
-
-### Standard UI theme
-### Change this to reflect which path should be used for JSP control tag templates by default
-struts.ui.theme=xhtml
-struts.ui.templateDir=template
-#sets the default template type. Either ftl, vm, or jsp
-struts.ui.templateSuffix=ftl
-
-### Configuration reloading
-### This will cause the configuration to reload struts.xml when it is changed
-struts.configuration.xml.reload=false
-
-### Location of velocity.properties file.  defaults to velocity.properties
-# struts.velocity.configfile = velocity.properties
-
-### Comma separated list of VelocityContext classnames to chain to the StrutsVelocityContext
-# struts.velocity.contexts =
-
-### used to build URLs, such as the UrlTag
-struts.url.http.port = 80
-struts.url.https.port = 443
-### possible values are: none, get or all
-struts.url.includeParams = get
-
-### Load custom default resource bundles
-# struts.custom.i18n.resources=testmessages,testmessages2
-
-### workaround for some app servers that don't handle HttpServletRequest.getParameterMap()
-### often used for WebLogic, Orion, and OC4J
-struts.dispatcher.parametersWorkaround = false
-
-### configure the Freemarker Manager class to be used
-### Allows user to plug-in customised Freemarker Manager if necessary
-### MUST extends off org.apache.struts2.views.freemarker.FreemarkerManager
-#struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager
-
-### See the StrutsBeanWrapper javadocs for more information
-struts.freemarker.wrapper.altMap=true
-
-### configure the XSLTResult class to use stylesheet caching.
-### Set to true for developers and false for production.
-struts.xslt.nocache=false
-
-### A list of configuration files automatically loaded by Struts
-struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml
-
-### END SNIPPET: complete_file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/dispatcher/error.ftl b/trunk/core/src/main/resources/org/apache/struts2/dispatcher/error.ftl
deleted file mode 100644
index 58049e8..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/dispatcher/error.ftl
+++ /dev/null
@@ -1,123 +0,0 @@
-<html>
-<head>
-    <title>Struts Problem Report</title>
-    <style>
-    	pre {
-	    	margin: 0;
-	        padding: 0;
-	    }    
-    </style>
-</head>
-<body>
-    <h2>Struts Problem Report</h2>
-    <p>
-    Struts has detected an unhandled exception:
-    </p>
-
-<#assign msgs = [] />
-<#list chain as ex>
-    <#if ex.message?exists>
-        <#assign msgs = [ex.message] + msgs/>
-    </#if>    
-</#list>
-<#assign rootex = exception/>
-<#list chain as ex>
-    <#if (ex.location?exists && (ex.location != unknown))>
-        <#assign rootloc = ex.location/>
-        <#assign rootex = ex/>
-    <#else>
-            <#assign tmploc = locator.getLocation(ex) />
-            <#if (tmploc != unknown)>
-            <#assign rootloc = tmploc/>
-                <#assign rootex = ex/>
-            </#if>  
-    </#if>    
-</#list>
-
-<div id="exception-info">
-<table>
-    <tr>
-        <td><strong>Messages</strong>:</td>
-        <td>
-            <#if (msgs?size > 1)>
-            <ol>
-                <#list msgs as msg>
-                    <li>${msg}</li>
-                </#list>
-            </ol>
-            <#elseif (msgs?size == 1)>
-                ${msgs[0]}
-            </#if>
-        </td>
-    </tr>
-    <#if rootloc?exists>
-    <tr>
-        <td><strong>File</strong>:</td>
-        <td>${rootloc.URI}</td>
-    </tr>
-    <tr>
-        <td><strong>Line number</strong>:</td>
-        <td>${rootloc.lineNumber}</td>
-    </tr>
-    <#if (rootloc.columnNumber >= 0)>
-    <tr>
-        <td><strong>Column number</strong>:</td>
-        <td>${rootloc.columnNumber}</td>
-    </tr>
-    </#if>
-    </#if>
-    
-</table>
-</div>
-
-<#if rootloc?exists>
-    <#assign snippet = rootloc.getSnippet(2) />
-    <#if (snippet?size > 0)>
-        <div id="snippet">
-        <hr />
-            
-            <#list snippet as line>
-                <#if (line_index == 2)>
-                	<#if (rootloc.columnNumber >= 3)>
-                        <pre style="background:yellow">${(line[0..(rootloc.columnNumber-3)]?html)}<span style="background:red">${(line[(rootloc.columnNumber-2)]?html)}</span><#if ((rootloc.columnNumber)<line.length())>${(line[(rootloc.columnNumber-1)..]?html)}</#if></pre>
-                    <#else>
-                       	<pre style="background:yellow">${line?html}</pre>
-                    </#if>    
-                <#else>
-                    <pre>${line?html}</pre>
-                </#if>    
-            </#list>
-        </div>
-    </#if>    
-</#if>
-
-<div id="stacktraces">
-<hr />
-<h3>Stacktraces</h3>
-<#list chain as ex>
-<div class="stacktrace" style="padding-left: ${ex_index * 2}em">
-    <strong>${ex}</strong>
-    <div>
-    <pre>
-    <#list ex.stackTrace as frame>
-    ${frame}
-    </#list>
-    </pre>
-    </div>
-</div>
-</#list>
-</div>
-
-<div class="footer">
-<hr />
-<p>
-You are seeing this page because development mode is enabled.  Development mode, or devMode, enables extra
-debugging behaviors and reports to assist developers.  To disable this mode, set:
-<pre>
-  struts.devMode=false
-</pre>
-in your <code>WEB-INF/classes/struts.properties</code> file.
-</p>
-</div>
-</body>
-</html>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/console.ftl b/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/console.ftl
deleted file mode 100644
index 14b39b5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/console.ftl
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<head>
-    <script language="javascript">
-    var baseUrl = "<@s.url value="/struts" includeParams="none"/>";
-    window.open(baseUrl+"/webconsole.html", 'OGNL Console','width=500,height=450,'+
-        'status=no,toolbar=no,menubar=no');
-    </script>    
-</head>
-<body>
-<pre>
-    ${debugXML}
-</pre>
-</body>
-</html>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/webconsole.css b/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/webconsole.css
deleted file mode 100644
index 293e2fc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/webconsole.css
+++ /dev/null
@@ -1,19 +0,0 @@
-.wc-results {

-    overflow: auto; 

-    margin: 0px; 

-    padding: 5px; 

-    font-family: courier; 

-    color: white; 

-    background-color: black; 

-    height: 400px;

-}

-.wc-results pre {

-    display: inline;

-}

-.wc-command {

-    margin: 0px; 

-    font-family: courier; 

-    color: white; 

-    background-color: black; 

-    width: 100%;

-}

diff --git a/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/webconsole.html b/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/webconsole.html
deleted file mode 100644
index ce093c9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/webconsole.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<html>
-<head>
-        <link rel="stylesheet" type="text/css" href="webconsole.css" />
-<script src="webconsole.js"></script>
-<script src="dojo/dojo.js"></script>
-<script src="dojo/src/event/__package__.js"></script>
-<title>OGNL Console</title>
-</head>
-<body>
-<div id="shell" >
-   <form onsubmit="return false">
-        <div class="wc-results" id="wc-result">
-             Welcome to the OGNL console!
-             <br />
-             :-&gt;
-        </div>
-        <input onkeyup="keyEvent(event)" class="wc-command" id="wc-command" type="text" />
-    </form>
-</div>
-</body>
-</html>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/webconsole.js b/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/webconsole.js
deleted file mode 100644
index 2e7783b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/interceptor/debugging/webconsole.js
+++ /dev/null
@@ -1,58 +0,0 @@
-  function printResult(result_string)
-  {
-      var result_div = document.getElementById('wc-result');
-      var result_array = result_string.split('\n');
-
-      var new_command = document.getElementById('wc-command').value;
-      result_div.appendChild(document.createTextNode(new_command));
-      result_div.appendChild(document.createElement('br'));
-
-      for (var line_index in result_array) {
-          var result_wrap = document.createElement('pre')
-          line = document.createTextNode(result_array[line_index]);
-          result_wrap.appendChild(line);
-          result_div.appendChild(result_wrap);
-          result_div.appendChild(document.createElement('br'));
-
-      }
-      result_div.appendChild(document.createTextNode(':-> '));
-
-      result_div.scrollTop = result_div.scrollHeight;
-      document.getElementById('wc-command').value = '';
-  }
-
-  function keyEvent(event)
-  {
-      switch(event.keyCode){
-          case 13:
-              var the_shell_command = document.getElementById('wc-command').value;
-              if (the_shell_command) {
-                  commands_history[commands_history.length] = the_shell_command;
-                  history_pointer = commands_history.length;
-                  var the_url = window.opener.location.pathname + '?debug=command&expression='+escape(the_shell_command);
-                  dojo.io.bind({
-                        url: the_url,
-                        load: function(type, data, evt){ printResult(data); },
-                        mimetype: "text/plain"
-                    });
-              }
-              break;
-          case 38: // this is the arrow up
-              if (history_pointer > 0) {
-                  history_pointer--;
-                  document.getElementById('wc-command').value = commands_history[history_pointer];
-              }
-              break;
-          case 40: // this is the arrow down
-              if (history_pointer < commands_history.length - 1 ) {
-                  history_pointer++;
-                  document.getElementById('wc-command').value = commands_history[history_pointer];
-              }
-              break;
-          default:
-              break;
-      }
-  }    
-
-        var commands_history = new Array();
-        var history_pointer;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/interceptor/package.html b/trunk/core/src/main/resources/org/apache/struts2/interceptor/package.html
deleted file mode 100644
index 1413ca1..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/interceptor/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Web specific interceptor classes.</body>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/interceptor/wait.ftl b/trunk/core/src/main/resources/org/apache/struts2/interceptor/wait.ftl
deleted file mode 100644
index 1d1869f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/interceptor/wait.ftl
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-    <head>
-        <meta http-equiv="refresh" content="5;url=<@s.url includeParams="none"/>"/>
-    </head>
-    <body>
-        Please wait while we process your request...
-        <p/>
-
-        This page will reload automatically and display your request when it is completed.
-    </body>
-</html>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/package.html b/trunk/core/src/main/resources/org/apache/struts2/package.html
deleted file mode 100644
index 5ed3ff0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Main Struts interfaces and classes.</body>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/sitegraph/sitegraph-usage.txt b/trunk/core/src/main/resources/org/apache/struts2/sitegraph/sitegraph-usage.txt
deleted file mode 100644
index 258d019..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/sitegraph/sitegraph-usage.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-// START SNIPPET: sitegraph-usage
-Usage: -config CONFIG_DIR -views VIEWS_DIRS -output OUTPUT [-ns NAMESPACE]
-       CONFIG_DIR => a directory containing struts.xml
-       VIEWS_DIRS => comma seperated list of dirs containing JSPs, VMs, etc
-       OUPUT      => the directory where the output should go
-       NAMESPACE  => the namespace path restriction (/, /foo, etc)
-// END SNIPPET: sitegraph-usage
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/CommonFunctions.js b/trunk/core/src/main/resources/org/apache/struts2/static/CommonFunctions.js
deleted file mode 100644
index 25e6094..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/CommonFunctions.js
+++ /dev/null
@@ -1,97 +0,0 @@
-
-/**
- *      Methods for the tabbed component
- */
-var unselectedClass = "tab_default tab_unselected";
-var unselectedContentsClass = "tab_contents_hidden";
-var unselectedOverClass = "tab_default tab_unselected tab_unselected_over";
-var selectedClass = "tab_default tab_selected";
-var selectedContentsClass = "tab_contents_header";
-
-function mouseIn(tab) {
-    var className = tab.className;
-    if (className.indexOf('unselected') > -1) {
-        className = unselectedOverClass;
-        tab.className = className;
-    }
-}
-
-function mouseOut(tab) {
-    var className = tab.className;
-    if (className.indexOf('unselected') > -1) {
-        className = unselectedClass;
-        tab.className = className;
-    }
-}
-
-/*
- * An object that represents a tabbed page.
- *
- * @param htmlId the id of the element that represents the tab page
- * @param remote whether this is a remote element and needs refreshing
- */
-function TabContent( htmlId, remote ) {
-
-    this.elementId = htmlId;
-    this.isRemote = remote;
-    var selected = false;
-    var self = this;
-
-    /*
-     * Shows or hides this page depending on whether the visible
-     * tab id matches this objects id.
-     *
-     * @param visibleTabId the id of the tab that was selected
-     */
-    this.updateVisibility = function( visibleTabId ) {
-        var thElement = document.getElementById( 'tab_header_'+self.elementId );
-        var tcElement = document.getElementById( 'tab_contents_'+self.elementId );
-        if (!selected && visibleTabId==self.elementId) {
-            thElement.className = selectedClass;
-            tcElement.className = selectedContentsClass;
-            self.selected = true;
-
-        } else {
-            thElement.className = unselectedClass;
-            tcElement.className = unselectedContentsClass;
-            self.selected = false;
-        }
-        if (self.isRemote==true && visibleTabId==self.elementId) {
-            var rel = window['tab_contents_update_'+self.elementId];
-            // If the first tab is a remote tab, rel is null on initial loading...
-            //  so don't try to call a method that doesn't exist.  This is only
-            //  for IE, and the workaround is to use a <a:action name="" executeResults="true" />
-            //  as the content of the DIV.
-            if (rel.bind)
-                rel.bind();
-        }
-    }
-
-}
-
-/**
- * Checks whether the current form include an ajax-ified submit button, if so
- * we return true (otherwise false).
- *
- * @param form the HTML form element to check
- */
-function isAjaxFormSubmit( form ) {
-    // we check whether this exists
-    //      <INPUT type="submit" dojoattachevent="onClick: execute" dojoattachpoint="attachBtn" />
-    var thisForm = document.getElementById(form.id);
-    var matchUrl = /\s+dojoAttachPoint/;
-    if( thisForm.innerHTML.match(matchUrl) ) {
-        return false;
-    }
-    for( i=0; i<thisForm.elements.length; i++ ) {
-        var field = thisForm.elements[i];
-        if( field.type.toLowerCase()=='submit' ) {
-            if( field.hasAttribute("dojoAttachPoint") && field.getAttribute("dojoAttachPoint")=="attachBtn" ) {
-                return false;
-            }
-        }
-    }
-    return true;
-}
-
-/**  end tabbed component functions ******************************************************************/
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/LICENSE b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/LICENSE
deleted file mode 100644
index f18ac70..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/LICENSE
+++ /dev/null
@@ -1,195 +0,0 @@
-Dojo is availble under *either* the terms of the modified BSD license *or* the
-Academic Free License version 2.1. As a recipient of Dojo, you may choose which
-license to receive this code under (except as noted in per-module LICENSE
-files). Some modules may not be the copyright of the Dojo Foundation. These
-modules contain explicit declarations of copyright in both the LICENSE files in
-the directories in which they reside and in the code itself. No external
-contributions are allowed under licenses which are fundamentally incompatible
-with the AFL or BSD licenses that Dojo is distributed under.
-
-The text of the AFL and BSD licenses is reproduced below. 
-
--------------------------------------------------------------------------------
-The "New" BSD License:
-**********************
-
-Copyright (c) 2005, The Dojo Foundation
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  * Redistributions of source code must retain the above copyright notice, this
-	list of conditions and the following disclaimer.
-  * Redistributions in binary form must reproduce the above copyright notice,
-	this list of conditions and the following disclaimer in the documentation
-	and/or other materials provided with the distribution.
-  * Neither the name of the Dojo Foundation nor the names of its contributors
-	may be used to endorse or promote products derived from this software
-	without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------------------
-The Academic Free License, v. 2.1:
-**********************************
-
-This Academic Free License (the "License") applies to any original work of
-authorship (the "Original Work") whose owner (the "Licensor") has placed the
-following notice immediately following the copyright notice for the Original
-Work:
-
-Licensed under the Academic Free License version 2.1
-
-1) Grant of Copyright License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license to do the
-following:
-
-a) to reproduce the Original Work in copies;
-
-b) to prepare derivative works ("Derivative Works") based upon the Original
-Work;
-
-c) to distribute copies of the Original Work and Derivative Works to the
-public;
-
-d) to perform the Original Work publicly; and
-
-e) to display the Original Work publicly.
-
-2) Grant of Patent License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
-claims owned or controlled by the Licensor that are embodied in the Original
-Work as furnished by the Licensor, to make, use, sell and offer for sale the
-Original Work and Derivative Works.
-
-3) Grant of Source Code License. The term "Source Code" means the preferred
-form of the Original Work for making modifications to it and all available
-documentation describing how to modify the Original Work. Licensor hereby
-agrees to provide a machine-readable copy of the Source Code of the Original
-Work along with each copy of the Original Work that Licensor distributes.
-Licensor reserves the right to satisfy this obligation by placing a
-machine-readable copy of the Source Code in an information repository
-reasonably calculated to permit inexpensive and convenient access by You for as
-long as Licensor continues to distribute the Original Work, and by publishing
-the address of that information repository in a notice immediately following
-the copyright notice that applies to the Original Work.
-
-4) Exclusions From License Grant. Neither the names of Licensor, nor the names
-of any contributors to the Original Work, nor any of their trademarks or
-service marks, may be used to endorse or promote products derived from this
-Original Work without express prior written permission of the Licensor. Nothing
-in this License shall be deemed to grant any rights to trademarks, copyrights,
-patents, trade secrets or any other intellectual property of Licensor except as
-expressly stated herein. No patent license is granted to make, use, sell or
-offer to sell embodiments of any patent claims other than the licensed claims
-defined in Section 2. No right is granted to the trademarks of Licensor even if
-such marks are included in the Original Work. Nothing in this License shall be
-interpreted to prohibit Licensor from licensing under different terms from this
-License any Original Work that Licensor otherwise would have a right to
-license.
-
-5) This section intentionally omitted.
-
-6) Attribution Rights. You must retain, in the Source Code of any Derivative
-Works that You create, all copyright, patent or trademark notices from the
-Source Code of the Original Work, as well as any notices of licensing and any
-descriptive text identified therein as an "Attribution Notice." You must cause
-the Source Code for any Derivative Works that You create to carry a prominent
-Attribution Notice reasonably calculated to inform recipients that You have
-modified the Original Work.
-
-7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
-the copyright in and to the Original Work and the patent rights granted herein
-by Licensor are owned by the Licensor or are sublicensed to You under the terms
-of this License with the permission of the contributor(s) of those copyrights
-and patent rights. Except as expressly stated in the immediately proceeding
-sentence, the Original Work is provided under this License on an "AS IS" BASIS
-and WITHOUT WARRANTY, either express or implied, including, without limitation,
-the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
-This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
-license to Original Work is granted hereunder except under this disclaimer.
-
-8) Limitation of Liability. Under no circumstances and under no legal theory,
-whether in tort (including negligence), contract, or otherwise, shall the
-Licensor be liable to any person for any direct, indirect, special, incidental,
-or consequential damages of any character arising as a result of this License
-or the use of the Original Work including, without limitation, damages for loss
-of goodwill, work stoppage, computer failure or malfunction, or any and all
-other commercial damages or losses. This limitation of liability shall not
-apply to liability for death or personal injury resulting from Licensor's
-negligence to the extent applicable law prohibits such limitation. Some
-jurisdictions do not allow the exclusion or limitation of incidental or
-consequential damages, so this exclusion and limitation may not apply to You.
-
-9) Acceptance and Termination. If You distribute copies of the Original Work or
-a Derivative Work, You must make a reasonable effort under the circumstances to
-obtain the express assent of recipients to the terms of this License. Nothing
-else but this License (or another written agreement between Licensor and You)
-grants You permission to create Derivative Works based upon the Original Work
-or to exercise any of the rights granted in Section 1 herein, and any attempt
-to do so except under the terms of this License (or another written agreement
-between Licensor and You) is expressly prohibited by U.S. copyright law, the
-equivalent laws of other countries, and by international treaty. Therefore, by
-exercising any of the rights granted to You in Section 1 herein, You indicate
-Your acceptance of this License and all of its terms and conditions.
-
-10) Termination for Patent Action. This License shall terminate automatically
-and You may no longer exercise any of the rights granted to You by this License
-as of the date You commence an action, including a cross-claim or counterclaim,
-against Licensor or any licensee alleging that the Original Work infringes a
-patent. This termination provision shall not apply for an action alleging
-patent infringement by combinations of the Original Work with other software or
-hardware.
-
-11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
-License may be brought only in the courts of a jurisdiction wherein the
-Licensor resides or in which Licensor conducts its primary business, and under
-the laws of that jurisdiction excluding its conflict-of-law provisions. The
-application of the United Nations Convention on Contracts for the International
-Sale of Goods is expressly excluded. Any use of the Original Work outside the
-scope of this License or after its termination shall be subject to the
-requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et
-seq., the equivalent laws of other countries, and international treaty. This
-section shall survive the termination of this License.
-
-12) Attorneys Fees. In any action to enforce the terms of this License or
-seeking damages relating thereto, the prevailing party shall be entitled to
-recover its costs and expenses, including, without limitation, reasonable
-attorneys' fees and costs incurred in connection with such action, including
-any appeal of such action. This section shall survive the termination of this
-License.
-
-13) Miscellaneous. This License represents the complete agreement concerning
-the subject matter hereof. If any provision of this License is held to be
-unenforceable, such provision shall be reformed only to the extent necessary to
-make it enforceable.
-
-14) Definition of "You" in This License. "You" throughout this License, whether
-in upper or lower case, means an individual or a legal entity exercising rights
-under, and complying with all of the terms of, this License. For legal
-entities, "You" includes any entity that controls, is controlled by, or is
-under common control with you. For purposes of this definition, "control" means
-(i) the power, direct or indirect, to cause the direction or management of such
-entity, whether by contract or otherwise, or (ii) ownership of fifty percent
-(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
-entity.
-
-15) Right to Use. You may use the Original Work in all ways not otherwise
-restricted or conditioned by this License or by law, and Licensor promises not
-to interfere with or be responsible for such uses by You.
-
-This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
-Permission is hereby granted to copy and distribute this license without
-modification. This license may not be modified without the express written
-permission of its copyright owner.
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/README b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/README
deleted file mode 100644
index 37c8571..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/README
+++ /dev/null
@@ -1,175 +0,0 @@
-The Dojo Toolkit
-----------------
-
-Dojo is a portable JavaScript toolkit for web application developers and
-JavaScript professionals. Dojo solves real-world problems by providing powerful
-abstractions and solid, tested implementations.
-
-
-Getting Started
----------------
-
-To use Dojo in your application, download one of the pre-built editions from the
-Dojo website, http://dojotoolkit.org. Once you have downloaded the file you
-will need to unzip the archive in your website root. At a minimum, you will
-need to extract:
-
-    src/ (folder)
-    dojo.js
-    iframe_history.html
-
-To begin using dojo, include dojo in your pages by using:
-
-    <script type="text/javascript" src="/path/to/dojo.js"></script>
-
-Depending on the edition that you have downloaded, this base dojo.js file may or
-may not include the modules you wish to use in your application. To ensure that
-they are available, use dojo.require() to request them. A very rich application
-might include:
-
-    <script type="text/javascript" src="/path/to/dojo.js"></script>
-    <script type="text/javascript">
-        dojo.require("dojo.event.*");       // sophisticated AOP event handling
-        dojo.require("dojo.io.*");          // for Ajax requests
-        dojo.require("dojo.storage.*");     // a persistent local data cache
-        dojo.require("dojo.json");          // serialization to JSON
-        dojo.require("dojo.dnd.*");         // drag-and-drop
-        dojo.require("dojo.fx.*");          // animations and eye candy
-        dojo.require("dojo.widget.Editor"); // stable, portable HTML WYSIWYG
-    </script>
-
-Note that only those modules which are *not* already "baked in" to dojo.js by
-the edition's build process are requested by dojo.require(). This helps make
-your application faster without forcing you to use a build tool while in
-development. See "Building Dojo" and "Working From Source" for more details.
-
-
-Compatibility
--------------
-
-In addition to it's suite of unit-tests for core system components, Dojo has
-been tested on almost every modern browser, including:
-
-    - IE 5.5+
-    - Mozilla 1.2+, Firefox 1.0+
-    - Safari 1.3.9+
-    - Konqueror 3.4+
-    - Opera 8.5+
-
-Note that some widgets and features may not preform exactly the same on every
-browser due to browser implementation differences.
-
-For those looking to use Dojo in non-browser environments, please see "Working
-From Source".
-
-
-Documentation and Getting Help
-------------------------------
-
-Articles outlining major Dojo systems are linked from:
-
-    http://dojotoolkit.org/docs/
-
-Toolkit APIs are listed in outline form at:
-
-    http://dojotoolkit.org/docs/apis/
-
-And documented in full at:
-
-    http://manual.dojotoolkit.org/
-
-The project also maintains a JotSpot Wiki at:
-
-    http://dojo.jot.com/
-
-A FAQ has been extracted from mailing list traffic:
-
-    http://dojo.jot.com/FAQ
-
-And the main Dojo user mailing list is archived and made searchable at:
-
-    http://news.gmane.org/gmane.comp.web.dojo.user/
-
-You can sign up for this list, which is a great place to ask questions, at:
-
-    http://dojotoolkit.org/mailman/listinfo/dojo-interest
-
-The Dojo developers also tend to hang out in IRC and help people with Dojo
-problems. You're most likely to find them at:
-
-    irc.freenode.net #dojo
-
-Note that 2PM Wed PST in this channel is reserved for a weekly meeting between
-project developers, although anyone is welcome to participate.
-
-
-Working From Source
--------------------
-
-The core of Dojo is a powerful package system that allows developers to optimize
-Dojo for deployment while using *exactly the same* application code in
-development. Therefore, working from source is almost exactly like working from
-a pre-built edition. Pre-built editions are significantly faster to load than
-working from source, but are not as flexible when in development.
-
-There are multiple ways to get the source. Nightly snapshots of the Dojo source
-repository are available at:
-
-    http://archive.dojotoolkit.org/nightly.tgz
-
-Anonymous Subversion access is also available:
-
-    %> svn co http://dojootoolkit.org/svn/dojo/trunk/
-
-Each of these sources will include some extra directories not included in the
-pre-packaged editions, including command-line tests and build tools for
-constructing your own packages.
-
-Running the command-line unit test suite requires Ant 1.6. If it is installed
-and in your path, you can run the tests using:
-
-    %> cd buildscripts
-    %> ant test
-
-The command-line test harness makes use of Rhino, a JavaScript interpreter
-written in Java. Once you have a copy of Dojo's source tree, you have a copy of
-Rhino. From the root directory, you can use Rhino interactively to load Dojo:
-
-    %> java -jar buildscripts/lib/js.jar
-    Rhino 1.5 release 3 2002 01 27
-    js> load("dojo.js");
-    js> print(dojo);
-    [object Object]
-    js> quit();
-
-This environment is wonderful for testing raw JavaScript functionality in, or
-even for scripting your system. Since Rhino has full access to anything in
-Java's classpath, the sky is the limit!
-
-Building Dojo
--------------
-
-Dojo requires Ant 1.6.x in order to build correctly. While using Dojo from
-source does *NOT* require that you make a build, speeding up your application by
-constructing a custom profile build does.
-
-Once you have Ant and a source snapshot of Dojo, you can make your own profile
-build ("edition") which includes only those modules your application uses by
-customizing one of the files in:
-
-    [dojo]/buildscripts/profiles/
-
-These files are named *.profile.js and each one contains a list of modules to
-include in a build. If we created a new profile called "test.profile.js", we
-could then make a profile build using it by doing:
-
-    %> cd buildscripts
-    %> ant -Dprofile=test -Ddocless=true release intern-strings
-
-If the build is successful, your newly minted and compressed  profile build will
-be placed in [dojo]/releae/dojo/
-
--------------------------------------------------------------------------------
-Copyright (c) 2004-2005, The Dojo Foundation, All Rights Reserved
-
-vim:ts=4:et:tw=80:shiftwidth=4:
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/build.txt b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/build.txt
deleted file mode 100644
index 28c4318..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/build.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-
-Files baked into this package:
-
-../src/bootstrap1.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/lang.js,
-../src/string.js,
-../src/io.js,
-../src/dom.js,
-../src/io/BrowserIO.js
-
-		
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/dojo.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/dojo.js
deleted file mode 100644
index df8c9aa..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/dojo.js
+++ /dev/null
@@ -1,2521 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
-	This is a compiled version of Dojo, built for deployment and not for
-	development. To get an editable version, please visit:
-
-		http://dojotoolkit.org
-
-	for documentation and information on getting the source.
-*/
-
-var dj_global=this;
-function dj_undef(_1,_2){
-if(!_2){
-_2=dj_global;
-}
-return (typeof _2[_1]=="undefined");
-}
-if(dj_undef("djConfig")){
-var djConfig={};
-}
-var dojo;
-if(dj_undef("dojo")){
-dojo={};
-}
-dojo.version={major:0,minor:2,patch:2,flag:"",revision:Number("$Rev: 2836 $".match(/[0-9]+/)[0]),toString:function(){
-with(dojo.version){
-return major+"."+minor+"."+patch+flag+" ("+revision+")";
-}
-}};
-dojo.evalObjPath=function(_3,_4){
-if(typeof _3!="string"){
-return dj_global;
-}
-if(_3.indexOf(".")==-1){
-if((dj_undef(_3,dj_global))&&(_4)){
-dj_global[_3]={};
-}
-return dj_global[_3];
-}
-var _5=_3.split(/\./);
-var _6=dj_global;
-for(var i=0;i<_5.length;++i){
-if(!_4){
-_6=_6[_5[i]];
-if((typeof _6=="undefined")||(!_6)){
-return _6;
-}
-}else{
-if(dj_undef(_5[i],_6)){
-_6[_5[i]]={};
-}
-_6=_6[_5[i]];
-}
-}
-return _6;
-};
-dojo.errorToString=function(_8){
-return ((!dj_undef("message",_8))?_8.message:(dj_undef("description",_8)?_8:_8.description));
-};
-dojo.raise=function(_9,_a){
-if(_a){
-_9=_9+": "+dojo.errorToString(_a);
-}
-var he=dojo.hostenv;
-if((!dj_undef("hostenv",dojo))&&(!dj_undef("println",dojo.hostenv))){
-dojo.hostenv.println("FATAL: "+_9);
-}
-throw Error(_9);
-};
-dj_throw=dj_rethrow=function(m,e){
-dojo.deprecated("dj_throw and dj_rethrow deprecated, use dojo.raise instead");
-dojo.raise(m,e);
-};
-dojo.debug=function(){
-if(!djConfig.isDebug){
-return;
-}
-var _e=arguments;
-if(dj_undef("println",dojo.hostenv)){
-dojo.raise("dojo.debug not available (yet?)");
-}
-var _f=dj_global["jum"]&&!dj_global["jum"].isBrowser;
-var s=[(_f?"":"DEBUG: ")];
-for(var i=0;i<_e.length;++i){
-if(!false&&_e[i] instanceof Error){
-var msg="["+_e[i].name+": "+dojo.errorToString(_e[i])+(_e[i].fileName?", file: "+_e[i].fileName:"")+(_e[i].lineNumber?", line: "+_e[i].lineNumber:"")+"]";
-}else{
-try{
-var msg=String(_e[i]);
-}
-catch(e){
-if(dojo.render.html.ie){
-var msg="[ActiveXObject]";
-}else{
-var msg="[unknown]";
-}
-}
-}
-s.push(msg);
-}
-if(_f){
-jum.debug(s.join(" "));
-}else{
-dojo.hostenv.println(s.join(" "));
-}
-};
-dojo.debugShallow=function(obj){
-if(!djConfig.isDebug){
-return;
-}
-dojo.debug("------------------------------------------------------------");
-dojo.debug("Object: "+obj);
-for(i in obj){
-dojo.debug(i+": "+obj[i]);
-}
-dojo.debug("------------------------------------------------------------");
-};
-var dj_debug=dojo.debug;
-function dj_eval(s){
-return dj_global.eval?dj_global.eval(s):eval(s);
-}
-dj_unimplemented=dojo.unimplemented=function(_15,_16){
-var _17="'"+_15+"' not implemented";
-if((!dj_undef(_16))&&(_16)){
-_17+=" "+_16;
-}
-dojo.raise(_17);
-};
-dj_deprecated=dojo.deprecated=function(_18,_19,_1a){
-var _1b="DEPRECATED: "+_18;
-if(_19){
-_1b+=" "+_19;
-}
-if(_1a){
-_1b+=" -- will be removed in version: "+_1a;
-}
-dojo.debug(_1b);
-};
-dojo.inherits=function(_1c,_1d){
-if(typeof _1d!="function"){
-dojo.raise("superclass: "+_1d+" borken");
-}
-_1c.prototype=new _1d();
-_1c.prototype.constructor=_1c;
-_1c.superclass=_1d.prototype;
-_1c["super"]=_1d.prototype;
-};
-dj_inherits=function(_1e,_1f){
-dojo.deprecated("dj_inherits deprecated, use dojo.inherits instead");
-dojo.inherits(_1e,_1f);
-};
-dojo.render=(function(){
-function vscaffold(_20,_21){
-var tmp={capable:false,support:{builtin:false,plugin:false},prefixes:_20};
-for(var x in _21){
-tmp[x]=false;
-}
-return tmp;
-}
-return {name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:vscaffold(["html"],["ie","opera","khtml","safari","moz"]),svg:vscaffold(["svg"],["corel","adobe","batik"]),vml:vscaffold(["vml"],["ie"]),swf:vscaffold(["Swf","Flash","Mm"],["mm"]),swt:vscaffold(["Swt"],["ibm"])};
-})();
-dojo.hostenv=(function(){
-var _24={isDebug:false,allowQueryConfig:false,baseScriptUri:"",baseRelativePath:"",libraryScriptUri:"",iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,searchIds:[],parseWidgets:true};
-if(typeof djConfig=="undefined"){
-djConfig=_24;
-}else{
-for(var _25 in _24){
-if(typeof djConfig[_25]=="undefined"){
-djConfig[_25]=_24[_25];
-}
-}
-}
-var djc=djConfig;
-function _def(obj,_28,def){
-return (dj_undef(_28,obj)?def:obj[_28]);
-}
-return {name_:"(unset)",version_:"(unset)",pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_2a,_2b){
-this.modulePrefixes_[_2a]={name:_2a,value:_2b};
-},getModulePrefix:function(_2c){
-var mp=this.modulePrefixes_;
-if((mp[_2c])&&(mp[_2c]["name"])){
-return mp[_2c].value;
-}
-return _2c;
-},getTextStack:[],loadUriStack:[],loadedUris:[],post_load_:false,modulesLoadedListeners:[],getName:function(){
-return this.name_;
-},getVersion:function(){
-return this.version_;
-},getText:function(uri){
-dojo.unimplemented("getText","uri="+uri);
-},getLibraryScriptUri:function(){
-dojo.unimplemented("getLibraryScriptUri","");
-}};
-})();
-dojo.hostenv.getBaseScriptUri=function(){
-if(djConfig.baseScriptUri.length){
-return djConfig.baseScriptUri;
-}
-var uri=new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-if(!uri){
-dojo.raise("Nothing returned by getLibraryScriptUri(): "+uri);
-}
-var _30=uri.lastIndexOf("/");
-djConfig.baseScriptUri=djConfig.baseRelativePath;
-return djConfig.baseScriptUri;
-};
-dojo.hostenv.setBaseScriptUri=function(uri){
-djConfig.baseScriptUri=uri;
-};
-dojo.hostenv.loadPath=function(_32,_33,cb){
-if((_32.charAt(0)=="/")||(_32.match(/^\w+:/))){
-dojo.raise("relpath '"+_32+"'; must be relative");
-}
-var uri=this.getBaseScriptUri()+_32;
-if(djConfig.cacheBust&&dojo.render.html.capable){
-uri+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
-}
-try{
-return ((!_33)?this.loadUri(uri,cb):this.loadUriAndCheck(uri,_33,cb));
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.hostenv.loadUri=function(uri,cb){
-if(this.loadedUris[uri]){
-return;
-}
-var _38=this.getText(uri,null,true);
-if(_38==null){
-return 0;
-}
-this.loadedUris[uri]=true;
-var _39=dj_eval(_38);
-return 1;
-};
-dojo.hostenv.loadUriAndCheck=function(uri,_3b,cb){
-var ok=true;
-try{
-ok=this.loadUri(uri,cb);
-}
-catch(e){
-dojo.debug("failed loading ",uri," with error: ",e);
-}
-return ((ok)&&(this.findModule(_3b,false)))?true:false;
-};
-dojo.loaded=function(){
-};
-dojo.hostenv.loaded=function(){
-this.post_load_=true;
-var mll=this.modulesLoadedListeners;
-for(var x=0;x<mll.length;x++){
-mll[x]();
-}
-dojo.loaded();
-};
-dojo.addOnLoad=function(obj,_41){
-if(arguments.length==1){
-dojo.hostenv.modulesLoadedListeners.push(obj);
-}else{
-if(arguments.length>1){
-dojo.hostenv.modulesLoadedListeners.push(function(){
-obj[_41]();
-});
-}
-}
-};
-dojo.hostenv.modulesLoaded=function(){
-if(this.post_load_){
-return;
-}
-if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){
-if(this.inFlightCount>0){
-dojo.debug("files still in flight!");
-return;
-}
-if(typeof setTimeout=="object"){
-setTimeout("dojo.hostenv.loaded();",0);
-}else{
-dojo.hostenv.loaded();
-}
-}
-};
-dojo.hostenv.moduleLoaded=function(_42){
-var _43=dojo.evalObjPath((_42.split(".").slice(0,-1)).join("."));
-this.loaded_modules_[(new String(_42)).toLowerCase()]=_43;
-};
-dojo.hostenv._global_omit_module_check=false;
-dojo.hostenv.loadModule=function(_44,_45,_46){
-if(!_44){
-return;
-}
-_46=this._global_omit_module_check||_46;
-var _47=this.findModule(_44,false);
-if(_47){
-return _47;
-}
-if(dj_undef(_44,this.loading_modules_)){
-this.addedToLoadingCount.push(_44);
-}
-this.loading_modules_[_44]=1;
-var _48=_44.replace(/\./g,"/")+".js";
-var _49=_44.split(".");
-var _4a=_44.split(".");
-for(var i=_49.length-1;i>0;i--){
-var _4c=_49.slice(0,i).join(".");
-var _4d=this.getModulePrefix(_4c);
-if(_4d!=_4c){
-_49.splice(0,i,_4d);
-break;
-}
-}
-var _4e=_49[_49.length-1];
-if(_4e=="*"){
-_44=(_4a.slice(0,-1)).join(".");
-while(_49.length){
-_49.pop();
-_49.push(this.pkgFileName);
-_48=_49.join("/")+".js";
-if(_48.charAt(0)=="/"){
-_48=_48.slice(1);
-}
-ok=this.loadPath(_48,((!_46)?_44:null));
-if(ok){
-break;
-}
-_49.pop();
-}
-}else{
-_48=_49.join("/")+".js";
-_44=_4a.join(".");
-var ok=this.loadPath(_48,((!_46)?_44:null));
-if((!ok)&&(!_45)){
-_49.pop();
-while(_49.length){
-_48=_49.join("/")+".js";
-ok=this.loadPath(_48,((!_46)?_44:null));
-if(ok){
-break;
-}
-_49.pop();
-_48=_49.join("/")+"/"+this.pkgFileName+".js";
-if(_48.charAt(0)=="/"){
-_48=_48.slice(1);
-}
-ok=this.loadPath(_48,((!_46)?_44:null));
-if(ok){
-break;
-}
-}
-}
-if((!ok)&&(!_46)){
-dojo.raise("Could not load '"+_44+"'; last tried '"+_48+"'");
-}
-}
-if(!_46){
-_47=this.findModule(_44,false);
-if(!_47){
-dojo.raise("symbol '"+_44+"' is not defined after loading '"+_48+"'");
-}
-}
-return _47;
-};
-dojo.hostenv.startPackage=function(_50){
-var _51=_50.split(/\./);
-if(_51[_51.length-1]=="*"){
-_51.pop();
-}
-return dojo.evalObjPath(_51.join("."),true);
-};
-dojo.hostenv.findModule=function(_52,_53){
-var lmn=(new String(_52)).toLowerCase();
-if(this.loaded_modules_[lmn]){
-return this.loaded_modules_[lmn];
-}
-var _55=dojo.evalObjPath(_52);
-if((_52)&&(typeof _55!="undefined")&&(_55)){
-this.loaded_modules_[lmn]=_55;
-return _55;
-}
-if(_53){
-dojo.raise("no loaded module named '"+_52+"'");
-}
-return null;
-};
-if(typeof window=="undefined"){
-dojo.raise("no window object");
-}
-(function(){
-if(djConfig.allowQueryConfig){
-var _56=document.location.toString();
-var _57=_56.split("?",2);
-if(_57.length>1){
-var _58=_57[1];
-var _59=_58.split("&");
-for(var x in _59){
-var sp=_59[x].split("=");
-if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){
-var opt=sp[0].substr(9);
-try{
-djConfig[opt]=eval(sp[1]);
-}
-catch(e){
-djConfig[opt]=sp[1];
-}
-}
-}
-}
-}
-if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){
-var _5d=document.getElementsByTagName("script");
-var _5e=/(__package__|dojo)\.js([\?\.]|$)/i;
-for(var i=0;i<_5d.length;i++){
-var src=_5d[i].getAttribute("src");
-if(!src){
-continue;
-}
-var m=src.match(_5e);
-if(m){
-root=src.substring(0,m.index);
-if(!this["djConfig"]){
-djConfig={};
-}
-if(djConfig["baseScriptUri"]==""){
-djConfig["baseScriptUri"]=root;
-}
-if(djConfig["baseRelativePath"]==""){
-djConfig["baseRelativePath"]=root;
-}
-break;
-}
-}
-}
-var dr=dojo.render;
-var drh=dojo.render.html;
-var dua=drh.UA=navigator.userAgent;
-var dav=drh.AV=navigator.appVersion;
-var t=true;
-var f=false;
-drh.capable=t;
-drh.support.builtin=t;
-dr.ver=parseFloat(drh.AV);
-dr.os.mac=dav.indexOf("Macintosh")>=0;
-dr.os.win=dav.indexOf("Windows")>=0;
-dr.os.linux=dav.indexOf("X11")>=0;
-drh.opera=dua.indexOf("Opera")>=0;
-drh.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0);
-drh.safari=dav.indexOf("Safari")>=0;
-var _68=dua.indexOf("Gecko");
-drh.mozilla=drh.moz=(_68>=0)&&(!drh.khtml);
-if(drh.mozilla){
-drh.geckoVersion=dua.substring(_68+6,_68+14);
-}
-drh.ie=(document.all)&&(!drh.opera);
-drh.ie50=drh.ie&&dav.indexOf("MSIE 5.0")>=0;
-drh.ie55=drh.ie&&dav.indexOf("MSIE 5.5")>=0;
-drh.ie60=drh.ie&&dav.indexOf("MSIE 6.0")>=0;
-dr.vml.capable=drh.ie;
-dr.svg.capable=f;
-dr.svg.support.plugin=f;
-dr.svg.support.builtin=f;
-dr.svg.adobe=f;
-if(document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("org.w3c.dom.svg","1.0")){
-dr.svg.capable=t;
-dr.svg.support.builtin=t;
-dr.svg.support.plugin=f;
-dr.svg.adobe=f;
-}else{
-if(navigator.mimeTypes&&navigator.mimeTypes.length>0){
-var _69=navigator.mimeTypes["image/svg+xml"]||navigator.mimeTypes["image/svg"]||navigator.mimeTypes["image/svg-xml"];
-if(_69){
-dr.svg.adobe=_69&&_69.enabledPlugin&&_69.enabledPlugin.description&&(_69.enabledPlugin.description.indexOf("Adobe")>-1);
-if(dr.svg.adobe){
-dr.svg.capable=t;
-dr.svg.support.plugin=t;
-}
-}
-}else{
-if(drh.ie&&dr.os.win){
-var _69=f;
-try{
-var _6a=new ActiveXObject("Adobe.SVGCtl");
-_69=t;
-}
-catch(e){
-}
-if(_69){
-dr.svg.capable=t;
-dr.svg.support.plugin=t;
-dr.svg.adobe=t;
-}
-}else{
-dr.svg.capable=f;
-dr.svg.support.plugin=f;
-dr.svg.adobe=f;
-}
-}
-}
-})();
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.hostenv.name_="browser";
-dojo.hostenv.searchIds=[];
-var DJ_XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
-dojo.hostenv.getXmlhttpObject=function(){
-var _6b=null;
-var _6c=null;
-try{
-_6b=new XMLHttpRequest();
-}
-catch(e){
-}
-if(!_6b){
-for(var i=0;i<3;++i){
-var _6e=DJ_XMLHTTP_PROGIDS[i];
-try{
-_6b=new ActiveXObject(_6e);
-}
-catch(e){
-_6c=e;
-}
-if(_6b){
-DJ_XMLHTTP_PROGIDS=[_6e];
-break;
-}
-}
-}
-if(!_6b){
-return dojo.raise("XMLHTTP not available",_6c);
-}
-return _6b;
-};
-dojo.hostenv.getText=function(uri,_70,_71){
-var _72=this.getXmlhttpObject();
-if(_70){
-_72.onreadystatechange=function(){
-if((4==_72.readyState)&&(_72["status"])){
-if(_72.status==200){
-_70(_72.responseText);
-}
-}
-};
-}
-_72.open("GET",uri,_70?true:false);
-_72.send(null);
-if(_70){
-return null;
-}
-return _72.responseText;
-};
-dojo.hostenv.defaultDebugContainerId="dojoDebug";
-dojo.hostenv._println_buffer=[];
-dojo.hostenv._println_safe=false;
-dojo.hostenv.println=function(_73){
-if(!dojo.hostenv._println_safe){
-dojo.hostenv._println_buffer.push(_73);
-}else{
-try{
-var _74=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
-if(!_74){
-_74=document.getElementsByTagName("body")[0]||document.body;
-}
-var div=document.createElement("div");
-div.appendChild(document.createTextNode(_73));
-_74.appendChild(div);
-}
-catch(e){
-try{
-document.write("<div>"+_73+"</div>");
-}
-catch(e2){
-window.status=_73;
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-dojo.hostenv._println_safe=true;
-while(dojo.hostenv._println_buffer.length>0){
-dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-}
-});
-function dj_addNodeEvtHdlr(_76,_77,fp,_79){
-var _7a=_76["on"+_77]||function(){
-};
-_76["on"+_77]=function(){
-fp.apply(_76,arguments);
-_7a.apply(_76,arguments);
-};
-return true;
-}
-dj_addNodeEvtHdlr(window,"load",function(){
-if(dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-dojo.hostenv.modulesLoaded();
-});
-dojo.hostenv.makeWidgets=function(){
-var _7b=[];
-if(djConfig.searchIds&&djConfig.searchIds.length>0){
-_7b=_7b.concat(djConfig.searchIds);
-}
-if(dojo.hostenv.searchIds&&dojo.hostenv.searchIds.length>0){
-_7b=_7b.concat(dojo.hostenv.searchIds);
-}
-if((djConfig.parseWidgets)||(_7b.length>0)){
-if(dojo.evalObjPath("dojo.widget.Parse")){
-try{
-var _7c=new dojo.xml.Parse();
-if(_7b.length>0){
-for(var x=0;x<_7b.length;x++){
-var _7e=document.getElementById(_7b[x]);
-if(!_7e){
-continue;
-}
-var _7f=_7c.parseElement(_7e,null,true);
-dojo.widget.getParser().createComponents(_7f);
-}
-}else{
-if(djConfig.parseWidgets){
-var _7f=_7c.parseElement(document.getElementsByTagName("body")[0]||document.body,null,true);
-dojo.widget.getParser().createComponents(_7f);
-}
-}
-}
-catch(e){
-dojo.debug("auto-build-widgets error:",e);
-}
-}
-}
-};
-dojo.hostenv.modulesLoadedListeners.push(function(){
-if(!dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-});
-try{
-if(dojo.render.html.ie){
-document.write("<style>v:*{ behavior:url(#default#VML); }</style>");
-document.write("<xml:namespace ns=\"urn:schemas-microsoft-com:vml\" prefix=\"v\"/>");
-}
-}
-catch(e){
-}
-dojo.hostenv.writeIncludes=function(){
-};
-dojo.hostenv.byId=dojo.byId=function(id,doc){
-if(typeof id=="string"||id instanceof String){
-if(!doc){
-doc=document;
-}
-return doc.getElementById(id);
-}
-return id;
-};
-dojo.hostenv.byIdArray=dojo.byIdArray=function(){
-var ids=[];
-for(var i=0;i<arguments.length;i++){
-if((arguments[i] instanceof Array)||(typeof arguments[i]=="array")){
-for(var j=0;j<arguments[i].length;j++){
-ids=ids.concat(dojo.hostenv.byIdArray(arguments[i][j]));
-}
-}else{
-ids.push(dojo.hostenv.byId(arguments[i]));
-}
-}
-return ids;
-};
-dojo.hostenv.conditionalLoadModule=function(_85){
-var _86=_85["common"]||[];
-var _87=(_85[dojo.hostenv.name_])?_86.concat(_85[dojo.hostenv.name_]||[]):_86.concat(_85["default"]||[]);
-for(var x=0;x<_87.length;x++){
-var _89=_87[x];
-if(_89.constructor==Array){
-dojo.hostenv.loadModule.apply(dojo.hostenv,_89);
-}else{
-dojo.hostenv.loadModule(_89);
-}
-}
-};
-dojo.hostenv.require=dojo.hostenv.loadModule;
-dojo.require=function(){
-dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
-};
-dojo.requireAfter=dojo.require;
-dojo.requireIf=function(){
-if((arguments[0]===true)||(arguments[0]=="common")||(dojo.render[arguments[0]].capable)){
-var _8a=[];
-for(var i=1;i<arguments.length;i++){
-_8a.push(arguments[i]);
-}
-dojo.require.apply(dojo,_8a);
-}
-};
-dojo.requireAfterIf=dojo.requireIf;
-dojo.conditionalRequire=dojo.requireIf;
-dojo.kwCompoundRequire=function(){
-dojo.hostenv.conditionalLoadModule.apply(dojo.hostenv,arguments);
-};
-dojo.hostenv.provide=dojo.hostenv.startPackage;
-dojo.provide=function(){
-return dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
-};
-dojo.setModulePrefix=function(_8c,_8d){
-return dojo.hostenv.setModulePrefix(_8c,_8d);
-};
-dojo.profile={start:function(){
-},end:function(){
-},dump:function(){
-}};
-dojo.exists=function(obj,_8f){
-var p=_8f.split(".");
-for(var i=0;i<p.length;i++){
-if(!(obj[p[i]])){
-return false;
-}
-obj=obj[p[i]];
-}
-return true;
-};
-dojo.provide("dojo.lang");
-dojo.provide("dojo.AdapterRegistry");
-dojo.provide("dojo.lang.Lang");
-dojo.lang.mixin=function(obj,_93){
-var _94={};
-for(var x in _93){
-if(typeof _94[x]=="undefined"||_94[x]!=_93[x]){
-obj[x]=_93[x];
-}
-}
-if(dojo.render.html.ie&&dojo.lang.isFunction(_93["toString"])&&_93["toString"]!=obj["toString"]){
-obj.toString=_93.toString;
-}
-return obj;
-};
-dojo.lang.extend=function(_96,_97){
-this.mixin(_96.prototype,_97);
-};
-dojo.lang.extendPrototype=function(obj,_99){
-this.extend(obj.constructor,_99);
-};
-dojo.lang.anonCtr=0;
-dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_9a,_9b){
-var nso=(_9b||dojo.lang.anon);
-if((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true)){
-for(var x in nso){
-if(nso[x]===_9a){
-return x;
-}
-}
-}
-var ret="__"+dojo.lang.anonCtr++;
-while(typeof nso[ret]!="undefined"){
-ret="__"+dojo.lang.anonCtr++;
-}
-nso[ret]=_9a;
-return ret;
-};
-dojo.lang.hitch=function(_9f,_a0){
-if(dojo.lang.isString(_a0)){
-var fcn=_9f[_a0];
-}else{
-var fcn=_a0;
-}
-return function(){
-return fcn.apply(_9f,arguments);
-};
-};
-dojo.lang.forward=function(_a2){
-return function(){
-return this[_a2].apply(this,arguments);
-};
-};
-dojo.lang.curry=function(ns,_a4){
-var _a5=[];
-ns=ns||dj_global;
-if(dojo.lang.isString(_a4)){
-_a4=ns[_a4];
-}
-for(var x=2;x<arguments.length;x++){
-_a5.push(arguments[x]);
-}
-var _a7=_a4.length-_a5.length;
-function gather(_a8,_a9,_aa){
-var _ab=_aa;
-var _ac=_a9.slice(0);
-for(var x=0;x<_a8.length;x++){
-_ac.push(_a8[x]);
-}
-_aa=_aa-_a8.length;
-if(_aa<=0){
-var res=_a4.apply(ns,_ac);
-_aa=_ab;
-return res;
-}else{
-return function(){
-return gather(arguments,_ac,_aa);
-};
-}
-}
-return gather([],_a5,_a7);
-};
-dojo.lang.curryArguments=function(ns,_b0,_b1,_b2){
-var _b3=[];
-var x=_b2||0;
-for(x=_b2;x<_b1.length;x++){
-_b3.push(_b1[x]);
-}
-return dojo.lang.curry.apply(dojo.lang,[ns,_b0].concat(_b3));
-};
-dojo.lang.setTimeout=function(_b5,_b6){
-var _b7=window,argsStart=2;
-if(!dojo.lang.isFunction(_b5)){
-_b7=_b5;
-_b5=_b6;
-_b6=arguments[2];
-argsStart++;
-}
-if(dojo.lang.isString(_b5)){
-_b5=_b7[_b5];
-}
-var _b8=[];
-for(var i=argsStart;i<arguments.length;i++){
-_b8.push(arguments[i]);
-}
-return setTimeout(function(){
-_b5.apply(_b7,_b8);
-},_b6);
-};
-dojo.lang.isObject=function(wh){
-return typeof wh=="object"||dojo.lang.isArray(wh)||dojo.lang.isFunction(wh);
-};
-dojo.lang.isArray=function(wh){
-return (wh instanceof Array||typeof wh=="array");
-};
-dojo.lang.isArrayLike=function(wh){
-if(dojo.lang.isString(wh)){
-return false;
-}
-if(dojo.lang.isArray(wh)){
-return true;
-}
-if(typeof wh!="undefined"&&wh&&dojo.lang.isNumber(wh.length)&&isFinite(wh.length)){
-return true;
-}
-return false;
-};
-dojo.lang.isFunction=function(wh){
-return (wh instanceof Function||typeof wh=="function");
-};
-dojo.lang.isString=function(wh){
-return (wh instanceof String||typeof wh=="string");
-};
-dojo.lang.isAlien=function(wh){
-return !dojo.lang.isFunction()&&/\{\s*\[native code\]\s*\}/.test(String(wh));
-};
-dojo.lang.isBoolean=function(wh){
-return (wh instanceof Boolean||typeof wh=="boolean");
-};
-dojo.lang.isNumber=function(wh){
-return (wh instanceof Number||typeof wh=="number");
-};
-dojo.lang.isUndefined=function(wh){
-return ((wh==undefined)&&(typeof wh=="undefined"));
-};
-dojo.lang.whatAmI=function(wh){
-try{
-if(dojo.lang.isArray(wh)){
-return "array";
-}
-if(dojo.lang.isFunction(wh)){
-return "function";
-}
-if(dojo.lang.isString(wh)){
-return "string";
-}
-if(dojo.lang.isNumber(wh)){
-return "number";
-}
-if(dojo.lang.isBoolean(wh)){
-return "boolean";
-}
-if(dojo.lang.isAlien(wh)){
-return "alien";
-}
-if(dojo.lang.isUndefined(wh)){
-return "undefined";
-}
-for(var _c4 in dojo.lang.whatAmI.custom){
-if(dojo.lang.whatAmI.custom[_c4](wh)){
-return _c4;
-}
-}
-if(dojo.lang.isObject(wh)){
-return "object";
-}
-}
-catch(E){
-}
-return "unknown";
-};
-dojo.lang.whatAmI.custom={};
-dojo.lang.find=function(arr,val,_c7){
-if(!dojo.lang.isArrayLike(arr)&&dojo.lang.isArrayLike(val)){
-var a=arr;
-arr=val;
-val=a;
-}
-var _c9=dojo.lang.isString(arr);
-if(_c9){
-arr=arr.split("");
-}
-if(_c7){
-for(var i=0;i<arr.length;++i){
-if(arr[i]===val){
-return i;
-}
-}
-}else{
-for(var i=0;i<arr.length;++i){
-if(arr[i]==val){
-return i;
-}
-}
-}
-return -1;
-};
-dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(arr,val,_cd){
-if(!dojo.lang.isArrayLike(arr)&&dojo.lang.isArrayLike(val)){
-var a=arr;
-arr=val;
-val=a;
-}
-var _cf=dojo.lang.isString(arr);
-if(_cf){
-arr=arr.split("");
-}
-if(_cd){
-for(var i=arr.length-1;i>=0;i--){
-if(arr[i]===val){
-return i;
-}
-}
-}else{
-for(var i=arr.length-1;i>=0;i--){
-if(arr[i]==val){
-return i;
-}
-}
-}
-return -1;
-};
-dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(arr,val){
-return dojo.lang.find(arr,val)>-1;
-};
-dojo.lang.getNameInObj=function(ns,_d4){
-if(!ns){
-ns=dj_global;
-}
-for(var x in ns){
-if(ns[x]===_d4){
-return new String(x);
-}
-}
-return null;
-};
-dojo.lang.has=function(obj,_d7){
-return (typeof obj[_d7]!=="undefined");
-};
-dojo.lang.isEmpty=function(obj){
-if(dojo.lang.isObject(obj)){
-var tmp={};
-var _da=0;
-for(var x in obj){
-if(obj[x]&&(!tmp[x])){
-_da++;
-break;
-}
-}
-return (_da==0);
-}else{
-if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
-return obj.length==0;
-}
-}
-};
-dojo.lang.forEach=function(arr,_dd,_de){
-var _df=dojo.lang.isString(arr);
-if(_df){
-arr=arr.split("");
-}
-var il=arr.length;
-for(var i=0;i<((_de)?il:arr.length);i++){
-if(_dd(arr[i],i,arr)=="break"){
-break;
-}
-}
-};
-dojo.lang.map=function(arr,obj,_e4){
-var _e5=dojo.lang.isString(arr);
-if(_e5){
-arr=arr.split("");
-}
-if(dojo.lang.isFunction(obj)&&(!_e4)){
-_e4=obj;
-obj=dj_global;
-}else{
-if(dojo.lang.isFunction(obj)&&_e4){
-var _e6=obj;
-obj=_e4;
-_e4=_e6;
-}
-}
-if(Array.map){
-var _e7=Array.map(arr,_e4,obj);
-}else{
-var _e7=[];
-for(var i=0;i<arr.length;++i){
-_e7.push(_e4.call(obj,arr[i]));
-}
-}
-if(_e5){
-return _e7.join("");
-}else{
-return _e7;
-}
-};
-dojo.lang.tryThese=function(){
-for(var x=0;x<arguments.length;x++){
-try{
-if(typeof arguments[x]=="function"){
-var ret=(arguments[x]());
-if(ret){
-return ret;
-}
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-dojo.lang.delayThese=function(_eb,cb,_ed,_ee){
-if(!_eb.length){
-if(typeof _ee=="function"){
-_ee();
-}
-return;
-}
-if((typeof _ed=="undefined")&&(typeof cb=="number")){
-_ed=cb;
-cb=function(){
-};
-}else{
-if(!cb){
-cb=function(){
-};
-if(!_ed){
-_ed=0;
-}
-}
-}
-setTimeout(function(){
-(_eb.shift())();
-cb();
-dojo.lang.delayThese(_eb,cb,_ed,_ee);
-},_ed);
-};
-dojo.lang.shallowCopy=function(obj){
-var ret={},key;
-for(key in obj){
-if(dojo.lang.isUndefined(ret[key])){
-ret[key]=obj[key];
-}
-}
-return ret;
-};
-dojo.lang.every=function(arr,_f2,_f3){
-var _f4=dojo.lang.isString(arr);
-if(_f4){
-arr=arr.split("");
-}
-if(Array.every){
-return Array.every(arr,_f2,_f3);
-}else{
-if(!_f3){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_f3=dj_global;
-}
-for(var i=0;i<arr.length;i++){
-if(!_f2.call(_f3,arr[i],i,arr)){
-return false;
-}
-}
-return true;
-}
-};
-dojo.lang.some=function(arr,_f7,_f8){
-var _f9=dojo.lang.isString(arr);
-if(_f9){
-arr=arr.split("");
-}
-if(Array.some){
-return Array.some(arr,_f7,_f8);
-}else{
-if(!_f8){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_f8=dj_global;
-}
-for(var i=0;i<arr.length;i++){
-if(_f7.call(_f8,arr[i],i,arr)){
-return true;
-}
-}
-return false;
-}
-};
-dojo.lang.filter=function(arr,_fc,_fd){
-var _fe=dojo.lang.isString(arr);
-if(_fe){
-arr=arr.split("");
-}
-if(Array.filter){
-var _ff=Array.filter(arr,_fc,_fd);
-}else{
-if(!_fd){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_fd=dj_global;
-}
-var _ff=[];
-for(var i=0;i<arr.length;i++){
-if(_fc.call(_fd,arr[i],i,arr)){
-_ff.push(arr[i]);
-}
-}
-}
-if(_fe){
-return _ff.join("");
-}else{
-return _ff;
-}
-};
-dojo.AdapterRegistry=function(){
-this.pairs=[];
-};
-dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_102,wrap,_104){
-if(_104){
-this.pairs.unshift([name,_102,wrap]);
-}else{
-this.pairs.push([name,_102,wrap]);
-}
-},match:function(){
-for(var i=0;i<this.pairs.length;i++){
-var pair=this.pairs[i];
-if(pair[1].apply(this,arguments)){
-return pair[2].apply(this,arguments);
-}
-}
-throw new Error("No match found");
-},unregister:function(name){
-for(var i=0;i<this.pairs.length;i++){
-var pair=this.pairs[i];
-if(pair[0]==name){
-this.pairs.splice(i,1);
-return true;
-}
-}
-return false;
-}});
-dojo.lang.reprRegistry=new dojo.AdapterRegistry();
-dojo.lang.registerRepr=function(name,_10b,wrap,_10d){
-dojo.lang.reprRegistry.register(name,_10b,wrap,_10d);
-};
-dojo.lang.repr=function(obj){
-if(typeof (obj)=="undefined"){
-return "undefined";
-}else{
-if(obj===null){
-return "null";
-}
-}
-try{
-if(typeof (obj["__repr__"])=="function"){
-return obj["__repr__"]();
-}else{
-if((typeof (obj["repr"])=="function")&&(obj.repr!=arguments.callee)){
-return obj["repr"]();
-}
-}
-return dojo.lang.reprRegistry.match(obj);
-}
-catch(e){
-if(typeof (obj.NAME)=="string"&&(obj.toString==Function.prototype.toString||obj.toString==Object.prototype.toString)){
-return o.NAME;
-}
-}
-if(typeof (obj)=="function"){
-obj=(obj+"").replace(/^\s+/,"");
-var idx=obj.indexOf("{");
-if(idx!=-1){
-obj=obj.substr(0,idx)+"{...}";
-}
-}
-return obj+"";
-};
-dojo.lang.reprArrayLike=function(arr){
-try{
-var na=dojo.lang.map(arr,dojo.lang.repr);
-return "["+na.join(", ")+"]";
-}
-catch(e){
-}
-};
-dojo.lang.reprString=function(str){
-return ("\""+str.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");
-};
-dojo.lang.reprNumber=function(num){
-return num+"";
-};
-(function(){
-var m=dojo.lang;
-m.registerRepr("arrayLike",m.isArrayLike,m.reprArrayLike);
-m.registerRepr("string",m.isString,m.reprString);
-m.registerRepr("numbers",m.isNumber,m.reprNumber);
-m.registerRepr("boolean",m.isBoolean,m.reprNumber);
-})();
-dojo.lang.unnest=function(){
-var out=[];
-for(var i=0;i<arguments.length;i++){
-if(dojo.lang.isArrayLike(arguments[i])){
-var add=dojo.lang.unnest.apply(this,arguments[i]);
-out=out.concat(add);
-}else{
-out.push(arguments[i]);
-}
-}
-return out;
-};
-dojo.lang.firstValued=function(){
-for(var i=0;i<arguments.length;i++){
-if(typeof arguments[i]!="undefined"){
-return arguments[i];
-}
-}
-return undefined;
-};
-dojo.lang.toArray=function(_119,_11a){
-var _11b=[];
-for(var i=_11a||0;i<_119.length;i++){
-_11b.push(_119[i]);
-}
-return _11b;
-};
-dojo.provide("dojo.string");
-dojo.require("dojo.lang");
-dojo.string.trim=function(str,wh){
-if(!dojo.lang.isString(str)){
-return str;
-}
-if(!str.length){
-return str;
-}
-if(wh>0){
-return str.replace(/^\s+/,"");
-}else{
-if(wh<0){
-return str.replace(/\s+$/,"");
-}else{
-return str.replace(/^\s+|\s+$/g,"");
-}
-}
-};
-dojo.string.trimStart=function(str){
-return dojo.string.trim(str,1);
-};
-dojo.string.trimEnd=function(str){
-return dojo.string.trim(str,-1);
-};
-dojo.string.paramString=function(str,_122,_123){
-for(var name in _122){
-var re=new RegExp("\\%\\{"+name+"\\}","g");
-str=str.replace(re,_122[name]);
-}
-if(_123){
-str=str.replace(/%\{([^\}\s]+)\}/g,"");
-}
-return str;
-};
-dojo.string.capitalize=function(str){
-if(!dojo.lang.isString(str)){
-return "";
-}
-if(arguments.length==0){
-str=this;
-}
-var _127=str.split(" ");
-var _128="";
-var len=_127.length;
-for(var i=0;i<len;i++){
-var word=_127[i];
-word=word.charAt(0).toUpperCase()+word.substring(1,word.length);
-_128+=word;
-if(i<len-1){
-_128+=" ";
-}
-}
-return new String(_128);
-};
-dojo.string.isBlank=function(str){
-if(!dojo.lang.isString(str)){
-return true;
-}
-return (dojo.string.trim(str).length==0);
-};
-dojo.string.encodeAscii=function(str){
-if(!dojo.lang.isString(str)){
-return str;
-}
-var ret="";
-var _12f=escape(str);
-var _130,re=/%u([0-9A-F]{4})/i;
-while((_130=_12f.match(re))){
-var num=Number("0x"+_130[1]);
-var _132=escape("&#"+num+";");
-ret+=_12f.substring(0,_130.index)+_132;
-_12f=_12f.substring(_130.index+_130[0].length);
-}
-ret+=_12f.replace(/\+/g,"%2B");
-return ret;
-};
-dojo.string.summary=function(str,len){
-if(!len||str.length<=len){
-return str;
-}else{
-return str.substring(0,len).replace(/\.+$/,"")+"...";
-}
-};
-dojo.string.escape=function(type,str){
-var args=[];
-for(var i=1;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-switch(type.toLowerCase()){
-case "xml":
-case "html":
-case "xhtml":
-return dojo.string.escapeXml.apply(this,args);
-case "sql":
-return dojo.string.escapeSql.apply(this,args);
-case "regexp":
-case "regex":
-return dojo.string.escapeRegExp.apply(this,args);
-case "javascript":
-case "jscript":
-case "js":
-return dojo.string.escapeJavaScript.apply(this,args);
-case "ascii":
-return dojo.string.encodeAscii.apply(this,args);
-default:
-return str;
-}
-};
-dojo.string.escapeXml=function(str,_13a){
-str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_13a){
-str=str.replace(/'/gm,"&#39;");
-}
-return str;
-};
-dojo.string.escapeSql=function(str){
-return str.replace(/'/gm,"''");
-};
-dojo.string.escapeRegExp=function(str){
-return str.replace(/\\/gm,"\\\\").replace(/([\f\b\n\t\r])/gm,"\\$1");
-};
-dojo.string.escapeJavaScript=function(str){
-return str.replace(/(["'\f\b\n\t\r])/gm,"\\$1");
-};
-dojo.string.repeat=function(str,_13f,_140){
-var out="";
-for(var i=0;i<_13f;i++){
-out+=str;
-if(_140&&i<_13f-1){
-out+=_140;
-}
-}
-return out;
-};
-dojo.string.endsWith=function(str,end,_145){
-if(_145){
-str=str.toLowerCase();
-end=end.toLowerCase();
-}
-return str.lastIndexOf(end)==str.length-end.length;
-};
-dojo.string.endsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.endsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.startsWith=function(str,_149,_14a){
-if(_14a){
-str=str.toLowerCase();
-_149=_149.toLowerCase();
-}
-return str.indexOf(_149)==0;
-};
-dojo.string.startsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.startsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.has=function(str){
-for(var i=1;i<arguments.length;i++){
-if(str.indexOf(arguments[i]>-1)){
-return true;
-}
-}
-return false;
-};
-dojo.string.pad=function(str,len,c,dir){
-var out=String(str);
-if(!c){
-c="0";
-}
-if(!dir){
-dir=1;
-}
-while(out.length<len){
-if(dir>0){
-out=c+out;
-}else{
-out+=c;
-}
-}
-return out;
-};
-dojo.string.padLeft=function(str,len,c){
-return dojo.string.pad(str,len,c,1);
-};
-dojo.string.padRight=function(str,len,c){
-return dojo.string.pad(str,len,c,-1);
-};
-dojo.string.normalizeNewlines=function(text,_15b){
-if(_15b=="\n"){
-text=text.replace(/\r\n/g,"\n");
-text=text.replace(/\r/g,"\n");
-}else{
-if(_15b=="\r"){
-text=text.replace(/\r\n/g,"\r");
-text=text.replace(/\n/g,"\r");
-}else{
-text=text.replace(/([^\r])\n/g,"$1\r\n");
-text=text.replace(/\r([^\n])/g,"\r\n$1");
-}
-}
-return text;
-};
-dojo.string.splitEscaped=function(str,_15d){
-var _15e=[];
-for(var i=0,prevcomma=0;i<str.length;i++){
-if(str.charAt(i)=="\\"){
-i++;
-continue;
-}
-if(str.charAt(i)==_15d){
-_15e.push(str.substring(prevcomma,i));
-prevcomma=i+1;
-}
-}
-_15e.push(str.substr(prevcomma));
-return _15e;
-};
-dojo.string.addToPrototype=function(){
-for(var _160 in dojo.string){
-if(dojo.lang.isFunction(dojo.string[_160])){
-var func=(function(){
-var meth=_160;
-switch(meth){
-case "addToPrototype":
-return null;
-break;
-case "escape":
-return function(type){
-return dojo.string.escape(type,this);
-};
-break;
-default:
-return function(){
-var args=[this];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-dojo.debug(args);
-return dojo.string[meth].apply(dojo.string,args);
-};
-}
-})();
-if(func){
-String.prototype[_160]=func;
-}
-}
-}
-};
-dojo.provide("dojo.io.IO");
-dojo.require("dojo.string");
-dojo.io.transports=[];
-dojo.io.hdlrFuncNames=["load","error"];
-dojo.io.Request=function(url,_167,_168,_169){
-if((arguments.length==1)&&(arguments[0].constructor==Object)){
-this.fromKwArgs(arguments[0]);
-}else{
-this.url=url;
-if(_167){
-this.mimetype=_167;
-}
-if(_168){
-this.transport=_168;
-}
-if(arguments.length>=4){
-this.changeUrl=_169;
-}
-}
-};
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,evt){
-},error:function(type,_16e){
-},handle:function(){
-},abort:function(){
-},fromKwArgs:function(_16f){
-if(_16f["url"]){
-_16f.url=_16f.url.toString();
-}
-if(!_16f["method"]&&_16f["formNode"]&&_16f["formNode"].method){
-_16f.method=_16f["formNode"].method;
-}
-if(!_16f["handle"]&&_16f["handler"]){
-_16f.handle=_16f.handler;
-}
-if(!_16f["load"]&&_16f["loaded"]){
-_16f.load=_16f.loaded;
-}
-if(!_16f["changeUrl"]&&_16f["changeURL"]){
-_16f.changeUrl=_16f.changeURL;
-}
-_16f.encoding=dojo.lang.firstValued(_16f["encoding"],djConfig["bindEncoding"],"");
-_16f.sendTransport=dojo.lang.firstValued(_16f["sendTransport"],djConfig["ioSendTransport"],true);
-var _170=dojo.lang.isFunction;
-for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
-var fn=dojo.io.hdlrFuncNames[x];
-if(_170(_16f[fn])){
-continue;
-}
-if(_170(_16f["handle"])){
-_16f[fn]=_16f.handle;
-}
-}
-dojo.lang.mixin(this,_16f);
-}});
-dojo.io.Error=function(msg,type,num){
-this.message=msg;
-this.type=type||"unknown";
-this.number=num||0;
-};
-dojo.io.transports.addTransport=function(name){
-this.push(name);
-this[name]=dojo.io[name];
-};
-dojo.io.bind=function(_177){
-if(!(_177 instanceof dojo.io.Request)){
-try{
-_177=new dojo.io.Request(_177);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _178="";
-if(_177["transport"]){
-_178=_177["transport"];
-if(!this[_178]){
-return _177;
-}
-}else{
-for(var x=0;x<dojo.io.transports.length;x++){
-var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_177))){
-_178=tmp;
-}
-}
-if(_178==""){
-return _177;
-}
-}
-this[_178].bind(_177);
-_177.bindSuccess=true;
-return _177;
-};
-dojo.io.queueBind=function(_17b){
-if(!(_17b instanceof dojo.io.Request)){
-try{
-_17b=new dojo.io.Request(_17b);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _17c=_17b.load;
-_17b.load=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_17c.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-var _17e=_17b.error;
-_17b.error=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_17e.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-dojo.io._bindQueue.push(_17b);
-dojo.io._dispatchNextQueueBind();
-return _17b;
-};
-dojo.io._dispatchNextQueueBind=function(){
-if(!dojo.io._queueBindInFlight){
-dojo.io._queueBindInFlight=true;
-dojo.io.bind(dojo.io._bindQueue.shift());
-}
-};
-dojo.io._bindQueue=[];
-dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_181){
-var _182=new Object();
-var _183="";
-var enc=/utf/i.test(_181||"")?encodeURIComponent:dojo.string.encodeAscii;
-for(var x in map){
-if(!_182[x]){
-_183+=enc(x)+"="+enc(map[x])+"&";
-}
-}
-return _183;
-};
-dojo.provide("dojo.dom");
-dojo.require("dojo.lang");
-dojo.dom.ELEMENT_NODE=1;
-dojo.dom.ATTRIBUTE_NODE=2;
-dojo.dom.TEXT_NODE=3;
-dojo.dom.CDATA_SECTION_NODE=4;
-dojo.dom.ENTITY_REFERENCE_NODE=5;
-dojo.dom.ENTITY_NODE=6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE=7;
-dojo.dom.COMMENT_NODE=8;
-dojo.dom.DOCUMENT_NODE=9;
-dojo.dom.DOCUMENT_TYPE_NODE=10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE=11;
-dojo.dom.NOTATION_NODE=12;
-dojo.dom.dojoml="http://www.dojotoolkit.org/2004/dojoml";
-dojo.dom.xmlns={svg:"http://www.w3.org/2000/svg",smil:"http://www.w3.org/2001/SMIL20/",mml:"http://www.w3.org/1998/Math/MathML",cml:"http://www.xml-cml.org",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml",xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",xbl:"http://www.mozilla.org/xbl",fo:"http://www.w3.org/1999/XSL/Format",xsl:"http://www.w3.org/1999/XSL/Transform",xslt:"http://www.w3.org/1999/XSL/Transform",xi:"http://www.w3.org/2001/XInclude",xforms:"http://www.w3.org/2002/01/xforms",saxon:"http://icl.com/saxon",xalan:"http://xml.apache.org/xslt",xsd:"http://www.w3.org/2001/XMLSchema",dt:"http://www.w3.org/2001/XMLSchema-datatypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",dc:"http://purl.org/dc/elements/1.1/",dcq:"http://purl.org/dc/qualifiers/1.0","soap-env":"http://schemas.xmlsoap.org/soap/envelope/",wsdl:"http://schemas.xmlsoap.org/wsdl/",AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
-dojo.dom.isNode=dojo.lang.isDomNode=function(wh){
-if(typeof Element=="object"){
-try{
-return wh instanceof Element;
-}
-catch(E){
-}
-}else{
-return wh&&!isNaN(wh.nodeType);
-}
-};
-dojo.lang.whatAmI.custom["node"]=dojo.dom.isNode;
-dojo.dom.getTagName=function(node){
-var _188=node.tagName;
-if(_188.substr(0,5).toLowerCase()!="dojo:"){
-if(_188.substr(0,4).toLowerCase()=="dojo"){
-return "dojo:"+_188.substring(4).toLowerCase();
-}
-var djt=node.getAttribute("dojoType")||node.getAttribute("dojotype");
-if(djt){
-return "dojo:"+djt.toLowerCase();
-}
-if((node.getAttributeNS)&&(node.getAttributeNS(this.dojoml,"type"))){
-return "dojo:"+node.getAttributeNS(this.dojoml,"type").toLowerCase();
-}
-try{
-djt=node.getAttribute("dojo:type");
-}
-catch(e){
-}
-if(djt){
-return "dojo:"+djt.toLowerCase();
-}
-if((!dj_global["djConfig"])||(!djConfig["ignoreClassNames"])){
-var _18a=node.className||node.getAttribute("class");
-if((_18a)&&(_18a.indexOf)&&(_18a.indexOf("dojo-")!=-1)){
-var _18b=_18a.split(" ");
-for(var x=0;x<_18b.length;x++){
-if((_18b[x].length>5)&&(_18b[x].indexOf("dojo-")>=0)){
-return "dojo:"+_18b[x].substr(5).toLowerCase();
-}
-}
-}
-}
-}
-return _188.toLowerCase();
-};
-dojo.dom.getUniqueId=function(){
-do{
-var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(document.getElementById(id));
-return id;
-};
-dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_18e,_18f){
-var node=_18e.firstChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.nextSibling;
-}
-if(_18f&&node&&node.tagName&&node.tagName.toLowerCase()!=_18f.toLowerCase()){
-node=dojo.dom.nextElement(node,_18f);
-}
-return node;
-};
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_191,_192){
-var node=_191.lastChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.previousSibling;
-}
-if(_192&&node&&node.tagName&&node.tagName.toLowerCase()!=_192.toLowerCase()){
-node=dojo.dom.prevElement(node,_192);
-}
-return node;
-};
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_195){
-if(!node){
-return null;
-}
-do{
-node=node.nextSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_195&&_195.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_195);
-}
-return node;
-};
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_197){
-if(!node){
-return null;
-}
-if(_197){
-_197=_197.toLowerCase();
-}
-do{
-node=node.previousSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_197&&_197.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_197);
-}
-return node;
-};
-dojo.dom.moveChildren=function(_198,_199,trim){
-var _19b=0;
-if(trim){
-while(_198.hasChildNodes()&&_198.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_198.removeChild(_198.firstChild);
-}
-while(_198.hasChildNodes()&&_198.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_198.removeChild(_198.lastChild);
-}
-}
-while(_198.hasChildNodes()){
-_199.appendChild(_198.firstChild);
-_19b++;
-}
-return _19b;
-};
-dojo.dom.copyChildren=function(_19c,_19d,trim){
-var _19f=_19c.cloneNode(true);
-return this.moveChildren(_19f,_19d,trim);
-};
-dojo.dom.removeChildren=function(node){
-var _1a1=node.childNodes.length;
-while(node.hasChildNodes()){
-node.removeChild(node.firstChild);
-}
-return _1a1;
-};
-dojo.dom.replaceChildren=function(node,_1a3){
-dojo.dom.removeChildren(node);
-node.appendChild(_1a3);
-};
-dojo.dom.removeNode=function(node){
-if(node&&node.parentNode){
-return node.parentNode.removeChild(node);
-}
-};
-dojo.dom.getAncestors=function(node,_1a6,_1a7){
-var _1a8=[];
-var _1a9=dojo.lang.isFunction(_1a6);
-while(node){
-if(!_1a9||_1a6(node)){
-_1a8.push(node);
-}
-if(_1a7&&_1a8.length>0){
-return _1a8[0];
-}
-node=node.parentNode;
-}
-if(_1a7){
-return null;
-}
-return _1a8;
-};
-dojo.dom.getAncestorsByTag=function(node,tag,_1ac){
-tag=tag.toLowerCase();
-return dojo.dom.getAncestors(node,function(el){
-return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_1ac);
-};
-dojo.dom.getFirstAncestorByTag=function(node,tag){
-return dojo.dom.getAncestorsByTag(node,tag,true);
-};
-dojo.dom.isDescendantOf=function(node,_1b1,_1b2){
-if(_1b2&&node){
-node=node.parentNode;
-}
-while(node){
-if(node==_1b1){
-return true;
-}
-node=node.parentNode;
-}
-return false;
-};
-dojo.dom.innerXML=function(node){
-if(node.innerXML){
-return node.innerXML;
-}else{
-if(typeof XMLSerializer!="undefined"){
-return (new XMLSerializer()).serializeToString(node);
-}
-}
-};
-dojo.dom.createDocumentFromText=function(str,_1b5){
-if(!_1b5){
-_1b5="text/xml";
-}
-if(typeof DOMParser!="undefined"){
-var _1b6=new DOMParser();
-return _1b6.parseFromString(str,_1b5);
-}else{
-if(typeof ActiveXObject!="undefined"){
-var _1b7=new ActiveXObject("Microsoft.XMLDOM");
-if(_1b7){
-_1b7.async=false;
-_1b7.loadXML(str);
-return _1b7;
-}else{
-dojo.debug("toXml didn't work?");
-}
-}else{
-if(document.createElement){
-var tmp=document.createElement("xml");
-tmp.innerHTML=str;
-if(document.implementation&&document.implementation.createDocument){
-var _1b9=document.implementation.createDocument("foo","",null);
-for(var i=0;i<tmp.childNodes.length;i++){
-_1b9.importNode(tmp.childNodes.item(i),true);
-}
-return _1b9;
-}
-return tmp.document&&tmp.document.firstChild?tmp.document.firstChild:tmp;
-}
-}
-}
-return null;
-};
-dojo.dom.prependChild=function(node,_1bc){
-if(_1bc.firstChild){
-_1bc.insertBefore(node,_1bc.firstChild);
-}else{
-_1bc.appendChild(node);
-}
-return true;
-};
-dojo.dom.insertBefore=function(node,ref,_1bf){
-if(_1bf!=true&&(node===ref||node.nextSibling===ref)){
-return false;
-}
-var _1c0=ref.parentNode;
-_1c0.insertBefore(node,ref);
-return true;
-};
-dojo.dom.insertAfter=function(node,ref,_1c3){
-var pn=ref.parentNode;
-if(ref==pn.lastChild){
-if((_1c3!=true)&&(node===ref)){
-return false;
-}
-pn.appendChild(node);
-}else{
-return this.insertBefore(node,ref.nextSibling,_1c3);
-}
-return true;
-};
-dojo.dom.insertAtPosition=function(node,ref,_1c7){
-if((!node)||(!ref)||(!_1c7)){
-return false;
-}
-switch(_1c7.toLowerCase()){
-case "before":
-return dojo.dom.insertBefore(node,ref);
-case "after":
-return dojo.dom.insertAfter(node,ref);
-case "first":
-if(ref.firstChild){
-return dojo.dom.insertBefore(node,ref.firstChild);
-}else{
-ref.appendChild(node);
-return true;
-}
-break;
-default:
-ref.appendChild(node);
-return true;
-}
-};
-dojo.dom.insertAtIndex=function(node,_1c9,_1ca){
-var _1cb=_1c9.childNodes;
-if(!_1cb.length){
-_1c9.appendChild(node);
-return true;
-}
-var _1cc=null;
-for(var i=0;i<_1cb.length;i++){
-var _1ce=_1cb.item(i)["getAttribute"]?parseInt(_1cb.item(i).getAttribute("dojoinsertionindex")):-1;
-if(_1ce<_1ca){
-_1cc=_1cb.item(i);
-}
-}
-if(_1cc){
-return dojo.dom.insertAfter(node,_1cc);
-}else{
-return dojo.dom.insertBefore(node,_1cb.item(0));
-}
-};
-dojo.dom.textContent=function(node,text){
-if(text){
-dojo.dom.replaceChildren(node,document.createTextNode(text));
-return text;
-}else{
-var _1d1="";
-if(node==null){
-return _1d1;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-_1d1+=dojo.dom.textContent(node.childNodes[i]);
-break;
-case 3:
-case 2:
-case 4:
-_1d1+=node.childNodes[i].nodeValue;
-break;
-default:
-break;
-}
-}
-return _1d1;
-}
-};
-dojo.dom.collectionToArray=function(_1d3){
-dojo.deprecated("dojo.dom.collectionToArray","use dojo.lang.toArray instead");
-return dojo.lang.toArray(_1d3);
-};
-dojo.dom.hasParent=function(node){
-if(!node||!node.parentNode||(node.parentNode&&!node.parentNode.tagName)){
-return false;
-}
-return true;
-};
-dojo.dom.isTag=function(node){
-if(node&&node.tagName){
-var arr=dojo.lang.toArray(arguments,1);
-return arr[dojo.lang.find(node.tagName,arr)]||"";
-}
-return "";
-};
-dojo.provide("dojo.io.BrowserIO");
-dojo.require("dojo.io");
-dojo.require("dojo.lang");
-dojo.require("dojo.dom");
-try{
-if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
-}
-}
-catch(e){
-}
-dojo.io.checkChildrenForFile=function(node){
-var _1d8=false;
-var _1d9=node.getElementsByTagName("input");
-dojo.lang.forEach(_1d9,function(_1da){
-if(_1d8){
-return;
-}
-if(_1da.getAttribute("type")=="file"){
-_1d8=true;
-}
-});
-return _1d8;
-};
-dojo.io.formHasFile=function(_1db){
-return dojo.io.checkChildrenForFile(_1db);
-};
-dojo.io.encodeForm=function(_1dc,_1dd){
-if((!_1dc)||(!_1dc.tagName)||(!_1dc.tagName.toLowerCase()=="form")){
-dojo.raise("Attempted to encode a non-form element.");
-}
-var enc=/utf/i.test(_1dd||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _1df=[];
-for(var i=0;i<_1dc.elements.length;i++){
-var elm=_1dc.elements[i];
-if(elm.disabled||elm.tagName.toLowerCase()=="fieldset"||!elm.name){
-continue;
-}
-var name=enc(elm.name);
-var type=elm.type.toLowerCase();
-if(type=="select-multiple"){
-for(var j=0;j<elm.options.length;j++){
-if(elm.options[j].selected){
-_1df.push(name+"="+enc(elm.options[j].value));
-}
-}
-}else{
-if(dojo.lang.inArray(type,["radio","checkbox"])){
-if(elm.checked){
-_1df.push(name+"="+enc(elm.value));
-}
-}else{
-if(!dojo.lang.inArray(type,["file","submit","reset","button"])){
-_1df.push(name+"="+enc(elm.value));
-}
-}
-}
-}
-var _1e5=_1dc.getElementsByTagName("input");
-for(var i=0;i<_1e5.length;i++){
-var _1e6=_1e5[i];
-if(_1e6.type.toLowerCase()=="image"&&_1e6.form==_1dc){
-var name=enc(_1e6.name);
-_1df.push(name+"="+enc(_1e6.value));
-_1df.push(name+".x=0");
-_1df.push(name+".y=0");
-}
-}
-return _1df.join("&")+"&";
-};
-dojo.io.setIFrameSrc=function(_1e7,src,_1e9){
-try{
-var r=dojo.render.html;
-if(!_1e9){
-if(r.safari){
-_1e7.location=src;
-}else{
-frames[_1e7.name].location=src;
-}
-}else{
-var idoc;
-if(r.ie){
-idoc=_1e7.contentWindow.document;
-}else{
-if(r.moz){
-idoc=_1e7.contentWindow;
-}else{
-if(r.safari){
-idoc=_1e7.document;
-}
-}
-}
-idoc.location.replace(src);
-}
-}
-catch(e){
-dojo.debug(e);
-dojo.debug("setIFrameSrc: "+e);
-}
-};
-dojo.io.XMLHTTPTransport=new function(){
-var _1ec=this;
-this.initialHref=window.location.href;
-this.initialHash=window.location.hash;
-this.moveForward=false;
-var _1ed={};
-this.useCache=false;
-this.preventCache=false;
-this.historyStack=[];
-this.forwardStack=[];
-this.historyIframe=null;
-this.bookmarkAnchor=null;
-this.locationTimer=null;
-function getCacheKey(url,_1ef,_1f0){
-return url+"|"+_1ef+"|"+_1f0.toLowerCase();
-}
-function addToCache(url,_1f2,_1f3,http){
-_1ed[getCacheKey(url,_1f2,_1f3)]=http;
-}
-function getFromCache(url,_1f6,_1f7){
-return _1ed[getCacheKey(url,_1f6,_1f7)];
-}
-this.clearCache=function(){
-_1ed={};
-};
-function doLoad(_1f8,http,url,_1fb,_1fc){
-if((http.status==200)||(location.protocol=="file:"&&http.status==0)){
-var ret;
-if(_1f8.method.toLowerCase()=="head"){
-var _1fe=http.getAllResponseHeaders();
-ret={};
-ret.toString=function(){
-return _1fe;
-};
-var _1ff=_1fe.split(/[\r\n]+/g);
-for(var i=0;i<_1ff.length;i++){
-var pair=_1ff[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-if(pair){
-ret[pair[1]]=pair[2];
-}
-}
-}else{
-if(_1f8.mimetype=="text/javascript"){
-try{
-ret=dj_eval(http.responseText);
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=null;
-}
-}else{
-if(_1f8.mimetype=="text/json"){
-try{
-ret=dj_eval("("+http.responseText+")");
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=false;
-}
-}else{
-if((_1f8.mimetype=="application/xml")||(_1f8.mimetype=="text/xml")){
-ret=http.responseXML;
-if(!ret||typeof ret=="string"){
-ret=dojo.dom.createDocumentFromText(http.responseText);
-}
-}else{
-ret=http.responseText;
-}
-}
-}
-}
-if(_1fc){
-addToCache(url,_1fb,_1f8.method,http);
-}
-_1f8[(typeof _1f8.load=="function")?"load":"handle"]("load",ret,http);
-}else{
-var _202=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_1f8[(typeof _1f8.error=="function")?"error":"handle"]("error",_202,http);
-}
-}
-function setHeaders(http,_204){
-if(_204["headers"]){
-for(var _205 in _204["headers"]){
-if(_205.toLowerCase()=="content-type"&&!_204["contentType"]){
-_204["contentType"]=_204["headers"][_205];
-}else{
-http.setRequestHeader(_205,_204["headers"][_205]);
-}
-}
-}
-}
-this.addToHistory=function(args){
-var _207=args["back"]||args["backButton"]||args["handle"];
-var hash=null;
-if(!this.historyIframe){
-this.historyIframe=window.frames["djhistory"];
-}
-if(!this.bookmarkAnchor){
-this.bookmarkAnchor=document.createElement("a");
-(document.body||document.getElementsByTagName("body")[0]).appendChild(this.bookmarkAnchor);
-this.bookmarkAnchor.style.display="none";
-}
-if((!args["changeUrl"])||(dojo.render.html.ie)){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
-this.moveForward=true;
-dojo.io.setIFrameSrc(this.historyIframe,url,false);
-}
-if(args["changeUrl"]){
-hash="#"+((args["changeUrl"]!==true)?args["changeUrl"]:(new Date()).getTime());
-setTimeout("window.location.href = '"+hash+"';",1);
-this.bookmarkAnchor.href=hash;
-if(dojo.render.html.ie){
-var _20a=_207;
-var lh=null;
-var hsl=this.historyStack.length-1;
-if(hsl>=0){
-while(!this.historyStack[hsl]["urlHash"]){
-hsl--;
-}
-lh=this.historyStack[hsl]["urlHash"];
-}
-if(lh){
-_207=function(){
-if(window.location.hash!=""){
-setTimeout("window.location.href = '"+lh+"';",1);
-}
-_20a();
-};
-}
-this.forwardStack=[];
-var _20d=args["forward"]||args["forwardButton"];
-var tfw=function(){
-if(window.location.hash!=""){
-window.location.href=hash;
-}
-if(_20d){
-_20d();
-}
-};
-if(args["forward"]){
-args.forward=tfw;
-}else{
-if(args["forwardButton"]){
-args.forwardButton=tfw;
-}
-}
-}else{
-if(dojo.render.html.moz){
-if(!this.locationTimer){
-this.locationTimer=setInterval("dojo.io.XMLHTTPTransport.checkLocation();",200);
-}
-}
-}
-}
-this.historyStack.push({"url":url,"callback":_207,"kwArgs":args,"urlHash":hash});
-};
-this.checkLocation=function(){
-var hsl=this.historyStack.length;
-if((window.location.hash==this.initialHash)||(window.location.href==this.initialHref)&&(hsl==1)){
-this.handleBackButton();
-return;
-}
-if(this.forwardStack.length>0){
-if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){
-this.handleForwardButton();
-return;
-}
-}
-if((hsl>=2)&&(this.historyStack[hsl-2])){
-if(this.historyStack[hsl-2].urlHash==window.location.hash){
-this.handleBackButton();
-return;
-}
-}
-};
-this.iframeLoaded=function(evt,_211){
-var isp=_211.href.split("?");
-if(isp.length<2){
-if(this.historyStack.length==1){
-this.handleBackButton();
-}
-return;
-}
-var _213=isp[1];
-if(this.moveForward){
-this.moveForward=false;
-return;
-}
-var last=this.historyStack.pop();
-if(!last){
-if(this.forwardStack.length>0){
-var next=this.forwardStack[this.forwardStack.length-1];
-if(_213==next.url.split("?")[1]){
-this.handleForwardButton();
-}
-}
-return;
-}
-this.historyStack.push(last);
-if(this.historyStack.length>=2){
-if(isp[1]==this.historyStack[this.historyStack.length-2].url.split("?")[1]){
-this.handleBackButton();
-}
-}else{
-this.handleBackButton();
-}
-};
-this.handleBackButton=function(){
-var last=this.historyStack.pop();
-if(!last){
-return;
-}
-if(last["callback"]){
-last.callback();
-}else{
-if(last.kwArgs["backButton"]){
-last.kwArgs["backButton"]();
-}else{
-if(last.kwArgs["back"]){
-last.kwArgs["back"]();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("back");
-}
-}
-}
-}
-this.forwardStack.push(last);
-};
-this.handleForwardButton=function(){
-var last=this.forwardStack.pop();
-if(!last){
-return;
-}
-if(last.kwArgs["forward"]){
-last.kwArgs.forward();
-}else{
-if(last.kwArgs["forwardButton"]){
-last.kwArgs.forwardButton();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("forward");
-}
-}
-}
-this.historyStack.push(last);
-};
-this.inFlight=[];
-this.inFlightTimer=null;
-this.startWatchingInFlight=function(){
-if(!this.inFlightTimer){
-this.inFlightTimer=setInterval("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-}
-};
-this.watchInFlight=function(){
-for(var x=this.inFlight.length-1;x>=0;x--){
-var tif=this.inFlight[x];
-if(!tif){
-this.inFlight.splice(x,1);
-continue;
-}
-if(4==tif.http.readyState){
-this.inFlight.splice(x,1);
-doLoad(tif.req,tif.http,tif.url,tif.query,tif.useCache);
-if(this.inFlight.length==0){
-clearInterval(this.inFlightTimer);
-this.inFlightTimer=null;
-}
-}
-}
-};
-var _21a=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_21b){
-return _21a&&dojo.lang.inArray((_21b["mimetype"]||"".toLowerCase()),["text/plain","text/html","application/xml","text/xml","text/javascript","text/json"])&&dojo.lang.inArray(_21b["method"].toLowerCase(),["post","get","head"])&&!(_21b["formNode"]&&dojo.io.formHasFile(_21b["formNode"]));
-};
-this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_21c){
-if(!_21c["url"]){
-if(!_21c["formNode"]&&(_21c["backButton"]||_21c["back"]||_21c["changeUrl"]||_21c["watchForURL"])&&(!djConfig.preventBackButtonFix)){
-this.addToHistory(_21c);
-return true;
-}
-}
-var url=_21c.url;
-var _21e="";
-if(_21c["formNode"]){
-var ta=_21c.formNode.getAttribute("action");
-if((ta)&&(!_21c["url"])){
-url=ta;
-}
-var tp=_21c.formNode.getAttribute("method");
-if((tp)&&(!_21c["method"])){
-_21c.method=tp;
-}
-_21e+=dojo.io.encodeForm(_21c.formNode,_21c.encoding);
-}
-if(url.indexOf("#")>-1){
-dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
-url=url.split("#")[0];
-}
-if(_21c["file"]){
-_21c.method="post";
-}
-if(!_21c["method"]){
-_21c.method="get";
-}
-if(_21c.method.toLowerCase()=="get"){
-_21c.multipart=false;
-}else{
-if(_21c["file"]){
-_21c.multipart=true;
-}else{
-if(!_21c["multipart"]){
-_21c.multipart=false;
-}
-}
-}
-if(_21c["backButton"]||_21c["back"]||_21c["changeUrl"]){
-this.addToHistory(_21c);
-}
-var _221=_21c["content"]||{};
-if(_21c.sendTransport){
-_221["dojo.transport"]="xmlhttp";
-}
-do{
-if(_21c.postContent){
-_21e=_21c.postContent;
-break;
-}
-if(_221){
-_21e+=dojo.io.argsFromMap(_221,_21c.encoding);
-}
-if(_21c.method.toLowerCase()=="get"||!_21c.multipart){
-break;
-}
-var t=[];
-if(_21e.length){
-var q=_21e.split("&");
-for(var i=0;i<q.length;++i){
-if(q[i].length){
-var p=q[i].split("=");
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+p[0]+"\"","",p[1]);
-}
-}
-}
-if(_21c.file){
-if(dojo.lang.isArray(_21c.file)){
-for(var i=0;i<_21c.file.length;++i){
-var o=_21c.file[i];
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}else{
-var o=_21c.file;
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}
-if(t.length){
-t.push("--"+this.multipartBoundary+"--","");
-_21e=t.join("\r\n");
-}
-}while(false);
-var _227=_21c["sync"]?false:true;
-var _228=_21c["preventCache"]||(this.preventCache==true&&_21c["preventCache"]!=false);
-var _229=_21c["useCache"]==true||(this.useCache==true&&_21c["useCache"]!=false);
-if(!_228&&_229){
-var _22a=getFromCache(url,_21e,_21c.method);
-if(_22a){
-doLoad(_21c,_22a,url,_21e,false);
-return;
-}
-}
-var http=dojo.hostenv.getXmlhttpObject();
-var _22c=false;
-if(_227){
-this.inFlight.push({"req":_21c,"http":http,"url":url,"query":_21e,"useCache":_229});
-this.startWatchingInFlight();
-}
-if(_21c.method.toLowerCase()=="post"){
-http.open("POST",url,_227);
-setHeaders(http,_21c);
-http.setRequestHeader("Content-Type",_21c.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_21c.contentType||"application/x-www-form-urlencoded"));
-http.send(_21e);
-}else{
-var _22d=url;
-if(_21e!=""){
-_22d+=(_22d.indexOf("?")>-1?"&":"?")+_21e;
-}
-if(_228){
-_22d+=(dojo.string.endsWithAny(_22d,"?","&")?"":(_22d.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
-}
-http.open(_21c.method.toUpperCase(),_22d,_227);
-setHeaders(http,_21c);
-http.send(null);
-}
-if(!_227){
-doLoad(_21c,http,url,_21e,_229);
-}
-_21c.abort=function(){
-return http.abort();
-};
-return;
-};
-dojo.io.transports.addTransport("XMLHTTPTransport");
-};
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/dojo.js.uncompressed.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/dojo.js.uncompressed.js
deleted file mode 100644
index 777d429..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/dojo.js.uncompressed.js
+++ /dev/null
@@ -1,3476 +0,0 @@
-/*

-	Copyright (c) 2004-2005, The Dojo Foundation

-	All Rights Reserved.

-

-	Licensed under the Academic Free License version 2.1 or above OR the

-	modified BSD license. For more information on Dojo licensing, see:

-

-		http://dojotoolkit.org/community/licensing.shtml

-*/

-

-/**

-* @file bootstrap1.js

-*

-* bootstrap file that runs before hostenv_*.js file.

-*

-* @author Copyright 2004 Mark D. Anderson (mda@discerning.com)

-* @author Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php

-*

-* $Id: bootstrap1.js 2836 2006-01-16 08:36:18Z alex $

-*/

-

-/**

- * The global djConfig can be set prior to loading the library, to override

- * certain settings.  It does not exist under dojo.* so that it can be set

- * before the dojo variable exists. Setting any of these variables *after* the

- * library has loaded does nothing at all. The variables that can be set are

- * as follows:

- */

-

-/**

- * dj_global is an alias for the top-level global object in the host

- * environment (the "window" object in a browser).

- */

-var dj_global = this; //typeof window == 'undefined' ? this : window;

-

-function dj_undef(name, obj){

-	if(!obj){ obj = dj_global; }

-	return (typeof obj[name] == "undefined");

-}

-

-if(dj_undef("djConfig")){

-	var djConfig = {};

-}

-

-/**

- * dojo is the root variable of (almost all) our public symbols.

- */

-var dojo;

-if(dj_undef("dojo")){ dojo = {}; }

-

-dojo.version = {

-	major: 0, minor: 2, patch: 2, flag: "",

-	revision: Number("$Rev: 2836 $".match(/[0-9]+/)[0]),

-	toString: function() {

-		with (dojo.version) {

-			return major + "." + minor + "." + patch + flag + " (" + revision + ")";

-		}

-	}

-};

-

-/*

- * evaluate a string like "A.B" without using eval.

- */

-dojo.evalObjPath = function(objpath, create){

-	// fast path for no periods

-	if(typeof objpath != "string"){ return dj_global; }

-	if(objpath.indexOf('.') == -1){

-		if((dj_undef(objpath, dj_global))&&(create)){

-			dj_global[objpath] = {};

-		}

-		return dj_global[objpath];

-	}

-

-	var syms = objpath.split(/\./);

-	var obj = dj_global;

-	for(var i=0;i<syms.length;++i){

-		if(!create){

-			obj = obj[syms[i]];

-			if((typeof obj == 'undefined')||(!obj)){

-				return obj;

-			}

-		}else{

-			if(dj_undef(syms[i], obj)){

-				obj[syms[i]] = {};

-			}

-			obj = obj[syms[i]];

-		}

-	}

-	return obj;

-};

-

-

-// ****************************************************************

-// global public utils

-// ****************************************************************

-

-/*

- * utility to print an Error. 

- * TODO: overriding Error.prototype.toString won't accomplish this?

- * ... since natively generated Error objects do not always reflect such things?

- */

-dojo.errorToString = function(excep){

-	return ((!dj_undef("message", excep)) ? excep.message : (dj_undef("description", excep) ? excep : excep.description ));

-};

-

-/**

-* Throws an Error object given the string err. For now, will also do a println

-* to the user first.

-*/

-dojo.raise = function(message, excep){

-	if(excep){

-		message = message + ": "+dojo.errorToString(excep);

-	}

-	var he = dojo.hostenv;

-	if((!dj_undef("hostenv", dojo))&&(!dj_undef("println", dojo.hostenv))){ 

-		dojo.hostenv.println("FATAL: " + message);

-	}

-	throw Error(message);

-};

-

-dj_throw = dj_rethrow = function(m, e){

-	dojo.deprecated("dj_throw and dj_rethrow deprecated, use dojo.raise instead");

-	dojo.raise(m, e);

-};

-

-/**

- * Produce a line of debug output. 

- * Does nothing unless djConfig.isDebug is true.

- * varargs, joined with ''.

- * Caller should not supply a trailing "\n".

- */

-dojo.debug = function(){

-	if (!djConfig.isDebug) { return; }

-	var args = arguments;

-	if(dj_undef("println", dojo.hostenv)){

-		dojo.raise("dojo.debug not available (yet?)");

-	}

-	var isJUM = dj_global["jum"] && !dj_global["jum"].isBrowser;

-	var s = [(isJUM ? "": "DEBUG: ")];

-	for(var i=0;i<args.length;++i){

-		if(!false && args[i] instanceof Error){

-			var msg = "[" + args[i].name + ": " + dojo.errorToString(args[i]) +

-				(args[i].fileName ? ", file: " + args[i].fileName : "") +

-				(args[i].lineNumber ? ", line: " + args[i].lineNumber : "") + "]";

-		} else {

-			try {

-				var msg = String(args[i]);

-			} catch(e) {

-				if(dojo.render.html.ie) {

-					var msg = "[ActiveXObject]";

-				} else {

-					var msg = "[unknown]";

-				}

-			}

-		}

-		s.push(msg);

-	}

-	if(isJUM){ // this seems to be the only way to get JUM to "play nice"

-		jum.debug(s.join(" "));

-	}else{

-		dojo.hostenv.println(s.join(" "));

-	}

-}

-

-/**

- * this is really hacky for now - just 

- * display the properties of the object

-**/

-

-dojo.debugShallow = function(obj){

-	if (!djConfig.isDebug) { return; }

-	dojo.debug('------------------------------------------------------------');

-	dojo.debug('Object: '+obj);

-	for(i in obj){

-		dojo.debug(i + ': ' + obj[i]);

-	}

-	dojo.debug('------------------------------------------------------------');

-}

-

-var dj_debug = dojo.debug;

-

-/**

- * We put eval() in this separate function to keep down the size of the trapped

- * evaluation context.

- *

- * Note that:

- * - JSC eval() takes an optional second argument which can be 'unsafe'.

- * - Mozilla/SpiderMonkey eval() takes an optional second argument which is the

- *   scope object for new symbols.

-*/

-function dj_eval(s){ return dj_global.eval ? dj_global.eval(s) : eval(s); }

-

-

-/**

- * Convenience for throwing an exception because some function is not

- * implemented.

- */

-dj_unimplemented = dojo.unimplemented = function(funcname, extra){

-	// FIXME: need to move this away from dj_*

-	var mess = "'" + funcname + "' not implemented";

-	if((!dj_undef(extra))&&(extra)){ mess += " " + extra; }

-	dojo.raise(mess);

-}

-

-/**

- * Convenience for informing of deprecated behaviour.

- */

-dj_deprecated = dojo.deprecated = function(behaviour, extra, removal){

-	var mess = "DEPRECATED: " + behaviour;

-	if(extra){ mess += " " + extra; }

-	if(removal){ mess += " -- will be removed in version: " + removal; }

-	dojo.debug(mess);

-}

-

-/**

- * Does inheritance

- */

-dojo.inherits = function(subclass, superclass){

-	if(typeof superclass != 'function'){ 

-		dojo.raise("superclass: "+superclass+" borken");

-	}

-	subclass.prototype = new superclass();

-	subclass.prototype.constructor = subclass;

-	subclass.superclass = superclass.prototype;

-	// DEPRICATED: super is a reserved word, use 'superclass'

-	subclass['super'] = superclass.prototype;

-}

-

-dj_inherits = function(subclass, superclass){

-	dojo.deprecated("dj_inherits deprecated, use dojo.inherits instead");

-	dojo.inherits(subclass, superclass);

-}

-

-// an object that authors use determine what host we are running under

-dojo.render = (function(){

-

-	function vscaffold(prefs, names){

-		var tmp = {

-			capable: false,

-			support: {

-				builtin: false,

-				plugin: false

-			},

-			prefixes: prefs

-		};

-		for(var x in names){

-			tmp[x] = false;

-		}

-		return tmp;

-	}

-

-	return {

-		name: "",

-		ver: dojo.version,

-		os: { win: false, linux: false, osx: false },

-		html: vscaffold(["html"], ["ie", "opera", "khtml", "safari", "moz"]),

-		svg: vscaffold(["svg"], ["corel", "adobe", "batik"]),

-		vml: vscaffold(["vml"], ["ie"]),

-		swf: vscaffold(["Swf", "Flash", "Mm"], ["mm"]),

-		swt: vscaffold(["Swt"], ["ibm"])

-	};

-})();

-

-// ****************************************************************

-// dojo.hostenv methods that must be defined in hostenv_*.js

-// ****************************************************************

-

-/**

- * The interface definining the interaction with the EcmaScript host environment.

-*/

-

-/*

- * None of these methods should ever be called directly by library users.

- * Instead public methods such as loadModule should be called instead.

- */

-dojo.hostenv = (function(){

-

-	// default configuration options

-	var config = {

-		isDebug: false,

-		allowQueryConfig: false,

-		baseScriptUri: "",

-		baseRelativePath: "",

-		libraryScriptUri: "",

-		iePreventClobber: false,

-		ieClobberMinimal: true,

-		preventBackButtonFix: true,

-		searchIds: [],

-		parseWidgets: true

-	};

-

-	if (typeof djConfig == "undefined") { djConfig = config; }

-	else {

-		for (var option in config) {

-			if (typeof djConfig[option] == "undefined") {

-				djConfig[option] = config[option];

-			}

-		}

-	}

-

-	var djc = djConfig;

-	function _def(obj, name, def){

-		return (dj_undef(name, obj) ? def : obj[name]);

-	}

-

-	return {

-		name_: '(unset)',

-		version_: '(unset)',

-		pkgFileName: "__package__",

-

-		// for recursion protection

-		loading_modules_: {},

-		loaded_modules_: {},

-		addedToLoadingCount: [],

-		removedFromLoadingCount: [],

-		inFlightCount: 0,

-		// FIXME: it should be possible to pull module prefixes in from djConfig

-		modulePrefixes_: {

-			dojo: {name: "dojo", value: "src"}

-		},

-

-

-		setModulePrefix: function(module, prefix){

-			this.modulePrefixes_[module] = {name: module, value: prefix};

-		},

-

-		getModulePrefix: function(module){

-			var mp = this.modulePrefixes_;

-			if((mp[module])&&(mp[module]["name"])){

-				return mp[module].value;

-			}

-			return module;

-		},

-

-		getTextStack: [],

-		loadUriStack: [],

-		loadedUris: [],

-		// lookup cache for modules.

-		// NOTE: this is partially redundant a private variable in the jsdown

-		// implementation, but we don't want to couple the two.

-		// modules_ : {},

-		post_load_: false,

-		modulesLoadedListeners: [],

-		/**

-		 * Return the name of the hostenv.

-		 */

-		getName: function(){ return this.name_; },

-

-		/**

-		* Return the version of the hostenv.

-		*/

-		getVersion: function(){ return this.version_; },

-

-		/**

-		 * Read the plain/text contents at the specified uri.  If getText() is

-		 * not implemented, then it is necessary to override loadUri() with an

-		 * implementation that doesn't rely on it.

-		 */

-		getText: function(uri){

-			dojo.unimplemented('getText', "uri=" + uri);

-		},

-

-		/**

-		 * return the uri of the script that defined this function

-		 * private method that must be implemented by the hostenv.

-		 */

-		getLibraryScriptUri: function(){

-			// FIXME: need to implement!!!

-			dojo.unimplemented('getLibraryScriptUri','');

-		}

-	};

-})();

-

-/**

- * Display a line of text to the user.

- * The line argument should not contain a trailing "\n"; that is added by the

- * implementation.

- */

-//dojo.hostenv.println = function(line) {}

-

-// ****************************************************************

-// dojo.hostenv methods not defined in hostenv_*.js

-// ****************************************************************

-

-/**

- * Return the base script uri that other scripts are found relative to.

- * It is either the empty string, or a non-empty string ending in '/'.

- */

-dojo.hostenv.getBaseScriptUri = function(){

-	if(djConfig.baseScriptUri.length){ 

-		return djConfig.baseScriptUri;

-	}

-	var uri = new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);

-	if (!uri) { dojo.raise("Nothing returned by getLibraryScriptUri(): " + uri); }

-

-	var lastslash = uri.lastIndexOf('/');

-	djConfig.baseScriptUri = djConfig.baseRelativePath;

-	return djConfig.baseScriptUri;

-}

-

-/**

-* Set the base script uri.

-*/

-// In JScript .NET, see interface System._AppDomain implemented by

-// System.AppDomain.CurrentDomain. Members include AppendPrivatePath,

-// RelativeSearchPath, BaseDirectory.

-dojo.hostenv.setBaseScriptUri = function(uri){ djConfig.baseScriptUri = uri }

-

-/**

- * Loads and interprets the script located at relpath, which is relative to the

- * script root directory.  If the script is found but its interpretation causes

- * a runtime exception, that exception is not caught by us, so the caller will

- * see it.  We return a true value if and only if the script is found.

- *

- * For now, we do not have an implementation of a true search path.  We

- * consider only the single base script uri, as returned by getBaseScriptUri().

- *

- * @param relpath A relative path to a script (no leading '/', and typically

- * ending in '.js').

- * @param module A module whose existance to check for after loading a path.

- * Can be used to determine success or failure of the load.

- */

-dojo.hostenv.loadPath = function(relpath, module /*optional*/, cb /*optional*/){

-	if((relpath.charAt(0) == '/')||(relpath.match(/^\w+:/))){

-		dojo.raise("relpath '" + relpath + "'; must be relative");

-	}

-	var uri = this.getBaseScriptUri() + relpath;

-	if(djConfig.cacheBust && dojo.render.html.capable) { uri += "?" + String(djConfig.cacheBust).replace(/\W+/g,""); }

-	try{

-		return ((!module) ? this.loadUri(uri, cb) : this.loadUriAndCheck(uri, module, cb));

-	}catch(e){

-		dojo.debug(e);

-		return false;

-	}

-}

-

-/**

- * Reads the contents of the URI, and evaluates the contents.

- * Returns true if it succeeded. Returns false if the URI reading failed.

- * Throws if the evaluation throws.

- * The result of the eval is not available to the caller.

- */

-dojo.hostenv.loadUri = function(uri, cb){

-	if(this.loadedUris[uri]){

-		return;

-	}

-	var contents = this.getText(uri, null, true);

-	if(contents == null){ return 0; }

-	this.loadedUris[uri] = true;

-	var value = dj_eval(contents);

-	return 1;

-}

-

-// FIXME: probably need to add logging to this method

-dojo.hostenv.loadUriAndCheck = function(uri, module, cb){

-	var ok = true;

-	try{

-		ok = this.loadUri(uri, cb);

-	}catch(e){

-		dojo.debug("failed loading ", uri, " with error: ", e);

-	}

-	return ((ok)&&(this.findModule(module, false))) ? true : false;

-}

-

-dojo.loaded = function(){ }

-

-dojo.hostenv.loaded = function(){

-	this.post_load_ = true;

-	var mll = this.modulesLoadedListeners;

-	for(var x=0; x<mll.length; x++){

-		mll[x]();

-	}

-	dojo.loaded();

-}

-

-/*

-Call styles:

-	dojo.addOnLoad(functionPointer)

-	dojo.addOnLoad(object, "functionName")

-*/

-dojo.addOnLoad = function(obj, fcnName) {

-	if(arguments.length == 1) {

-		dojo.hostenv.modulesLoadedListeners.push(obj);

-	} else if(arguments.length > 1) {

-		dojo.hostenv.modulesLoadedListeners.push(function() {

-			obj[fcnName]();

-		});

-	}

-};

-

-dojo.hostenv.modulesLoaded = function(){

-	if(this.post_load_){ return; }

-	if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){

-		if(this.inFlightCount > 0){ 

-			dojo.debug("files still in flight!");

-			return;

-		}

-		if(typeof setTimeout == "object"){

-			setTimeout("dojo.hostenv.loaded();", 0);

-		}else{

-			dojo.hostenv.loaded();

-		}

-	}

-}

-

-dojo.hostenv.moduleLoaded = function(modulename){

-	var modref = dojo.evalObjPath((modulename.split(".").slice(0, -1)).join('.'));

-	this.loaded_modules_[(new String(modulename)).toLowerCase()] = modref;

-}

-

-/**

-* loadModule("A.B") first checks to see if symbol A.B is defined. 

-* If it is, it is simply returned (nothing to do).

-*

-* If it is not defined, it will look for "A/B.js" in the script root directory,

-* followed by "A.js".

-*

-* It throws if it cannot find a file to load, or if the symbol A.B is not

-* defined after loading.

-*

-* It returns the object A.B.

-*

-* This does nothing about importing symbols into the current package.

-* It is presumed that the caller will take care of that. For example, to import

-* all symbols:

-*

-*    with (dojo.hostenv.loadModule("A.B")) {

-*       ...

-*    }

-*

-* And to import just the leaf symbol:

-*

-*    var B = dojo.hostenv.loadModule("A.B");

-*    ...

-*

-* dj_load is an alias for dojo.hostenv.loadModule

-*/

-dojo.hostenv._global_omit_module_check = false;

-dojo.hostenv.loadModule = function(modulename, exact_only, omit_module_check){

-	if(!modulename){ return; }

-	omit_module_check = this._global_omit_module_check || omit_module_check;

-	var module = this.findModule(modulename, false);

-	if(module){

-		return module;

-	}

-

-	// protect against infinite recursion from mutual dependencies

-	if(dj_undef(modulename, this.loading_modules_)){

-		this.addedToLoadingCount.push(modulename);

-	}

-	this.loading_modules_[modulename] = 1;

-

-	// convert periods to slashes

-	var relpath = modulename.replace(/\./g, '/') + '.js';

-

-	var syms = modulename.split(".");

-	var nsyms = modulename.split(".");

-	for (var i = syms.length - 1; i > 0; i--) {

-		var parentModule = syms.slice(0, i).join(".");

-		var parentModulePath = this.getModulePrefix(parentModule);

-		if (parentModulePath != parentModule) {

-			syms.splice(0, i, parentModulePath);

-			break;

-		}

-	}

-	var last = syms[syms.length - 1];

-	// figure out if we're looking for a full package, if so, we want to do

-	// things slightly diffrently

-	if(last=="*"){

-		modulename = (nsyms.slice(0, -1)).join('.');

-

-		while(syms.length){

-			syms.pop();

-			syms.push(this.pkgFileName);

-			relpath = syms.join("/") + '.js';

-			if(relpath.charAt(0)=="/"){

-				relpath = relpath.slice(1);

-			}

-			ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));

-			if(ok){ break; }

-			syms.pop();

-		}

-	}else{

-		relpath = syms.join("/") + '.js';

-		modulename = nsyms.join('.');

-		var ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));

-		if((!ok)&&(!exact_only)){

-			syms.pop();

-			while(syms.length){

-				relpath = syms.join('/') + '.js';

-				ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));

-				if(ok){ break; }

-				syms.pop();

-				relpath = syms.join('/') + '/'+this.pkgFileName+'.js';

-				if(relpath.charAt(0)=="/"){

-					relpath = relpath.slice(1);

-				}

-				ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));

-				if(ok){ break; }

-			}

-		}

-

-		if((!ok)&&(!omit_module_check)){

-			dojo.raise("Could not load '" + modulename + "'; last tried '" + relpath + "'");

-		}

-	}

-

-	// check that the symbol was defined

-	if(!omit_module_check){

-		// pass in false so we can give better error

-		module = this.findModule(modulename, false);

-		if(!module){

-			dojo.raise("symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); 

-		}

-	}

-

-	return module;

-}

-

-/**

-* startPackage("A.B") follows the path, and at each level creates a new empty

-* object or uses what already exists. It returns the result.

-*/

-dojo.hostenv.startPackage = function(packname){

-	var syms = packname.split(/\./);

-	if(syms[syms.length-1]=="*"){

-		syms.pop();

-	}

-	return dojo.evalObjPath(syms.join("."), true);

-}

-

-/**

- * findModule("A.B") returns the object A.B if it exists, otherwise null.

- * @param modulename A string like 'A.B'.

- * @param must_exist Optional, defualt false. throw instead of returning null

- * if the module does not currently exist.

- */

-dojo.hostenv.findModule = function(modulename, must_exist) {

-	// check cache

-	/*

-	if(!dj_undef(modulename, this.modules_)){

-		return this.modules_[modulename];

-	}

-	*/

-

-	var lmn = (new String(modulename)).toLowerCase();

-

-	if(this.loaded_modules_[lmn]){

-		return this.loaded_modules_[lmn];

-	}

-

-	// see if symbol is defined anyway

-	var module = dojo.evalObjPath(modulename);

-	if((modulename)&&(typeof module != 'undefined')&&(module)){

-		this.loaded_modules_[lmn] = module;

-		return module;

-	}

-

-	if(must_exist){

-		dojo.raise("no loaded module named '" + modulename + "'");

-	}

-	return null;

-}

-

-/**

-* @file hostenv_browser.js

-*

-* Implements the hostenv interface for a browser environment. 

-*

-* Perhaps it could be called a "dom" or "useragent" environment.

-*

-* @author Copyright 2004 Mark D. Anderson (mda@discerning.com)

-* @author Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php

-*/

-

-// make jsc shut up (so we can use jsc to sanity check the code even if it will never run it).

-/*@cc_on

-@if (@_jscript_version >= 7)

-var window; var XMLHttpRequest;

-@end

-@*/

-

-if(typeof window == 'undefined'){

-	dojo.raise("no window object");

-}

-

-// attempt to figure out the path to dojo if it isn't set in the config

-(function() {

-	// before we get any further with the config options, try to pick them out

-	// of the URL. Most of this code is from NW

-	if(djConfig.allowQueryConfig){

-		var baseUrl = document.location.toString(); // FIXME: use location.query instead?

-		var params = baseUrl.split("?", 2);

-		if(params.length > 1){

-			var paramStr = params[1];

-			var pairs = paramStr.split("&");

-			for(var x in pairs){

-				var sp = pairs[x].split("=");

-				// FIXME: is this eval dangerous?

-				if((sp[0].length > 9)&&(sp[0].substr(0, 9) == "djConfig.")){

-					var opt = sp[0].substr(9);

-					try{

-						djConfig[opt]=eval(sp[1]);

-					}catch(e){

-						djConfig[opt]=sp[1];

-					}

-				}

-			}

-		}

-	}

-

-	if(((djConfig["baseScriptUri"] == "")||(djConfig["baseRelativePath"] == "")) &&(document && document.getElementsByTagName)){

-		var scripts = document.getElementsByTagName("script");

-		var rePkg = /(__package__|dojo)\.js([\?\.]|$)/i;

-		for(var i = 0; i < scripts.length; i++) {

-			var src = scripts[i].getAttribute("src");

-			if(!src) { continue; }

-			var m = src.match(rePkg);

-			if(m) {

-				root = src.substring(0, m.index);

-				if(!this["djConfig"]) { djConfig = {}; }

-				if(djConfig["baseScriptUri"] == "") { djConfig["baseScriptUri"] = root; }

-				if(djConfig["baseRelativePath"] == "") { djConfig["baseRelativePath"] = root; }

-				break;

-			}

-		}

-	}

-

-	var dr = dojo.render;

-	var drh = dojo.render.html;

-	var dua = drh.UA = navigator.userAgent;

-	var dav = drh.AV = navigator.appVersion;

-	var t = true;

-	var f = false;

-	drh.capable = t;

-	drh.support.builtin = t;

-

-	dr.ver = parseFloat(drh.AV);

-	dr.os.mac = dav.indexOf("Macintosh") >= 0;

-	dr.os.win = dav.indexOf("Windows") >= 0;

-	// could also be Solaris or something, but it's the same browser

-	dr.os.linux = dav.indexOf("X11") >= 0;

-

-	drh.opera = dua.indexOf("Opera") >= 0;

-	drh.khtml = (dav.indexOf("Konqueror") >= 0)||(dav.indexOf("Safari") >= 0);

-	drh.safari = dav.indexOf("Safari") >= 0;

-	var geckoPos = dua.indexOf("Gecko");

-	drh.mozilla = drh.moz = (geckoPos >= 0)&&(!drh.khtml);

-	if (drh.mozilla) {

-		// gecko version is YYYYMMDD

-		drh.geckoVersion = dua.substring(geckoPos + 6, geckoPos + 14);

-	}

-	drh.ie = (document.all)&&(!drh.opera);

-	drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0")>=0;

-	drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5")>=0;

-	drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0")>=0;

-

-	dr.vml.capable=drh.ie;

-	dr.svg.capable = f;

-	dr.svg.support.plugin = f;

-	dr.svg.support.builtin = f;

-	dr.svg.adobe = f;

-	if (document.implementation 

-		&& document.implementation.hasFeature

-		&& document.implementation.hasFeature("org.w3c.dom.svg", "1.0")

-	){

-		dr.svg.capable = t;

-		dr.svg.support.builtin = t;

-		dr.svg.support.plugin = f;

-		dr.svg.adobe = f;

-	}else{ 

-		//	check for ASVG

-		if(navigator.mimeTypes && navigator.mimeTypes.length > 0){

-			var result = navigator.mimeTypes["image/svg+xml"] ||

-				navigator.mimeTypes["image/svg"] ||

-				navigator.mimeTypes["image/svg-xml"];

-			if (result){

-				dr.svg.adobe = result && result.enabledPlugin &&

-					result.enabledPlugin.description && 

-					(result.enabledPlugin.description.indexOf("Adobe") > -1);

-				if(dr.svg.adobe) {

-					dr.svg.capable = t;

-					dr.svg.support.plugin = t;

-				}

-			}

-		}else if(drh.ie && dr.os.win){

-			var result = f;

-			try {

-				var test = new ActiveXObject("Adobe.SVGCtl");

-				result = t;

-			} catch(e){}

-			if (result){

-				dr.svg.capable = t;

-				dr.svg.support.plugin = t;

-				dr.svg.adobe = t;

-			}

-		}else{

-			dr.svg.capable = f;

-			dr.svg.support.plugin = f;

-			dr.svg.adobe = f;

-		}

-	}

-})();

-

-dojo.hostenv.startPackage("dojo.hostenv");

-

-dojo.hostenv.name_ = 'browser';

-dojo.hostenv.searchIds = [];

-

-// These are in order of decreasing likelihood; this will change in time.

-var DJ_XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];

-

-dojo.hostenv.getXmlhttpObject = function(){

-    var http = null;

-	var last_e = null;

-	try{ http = new XMLHttpRequest(); }catch(e){}

-    if(!http){

-		for(var i=0; i<3; ++i){

-			var progid = DJ_XMLHTTP_PROGIDS[i];

-			try{

-				http = new ActiveXObject(progid);

-			}catch(e){

-				last_e = e;

-			}

-

-			if(http){

-				DJ_XMLHTTP_PROGIDS = [progid];  // so faster next time

-				break;

-			}

-		}

-

-		/*if(http && !http.toString) {

-			http.toString = function() { "[object XMLHttpRequest]"; }

-		}*/

-	}

-

-	if(!http){

-		return dojo.raise("XMLHTTP not available", last_e);

-	}

-

-	return http;

-}

-

-/**

- * Read the contents of the specified uri and return those contents.

- *

- * @param uri A relative or absolute uri. If absolute, it still must be in the

- * same "domain" as we are.

- *

- * @param async_cb If not specified, load synchronously. If specified, load

- * asynchronously, and use async_cb as the progress handler which takes the

- * xmlhttp object as its argument. If async_cb, this function returns null.

- *

- * @param fail_ok Default false. If fail_ok and !async_cb and loading fails,

- * return null instead of throwing.

- */ 

-dojo.hostenv.getText = function(uri, async_cb, fail_ok){

-	

-	var http = this.getXmlhttpObject();

-

-	if(async_cb){

-		http.onreadystatechange = function(){ 

-			if((4==http.readyState)&&(http["status"])){

-				if(http.status==200){

-					// dojo.debug("LOADED URI: "+uri);

-					async_cb(http.responseText);

-				}

-			}

-		}

-	}

-

-	http.open('GET', uri, async_cb ? true : false);

-	http.send(null);

-	if(async_cb){

-		return null;

-	}

-	

-	return http.responseText;

-}

-

-/*

- * It turns out that if we check *right now*, as this script file is being loaded,

- * then the last script element in the window DOM is ourselves.

- * That is because any subsequent script elements haven't shown up in the document

- * object yet.

- */

- /*

-function dj_last_script_src() {

-    var scripts = window.document.getElementsByTagName('script');

-    if(scripts.length < 1){ 

-		dojo.raise("No script elements in window.document, so can't figure out my script src"); 

-	}

-    var script = scripts[scripts.length - 1];

-    var src = script.src;

-    if(!src){

-		dojo.raise("Last script element (out of " + scripts.length + ") has no src");

-	}

-    return src;

-}

-

-if(!dojo.hostenv["library_script_uri_"]){

-	dojo.hostenv.library_script_uri_ = dj_last_script_src();

-}

-*/

-

-dojo.hostenv.defaultDebugContainerId = 'dojoDebug';

-dojo.hostenv._println_buffer = [];

-dojo.hostenv._println_safe = false;

-dojo.hostenv.println = function (line){

-	if(!dojo.hostenv._println_safe){

-		dojo.hostenv._println_buffer.push(line);

-	}else{

-		try {

-			var console = document.getElementById(djConfig.debugContainerId ?

-				djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId);

-			if(!console) { console = document.getElementsByTagName("body")[0] || document.body; }

-

-			var div = document.createElement("div");

-			div.appendChild(document.createTextNode(line));

-			console.appendChild(div);

-		} catch (e) {

-			try{

-				// safari needs the output wrapped in an element for some reason

-				document.write("<div>" + line + "</div>");

-			}catch(e2){

-				window.status = line;

-			}

-		}

-	}

-}

-

-dojo.addOnLoad(function(){

-	dojo.hostenv._println_safe = true;

-	while(dojo.hostenv._println_buffer.length > 0){

-		dojo.hostenv.println(dojo.hostenv._println_buffer.shift());

-	}

-});

-

-function dj_addNodeEvtHdlr (node, evtName, fp, capture){

-	var oldHandler = node["on"+evtName] || function(){};

-	node["on"+evtName] = function(){

-		fp.apply(node, arguments);

-		oldHandler.apply(node, arguments);

-	}

-	return true;

-}

-

-dj_addNodeEvtHdlr(window, "load", function(){

-	if(dojo.render.html.ie){

-		dojo.hostenv.makeWidgets();

-	}

-	dojo.hostenv.modulesLoaded();

-});

-

-dojo.hostenv.makeWidgets = function(){

-	// you can put searchIds in djConfig and dojo.hostenv at the moment

-	// we should probably eventually move to one or the other

-	var sids = [];

-	if(djConfig.searchIds && djConfig.searchIds.length > 0) {

-		sids = sids.concat(djConfig.searchIds);

-	}

-	if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) {

-		sids = sids.concat(dojo.hostenv.searchIds);

-	}

-

-	if((djConfig.parseWidgets)||(sids.length > 0)){

-		if(dojo.evalObjPath("dojo.widget.Parse")){

-			// we must do this on a delay to avoid:

-			//	http://www.shaftek.org/blog/archives/000212.html

-			// IE is such a tremendous peice of shit.

-			try{

-				var parser = new dojo.xml.Parse();

-				if(sids.length > 0){

-					for(var x=0; x<sids.length; x++){

-						var tmpNode = document.getElementById(sids[x]);

-						if(!tmpNode){ continue; }

-						var frag = parser.parseElement(tmpNode, null, true);

-						dojo.widget.getParser().createComponents(frag);

-					}

-				}else if(djConfig.parseWidgets){

-					var frag  = parser.parseElement(document.getElementsByTagName("body")[0] || document.body, null, true);

-					dojo.widget.getParser().createComponents(frag);

-				}

-			}catch(e){

-				dojo.debug("auto-build-widgets error:", e);

-			}

-		}

-	}

-}

-

-dojo.hostenv.modulesLoadedListeners.push(function(){

-	if(!dojo.render.html.ie) {

-		dojo.hostenv.makeWidgets();

-	}

-});

-

-// we assume that we haven't hit onload yet. Lord help us.

-try {

-	if (dojo.render.html.ie) {

-		document.write('<style>v\:*{ behavior:url(#default#VML); }</style>');

-		document.write('<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v"/>');

-	}

-} catch (e) { }

-

-// stub, over-ridden by debugging code. This will at least keep us from

-// breaking when it's not included

-dojo.hostenv.writeIncludes = function(){} 

-

-dojo.hostenv.byId = dojo.byId = function(id, doc){

-	if(typeof id == "string" || id instanceof String){

-		if(!doc){ doc = document; }

-		return doc.getElementById(id);

-	}

-	return id; // assume it's a node

-}

-

-dojo.hostenv.byIdArray = dojo.byIdArray = function(){

-	var ids = [];

-	for(var i = 0; i < arguments.length; i++){

-		if((arguments[i] instanceof Array)||(typeof arguments[i] == "array")){

-			for(var j = 0; j < arguments[i].length; j++){

-				ids = ids.concat(dojo.hostenv.byIdArray(arguments[i][j]));

-			}

-		}else{

-			ids.push(dojo.hostenv.byId(arguments[i]));

-		}

-	}

-	return ids;

-}

-

-/*

- * bootstrap2.js - runs after the hostenv_*.js file.

- */

-

-/*

- * This method taks a "map" of arrays which one can use to optionally load dojo

- * modules. The map is indexed by the possible dojo.hostenv.name_ values, with

- * two additional values: "default" and "common". The items in the "default"

- * array will be loaded if none of the other items have been choosen based on

- * the hostenv.name_ item. The items in the "common" array will _always_ be

- * loaded, regardless of which list is chosen.  Here's how it's normally

- * called:

- *

- *	dojo.hostenv.conditionalLoadModule({

- *		browser: [

- *			["foo.bar.baz", true, true], // an example that passes multiple args to loadModule()

- *			"foo.sample.*",

- *			"foo.test,

- *		],

- *		default: [ "foo.sample.*" ],

- *		common: [ "really.important.module.*" ]

- *	});

- */

-dojo.hostenv.conditionalLoadModule = function(modMap){

-	var common = modMap["common"]||[];

-	var result = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]);

-

-	for(var x=0; x<result.length; x++){

-		var curr = result[x];

-		if(curr.constructor == Array){

-			dojo.hostenv.loadModule.apply(dojo.hostenv, curr);

-		}else{

-			dojo.hostenv.loadModule(curr);

-		}

-	}

-}

-

-dojo.hostenv.require = dojo.hostenv.loadModule;

-dojo.require = function(){

-	dojo.hostenv.loadModule.apply(dojo.hostenv, arguments);

-}

-dojo.requireAfter = dojo.require;

-

-dojo.requireIf = function(){

-	if((arguments[0] === true)||(arguments[0]=="common")||(dojo.render[arguments[0]].capable)){

-		var args = [];

-		for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }

-		dojo.require.apply(dojo, args);

-	}

-}

-

-dojo.requireAfterIf = dojo.requireIf;

-dojo.conditionalRequire = dojo.requireIf;

-

-dojo.kwCompoundRequire = function(){

-	dojo.hostenv.conditionalLoadModule.apply(dojo.hostenv, arguments);

-}

-

-dojo.hostenv.provide = dojo.hostenv.startPackage;

-dojo.provide = function(){

-	return dojo.hostenv.startPackage.apply(dojo.hostenv, arguments);

-}

-

-dojo.setModulePrefix = function(module, prefix){

-	return dojo.hostenv.setModulePrefix(module, prefix);

-}

-

-// stub

-dojo.profile = { start: function(){}, end: function(){}, dump: function(){} };

-

-// determine if an object supports a given method

-// useful for longer api chains where you have to test each object in the chain

-dojo.exists = function(obj, name){

-	var p = name.split(".");

-	for(var i = 0; i < p.length; i++){

-	if(!(obj[p[i]])) return false;

-		obj = obj[p[i]];

-	}

-	return true;

-}

-

-dojo.provide("dojo.lang");

-dojo.provide("dojo.AdapterRegistry");

-dojo.provide("dojo.lang.Lang");

-

-dojo.lang.mixin = function(obj, props){

-	var tobj = {};

-	for(var x in props){

-		if(typeof tobj[x] == "undefined" || tobj[x] != props[x]) {

-			obj[x] = props[x];

-		}

-	}

-	// IE doesn't recognize custom toStrings in for..in

-	if(dojo.render.html.ie && dojo.lang.isFunction(props["toString"]) && props["toString"] != obj["toString"]) {

-		obj.toString = props.toString;

-	}

-	return obj;

-}

-

-dojo.lang.extend = function(ctor, props){

-	this.mixin(ctor.prototype, props);

-}

-

-dojo.lang.extendPrototype = function(obj, props){

-	this.extend(obj.constructor, props);

-}

-

-dojo.lang.anonCtr = 0;

-dojo.lang.anon = {};

-dojo.lang.nameAnonFunc = function(anonFuncPtr, namespaceObj){

-	var nso = (namespaceObj || dojo.lang.anon);

-	if((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"] == true)){

-		for(var x in nso){

-			if(nso[x] === anonFuncPtr){

-				return x;

-			}

-		}

-	}

-	var ret = "__"+dojo.lang.anonCtr++;

-	while(typeof nso[ret] != "undefined"){

-		ret = "__"+dojo.lang.anonCtr++;

-	}

-	nso[ret] = anonFuncPtr;

-	return ret;

-}

-

-/**

- * Runs a function in a given scope (thisObject), can

- * also be used to preserve scope.

- *

- * hitch(foo, "bar"); // runs foo.bar() in the scope of foo

- * hitch(foo, myFunction); // runs myFunction in the scope of foo

- */

-dojo.lang.hitch = function(thisObject, method) {

-	if(dojo.lang.isString(method)) {

-		var fcn = thisObject[method];

-	} else {

-		var fcn = method;

-	}

-

-	return function() {

-		return fcn.apply(thisObject, arguments);

-	}

-}

-

-dojo.lang.forward = function(funcName){

-	// Returns a function that forwards a method call to this.func(...)

-	return function(){

-		return this[funcName].apply(this, arguments);

-	};

-}

-

-dojo.lang.curry = function(ns, func /* args ... */){

-	var outerArgs = [];

-	ns = ns||dj_global;

-	if(dojo.lang.isString(func)){

-		func = ns[func];

-	}

-	for(var x=2; x<arguments.length; x++){

-		outerArgs.push(arguments[x]);

-	}

-	var ecount = func.length - outerArgs.length;

-	// borrowed from svend tofte

-	function gather(nextArgs, innerArgs, expected){

-		var texpected = expected;

-		var totalArgs = innerArgs.slice(0); // copy

-		for(var x=0; x<nextArgs.length; x++){

-			totalArgs.push(nextArgs[x]);

-		}

-		// check the list of provided nextArgs to see if it, plus the

-		// number of innerArgs already supplied, meets the total

-		// expected.

-		expected = expected-nextArgs.length;

-		if(expected<=0){

-			var res = func.apply(ns, totalArgs);

-			expected = texpected;

-			return res;

-		}else{

-			return function(){

-				return gather(arguments,// check to see if we've been run

-										// with enough args

-							totalArgs,	// a copy

-							expected);	// how many more do we need to run?;

-			}

-		}

-	}

-	return gather([], outerArgs, ecount);

-}

-

-dojo.lang.curryArguments = function(ns, func, args, offset){

-	var targs = [];

-	var x = offset||0;

-	for(x=offset; x<args.length; x++){

-		targs.push(args[x]); // ensure that it's an arr

-	}

-	return dojo.lang.curry.apply(dojo.lang, [ns, func].concat(targs));

-}

-

-/**

- * Sets a timeout in milliseconds to execute a function in a given context

- * with optional arguments.

- *

- * setTimeout (Object context, function func, number delay[, arg1[, ...]]);

- * setTimeout (function func, number delay[, arg1[, ...]]);

- */

-dojo.lang.setTimeout = function(func, delay){

-	var context = window, argsStart = 2;

-	if(!dojo.lang.isFunction(func)){

-		context = func;

-		func = delay;

-		delay = arguments[2];

-		argsStart++;

-	}

-

-	if(dojo.lang.isString(func)){

-		func = context[func];

-	}

-	

-	var args = [];

-	for (var i = argsStart; i < arguments.length; i++) {

-		args.push(arguments[i]);

-	}

-	return setTimeout(function () { func.apply(context, args); }, delay);

-}

-

-/**

- * Partial implmentation of is* functions from

- * http://www.crockford.com/javascript/recommend.html

- * NOTE: some of these may not be the best thing to use in all situations

- * as they aren't part of core JS and therefore can't work in every case.

- * See WARNING messages inline for tips.

- *

- * The following is* functions are fairly "safe"

- */

-

-dojo.lang.isObject = function(wh) {

-	return typeof wh == "object" || dojo.lang.isArray(wh) || dojo.lang.isFunction(wh);

-}

-

-dojo.lang.isArray = function(wh) {

-	return (wh instanceof Array || typeof wh == "array");

-}

-

-dojo.lang.isArrayLike = function(wh) {

-	if(dojo.lang.isString(wh)){ return false; }

-	if(dojo.lang.isArray(wh)){ return true; }

-	if(typeof wh != "undefined" && wh

-        && dojo.lang.isNumber(wh.length) && isFinite(wh.length)){ return true; }

-	return false;

-}

-

-dojo.lang.isFunction = function(wh) {

-	return (wh instanceof Function || typeof wh == "function");

-}

-

-dojo.lang.isString = function(wh) {

-	return (wh instanceof String || typeof wh == "string");

-}

-

-dojo.lang.isAlien = function(wh) {

-	return !dojo.lang.isFunction() && /\{\s*\[native code\]\s*\}/.test(String(wh));

-}

-

-dojo.lang.isBoolean = function(wh) {

-	return (wh instanceof Boolean || typeof wh == "boolean");

-}

-

-/**

- * The following is***() functions are somewhat "unsafe". Fortunately,

- * there are workarounds the the language provides and are mentioned

- * in the WARNING messages.

- *

- * WARNING: In most cases, isNaN(wh) is sufficient to determine whether or not

- * something is a number or can be used as such. For example, a number or string

- * can be used interchangably when accessing array items (arr["1"] is the same as

- * arr[1]) and isNaN will return false for both values ("1" and 1). Should you

- * use isNumber("1"), that will return false, which is generally not too useful.

- * Also, isNumber(NaN) returns true, again, this isn't generally useful, but there

- * are corner cases (like when you want to make sure that two things are really

- * the same type of thing). That is really where isNumber "shines".

- *

- * RECOMMENDATION: Use isNaN(wh) when possible

- */

-dojo.lang.isNumber = function(wh) {

-	return (wh instanceof Number || typeof wh == "number");

-}

-

-/**

- * WARNING: In some cases, isUndefined will not behave as you

- * might expect. If you do isUndefined(foo) and there is no earlier

- * reference to foo, an error will be thrown before isUndefined is

- * called. It behaves correctly if you scope yor object first, i.e.

- * isUndefined(foo.bar) where foo is an object and bar isn't a

- * property of the object.

- *

- * RECOMMENDATION: Use `typeof foo == "undefined"` when possible

- *

- * FIXME: Should isUndefined go away since it is error prone?

- */

-dojo.lang.isUndefined = function(wh) {

-	return ((wh == undefined)&&(typeof wh == "undefined"));

-}

-

-// end Crockford functions

-

-dojo.lang.whatAmI = function(wh) {

-	try {

-		if(dojo.lang.isArray(wh)) { return "array"; }

-		if(dojo.lang.isFunction(wh)) { return "function"; }

-		if(dojo.lang.isString(wh)) { return "string"; }

-		if(dojo.lang.isNumber(wh)) { return "number"; }

-		if(dojo.lang.isBoolean(wh)) { return "boolean"; }

-		if(dojo.lang.isAlien(wh)) { return "alien"; }

-		if(dojo.lang.isUndefined(wh)) { return "undefined"; }

-		// FIXME: should this go first?

-		for(var name in dojo.lang.whatAmI.custom) {

-			if(dojo.lang.whatAmI.custom[name](wh)) {

-				return name;

-			}

-		}

-		if(dojo.lang.isObject(wh)) { return "object"; }

-	} catch(E) {}

-	return "unknown";

-}

-/*

- * dojo.lang.whatAmI.custom[typeName] = someFunction

- * will return typeName is someFunction(wh) returns true

- */

-dojo.lang.whatAmI.custom = {};

-

-/**

- * See if val is in arr. Call signatures:

- *  find(array, value, identity)

-*   find(value, array, identity)

-**/

-dojo.lang.find = function(arr, val, identity){

-	// support both (arr, val) and (val, arr)

-	if(!dojo.lang.isArrayLike(arr) && dojo.lang.isArrayLike(val)) {

-		var a = arr;

-		arr = val;

-		val = a;

-	}

-	var isString = dojo.lang.isString(arr);

-	if(isString) { arr = arr.split(""); }

-	if(identity){

-		for(var i=0;i<arr.length;++i){

-			if(arr[i] === val){ return i; }

-		}

-	}else{

-		for(var i=0;i<arr.length;++i){

-			if(arr[i] == val){ return i; }

-		}

-	}

-	return -1;

-}

-

-dojo.lang.indexOf = dojo.lang.find;

-

-dojo.lang.findLast = function(arr, val, identity) {

-	// support both (arr, val) and (val, arr)

-	if(!dojo.lang.isArrayLike(arr) && dojo.lang.isArrayLike(val)) {

-		var a = arr;

-		arr = val;

-		val = a;

-	}

-	var isString = dojo.lang.isString(arr);

-	if(isString) { arr = arr.split(""); }

-	if(identity){

-		for(var i = arr.length-1; i >= 0; i--) {

-			if(arr[i] === val){ return i; }

-		}

-	}else{

-		for(var i = arr.length-1; i >= 0; i--) {

-			if(arr[i] == val){ return i; }

-		}

-	}

-	return -1;

-}

-

-dojo.lang.lastIndexOf = dojo.lang.findLast;

-

-dojo.lang.inArray = function(arr, val){

-	return dojo.lang.find(arr, val) > -1;

-}

-

-dojo.lang.getNameInObj = function(ns, item){

-	if(!ns){ ns = dj_global; }

-

-	for(var x in ns){

-		if(ns[x] === item){

-			return new String(x);

-		}

-	}

-	return null;

-}

-

-// FIXME: Is this worthless since you can do: if(name in obj)

-// is this the right place for this?

-dojo.lang.has = function(obj, name){

-	return (typeof obj[name] !== 'undefined');

-}

-

-dojo.lang.isEmpty = function(obj) {

-	if(dojo.lang.isObject(obj)) {

-		var tmp = {};

-		var count = 0;

-		for(var x in obj){

-			if(obj[x] && (!tmp[x])){

-				count++;

-				break;

-			} 

-		}

-		return (count == 0);

-	} else if(dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)) {

-		return obj.length == 0;

-	}

-}

-

-dojo.lang.forEach = function(arr, unary_func, fix_length){

-	var isString = dojo.lang.isString(arr);

-	if(isString) { arr = arr.split(""); }

-	var il = arr.length;

-	for(var i=0; i< ((fix_length) ? il : arr.length); i++){

-		if(unary_func(arr[i], i, arr) == "break"){

-			break;

-		}

-	}

-}

-

-dojo.lang.map = function(arr, obj, unary_func){

-	var isString = dojo.lang.isString(arr);

-	if(isString){

-		arr = arr.split("");

-	}

-	if(dojo.lang.isFunction(obj)&&(!unary_func)){

-		unary_func = obj;

-		obj = dj_global;

-	}else if(dojo.lang.isFunction(obj) && unary_func){

-		// ff 1.5 compat

-		var tmpObj = obj;

-		obj = unary_func;

-		unary_func = tmpObj;

-	}

-

-	if(Array.map){

-	 	var outArr = Array.map(arr, unary_func, obj);

-	}else{

-		var outArr = [];

-		for(var i=0;i<arr.length;++i){

-			outArr.push(unary_func.call(obj, arr[i]));

-		}

-	}

-

-	if(isString) {

-		return outArr.join("");

-	} else {

-		return outArr;

-	}

-}

-

-dojo.lang.tryThese = function(){

-	for(var x=0; x<arguments.length; x++){

-		try{

-			if(typeof arguments[x] == "function"){

-				var ret = (arguments[x]());

-				if(ret){

-					return ret;

-				}

-			}

-		}catch(e){

-			dojo.debug(e);

-		}

-	}

-}

-

-dojo.lang.delayThese = function(farr, cb, delay, onend){

-	/**

-	 * alternate: (array funcArray, function callback, function onend)

-	 * alternate: (array funcArray, function callback)

-	 * alternate: (array funcArray)

-	 */

-	if(!farr.length){ 

-		if(typeof onend == "function"){

-			onend();

-		}

-		return;

-	}

-	if((typeof delay == "undefined")&&(typeof cb == "number")){

-		delay = cb;

-		cb = function(){};

-	}else if(!cb){

-		cb = function(){};

-		if(!delay){ delay = 0; }

-	}

-	setTimeout(function(){

-		(farr.shift())();

-		cb();

-		dojo.lang.delayThese(farr, cb, delay, onend);

-	}, delay);

-}

-

-dojo.lang.shallowCopy = function(obj) {

-	var ret = {}, key;

-	for(key in obj) {

-		if(dojo.lang.isUndefined(ret[key])) {

-			ret[key] = obj[key];

-		}

-	}

-	return ret;

-}

-

-dojo.lang.every = function(arr, callback, thisObject) {

-	var isString = dojo.lang.isString(arr);

-	if(isString) { arr = arr.split(""); }

-	if(Array.every) {

-		return Array.every(arr, callback, thisObject);

-	} else {

-		if(!thisObject) {

-			if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); }

-			thisObject = dj_global;

-		}

-

-		for(var i = 0; i < arr.length; i++) {

-			if(!callback.call(thisObject, arr[i], i, arr)) {

-				return false;

-			}

-		}

-		return true;

-	}

-}

-

-dojo.lang.some = function(arr, callback, thisObject) {

-	var isString = dojo.lang.isString(arr);

-	if(isString) { arr = arr.split(""); }

-	if(Array.some) {

-		return Array.some(arr, callback, thisObject);

-	} else {

-		if(!thisObject) {

-			if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); }

-			thisObject = dj_global;

-		}

-

-		for(var i = 0; i < arr.length; i++) {

-			if(callback.call(thisObject, arr[i], i, arr)) {

-				return true;

-			}

-		}

-		return false;

-	}

-}

-

-dojo.lang.filter = function(arr, callback, thisObject) {

-	var isString = dojo.lang.isString(arr);

-	if(isString) { arr = arr.split(""); }

-	if(Array.filter) {

-		var outArr = Array.filter(arr, callback, thisObject);

-	} else {

-		if(!thisObject) {

-			if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); }

-			thisObject = dj_global;

-		}

-

-		var outArr = [];

-		for(var i = 0; i < arr.length; i++) {

-			if(callback.call(thisObject, arr[i], i, arr)) {

-				outArr.push(arr[i]);

-			}

-		}

-	}

-	if(isString) {

-		return outArr.join("");

-	} else {

-		return outArr;

-	}

-}

-

-dojo.AdapterRegistry = function(){

-    /***

-        A registry to facilitate adaptation.

-

-        Pairs is an array of [name, check, wrap] triples

-        

-        All check/wrap functions in this registry should be of the same arity.

-    ***/

-    this.pairs = [];

-}

-

-dojo.lang.extend(dojo.AdapterRegistry, {

-    register: function (name, check, wrap, /* optional */ override){

-        /***

-			The check function should return true if the given arguments are

-			appropriate for the wrap function.

-

-			If override is given and true, the check function will be given

-			highest priority.  Otherwise, it will be the lowest priority

-			adapter.

-        ***/

-

-        if (override) {

-            this.pairs.unshift([name, check, wrap]);

-        } else {

-            this.pairs.push([name, check, wrap]);

-        }

-    },

-

-    match: function (/* ... */) {

-        /***

-			Find an adapter for the given arguments.

-

-			If no suitable adapter is found, throws NotFound.

-        ***/

-        for(var i = 0; i < this.pairs.length; i++){

-            var pair = this.pairs[i];

-            if(pair[1].apply(this, arguments)){

-                return pair[2].apply(this, arguments);

-            }

-        }

-		throw new Error("No match found");

-        // dojo.raise("No match found");

-    },

-

-    unregister: function (name) {

-        /***

-			Remove a named adapter from the registry

-        ***/

-        for(var i = 0; i < this.pairs.length; i++){

-            var pair = this.pairs[i];

-            if(pair[0] == name){

-                this.pairs.splice(i, 1);

-                return true;

-            }

-        }

-        return false;

-    }

-});

-

-dojo.lang.reprRegistry = new dojo.AdapterRegistry();

-dojo.lang.registerRepr = function(name, check, wrap, /*optional*/ override){

-        /***

-			Register a repr function.  repr functions should take

-			one argument and return a string representation of it

-			suitable for developers, primarily used when debugging.

-

-			If override is given, it is used as the highest priority

-			repr, otherwise it will be used as the lowest.

-        ***/

-        dojo.lang.reprRegistry.register(name, check, wrap, override);

-    };

-

-dojo.lang.repr = function(obj){

-	/***

-		Return a "programmer representation" for an object

-	***/

-	if(typeof(obj) == "undefined"){

-		return "undefined";

-	}else if(obj === null){

-		return "null";

-	}

-

-	try{

-		if(typeof(obj["__repr__"]) == 'function'){

-			return obj["__repr__"]();

-		}else if((typeof(obj["repr"]) == 'function')&&(obj.repr != arguments.callee)){

-			return obj["repr"]();

-		}

-		return dojo.lang.reprRegistry.match(obj);

-	}catch(e){

-		if(typeof(obj.NAME) == 'string' && (

-				obj.toString == Function.prototype.toString ||

-				obj.toString == Object.prototype.toString

-			)){

-			return o.NAME;

-		}

-	}

-

-	if(typeof(obj) == "function"){

-		obj = (obj + "").replace(/^\s+/, "");

-		var idx = obj.indexOf("{");

-		if(idx != -1){

-			obj = obj.substr(0, idx) + "{...}";

-		}

-	}

-	return obj + "";

-}

-

-dojo.lang.reprArrayLike = function(arr){

-	try{

-		var na = dojo.lang.map(arr, dojo.lang.repr);

-		return "[" + na.join(", ") + "]";

-	}catch(e){ }

-};

-

-dojo.lang.reprString = function(str){ 

-	return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'

-		).replace(/[\f]/g, "\\f"

-		).replace(/[\b]/g, "\\b"

-		).replace(/[\n]/g, "\\n"

-		).replace(/[\t]/g, "\\t"

-		).replace(/[\r]/g, "\\r");

-};

-

-dojo.lang.reprNumber = function(num){

-	return num + "";

-};

-

-(function(){

-	var m = dojo.lang;

-	m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike);

-	m.registerRepr("string", m.isString, m.reprString);

-	m.registerRepr("numbers", m.isNumber, m.reprNumber);

-	m.registerRepr("boolean", m.isBoolean, m.reprNumber);

-	// m.registerRepr("numbers", m.typeMatcher("number", "boolean"), m.reprNumber);

-})();

-

-/**

- * Creates a 1-D array out of all the arguments passed,

- * unravelling any array-like objects in the process

- *

- * Ex:

- * unnest(1, 2, 3) ==> [1, 2, 3]

- * unnest(1, [2, [3], [[[4]]]]) ==> [1, 2, 3, 4]

- */

-dojo.lang.unnest = function(/* ... */) {

-	var out = [];

-	for(var i = 0; i < arguments.length; i++) {

-		if(dojo.lang.isArrayLike(arguments[i])) {

-			var add = dojo.lang.unnest.apply(this, arguments[i]);

-			out = out.concat(add);

-		} else {

-			out.push(arguments[i]);

-		}

-	}

-	return out;

-}

-

-/**

- * Return the first argument that isn't undefined

- */

-dojo.lang.firstValued = function(/* ... */) {

-	for(var i = 0; i < arguments.length; i++) {

-		if(typeof arguments[i] != "undefined") {

-			return arguments[i];

-		}

-	}

-	return undefined;

-}

-

-/**

- * Converts an array-like object (i.e. arguments, DOMCollection)

- * to an array

-**/

-dojo.lang.toArray = function(arrayLike, startOffset) {

-	var array = [];

-	for(var i = startOffset||0; i < arrayLike.length; i++) {

-		array.push(arrayLike[i]);

-	}

-	return array;

-}

-

-dojo.provide("dojo.string");

-dojo.require("dojo.lang");

-

-/**

- * Trim whitespace from 'str'. If 'wh' > 0,

- * only trim from start, if 'wh' < 0, only trim

- * from end, otherwise trim both ends

- */

-dojo.string.trim = function(str, wh){

-	if(!dojo.lang.isString(str)){ return str; }

-	if(!str.length){ return str; }

-	if(wh > 0) {

-		return str.replace(/^\s+/, "");

-	} else if(wh < 0) {

-		return str.replace(/\s+$/, "");

-	} else {

-		return str.replace(/^\s+|\s+$/g, "");

-	}

-}

-

-/**

- * Trim whitespace at the beginning of 'str'

- */

-dojo.string.trimStart = function(str) {

-	return dojo.string.trim(str, 1);

-}

-

-/**

- * Trim whitespace at the end of 'str'

- */

-dojo.string.trimEnd = function(str) {

-	return dojo.string.trim(str, -1);

-}

-

-/**

- * Parameterized string function

- * str - formatted string with %{values} to be replaces

- * pairs - object of name: "value" value pairs

- * killExtra - remove all remaining %{values} after pairs are inserted

- */

-dojo.string.paramString = function(str, pairs, killExtra) {

-	for(var name in pairs) {

-		var re = new RegExp("\\%\\{" + name + "\\}", "g");

-		str = str.replace(re, pairs[name]);

-	}

-

-	if(killExtra) { str = str.replace(/%\{([^\}\s]+)\}/g, ""); }

-	return str;

-}

-

-/** Uppercases the first letter of each word */

-dojo.string.capitalize = function (str) {

-	if (!dojo.lang.isString(str)) { return ""; }

-	if (arguments.length == 0) { str = this; }

-	var words = str.split(' ');

-	var retval = "";

-	var len = words.length;

-	for (var i=0; i<len; i++) {

-		var word = words[i];

-		word = word.charAt(0).toUpperCase() + word.substring(1, word.length);

-		retval += word;

-		if (i < len-1)

-			retval += " ";

-	}

-	

-	return new String(retval);

-}

-

-/**

- * Return true if the entire string is whitespace characters

- */

-dojo.string.isBlank = function (str) {

-	if(!dojo.lang.isString(str)) { return true; }

-	return (dojo.string.trim(str).length == 0);

-}

-

-dojo.string.encodeAscii = function(str) {

-	if(!dojo.lang.isString(str)) { return str; }

-	var ret = "";

-	var value = escape(str);

-	var match, re = /%u([0-9A-F]{4})/i;

-	while((match = value.match(re))) {

-		var num = Number("0x"+match[1]);

-		var newVal = escape("&#" + num + ";");

-		ret += value.substring(0, match.index) + newVal;

-		value = value.substring(match.index+match[0].length);

-	}

-	ret += value.replace(/\+/g, "%2B");

-	return ret;

-}

-

-// TODO: make an HTML version

-dojo.string.summary = function(str, len) {

-	if(!len || str.length <= len) {

-		return str;

-	} else {

-		return str.substring(0, len).replace(/\.+$/, "") + "...";

-	}

-}

-

-dojo.string.escape = function(type, str) {

-	var args = [];

-	for(var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }

-	switch(type.toLowerCase()) {

-		case "xml":

-		case "html":

-		case "xhtml":

-			return dojo.string.escapeXml.apply(this, args);

-		case "sql":

-			return dojo.string.escapeSql.apply(this, args);

-		case "regexp":

-		case "regex":

-			return dojo.string.escapeRegExp.apply(this, args);

-		case "javascript":

-		case "jscript":

-		case "js":

-			return dojo.string.escapeJavaScript.apply(this, args);

-		case "ascii":

-			// so it's encode, but it seems useful

-			return dojo.string.encodeAscii.apply(this, args);

-		default:

-			return str;

-	}

-}

-

-dojo.string.escapeXml = function(str, noSingleQuotes) {

-	str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;")

-		.replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");

-	if(!noSingleQuotes) { str = str.replace(/'/gm, "&#39;"); }

-	return str;

-}

-

-dojo.string.escapeSql = function(str) {

-	return str.replace(/'/gm, "''");

-}

-

-dojo.string.escapeRegExp = function(str) {

-	return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r])/gm, "\\$1");

-}

-

-dojo.string.escapeJavaScript = function(str) {

-	return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1");

-}

-

-/**

- * Return 'str' repeated 'count' times, optionally

- * placing 'separator' between each rep

- */

-dojo.string.repeat = function(str, count, separator) {

-	var out = "";

-	for(var i = 0; i < count; i++) {

-		out += str;

-		if(separator && i < count - 1) {

-			out += separator;

-		}

-	}

-	return out;

-}

-

-/**

- * Returns true if 'str' ends with 'end'

- */

-dojo.string.endsWith = function(str, end, ignoreCase) {

-	if(ignoreCase) {

-		str = str.toLowerCase();

-		end = end.toLowerCase();

-	}

-	return str.lastIndexOf(end) == str.length - end.length;

-}

-

-/**

- * Returns true if 'str' ends with any of the arguments[2 -> n]

- */

-dojo.string.endsWithAny = function(str /* , ... */) {

-	for(var i = 1; i < arguments.length; i++) {

-		if(dojo.string.endsWith(str, arguments[i])) {

-			return true;

-		}

-	}

-	return false;

-}

-

-/**

- * Returns true if 'str' starts with 'start'

- */

-dojo.string.startsWith = function(str, start, ignoreCase) {

-	if(ignoreCase) {

-		str = str.toLowerCase();

-		start = start.toLowerCase();

-	}

-	return str.indexOf(start) == 0;

-}

-

-/**

- * Returns true if 'str' starts with any of the arguments[2 -> n]

- */

-dojo.string.startsWithAny = function(str /* , ... */) {

-	for(var i = 1; i < arguments.length; i++) {

-		if(dojo.string.startsWith(str, arguments[i])) {

-			return true;

-		}

-	}

-	return false;

-}

-

-/**

- * Returns true if 'str' starts with any of the arguments 2 -> n

- */

-dojo.string.has = function(str /* , ... */) {

-	for(var i = 1; i < arguments.length; i++) {

-		if(str.indexOf(arguments[i] > -1)) {

-			return true;

-		}

-	}

-	return false;

-}

-

-/**

- * Pad 'str' to guarantee that it is at least 'len' length

- * with the character 'c' at either the start (dir=1) or

- * end (dir=-1) of the string

- */

-dojo.string.pad = function(str, len/*=2*/, c/*='0'*/, dir/*=1*/) {

-	var out = String(str);

-	if(!c) {

-		c = '0';

-	}

-	if(!dir) {

-		dir = 1;

-	}

-	while(out.length < len) {

-		if(dir > 0) {

-			out = c + out;

-		} else {

-			out += c;

-		}

-	}

-	return out;

-}

-

-/** same as dojo.string.pad(str, len, c, 1) */

-dojo.string.padLeft = function(str, len, c) {

-	return dojo.string.pad(str, len, c, 1);

-}

-

-/** same as dojo.string.pad(str, len, c, -1) */

-dojo.string.padRight = function(str, len, c) {

-	return dojo.string.pad(str, len, c, -1);

-}

-

-dojo.string.normalizeNewlines = function (text,newlineChar) {

-	if (newlineChar == "\n") {

-		text = text.replace(/\r\n/g, "\n");

-		text = text.replace(/\r/g, "\n");

-	} else if (newlineChar == "\r") {

-		text = text.replace(/\r\n/g, "\r");

-		text = text.replace(/\n/g, "\r");

-	} else {

-		text = text.replace(/([^\r])\n/g, "$1\r\n");

-		text = text.replace(/\r([^\n])/g, "\r\n$1");

-	}

-	return text;

-}

-

-dojo.string.splitEscaped = function (str,charac) {

-	var components = [];

-	for (var i = 0, prevcomma = 0; i < str.length; i++) {

-		if (str.charAt(i) == '\\') { i++; continue; }

-		if (str.charAt(i) == charac) {

-			components.push(str.substring(prevcomma, i));

-			prevcomma = i + 1;

-		}

-	}

-	components.push(str.substr(prevcomma));

-	return components;

-}

-

-

-// do we even want to offer this? is it worth it?

-dojo.string.addToPrototype = function() {

-	for(var method in dojo.string) {

-		if(dojo.lang.isFunction(dojo.string[method])) {

-			var func = (function() {

-				var meth = method;

-				switch(meth) {

-					case "addToPrototype":

-						return null;

-						break;

-					case "escape":

-						return function(type) {

-							return dojo.string.escape(type, this);

-						}

-						break;

-					default:

-						return function() {

-							var args = [this];

-							for(var i = 0; i < arguments.length; i++) {

-								args.push(arguments[i]);

-							}

-							dojo.debug(args);

-							return dojo.string[meth].apply(dojo.string, args);

-						}

-				}

-			})();

-			if(func) { String.prototype[method] = func; }

-		}

-	}

-}

-

-dojo.provide("dojo.io.IO");

-dojo.require("dojo.string");

-

-/******************************************************************************

- *	Notes about dojo.io design:

- *	

- *	The dojo.io.* package has the unenviable task of making a lot of different

- *	types of I/O feel natural, despite a universal lack of good (or even

- *	reasonable!) I/O capability in the host environment. So lets pin this down

- *	a little bit further.

- *

- *	Rhino:

- *		perhaps the best situation anywhere. Access to Java classes allows you

- *		to do anything one might want in terms of I/O, both synchronously and

- *		async. Can open TCP sockets and perform low-latency client/server

- *		interactions. HTTP transport is available through Java HTTP client and

- *		server classes. Wish it were always this easy.

- *

- *	xpcshell:

- *		XPCOM for I/O. A cluster-fuck to be sure.

- *

- *	spidermonkey:

- *		S.O.L.

- *

- *	Browsers:

- *		Browsers generally do not provide any useable filesystem access. We are

- *		therefore limited to HTTP for moving information to and from Dojo

- *		instances living in a browser.

- *

- *		XMLHTTP:

- *			Sync or async, allows reading of arbitrary text files (including

- *			JS, which can then be eval()'d), writing requires server

- *			cooperation and is limited to HTTP mechanisms (POST and GET).

- *

- *		<iframe> hacks:

- *			iframe document hacks allow browsers to communicate asynchronously

- *			with a server via HTTP POST and GET operations. With significant

- *			effort and server cooperation, low-latency data transit between

- *			client and server can be acheived via iframe mechanisms (repubsub).

- *

- *		SVG:

- *			Adobe's SVG viewer implements helpful primitives for XML-based

- *			requests, but receipt of arbitrary text data seems unlikely w/o

- *			<![CDATA[]]> sections.

- *

- *

- *	A discussion between Dylan, Mark, Tom, and Alex helped to lay down a lot

- *	the IO API interface. A transcript of it can be found at:

- *		http://dojotoolkit.org/viewcvs/viewcvs.py/documents/irc/irc_io_api_log.txt?rev=307&view=auto

- *	

- *	Also referenced in the design of the API was the DOM 3 L&S spec:

- *		http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html

- ******************************************************************************/

-

-// a map of the available transport options. Transports should add themselves

-// by calling add(name)

-dojo.io.transports = [];

-dojo.io.hdlrFuncNames = [ "load", "error" ]; // we're omitting a progress() event for now

-

-dojo.io.Request = function(url, mimetype, transport, changeUrl){

-	if((arguments.length == 1)&&(arguments[0].constructor == Object)){

-		this.fromKwArgs(arguments[0]);

-	}else{

-		this.url = url;

-		if(mimetype){ this.mimetype = mimetype; }

-		if(transport){ this.transport = transport; }

-		if(arguments.length >= 4){ this.changeUrl = changeUrl; }

-	}

-}

-

-dojo.lang.extend(dojo.io.Request, {

-

-	/** The URL to hit */

-	url: "",

-	

-	/** The mime type used to interrpret the response body */

-	mimetype: "text/plain",

-	

-	/** The HTTP method to use */

-	method: "GET",

-	

-	/** An Object containing key-value pairs to be included with the request */

-	content: undefined, // Object

-	

-	/** The transport medium to use */

-	transport: undefined, // String

-	

-	/** If defined the URL of the page is physically changed */

-	changeUrl: undefined, // String

-	

-	/** A form node to use in the request */

-	formNode: undefined, // HTMLFormElement

-	

-	/** Whether the request should be made synchronously */

-	sync: false,

-	

-	bindSuccess: false,

-

-	/** Cache/look for the request in the cache before attempting to request?

-	 *  NOTE: this isn't a browser cache, this is internal and would only cache in-page

-	 */

-	useCache: false,

-

-	/** Prevent the browser from caching this by adding a query string argument to the URL */

-	preventCache: false,

-	

-	// events stuff

-	load: function(type, data, evt){ },

-	error: function(type, error){ },

-	handle: function(){ },

-

-	// the abort method needs to be filled in by the transport that accepts the

-	// bind() request

-	abort: function(){ },

-	

-	// backButton: function(){ },

-	// forwardButton: function(){ },

-

-	fromKwArgs: function(kwArgs){

-		// normalize args

-		if(kwArgs["url"]){ kwArgs.url = kwArgs.url.toString(); }

-		if(!kwArgs["method"] && kwArgs["formNode"] && kwArgs["formNode"].method) {

-			kwArgs.method = kwArgs["formNode"].method;

-		}

-		

-		// backwards compatibility

-		if(!kwArgs["handle"] && kwArgs["handler"]){ kwArgs.handle = kwArgs.handler; }

-		if(!kwArgs["load"] && kwArgs["loaded"]){ kwArgs.load = kwArgs.loaded; }

-		if(!kwArgs["changeUrl"] && kwArgs["changeURL"]) { kwArgs.changeUrl = kwArgs.changeURL; }

-

-		// encoding fun!

-		kwArgs.encoding = dojo.lang.firstValued(kwArgs["encoding"], djConfig["bindEncoding"], "");

-

-		kwArgs.sendTransport = dojo.lang.firstValued(kwArgs["sendTransport"], djConfig["ioSendTransport"], true);

-

-		var isFunction = dojo.lang.isFunction;

-		for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){

-			var fn = dojo.io.hdlrFuncNames[x];

-			if(isFunction(kwArgs[fn])){ continue; }

-			if(isFunction(kwArgs["handle"])){

-				kwArgs[fn] = kwArgs.handle;

-			}

-			// handler is aliased above, shouldn't need this check

-			/* else if(dojo.lang.isObject(kwArgs.handler)){

-				if(isFunction(kwArgs.handler[fn])){

-					kwArgs[fn] = kwArgs.handler[fn]||kwArgs.handler["handle"]||function(){};

-				}

-			}*/

-		}

-		dojo.lang.mixin(this, kwArgs);

-	}

-

-});

-

-dojo.io.Error = function(msg, type, num){

-	this.message = msg;

-	this.type =  type || "unknown"; // must be one of "io", "parse", "unknown"

-	this.number = num || 0; // per-substrate error number, not normalized

-}

-

-dojo.io.transports.addTransport = function(name){

-	this.push(name);

-	// FIXME: do we need to handle things that aren't direct children of the

-	// dojo.io namespace? (say, dojo.io.foo.fooTransport?)

-	this[name] = dojo.io[name];

-}

-

-// binding interface, the various implementations register their capabilities

-// and the bind() method dispatches

-dojo.io.bind = function(request){

-	// if the request asks for a particular implementation, use it

-	if(!(request instanceof dojo.io.Request)){

-		try{

-			request = new dojo.io.Request(request);

-		}catch(e){ dojo.debug(e); }

-	}

-	var tsName = "";

-	if(request["transport"]){

-		tsName = request["transport"];

-		// FIXME: it would be good to call the error handler, although we'd

-		// need to use setTimeout or similar to accomplish this and we can't

-		// garuntee that this facility is available.

-		if(!this[tsName]){ return request; }

-	}else{

-		// otherwise we do our best to auto-detect what available transports

-		// will handle 

-		for(var x=0; x<dojo.io.transports.length; x++){

-			var tmp = dojo.io.transports[x];

-			if((this[tmp])&&(this[tmp].canHandle(request))){

-				tsName = tmp;

-			}

-		}

-		if(tsName == ""){ return request; }

-	}

-	this[tsName].bind(request);

-	request.bindSuccess = true;

-	return request;

-}

-

-dojo.io.queueBind = function(request){

-	if(!(request instanceof dojo.io.Request)){

-		try{

-			request = new dojo.io.Request(request);

-		}catch(e){ dojo.debug(e); }

-	}

-

-	// make sure we get called if/when we get a response

-	var oldLoad = request.load;

-	request.load = function(){

-		dojo.io._queueBindInFlight = false;

-		var ret = oldLoad.apply(this, arguments);

-		dojo.io._dispatchNextQueueBind();

-		return ret;

-	}

-

-	var oldErr = request.error;

-	request.error = function(){

-		dojo.io._queueBindInFlight = false;

-		var ret = oldErr.apply(this, arguments);

-		dojo.io._dispatchNextQueueBind();

-		return ret;

-	}

-

-	dojo.io._bindQueue.push(request);

-	dojo.io._dispatchNextQueueBind();

-	return request;

-}

-

-dojo.io._dispatchNextQueueBind = function(){

-	if(!dojo.io._queueBindInFlight){

-		dojo.io._queueBindInFlight = true;

-		dojo.io.bind(dojo.io._bindQueue.shift());

-	}

-}

-dojo.io._bindQueue = [];

-dojo.io._queueBindInFlight = false;

-

-dojo.io.argsFromMap = function(map, encoding){

-	var control = new Object();

-	var mapStr = "";

-	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;

-	for(var x in map){

-		if(!control[x]){

-			mapStr+= enc(x)+"="+enc(map[x])+"&";

-		}

-	}

-

-	return mapStr;

-}

-

-/*

-dojo.io.sampleTranport = new function(){

-	this.canHandle = function(kwArgs){

-		// canHandle just tells dojo.io.bind() if this is a good transport to

-		// use for the particular type of request.

-		if(	

-			(

-				(kwArgs["mimetype"] == "text/plain") ||

-				(kwArgs["mimetype"] == "text/html") ||

-				(kwArgs["mimetype"] == "text/javascript")

-			)&&(

-				(kwArgs["method"] == "get") ||

-				( (kwArgs["method"] == "post") && (!kwArgs["formNode"]) )

-			)

-		){

-			return true;

-		}

-

-		return false;

-	}

-

-	this.bind = function(kwArgs){

-		var hdlrObj = {};

-

-		// set up a handler object

-		for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){

-			var fn = dojo.io.hdlrFuncNames[x];

-			if(typeof kwArgs.handler == "object"){

-				if(typeof kwArgs.handler[fn] == "function"){

-					hdlrObj[fn] = kwArgs.handler[fn]||kwArgs.handler["handle"];

-				}

-			}else if(typeof kwArgs[fn] == "function"){

-				hdlrObj[fn] = kwArgs[fn];

-			}else{

-				hdlrObj[fn] = kwArgs["handle"]||function(){};

-			}

-		}

-

-		// build a handler function that calls back to the handler obj

-		var hdlrFunc = function(evt){

-			if(evt.type == "onload"){

-				hdlrObj.load("load", evt.data, evt);

-			}else if(evt.type == "onerr"){

-				var errObj = new dojo.io.Error("sampleTransport Error: "+evt.msg);

-				hdlrObj.error("error", errObj);

-			}

-		}

-

-		// the sample transport would attach the hdlrFunc() when sending the

-		// request down the pipe at this point

-		var tgtURL = kwArgs.url+"?"+dojo.io.argsFromMap(kwArgs.content);

-		// sampleTransport.sendRequest(tgtURL, hdlrFunc);

-	}

-

-	dojo.io.transports.addTransport("sampleTranport");

-}

-*/

-

-dojo.provide("dojo.dom");

-dojo.require("dojo.lang");

-

-dojo.dom.ELEMENT_NODE                  = 1;

-dojo.dom.ATTRIBUTE_NODE                = 2;

-dojo.dom.TEXT_NODE                     = 3;

-dojo.dom.CDATA_SECTION_NODE            = 4;

-dojo.dom.ENTITY_REFERENCE_NODE         = 5;

-dojo.dom.ENTITY_NODE                   = 6;

-dojo.dom.PROCESSING_INSTRUCTION_NODE   = 7;

-dojo.dom.COMMENT_NODE                  = 8;

-dojo.dom.DOCUMENT_NODE                 = 9;

-dojo.dom.DOCUMENT_TYPE_NODE            = 10;

-dojo.dom.DOCUMENT_FRAGMENT_NODE        = 11;

-dojo.dom.NOTATION_NODE                 = 12;

-	

-dojo.dom.dojoml = "http://www.dojotoolkit.org/2004/dojoml";

-

-/**

- *	comprehensive list of XML namespaces

-**/

-dojo.dom.xmlns = {

-	svg : "http://www.w3.org/2000/svg",

-	smil : "http://www.w3.org/2001/SMIL20/",

-	mml : "http://www.w3.org/1998/Math/MathML",

-	cml : "http://www.xml-cml.org",

-	xlink : "http://www.w3.org/1999/xlink",

-	xhtml : "http://www.w3.org/1999/xhtml",

-	xul : "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",

-	xbl : "http://www.mozilla.org/xbl",

-	fo : "http://www.w3.org/1999/XSL/Format",

-	xsl : "http://www.w3.org/1999/XSL/Transform",

-	xslt : "http://www.w3.org/1999/XSL/Transform",

-	xi : "http://www.w3.org/2001/XInclude",

-	xforms : "http://www.w3.org/2002/01/xforms",

-	saxon : "http://icl.com/saxon",

-	xalan : "http://xml.apache.org/xslt",

-	xsd : "http://www.w3.org/2001/XMLSchema",

-	dt: "http://www.w3.org/2001/XMLSchema-datatypes",

-	xsi : "http://www.w3.org/2001/XMLSchema-instance",

-	rdf : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",

-	rdfs : "http://www.w3.org/2000/01/rdf-schema#",

-	dc : "http://purl.org/dc/elements/1.1/",

-	dcq: "http://purl.org/dc/qualifiers/1.0",

-	"soap-env" : "http://schemas.xmlsoap.org/soap/envelope/",

-	wsdl : "http://schemas.xmlsoap.org/wsdl/",

-	AdobeExtensions : "http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"

-};

-

-dojo.dom.isNode = dojo.lang.isDomNode = function(wh){

-	if(typeof Element == "object") {

-		try {

-			return wh instanceof Element;

-		} catch(E) {}

-	} else {

-		// best-guess

-		return wh && !isNaN(wh.nodeType);

-	}

-}

-dojo.lang.whatAmI.custom["node"] = dojo.dom.isNode;

-

-dojo.dom.getTagName = function(node){

-	var tagName = node.tagName;

-	if(tagName.substr(0,5).toLowerCase()!="dojo:"){

-		

-		if(tagName.substr(0,4).toLowerCase()=="dojo"){

-			// FIXME: this assuumes tag names are always lower case

-			return "dojo:" + tagName.substring(4).toLowerCase();

-		}

-

-		// allow lower-casing

-		var djt = node.getAttribute("dojoType")||node.getAttribute("dojotype");

-		if(djt){

-			return "dojo:"+djt.toLowerCase();

-		}

-		

-		if((node.getAttributeNS)&&(node.getAttributeNS(this.dojoml,"type"))){

-			return "dojo:" + node.getAttributeNS(this.dojoml,"type").toLowerCase();

-		}

-		try{

-			// FIXME: IE really really doesn't like this, so we squelch

-			// errors for it

-			djt = node.getAttribute("dojo:type");

-		}catch(e){ /* FIXME: log? */ }

-		if(djt){

-			return "dojo:"+djt.toLowerCase();

-		}

-

-		if((!dj_global["djConfig"])||(!djConfig["ignoreClassNames"])){

-			// FIXME: should we make this optionally enabled via djConfig?

-			var classes = node.className||node.getAttribute("class");

-			// FIXME: following line, without check for existence of classes.indexOf

-			// breaks firefox 1.5's svg widgets

-			if((classes)&&(classes.indexOf)&&(classes.indexOf("dojo-") != -1)){

-				var aclasses = classes.split(" ");

-				for(var x=0; x<aclasses.length; x++){

-					if((aclasses[x].length>5)&&(aclasses[x].indexOf("dojo-")>=0)){

-						return "dojo:"+aclasses[x].substr(5).toLowerCase();

-					}

-				}

-			}

-		}

-

-	}

-	return tagName.toLowerCase();

-}

-

-dojo.dom.getUniqueId = function(){

-	do {

-		var id = "dj_unique_" + (++arguments.callee._idIncrement);

-	}while(document.getElementById(id));

-	return id;

-}

-dojo.dom.getUniqueId._idIncrement = 0;

-

-dojo.dom.firstElement = dojo.dom.getFirstChildElement = function(parentNode, tagName){

-	var node = parentNode.firstChild;

-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE){

-		node = node.nextSibling;

-	}

-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {

-		node = dojo.dom.nextElement(node, tagName);

-	}

-	return node;

-}

-

-dojo.dom.lastElement = dojo.dom.getLastChildElement = function(parentNode, tagName){

-	var node = parentNode.lastChild;

-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE) {

-		node = node.previousSibling;

-	}

-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {

-		node = dojo.dom.prevElement(node, tagName);

-	}

-	return node;

-}

-

-dojo.dom.nextElement = dojo.dom.getNextSiblingElement = function(node, tagName){

-	if(!node) { return null; }

-	do {

-		node = node.nextSibling;

-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);

-

-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {

-		return dojo.dom.nextElement(node, tagName);

-	}

-	return node;

-}

-

-dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement = function(node, tagName){

-	if(!node) { return null; }

-	if(tagName) { tagName = tagName.toLowerCase(); }

-	do {

-		node = node.previousSibling;

-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);

-

-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {

-		return dojo.dom.prevElement(node, tagName);

-	}

-	return node;

-}

-

-// TODO: hmph

-/*this.forEachChildTag = function(node, unaryFunc) {

-	var child = this.getFirstChildTag(node);

-	while(child) {

-		if(unaryFunc(child) == "break") { break; }

-		child = this.getNextSiblingTag(child);

-	}

-}*/

-

-dojo.dom.moveChildren = function(srcNode, destNode, trim){

-	var count = 0;

-	if(trim) {

-		while(srcNode.hasChildNodes() &&

-			srcNode.firstChild.nodeType == dojo.dom.TEXT_NODE) {

-			srcNode.removeChild(srcNode.firstChild);

-		}

-		while(srcNode.hasChildNodes() &&

-			srcNode.lastChild.nodeType == dojo.dom.TEXT_NODE) {

-			srcNode.removeChild(srcNode.lastChild);

-		}

-	}

-	while(srcNode.hasChildNodes()){

-		destNode.appendChild(srcNode.firstChild);

-		count++;

-	}

-	return count;

-}

-

-dojo.dom.copyChildren = function(srcNode, destNode, trim){

-	var clonedNode = srcNode.cloneNode(true);

-	return this.moveChildren(clonedNode, destNode, trim);

-}

-

-dojo.dom.removeChildren = function(node){

-	var count = node.childNodes.length;

-	while(node.hasChildNodes()){ node.removeChild(node.firstChild); }

-	return count;

-}

-

-dojo.dom.replaceChildren = function(node, newChild){

-	// FIXME: what if newChild is an array-like object?

-	dojo.dom.removeChildren(node);

-	node.appendChild(newChild);

-}

-

-dojo.dom.removeNode = function(node){

-	if(node && node.parentNode){

-		// return a ref to the removed child

-		return node.parentNode.removeChild(node);

-	}

-}

-

-dojo.dom.getAncestors = function(node, filterFunction, returnFirstHit) {

-	var ancestors = [];

-	var isFunction = dojo.lang.isFunction(filterFunction);

-	while(node) {

-		if (!isFunction || filterFunction(node)) {

-			ancestors.push(node);

-		}

-		if (returnFirstHit && ancestors.length > 0) { return ancestors[0]; }

-		

-		node = node.parentNode;

-	}

-	if (returnFirstHit) { return null; }

-	return ancestors;

-}

-

-dojo.dom.getAncestorsByTag = function(node, tag, returnFirstHit) {

-	tag = tag.toLowerCase();

-	return dojo.dom.getAncestors(node, function(el){

-		return ((el.tagName)&&(el.tagName.toLowerCase() == tag));

-	}, returnFirstHit);

-}

-

-dojo.dom.getFirstAncestorByTag = function(node, tag) {

-	return dojo.dom.getAncestorsByTag(node, tag, true);

-}

-

-dojo.dom.isDescendantOf = function(node, ancestor, guaranteeDescendant){

-	// guaranteeDescendant allows us to be a "true" isDescendantOf function

-	if(guaranteeDescendant && node) { node = node.parentNode; }

-	while(node) {

-		if(node == ancestor){ return true; }

-		node = node.parentNode;

-	}

-	return false;

-}

-

-dojo.dom.innerXML = function(node){

-	if(node.innerXML){

-		return node.innerXML;

-	}else if(typeof XMLSerializer != "undefined"){

-		return (new XMLSerializer()).serializeToString(node);

-	}

-}

-

-dojo.dom.createDocumentFromText = function(str, mimetype){

-	if(!mimetype) { mimetype = "text/xml"; }

-	if(typeof DOMParser != "undefined") {

-		var parser = new DOMParser();

-		return parser.parseFromString(str, mimetype);

-	}else if(typeof ActiveXObject != "undefined"){

-		var domDoc = new ActiveXObject("Microsoft.XMLDOM");

-		if(domDoc) {

-			domDoc.async = false;

-			domDoc.loadXML(str);

-			return domDoc;

-		}else{

-			dojo.debug("toXml didn't work?");

-		}

-	/*

-	}else if((dojo.render.html.capable)&&(dojo.render.html.safari)){

-		// FIXME: this doesn't appear to work!

-		// from: http://web-graphics.com/mtarchive/001606.php

-		// var xml = '<?xml version="1.0"?>'+str;

-		var mtype = "text/xml";

-		var xml = '<?xml version="1.0"?>'+str;

-		var url = "data:"+mtype+";charset=utf-8,"+encodeURIComponent(xml);

-		var request = new XMLHttpRequest();

-		request.open("GET", url, false);

-		request.overrideMimeType(mtype);

-		request.send(null);

-		return request.responseXML;

-	*/

-	}else if(document.createElement){

-		// FIXME: this may change all tags to uppercase!

-		var tmp = document.createElement("xml");

-		tmp.innerHTML = str;

-		if(document.implementation && document.implementation.createDocument) {

-			var xmlDoc = document.implementation.createDocument("foo", "", null);

-			for(var i = 0; i < tmp.childNodes.length; i++) {

-				xmlDoc.importNode(tmp.childNodes.item(i), true);

-			}

-			return xmlDoc;

-		}

-		// FIXME: probably not a good idea to have to return an HTML fragment

-		// FIXME: the tmp.doc.firstChild is as tested from IE, so it may not

-		// work that way across the board

-		return tmp.document && tmp.document.firstChild ?

-			tmp.document.firstChild : tmp;

-	}

-	return null;

-}

-

-dojo.dom.prependChild = function(node, parent) {

-	if(parent.firstChild) {

-		parent.insertBefore(node, parent.firstChild);

-	} else {

-		parent.appendChild(node);

-	}

-	return true;

-}

-

-dojo.dom.insertBefore = function(node, ref, force){

-	if (force != true &&

-		(node === ref || node.nextSibling === ref)){ return false; }

-	var parent = ref.parentNode;

-	parent.insertBefore(node, ref);

-	return true;

-}

-

-dojo.dom.insertAfter = function(node, ref, force){

-	var pn = ref.parentNode;

-	if(ref == pn.lastChild){

-		if((force != true)&&(node === ref)){

-			return false;

-		}

-		pn.appendChild(node);

-	}else{

-		return this.insertBefore(node, ref.nextSibling, force);

-	}

-	return true;

-}

-

-dojo.dom.insertAtPosition = function(node, ref, position){

-	if((!node)||(!ref)||(!position)){ return false; }

-	switch(position.toLowerCase()){

-		case "before":

-			return dojo.dom.insertBefore(node, ref);

-		case "after":

-			return dojo.dom.insertAfter(node, ref);

-		case "first":

-			if(ref.firstChild){

-				return dojo.dom.insertBefore(node, ref.firstChild);

-			}else{

-				ref.appendChild(node);

-				return true;

-			}

-			break;

-		default: // aka: last

-			ref.appendChild(node);

-			return true;

-	}

-}

-

-dojo.dom.insertAtIndex = function(node, containingNode, insertionIndex){

-	var siblingNodes = containingNode.childNodes;

-

-	// if there aren't any kids yet, just add it to the beginning

-

-	if (!siblingNodes.length){

-		containingNode.appendChild(node);

-		return true;

-	}

-

-	// otherwise we need to walk the childNodes

-	// and find our spot

-

-	var after = null;

-

-	for(var i=0; i<siblingNodes.length; i++){

-

-		var sibling_index = siblingNodes.item(i)["getAttribute"] ? parseInt(siblingNodes.item(i).getAttribute("dojoinsertionindex")) : -1;

-

-		if (sibling_index < insertionIndex){

-			after = siblingNodes.item(i);

-		}

-	}

-

-	if (after){

-		// add it after the node in {after}

-

-		return dojo.dom.insertAfter(node, after);

-	}else{

-		// add it to the start

-

-		return dojo.dom.insertBefore(node, siblingNodes.item(0));

-	}

-}

-	

-/**

- * implementation of the DOM Level 3 attribute.

- * 

- * @param node The node to scan for text

- * @param text Optional, set the text to this value.

- */

-dojo.dom.textContent = function(node, text){

-	if (text) {

-		dojo.dom.replaceChildren(node, document.createTextNode(text));

-		return text;

-	} else {

-		var _result = "";

-		if (node == null) { return _result; }

-		for (var i = 0; i < node.childNodes.length; i++) {

-			switch (node.childNodes[i].nodeType) {

-				case 1: // ELEMENT_NODE

-				case 5: // ENTITY_REFERENCE_NODE

-					_result += dojo.dom.textContent(node.childNodes[i]);

-					break;

-				case 3: // TEXT_NODE

-				case 2: // ATTRIBUTE_NODE

-				case 4: // CDATA_SECTION_NODE

-					_result += node.childNodes[i].nodeValue;

-					break;

-				default:

-					break;

-			}

-		}

-		return _result;

-	}

-}

-

-dojo.dom.collectionToArray = function(collection){

-	dojo.deprecated("dojo.dom.collectionToArray", "use dojo.lang.toArray instead");

-	return dojo.lang.toArray(collection);

-}

-

-dojo.dom.hasParent = function(node) {

-	if(!node || !node.parentNode || (node.parentNode && !node.parentNode.tagName)) {

-		return false;

-	}

-	return true;

-}

-

-/**

- * Determines if node has any of the provided tag names and

- * returns the tag name that matches, empty string otherwise.

- *

- * Examples:

- *

- * myFooNode = <foo />

- * isTag(myFooNode, "foo"); // returns "foo"

- * isTag(myFooNode, "bar"); // returns ""

- * isTag(myFooNode, "FOO"); // returns ""

- * isTag(myFooNode, "hey", "foo", "bar"); // returns "foo"

-**/

-dojo.dom.isTag = function(node /* ... */) {

-	if(node && node.tagName) {

-		var arr = dojo.lang.toArray(arguments, 1);

-		return arr[ dojo.lang.find(node.tagName, arr) ] || "";

-	}

-	return "";

-}

-

-dojo.provide("dojo.io.BrowserIO");

-

-dojo.require("dojo.io");

-dojo.require("dojo.lang");

-dojo.require("dojo.dom");

-

-try {

-	if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){

-		document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+'iframe_history.html')+"'></iframe>");

-	}

-}catch(e){/* squelch */}

-

-dojo.io.checkChildrenForFile = function(node){

-	var hasFile = false;

-	var inputs = node.getElementsByTagName("input");

-	dojo.lang.forEach(inputs, function(input){

-		if(hasFile){ return; }

-		if(input.getAttribute("type")=="file"){

-			hasFile = true;

-		}

-	});

-	return hasFile;

-}

-

-dojo.io.formHasFile = function(formNode){

-	return dojo.io.checkChildrenForFile(formNode);

-}

-

-// TODO: Move to htmlUtils

-dojo.io.encodeForm = function(formNode, encoding){

-	if((!formNode)||(!formNode.tagName)||(!formNode.tagName.toLowerCase() == "form")){

-		dojo.raise("Attempted to encode a non-form element.");

-	}

-	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;

-	var values = [];

-

-	for(var i = 0; i < formNode.elements.length; i++){

-		var elm = formNode.elements[i];

-		if(elm.disabled || elm.tagName.toLowerCase() == "fieldset" || !elm.name){

-			continue;

-		}

-		var name = enc(elm.name);

-		var type = elm.type.toLowerCase();

-

-		if(type == "select-multiple"){

-			for(var j = 0; j < elm.options.length; j++){

-				if(elm.options[j].selected) {

-					values.push(name + "=" + enc(elm.options[j].value));

-				}

-			}

-		}else if(dojo.lang.inArray(type, ["radio", "checkbox"])){

-			if(elm.checked){

-				values.push(name + "=" + enc(elm.value));

-			}

-		}else if(!dojo.lang.inArray(type, ["file", "submit", "reset", "button"])) {

-			values.push(name + "=" + enc(elm.value));

-		}

-	}

-

-	// now collect input type="image", which doesn't show up in the elements array

-	var inputs = formNode.getElementsByTagName("input");

-	for(var i = 0; i < inputs.length; i++) {

-		var input = inputs[i];

-		if(input.type.toLowerCase() == "image" && input.form == formNode) {

-			var name = enc(input.name);

-			values.push(name + "=" + enc(input.value));

-			values.push(name + ".x=0");

-			values.push(name + ".y=0");

-		}

-	}

-	return values.join("&") + "&";

-}

-

-dojo.io.setIFrameSrc = function(iframe, src, replace){

-	try{

-		var r = dojo.render.html;

-		// dojo.debug(iframe);

-		if(!replace){

-			if(r.safari){

-				iframe.location = src;

-			}else{

-				frames[iframe.name].location = src;

-			}

-		}else{

-			// Fun with DOM 0 incompatibilities!

-			var idoc;

-			if(r.ie){

-				idoc = iframe.contentWindow.document;

-			}else if(r.moz){

-				idoc = iframe.contentWindow;

-			}else if(r.safari){

-				idoc = iframe.document;

-			}

-			idoc.location.replace(src);

-		}

-	}catch(e){ 

-		dojo.debug(e); 

-		dojo.debug("setIFrameSrc: "+e); 

-	}

-}

-

-dojo.io.XMLHTTPTransport = new function(){

-	var _this = this;

-

-	this.initialHref = window.location.href;

-	this.initialHash = window.location.hash;

-

-	this.moveForward = false;

-

-	var _cache = {}; // FIXME: make this public? do we even need to?

-	this.useCache = false; // if this is true, we'll cache unless kwArgs.useCache = false

-	this.preventCache = false; // if this is true, we'll always force GET requests to cache

-	this.historyStack = [];

-	this.forwardStack = [];

-	this.historyIframe = null;

-	this.bookmarkAnchor = null;

-	this.locationTimer = null;

-

-	/* NOTES:

-	 *	Safari 1.2: 

-	 *		back button "works" fine, however it's not possible to actually

-	 *		DETECT that you've moved backwards by inspecting window.location.

-	 *		Unless there is some other means of locating.

-	 *		FIXME: perhaps we can poll on history.length?

-	 *	IE 5.5 SP2:

-	 *		back button behavior is macro. It does not move back to the

-	 *		previous hash value, but to the last full page load. This suggests

-	 *		that the iframe is the correct way to capture the back button in

-	 *		these cases.

-	 *	IE 6.0:

-	 *		same behavior as IE 5.5 SP2

-	 * Firefox 1.0:

-	 *		the back button will return us to the previous hash on the same

-	 *		page, thereby not requiring an iframe hack, although we do then

-	 *		need to run a timer to detect inter-page movement.

-	 */

-

-	// FIXME: Should this even be a function? or do we just hard code it in the next 2 functions?

-	function getCacheKey(url, query, method) {

-		return url + "|" + query + "|" + method.toLowerCase();

-	}

-

-	function addToCache(url, query, method, http) {

-		_cache[getCacheKey(url, query, method)] = http;

-	}

-

-	function getFromCache(url, query, method) {

-		return _cache[getCacheKey(url, query, method)];

-	}

-

-	this.clearCache = function() {

-		_cache = {};

-	}

-

-	// moved successful load stuff here

-	function doLoad(kwArgs, http, url, query, useCache) {

-		if((http.status==200)||(location.protocol=="file:" && http.status==0)) {

-			var ret;

-			if(kwArgs.method.toLowerCase() == "head"){

-				var headers = http.getAllResponseHeaders();

-				ret = {};

-				ret.toString = function(){ return headers; }

-				var values = headers.split(/[\r\n]+/g);

-				for(var i = 0; i < values.length; i++) {

-					var pair = values[i].match(/^([^:]+)\s*:\s*(.+)$/i);

-					if(pair) {

-						ret[pair[1]] = pair[2];

-					}

-				}

-			}else if(kwArgs.mimetype == "text/javascript"){

-				try{

-					ret = dj_eval(http.responseText);

-				}catch(e){

-					dojo.debug(e);

-					dojo.debug(http.responseText);

-					ret = null;

-				}

-			}else if(kwArgs.mimetype == "text/json"){

-				try{

-					ret = dj_eval("("+http.responseText+")");

-				}catch(e){

-					dojo.debug(e);

-					dojo.debug(http.responseText);

-					ret = false;

-				}

-			}else if((kwArgs.mimetype == "application/xml")||

-						(kwArgs.mimetype == "text/xml")){

-				ret = http.responseXML;

-				if(!ret || typeof ret == "string") {

-					ret = dojo.dom.createDocumentFromText(http.responseText);

-				}

-			}else{

-				ret = http.responseText;

-			}

-

-			if(useCache){ // only cache successful responses

-				addToCache(url, query, kwArgs.method, http);

-			}

-			kwArgs[(typeof kwArgs.load == "function") ? "load" : "handle"]("load", ret, http);

-		}else{

-			var errObj = new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);

-			kwArgs[(typeof kwArgs.error == "function") ? "error" : "handle"]("error", errObj, http);

-		}

-	}

-

-	// set headers (note: Content-Type will get overriden if kwArgs.contentType is set)

-	function setHeaders(http, kwArgs){

-		if(kwArgs["headers"]) {

-			for(var header in kwArgs["headers"]) {

-				if(header.toLowerCase() == "content-type" && !kwArgs["contentType"]) {

-					kwArgs["contentType"] = kwArgs["headers"][header];

-				} else {

-					http.setRequestHeader(header, kwArgs["headers"][header]);

-				}

-			}

-		}

-	}

-

-	this.addToHistory = function(args){

-		var callback = args["back"]||args["backButton"]||args["handle"];

-		var hash = null;

-		if(!this.historyIframe){

-			this.historyIframe = window.frames["djhistory"];

-		}

-		if(!this.bookmarkAnchor){

-			this.bookmarkAnchor = document.createElement("a");

-			(document.body||document.getElementsByTagName("body")[0]).appendChild(this.bookmarkAnchor);

-			this.bookmarkAnchor.style.display = "none";

-		}

-		if((!args["changeUrl"])||(dojo.render.html.ie)){

-			var url = dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();

-			this.moveForward = true;

-			dojo.io.setIFrameSrc(this.historyIframe, url, false);

-		}

-		if(args["changeUrl"]){

-			hash = "#"+ ((args["changeUrl"]!==true) ? args["changeUrl"] : (new Date()).getTime());

-			setTimeout("window.location.href = '"+hash+"';", 1);

-			this.bookmarkAnchor.href = hash;

-			if(dojo.render.html.ie){

-				// IE requires manual setting of the hash since we are catching

-				// events from the iframe

-				var oldCB = callback;

-				var lh = null;

-				var hsl = this.historyStack.length-1;

-				if(hsl>=0){

-					while(!this.historyStack[hsl]["urlHash"]){

-						hsl--;

-					}

-					lh = this.historyStack[hsl]["urlHash"];

-				}

-				if(lh){

-					callback = function(){

-						if(window.location.hash != ""){

-							setTimeout("window.location.href = '"+lh+"';", 1);

-						}

-						oldCB();

-					}

-				}

-				// when we issue a new bind(), we clobber the forward 

-				// FIXME: is this always a good idea?

-				this.forwardStack = []; 

-				var oldFW = args["forward"]||args["forwardButton"];;

-				var tfw = function(){

-					if(window.location.hash != ""){

-						window.location.href = hash;

-					}

-					if(oldFW){ // we might not actually have one

-						oldFW();

-					}

-				}

-				if(args["forward"]){

-					args.forward = tfw;

-				}else if(args["forwardButton"]){

-					args.forwardButton = tfw;

-				}

-			}else if(dojo.render.html.moz){

-				// start the timer

-				if(!this.locationTimer){

-					this.locationTimer = setInterval("dojo.io.XMLHTTPTransport.checkLocation();", 200);

-				}

-			}

-		}

-

-		this.historyStack.push({"url": url, "callback": callback, "kwArgs": args, "urlHash": hash});

-	}

-

-	this.checkLocation = function(){

-		var hsl = this.historyStack.length;

-

-		if((window.location.hash == this.initialHash)||(window.location.href == this.initialHref)&&(hsl == 1)){

-			// FIXME: could this ever be a forward button?

-			// we can't clear it because we still need to check for forwards. Ugg.

-			// clearInterval(this.locationTimer);

-			this.handleBackButton();

-			return;

-		}

-		// first check to see if we could have gone forward. We always halt on

-		// a no-hash item.

-		if(this.forwardStack.length > 0){

-			if(this.forwardStack[this.forwardStack.length-1].urlHash == window.location.hash){

-				this.handleForwardButton();

-				return;

-			}

-		}

-		// ok, that didn't work, try someplace back in the history stack

-		if((hsl >= 2)&&(this.historyStack[hsl-2])){

-			if(this.historyStack[hsl-2].urlHash==window.location.hash){

-				this.handleBackButton();

-				return;

-			}

-		}

-	}

-

-	this.iframeLoaded = function(evt, ifrLoc){

-		var isp = ifrLoc.href.split("?");

-		if(isp.length < 2){ 

-			// alert("iframeLoaded");

-			// we hit the end of the history, so we should go back

-			if(this.historyStack.length == 1){

-				this.handleBackButton();

-			}

-			return;

-		}

-		var query = isp[1];

-		if(this.moveForward){

-			// we were expecting it, so it's not either a forward or backward

-			// movement

-			this.moveForward = false;

-			return;

-		}

-

-		var last = this.historyStack.pop();

-		// we don't have anything in history, so it could be a forward button

-		if(!last){ 

-			if(this.forwardStack.length > 0){

-				var next = this.forwardStack[this.forwardStack.length-1];

-				if(query == next.url.split("?")[1]){

-					this.handleForwardButton();

-				}

-			}

-			// regardless, we didnt' have any history, so it can't be a back button

-			return;

-		}

-		// put it back on the stack so we can do something useful with it when

-		// we call handleBackButton()

-		this.historyStack.push(last);

-		if(this.historyStack.length >= 2){

-			if(isp[1] == this.historyStack[this.historyStack.length-2].url.split("?")[1]){

-				// looks like it IS a back button press, so handle it

-				this.handleBackButton();

-			}

-		}else{

-			this.handleBackButton();

-		}

-	}

-

-	this.handleBackButton = function(){

-		var last = this.historyStack.pop();

-		if(!last){ return; }

-		if(last["callback"]){

-			last.callback();

-		}else if(last.kwArgs["backButton"]){

-			last.kwArgs["backButton"]();

-		}else if(last.kwArgs["back"]){

-			last.kwArgs["back"]();

-		}else if(last.kwArgs["handle"]){

-			last.kwArgs.handle("back");

-		}

-		this.forwardStack.push(last);

-	}

-

-	this.handleForwardButton = function(){

-		// FIXME: should we build in support for re-issuing the bind() call here?

-		// alert("alert we found a forward button call");

-		var last = this.forwardStack.pop();

-		if(!last){ return; }

-		if(last.kwArgs["forward"]){

-			last.kwArgs.forward();

-		}else if(last.kwArgs["forwardButton"]){

-			last.kwArgs.forwardButton();

-		}else if(last.kwArgs["handle"]){

-			last.kwArgs.handle("forward");

-		}

-		this.historyStack.push(last);

-	}

-

-	this.inFlight = [];

-	this.inFlightTimer = null;

-

-	this.startWatchingInFlight = function(){

-		if(!this.inFlightTimer){

-			this.inFlightTimer = setInterval("dojo.io.XMLHTTPTransport.watchInFlight();", 10);

-		}

-	}

-

-	this.watchInFlight = function(){

-		for(var x=this.inFlight.length-1; x>=0; x--){

-			var tif = this.inFlight[x];

-			if(!tif){ this.inFlight.splice(x, 1); continue; }

-			if(4==tif.http.readyState){

-				// remove it so we can clean refs

-				this.inFlight.splice(x, 1);

-				doLoad(tif.req, tif.http, tif.url, tif.query, tif.useCache);

-				if(this.inFlight.length == 0){

-					clearInterval(this.inFlightTimer);

-					this.inFlightTimer = null;

-				}

-			} // FIXME: need to implement a timeout param here!

-		}

-	}

-

-	var hasXmlHttp = dojo.hostenv.getXmlhttpObject() ? true : false;

-	this.canHandle = function(kwArgs){

-		// canHandle just tells dojo.io.bind() if this is a good transport to

-		// use for the particular type of request.

-

-		// FIXME: we need to determine when form values need to be

-		// multi-part mime encoded and avoid using this transport for those

-		// requests.

-		return hasXmlHttp

-			&& dojo.lang.inArray((kwArgs["mimetype"]||"".toLowerCase()), ["text/plain", "text/html", "application/xml", "text/xml", "text/javascript", "text/json"])

-			&& dojo.lang.inArray(kwArgs["method"].toLowerCase(), ["post", "get", "head"])

-			&& !( kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"]) );

-	}

-

-	this.multipartBoundary = "45309FFF-BD65-4d50-99C9-36986896A96F";	// unique guid as a boundary value for multipart posts

-

-	this.bind = function(kwArgs){

-		if(!kwArgs["url"]){

-			// are we performing a history action?

-			if( !kwArgs["formNode"]

-				&& (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"] || kwArgs["watchForURL"])

-				&& (!djConfig.preventBackButtonFix)) {

-				this.addToHistory(kwArgs);

-				return true;

-			}

-		}

-

-		// build this first for cache purposes

-		var url = kwArgs.url;

-		var query = "";

-		if(kwArgs["formNode"]){

-			var ta = kwArgs.formNode.getAttribute("action");

-			if((ta)&&(!kwArgs["url"])){ url = ta; }

-			var tp = kwArgs.formNode.getAttribute("method");

-			if((tp)&&(!kwArgs["method"])){ kwArgs.method = tp; }

-			query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding);

-		}

-

-		if(url.indexOf("#") > -1) {

-			dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url);

-			url = url.split("#")[0];

-		}

-

-		if(kwArgs["file"]){

-			// force post for file transfer

-			kwArgs.method = "post";

-		}

-

-		if(!kwArgs["method"]){

-			kwArgs.method = "get";

-		}

-

-		// guess the multipart value		

-		if(kwArgs.method.toLowerCase() == "get"){

-			// GET cannot use multipart

-			kwArgs.multipart = false;

-		}else{

-			if(kwArgs["file"]){

-				// enforce multipart when sending files

-				kwArgs.multipart = true;

-			}else if(!kwArgs["multipart"]){

-				// default 

-				kwArgs.multipart = false;

-			}

-		}

-

-		if(kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]){

-			this.addToHistory(kwArgs);

-		}

-

-		var content = kwArgs["content"] || {};

-

-		if(kwArgs.sendTransport) {

-			content["dojo.transport"] = "xmlhttp";

-		}

-

-		do { // break-block

-			if(kwArgs.postContent){

-				query = kwArgs.postContent;

-				break;

-			}

-

-			if(content) {

-				query += dojo.io.argsFromMap(content, kwArgs.encoding);

-			}

-			

-			if(kwArgs.method.toLowerCase() == "get" || !kwArgs.multipart){

-				break;

-			}

-

-			var	t = [];

-			if(query.length){

-				var q = query.split("&");

-				for(var i = 0; i < q.length; ++i){

-					if(q[i].length){

-						var p = q[i].split("=");

-						t.push(	"--" + this.multipartBoundary,

-								"Content-Disposition: form-data; name=\"" + p[0] + "\"", 

-								"",

-								p[1]);

-					}

-				}

-			}

-

-			if(kwArgs.file){

-				if(dojo.lang.isArray(kwArgs.file)){

-					for(var i = 0; i < kwArgs.file.length; ++i){

-						var o = kwArgs.file[i];

-						t.push(	"--" + this.multipartBoundary,

-								"Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"",

-								"Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"),

-								"",

-								o.content);

-					}

-				}else{

-					var o = kwArgs.file;

-					t.push(	"--" + this.multipartBoundary,

-							"Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"",

-							"Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"),

-							"",

-							o.content);

-				}

-			}

-

-			if(t.length){

-				t.push("--"+this.multipartBoundary+"--", "");

-				query = t.join("\r\n");

-			}

-		}while(false);

-

-		// kwArgs.Connection = "close";

-

-		var async = kwArgs["sync"] ? false : true;

-

-		var preventCache = kwArgs["preventCache"] ||

-			(this.preventCache == true && kwArgs["preventCache"] != false);

-		var useCache = kwArgs["useCache"] == true ||

-			(this.useCache == true && kwArgs["useCache"] != false );

-

-		// preventCache is browser-level (add query string junk), useCache

-		// is for the local cache. If we say preventCache, then don't attempt

-		// to look in the cache, but if useCache is true, we still want to cache

-		// the response

-		if(!preventCache && useCache){

-			var cachedHttp = getFromCache(url, query, kwArgs.method);

-			if(cachedHttp){

-				doLoad(kwArgs, cachedHttp, url, query, false);

-				return;

-			}

-		}

-

-		// much of this is from getText, but reproduced here because we need

-		// more flexibility

-		var http = dojo.hostenv.getXmlhttpObject();

-		var received = false;

-

-		// build a handler function that calls back to the handler obj

-		if(async){

-			// FIXME: setting up this callback handler leaks on IE!!!

-			this.inFlight.push({

-				"req":		kwArgs,

-				"http":		http,

-				"url":		url,

-				"query":	query,

-				"useCache":	useCache

-			});

-			this.startWatchingInFlight();

-		}

-

-		if(kwArgs.method.toLowerCase() == "post"){

-			// FIXME: need to hack in more flexible Content-Type setting here!

-			http.open("POST", url, async);

-			setHeaders(http, kwArgs);

-			http.setRequestHeader("Content-Type", kwArgs.multipart ? ("multipart/form-data; boundary=" + this.multipartBoundary) : 

-				(kwArgs.contentType || "application/x-www-form-urlencoded"));

-			http.send(query);

-		}else{

-			var tmpUrl = url;

-			if(query != "") {

-				tmpUrl += (tmpUrl.indexOf("?") > -1 ? "&" : "?") + query;

-			}

-			if(preventCache) {

-				tmpUrl += (dojo.string.endsWithAny(tmpUrl, "?", "&")

-					? "" : (tmpUrl.indexOf("?") > -1 ? "&" : "?")) + "dojo.preventCache=" + new Date().valueOf();

-			}

-			http.open(kwArgs.method.toUpperCase(), tmpUrl, async);

-			setHeaders(http, kwArgs);

-			http.send(null);

-		}

-

-		if( !async ) {

-			doLoad(kwArgs, http, url, query, useCache);

-		}

-

-		kwArgs.abort = function(){

-			return http.abort();

-		}

-

-		return;

-	}

-	dojo.io.transports.addTransport("XMLHTTPTransport");

-}

-

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/alg/Alg.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/alg/Alg.js
deleted file mode 100644
index 144a1d4..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/alg/Alg.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.alg.Alg");
-dojo.require("dojo.lang");
-dj_deprecated("dojo.alg.Alg is deprecated, use dojo.lang instead");
-
-dojo.alg.find = function(arr, val){ return dojo.lang.find(arr, val); }
-
-dojo.alg.inArray = function(arr, val){
-	return dojo.lang.inArray(arr, val);
-}
-dojo.alg.inArr = dojo.alg.inArray; // for backwards compatibility
-
-dojo.alg.getNameInObj = function(ns, item){
-	return dojo.lang.getNameInObj(ns, item);
-}
-
-// is this the right place for this?
-dojo.alg.has = function(obj, name){
-	return dojo.lang.has(obj, name);
-}
-
-dojo.alg.forEach = function(arr, unary_func, fix_length){
-	return dojo.lang.forEach(arr, unary_func, fix_length);
-}
-
-dojo.alg.for_each = dojo.alg.forEach; // burst compat
-
-dojo.alg.map = function(arr, obj, unary_func){
-	return dojo.lang.map(arr, obj, unary_func);
-}
-
-dojo.alg.tryThese = function(){
-	return dojo.lang.tryThese.apply(dojo.lang, arguments);
-}
-
-dojo.alg.delayThese = function(farr, cb, delay, onend){
-	return dojo.lang.delayThese.apply(dojo.lang, arguments);
-}
-
-dojo.alg.for_each_call = dojo.alg.map; // burst compat
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/alg/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/alg/__package__.js
deleted file mode 100644
index 7f5efb4..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/alg/__package__.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.alg.Alg", false, true);
-dojo.hostenv.moduleLoaded("dojo.alg.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/animation/Animation.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/animation/Animation.js
deleted file mode 100644
index 1d25bcb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/animation/Animation.js
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.animation");
-dojo.provide("dojo.animation.Animation");
-
-dojo.require("dojo.lang");
-dojo.require("dojo.math");
-dojo.require("dojo.math.curves");
-
-/*
-Animation package based off of Dan Pupius' work on Animations:
-http://pupius.co.uk/js/Toolkit.Drawing.js
-*/
-
-dojo.animation.Animation = function(curve, duration, accel, repeatCount, rate) {
-	// public properties
-	if(dojo.lang.isArray(curve)) {
-		curve = new dojo.math.curves.Line(curve[0], curve[1]);
-	}
-	this.curve = curve;
-	this.duration = duration;
-	this.repeatCount = repeatCount || 0;
-	this.rate = rate || 25;
-	if(accel) {
-		if(dojo.lang.isFunction(accel.getValue)) {
-			this.accel = accel;
-		} else {
-			var i = 0.35*accel+0.5;	// 0.15 <= i <= 0.85
-			this.accel = new dojo.math.curves.CatmullRom([[0], [i], [1]], 0.45);
-		}
-	}
-}
-dojo.lang.extend(dojo.animation.Animation, {
-	// public properties
-	curve: null,
-	duration: 0,
-	repeatCount: 0,
-	accel: null,
-
-	// events
-	onBegin: null,
-	onAnimate: null,
-	onEnd: null,
-	onPlay: null,
-	onPause: null,
-	onStop: null,
-	handler: null,
-
-	// "private" properties
-	_animSequence: null,
-	_startTime: null,
-	_endTime: null,
-	_lastFrame: null,
-	_timer: null,
-	_percent: 0,
-	_active: false,
-	_paused: false,
-	_startRepeatCount: 0,
-
-	// public methods
-	play: function(gotoStart) {
-		if( gotoStart ) {
-			clearTimeout(this._timer);
-			this._active = false;
-			this._paused = false;
-			this._percent = 0;
-		} else if( this._active && !this._paused ) {
-			return;
-		}
-
-		this._startTime = new Date().valueOf();
-		if( this._paused ) {
-			this._startTime -= (this.duration * this._percent / 100);
-		}
-		this._endTime = this._startTime + this.duration;
-		this._lastFrame = this._startTime;
-
-		var e = new dojo.animation.AnimationEvent(this, null, this.curve.getValue(this._percent),
-			this._startTime, this._startTime, this._endTime, this.duration, this._percent, 0);
-
-		this._active = true;
-		this._paused = false;
-
-		if( this._percent == 0 ) {
-			if(!this._startRepeatCount) {
-				this._startRepeatCount = this.repeatCount;
-			}
-			e.type = "begin";
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onBegin == "function") { this.onBegin(e); }
-		}
-
-		e.type = "play";
-		if(typeof this.handler == "function") { this.handler(e); }
-		if(typeof this.onPlay == "function") { this.onPlay(e); }
-
-		if(this._animSequence) { this._animSequence._setCurrent(this); }
-
-		//dojo.lang.hitch(this, cycle)();
-		this._cycle();
-	},
-
-	pause: function() {
-		clearTimeout(this._timer);
-		if( !this._active ) { return; }
-		this._paused = true;
-		var e = new dojo.animation.AnimationEvent(this, "pause", this.curve.getValue(this._percent),
-			this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent, 0);
-		if(typeof this.handler == "function") { this.handler(e); }
-		if(typeof this.onPause == "function") { this.onPause(e); }
-	},
-
-	playPause: function() {
-		if( !this._active || this._paused ) {
-			this.play();
-		} else {
-			this.pause();
-		}
-	},
-
-	gotoPercent: function(pct, andPlay) {
-		clearTimeout(this._timer);
-		this._active = true;
-		this._paused = true;
-		this._percent = pct;
-		if( andPlay ) { this.play(); }
-	},
-
-	stop: function(gotoEnd) {
-		clearTimeout(this._timer);
-		var step = this._percent / 100;
-		if( gotoEnd ) {
-			step = 1;
-		}
-		var e = new dojo.animation.AnimationEvent(this, "stop", this.curve.getValue(step),
-			this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent, Math.round(fps));
-		if(typeof this.handler == "function") { this.handler(e); }
-		if(typeof this.onStop == "function") { this.onStop(e); }
-		this._active = false;
-		this._paused = false;
-	},
-
-	status: function() {
-		if( this._active ) {
-			return this._paused ? "paused" : "playing";
-		} else {
-			return "stopped";
-		}
-	},
-
-	// "private" methods
-	_cycle: function() {
-		clearTimeout(this._timer);
-		if( this._active ) {
-			var curr = new Date().valueOf();
-			var step = (curr - this._startTime) / (this._endTime - this._startTime);
-			fps = 1000 / (curr - this._lastFrame);
-			this._lastFrame = curr;
-
-			if( step >= 1 ) {
-				step = 1;
-				this._percent = 100;
-			} else {
-				this._percent = step * 100;
-			}
-			
-			// Perform accelleration
-			if(this.accel && this.accel.getValue) {
-				step = this.accel.getValue(step);
-			}
-
-			var e = new dojo.animation.AnimationEvent(this, "animate", this.curve.getValue(step),
-				this._startTime, curr, this._endTime, this.duration, this._percent, Math.round(fps));
-
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onAnimate == "function") { this.onAnimate(e); }
-
-			if( step < 1 ) {
-				this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate);
-			} else {
-				e.type = "end";
-				this._active = false;
-				if(typeof this.handler == "function") { this.handler(e); }
-				if(typeof this.onEnd == "function") { this.onEnd(e); }
-
-				if( this.repeatCount > 0 ) {
-					this.repeatCount--;
-					this.play(true);
-				} else if( this.repeatCount == -1 ) {
-					this.play(true);
-				} else {
-					if(this._startRepeatCount) {
-						this.repeatCount = this._startRepeatCount;
-						this._startRepeatCount = 0;
-					}
-					if( this._animSequence ) {
-						this._animSequence._playNext();
-					}
-				}
-			}
-		}
-	}
-});
-
-dojo.animation.AnimationEvent = function(anim, type, coords, sTime, cTime, eTime, dur, pct, fps) {
-	this.type = type; // "animate", "begin", "end", "play", "pause", "stop"
-	this.animation = anim;
-
-	this.coords = coords;
-	this.x = coords[0];
-	this.y = coords[1];
-	this.z = coords[2];
-
-	this.startTime = sTime;
-	this.currentTime = cTime;
-	this.endTime = eTime;
-
-	this.duration = dur;
-	this.percent = pct;
-	this.fps = fps;
-};
-dojo.lang.extend(dojo.animation.AnimationEvent, {
-	coordsAsInts: function() {
-		var cints = new Array(this.coords.length);
-		for(var i = 0; i < this.coords.length; i++) {
-			cints[i] = Math.round(this.coords[i]);
-		}
-		return cints;
-	}
-});
-
-dojo.animation.AnimationSequence = function(repeatCount){
-	this._anims = [];
-	this.repeatCount = repeatCount || 0;
-}
-
-dojo.lang.extend(dojo.animation.AnimationSequence, {
-	repeateCount: 0,
-
-	_anims: [],
-	_currAnim: -1,
-
-	onBegin: null,
-	onEnd: null,
-	onNext: null,
-	handler: null,
-
-	add: function() {
-		for(var i = 0; i < arguments.length; i++) {
-			this._anims.push(arguments[i]);
-			arguments[i]._animSequence = this;
-		}
-	},
-
-	remove: function(anim) {
-		for(var i = 0; i < this._anims.length; i++) {
-			if( this._anims[i] == anim ) {
-				this._anims[i]._animSequence = null;
-				this._anims.splice(i, 1);
-				break;
-			}
-		}
-	},
-
-	removeAll: function() {
-		for(var i = 0; i < this._anims.length; i++) {
-			this._anims[i]._animSequence = null;
-		}
-		this._anims = [];
-		this._currAnim = -1;
-	},
-
-	clear: function() {
-		this.removeAll();
-	},
-
-	play: function(gotoStart) {
-		if( this._anims.length == 0 ) { return; }
-		if( gotoStart || !this._anims[this._currAnim] ) {
-			this._currAnim = 0;
-		}
-		if( this._anims[this._currAnim] ) {
-			if( this._currAnim == 0 ) {
-				var e = {type: "begin", animation: this._anims[this._currAnim]};
-				if(typeof this.handler == "function") { this.handler(e); }
-				if(typeof this.onBegin == "function") { this.onBegin(e); }
-			}
-			this._anims[this._currAnim].play(gotoStart);
-		}
-	},
-
-	pause: function() {
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].pause();
-		}
-	},
-
-	playPause: function() {
-		if( this._anims.length == 0 ) { return; }
-		if( this._currAnim == -1 ) { this._currAnim = 0; }
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].playPause();
-		}
-	},
-
-	stop: function() {
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].stop();
-		}
-	},
-
-	status: function() {
-		if( this._anims[this._currAnim] ) {
-			return this._anims[this._currAnim].status();
-		} else {
-			return "stopped";
-		}
-	},
-
-	_setCurrent: function(anim) {
-		for(var i = 0; i < this._anims.length; i++) {
-			if( this._anims[i] == anim ) {
-				this._currAnim = i;
-				break;
-			}
-		}
-	},
-
-	_playNext: function() {
-		if( this._currAnim == -1 || this._anims.length == 0 ) { return; }
-		this._currAnim++;
-		if( this._anims[this._currAnim] ) {
-			var e = {type: "next", animation: this._anims[this._currAnim]};
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onNext == "function") { this.onNext(e); }
-			this._anims[this._currAnim].play(true);
-		} else {
-			var e = {type: "end", animation: this._anims[this._anims.length-1]};
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onEnd == "function") { this.onEnd(e); }
-			if(this.repeatCount > 0) {
-				this._currAnim = 0;
-				this.repeatCount--;
-				this._anims[this._currAnim].play(true);
-			} else if(this.repeatCount == -1) {
-				this._currAnim = 0;
-				this._anims[this._currAnim].play(true);
-			} else {
-				this._currAnim = -1;
-			}
-		}
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/animation/Timer.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/animation/Timer.js
deleted file mode 100644
index 335d243..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/animation/Timer.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.animation.Timer");
-dojo.require("dojo.lang");
-
-dojo.animation.Timer = function(intvl){
-	var timer = null;
-	this.isRunning = false;
-	this.interval = intvl;
-
-	this.onTick = function(){};
-	this.onStart = null;
-	this.onStop = null;
-
-	this.setInterval = function(ms){
-		if (this.isRunning) window.clearInterval(timer);
-		this.interval = ms;
-		if (this.isRunning) timer = window.setInterval(dojo.lang.hitch(this, "onTick"), this.interval);
-	};
-
-	this.start = function(){
-		if (typeof this.onStart == "function") this.onStart();
-		this.isRunning = true;
-		timer = window.setInterval(this.onTick, this.interval);
-	};
-	this.stop = function(){
-		if (typeof this.onStop == "function") this.onStop();
-		this.isRunning = false;
-		window.clearInterval(timer);
-	};
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/animation/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/animation/__package__.js
deleted file mode 100644
index 7e3a9cd..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/animation/__package__.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.animation.Animation", false, false]
-});
-dojo.hostenv.moduleLoaded("dojo.animation.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/bootstrap1.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/bootstrap1.js
deleted file mode 100644
index 071af45..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/bootstrap1.js
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/**
-* @file bootstrap1.js
-*
-* bootstrap file that runs before hostenv_*.js file.
-*
-* @author Copyright 2004 Mark D. Anderson (mda@discerning.com)
-* @author Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php
-*
-* $Id: bootstrap1.js 2836 2006-01-16 08:36:18Z alex $
-*/
-
-/**
- * The global djConfig can be set prior to loading the library, to override
- * certain settings.  It does not exist under dojo.* so that it can be set
- * before the dojo variable exists. Setting any of these variables *after* the
- * library has loaded does nothing at all. The variables that can be set are
- * as follows:
- */
-
-/**
- * dj_global is an alias for the top-level global object in the host
- * environment (the "window" object in a browser).
- */
-var dj_global = this; //typeof window == 'undefined' ? this : window;
-
-function dj_undef(name, obj){
-	if(!obj){ obj = dj_global; }
-	return (typeof obj[name] == "undefined");
-}
-
-if(dj_undef("djConfig")){
-	var djConfig = {};
-}
-
-/**
- * dojo is the root variable of (almost all) our public symbols.
- */
-var dojo;
-if(dj_undef("dojo")){ dojo = {}; }
-
-dojo.version = {
-	major: 0, minor: 2, patch: 2, flag: "",
-	revision: Number("$Rev: 2836 $".match(/[0-9]+/)[0]),
-	toString: function() {
-		with (dojo.version) {
-			return major + "." + minor + "." + patch + flag + " (" + revision + ")";
-		}
-	}
-};
-
-/*
- * evaluate a string like "A.B" without using eval.
- */
-dojo.evalObjPath = function(objpath, create){
-	// fast path for no periods
-	if(typeof objpath != "string"){ return dj_global; }
-	if(objpath.indexOf('.') == -1){
-		if((dj_undef(objpath, dj_global))&&(create)){
-			dj_global[objpath] = {};
-		}
-		return dj_global[objpath];
-	}
-
-	var syms = objpath.split(/\./);
-	var obj = dj_global;
-	for(var i=0;i<syms.length;++i){
-		if(!create){
-			obj = obj[syms[i]];
-			if((typeof obj == 'undefined')||(!obj)){
-				return obj;
-			}
-		}else{
-			if(dj_undef(syms[i], obj)){
-				obj[syms[i]] = {};
-			}
-			obj = obj[syms[i]];
-		}
-	}
-	return obj;
-};
-
-
-// ****************************************************************
-// global public utils
-// ****************************************************************
-
-/*
- * utility to print an Error. 
- * TODO: overriding Error.prototype.toString won't accomplish this?
- * ... since natively generated Error objects do not always reflect such things?
- */
-dojo.errorToString = function(excep){
-	return ((!dj_undef("message", excep)) ? excep.message : (dj_undef("description", excep) ? excep : excep.description ));
-};
-
-/**
-* Throws an Error object given the string err. For now, will also do a println
-* to the user first.
-*/
-dojo.raise = function(message, excep){
-	if(excep){
-		message = message + ": "+dojo.errorToString(excep);
-	}
-	var he = dojo.hostenv;
-	if((!dj_undef("hostenv", dojo))&&(!dj_undef("println", dojo.hostenv))){ 
-		dojo.hostenv.println("FATAL: " + message);
-	}
-	throw Error(message);
-};
-
-dj_throw = dj_rethrow = function(m, e){
-	dojo.deprecated("dj_throw and dj_rethrow deprecated, use dojo.raise instead");
-	dojo.raise(m, e);
-};
-
-/**
- * Produce a line of debug output. 
- * Does nothing unless djConfig.isDebug is true.
- * varargs, joined with ''.
- * Caller should not supply a trailing "\n".
- */
-dojo.debug = function(){
-	if (!djConfig.isDebug) { return; }
-	var args = arguments;
-	if(dj_undef("println", dojo.hostenv)){
-		dojo.raise("dojo.debug not available (yet?)");
-	}
-	var isJUM = dj_global["jum"] && !dj_global["jum"].isBrowser;
-	var s = [(isJUM ? "": "DEBUG: ")];
-	for(var i=0;i<args.length;++i){
-		if(!false && args[i] instanceof Error){
-			var msg = "[" + args[i].name + ": " + dojo.errorToString(args[i]) +
-				(args[i].fileName ? ", file: " + args[i].fileName : "") +
-				(args[i].lineNumber ? ", line: " + args[i].lineNumber : "") + "]";
-		} else {
-			try {
-				var msg = String(args[i]);
-			} catch(e) {
-				if(dojo.render.html.ie) {
-					var msg = "[ActiveXObject]";
-				} else {
-					var msg = "[unknown]";
-				}
-			}
-		}
-		s.push(msg);
-	}
-	if(isJUM){ // this seems to be the only way to get JUM to "play nice"
-		jum.debug(s.join(" "));
-	}else{
-		dojo.hostenv.println(s.join(" "));
-	}
-}
-
-/**
- * this is really hacky for now - just 
- * display the properties of the object
-**/
-
-dojo.debugShallow = function(obj){
-	if (!djConfig.isDebug) { return; }
-	dojo.debug('------------------------------------------------------------');
-	dojo.debug('Object: '+obj);
-	for(i in obj){
-		dojo.debug(i + ': ' + obj[i]);
-	}
-	dojo.debug('------------------------------------------------------------');
-}
-
-var dj_debug = dojo.debug;
-
-/**
- * We put eval() in this separate function to keep down the size of the trapped
- * evaluation context.
- *
- * Note that:
- * - JSC eval() takes an optional second argument which can be 'unsafe'.
- * - Mozilla/SpiderMonkey eval() takes an optional second argument which is the
- *   scope object for new symbols.
-*/
-function dj_eval(s){ return dj_global.eval ? dj_global.eval(s) : eval(s); }
-
-
-/**
- * Convenience for throwing an exception because some function is not
- * implemented.
- */
-dj_unimplemented = dojo.unimplemented = function(funcname, extra){
-	// FIXME: need to move this away from dj_*
-	var mess = "'" + funcname + "' not implemented";
-	if((!dj_undef(extra))&&(extra)){ mess += " " + extra; }
-	dojo.raise(mess);
-}
-
-/**
- * Convenience for informing of deprecated behaviour.
- */
-dj_deprecated = dojo.deprecated = function(behaviour, extra, removal){
-	var mess = "DEPRECATED: " + behaviour;
-	if(extra){ mess += " " + extra; }
-	if(removal){ mess += " -- will be removed in version: " + removal; }
-	dojo.debug(mess);
-}
-
-/**
- * Does inheritance
- */
-dojo.inherits = function(subclass, superclass){
-	if(typeof superclass != 'function'){ 
-		dojo.raise("superclass: "+superclass+" borken");
-	}
-	subclass.prototype = new superclass();
-	subclass.prototype.constructor = subclass;
-	subclass.superclass = superclass.prototype;
-	// DEPRICATED: super is a reserved word, use 'superclass'
-	subclass['super'] = superclass.prototype;
-}
-
-dj_inherits = function(subclass, superclass){
-	dojo.deprecated("dj_inherits deprecated, use dojo.inherits instead");
-	dojo.inherits(subclass, superclass);
-}
-
-// an object that authors use determine what host we are running under
-dojo.render = (function(){
-
-	function vscaffold(prefs, names){
-		var tmp = {
-			capable: false,
-			support: {
-				builtin: false,
-				plugin: false
-			},
-			prefixes: prefs
-		};
-		for(var x in names){
-			tmp[x] = false;
-		}
-		return tmp;
-	}
-
-	return {
-		name: "",
-		ver: dojo.version,
-		os: { win: false, linux: false, osx: false },
-		html: vscaffold(["html"], ["ie", "opera", "khtml", "safari", "moz"]),
-		svg: vscaffold(["svg"], ["corel", "adobe", "batik"]),
-		vml: vscaffold(["vml"], ["ie"]),
-		swf: vscaffold(["Swf", "Flash", "Mm"], ["mm"]),
-		swt: vscaffold(["Swt"], ["ibm"])
-	};
-})();
-
-// ****************************************************************
-// dojo.hostenv methods that must be defined in hostenv_*.js
-// ****************************************************************
-
-/**
- * The interface definining the interaction with the EcmaScript host environment.
-*/
-
-/*
- * None of these methods should ever be called directly by library users.
- * Instead public methods such as loadModule should be called instead.
- */
-dojo.hostenv = (function(){
-
-	// default configuration options
-	var config = {
-		isDebug: false,
-		allowQueryConfig: false,
-		baseScriptUri: "",
-		baseRelativePath: "",
-		libraryScriptUri: "",
-		iePreventClobber: false,
-		ieClobberMinimal: true,
-		preventBackButtonFix: true,
-		searchIds: [],
-		parseWidgets: true
-	};
-
-	if (typeof djConfig == "undefined") { djConfig = config; }
-	else {
-		for (var option in config) {
-			if (typeof djConfig[option] == "undefined") {
-				djConfig[option] = config[option];
-			}
-		}
-	}
-
-	var djc = djConfig;
-	function _def(obj, name, def){
-		return (dj_undef(name, obj) ? def : obj[name]);
-	}
-
-	return {
-		name_: '(unset)',
-		version_: '(unset)',
-		pkgFileName: "__package__",
-
-		// for recursion protection
-		loading_modules_: {},
-		loaded_modules_: {},
-		addedToLoadingCount: [],
-		removedFromLoadingCount: [],
-		inFlightCount: 0,
-		// FIXME: it should be possible to pull module prefixes in from djConfig
-		modulePrefixes_: {
-			dojo: {name: "dojo", value: "src"}
-		},
-
-
-		setModulePrefix: function(module, prefix){
-			this.modulePrefixes_[module] = {name: module, value: prefix};
-		},
-
-		getModulePrefix: function(module){
-			var mp = this.modulePrefixes_;
-			if((mp[module])&&(mp[module]["name"])){
-				return mp[module].value;
-			}
-			return module;
-		},
-
-		getTextStack: [],
-		loadUriStack: [],
-		loadedUris: [],
-		// lookup cache for modules.
-		// NOTE: this is partially redundant a private variable in the jsdown
-		// implementation, but we don't want to couple the two.
-		// modules_ : {},
-		post_load_: false,
-		modulesLoadedListeners: [],
-		/**
-		 * Return the name of the hostenv.
-		 */
-		getName: function(){ return this.name_; },
-
-		/**
-		* Return the version of the hostenv.
-		*/
-		getVersion: function(){ return this.version_; },
-
-		/**
-		 * Read the plain/text contents at the specified uri.  If getText() is
-		 * not implemented, then it is necessary to override loadUri() with an
-		 * implementation that doesn't rely on it.
-		 */
-		getText: function(uri){
-			dojo.unimplemented('getText', "uri=" + uri);
-		},
-
-		/**
-		 * return the uri of the script that defined this function
-		 * private method that must be implemented by the hostenv.
-		 */
-		getLibraryScriptUri: function(){
-			// FIXME: need to implement!!!
-			dojo.unimplemented('getLibraryScriptUri','');
-		}
-	};
-})();
-
-/**
- * Display a line of text to the user.
- * The line argument should not contain a trailing "\n"; that is added by the
- * implementation.
- */
-//dojo.hostenv.println = function(line) {}
-
-// ****************************************************************
-// dojo.hostenv methods not defined in hostenv_*.js
-// ****************************************************************
-
-/**
- * Return the base script uri that other scripts are found relative to.
- * It is either the empty string, or a non-empty string ending in '/'.
- */
-dojo.hostenv.getBaseScriptUri = function(){
-	if(djConfig.baseScriptUri.length){ 
-		return djConfig.baseScriptUri;
-	}
-	var uri = new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-	if (!uri) { dojo.raise("Nothing returned by getLibraryScriptUri(): " + uri); }
-
-	var lastslash = uri.lastIndexOf('/');
-	djConfig.baseScriptUri = djConfig.baseRelativePath;
-	return djConfig.baseScriptUri;
-}
-
-/**
-* Set the base script uri.
-*/
-// In JScript .NET, see interface System._AppDomain implemented by
-// System.AppDomain.CurrentDomain. Members include AppendPrivatePath,
-// RelativeSearchPath, BaseDirectory.
-dojo.hostenv.setBaseScriptUri = function(uri){ djConfig.baseScriptUri = uri }
-
-/**
- * Loads and interprets the script located at relpath, which is relative to the
- * script root directory.  If the script is found but its interpretation causes
- * a runtime exception, that exception is not caught by us, so the caller will
- * see it.  We return a true value if and only if the script is found.
- *
- * For now, we do not have an implementation of a true search path.  We
- * consider only the single base script uri, as returned by getBaseScriptUri().
- *
- * @param relpath A relative path to a script (no leading '/', and typically
- * ending in '.js').
- * @param module A module whose existance to check for after loading a path.
- * Can be used to determine success or failure of the load.
- */
-dojo.hostenv.loadPath = function(relpath, module /*optional*/, cb /*optional*/){
-	if((relpath.charAt(0) == '/')||(relpath.match(/^\w+:/))){
-		dojo.raise("relpath '" + relpath + "'; must be relative");
-	}
-	var uri = this.getBaseScriptUri() + relpath;
-	if(djConfig.cacheBust && dojo.render.html.capable) { uri += "?" + String(djConfig.cacheBust).replace(/\W+/g,""); }
-	try{
-		return ((!module) ? this.loadUri(uri, cb) : this.loadUriAndCheck(uri, module, cb));
-	}catch(e){
-		dojo.debug(e);
-		return false;
-	}
-}
-
-/**
- * Reads the contents of the URI, and evaluates the contents.
- * Returns true if it succeeded. Returns false if the URI reading failed.
- * Throws if the evaluation throws.
- * The result of the eval is not available to the caller.
- */
-dojo.hostenv.loadUri = function(uri, cb){
-	if(this.loadedUris[uri]){
-		return;
-	}
-	var contents = this.getText(uri, null, true);
-	if(contents == null){ return 0; }
-	this.loadedUris[uri] = true;
-	var value = dj_eval(contents);
-	return 1;
-}
-
-// FIXME: probably need to add logging to this method
-dojo.hostenv.loadUriAndCheck = function(uri, module, cb){
-	var ok = true;
-	try{
-		ok = this.loadUri(uri, cb);
-	}catch(e){
-		dojo.debug("failed loading ", uri, " with error: ", e);
-	}
-	return ((ok)&&(this.findModule(module, false))) ? true : false;
-}
-
-dojo.loaded = function(){ }
-
-dojo.hostenv.loaded = function(){
-	this.post_load_ = true;
-	var mll = this.modulesLoadedListeners;
-	for(var x=0; x<mll.length; x++){
-		mll[x]();
-	}
-	dojo.loaded();
-}
-
-/*
-Call styles:
-	dojo.addOnLoad(functionPointer)
-	dojo.addOnLoad(object, "functionName")
-*/
-dojo.addOnLoad = function(obj, fcnName) {
-	if(arguments.length == 1) {
-		dojo.hostenv.modulesLoadedListeners.push(obj);
-	} else if(arguments.length > 1) {
-		dojo.hostenv.modulesLoadedListeners.push(function() {
-			obj[fcnName]();
-		});
-	}
-};
-
-dojo.hostenv.modulesLoaded = function(){
-	if(this.post_load_){ return; }
-	if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){
-		if(this.inFlightCount > 0){ 
-			dojo.debug("files still in flight!");
-			return;
-		}
-		if(typeof setTimeout == "object"){
-			setTimeout("dojo.hostenv.loaded();", 0);
-		}else{
-			dojo.hostenv.loaded();
-		}
-	}
-}
-
-dojo.hostenv.moduleLoaded = function(modulename){
-	var modref = dojo.evalObjPath((modulename.split(".").slice(0, -1)).join('.'));
-	this.loaded_modules_[(new String(modulename)).toLowerCase()] = modref;
-}
-
-/**
-* loadModule("A.B") first checks to see if symbol A.B is defined. 
-* If it is, it is simply returned (nothing to do).
-*
-* If it is not defined, it will look for "A/B.js" in the script root directory,
-* followed by "A.js".
-*
-* It throws if it cannot find a file to load, or if the symbol A.B is not
-* defined after loading.
-*
-* It returns the object A.B.
-*
-* This does nothing about importing symbols into the current package.
-* It is presumed that the caller will take care of that. For example, to import
-* all symbols:
-*
-*    with (dojo.hostenv.loadModule("A.B")) {
-*       ...
-*    }
-*
-* And to import just the leaf symbol:
-*
-*    var B = dojo.hostenv.loadModule("A.B");
-*    ...
-*
-* dj_load is an alias for dojo.hostenv.loadModule
-*/
-dojo.hostenv._global_omit_module_check = false;
-dojo.hostenv.loadModule = function(modulename, exact_only, omit_module_check){
-	if(!modulename){ return; }
-	omit_module_check = this._global_omit_module_check || omit_module_check;
-	var module = this.findModule(modulename, false);
-	if(module){
-		return module;
-	}
-
-	// protect against infinite recursion from mutual dependencies
-	if(dj_undef(modulename, this.loading_modules_)){
-		this.addedToLoadingCount.push(modulename);
-	}
-	this.loading_modules_[modulename] = 1;
-
-	// convert periods to slashes
-	var relpath = modulename.replace(/\./g, '/') + '.js';
-
-	var syms = modulename.split(".");
-	var nsyms = modulename.split(".");
-	for (var i = syms.length - 1; i > 0; i--) {
-		var parentModule = syms.slice(0, i).join(".");
-		var parentModulePath = this.getModulePrefix(parentModule);
-		if (parentModulePath != parentModule) {
-			syms.splice(0, i, parentModulePath);
-			break;
-		}
-	}
-	var last = syms[syms.length - 1];
-	// figure out if we're looking for a full package, if so, we want to do
-	// things slightly diffrently
-	if(last=="*"){
-		modulename = (nsyms.slice(0, -1)).join('.');
-
-		while(syms.length){
-			syms.pop();
-			syms.push(this.pkgFileName);
-			relpath = syms.join("/") + '.js';
-			if(relpath.charAt(0)=="/"){
-				relpath = relpath.slice(1);
-			}
-			ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));
-			if(ok){ break; }
-			syms.pop();
-		}
-	}else{
-		relpath = syms.join("/") + '.js';
-		modulename = nsyms.join('.');
-		var ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));
-		if((!ok)&&(!exact_only)){
-			syms.pop();
-			while(syms.length){
-				relpath = syms.join('/') + '.js';
-				ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));
-				if(ok){ break; }
-				syms.pop();
-				relpath = syms.join('/') + '/'+this.pkgFileName+'.js';
-				if(relpath.charAt(0)=="/"){
-					relpath = relpath.slice(1);
-				}
-				ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));
-				if(ok){ break; }
-			}
-		}
-
-		if((!ok)&&(!omit_module_check)){
-			dojo.raise("Could not load '" + modulename + "'; last tried '" + relpath + "'");
-		}
-	}
-
-	// check that the symbol was defined
-	if(!omit_module_check){
-		// pass in false so we can give better error
-		module = this.findModule(modulename, false);
-		if(!module){
-			dojo.raise("symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); 
-		}
-	}
-
-	return module;
-}
-
-/**
-* startPackage("A.B") follows the path, and at each level creates a new empty
-* object or uses what already exists. It returns the result.
-*/
-dojo.hostenv.startPackage = function(packname){
-	var syms = packname.split(/\./);
-	if(syms[syms.length-1]=="*"){
-		syms.pop();
-	}
-	return dojo.evalObjPath(syms.join("."), true);
-}
-
-/**
- * findModule("A.B") returns the object A.B if it exists, otherwise null.
- * @param modulename A string like 'A.B'.
- * @param must_exist Optional, defualt false. throw instead of returning null
- * if the module does not currently exist.
- */
-dojo.hostenv.findModule = function(modulename, must_exist) {
-	// check cache
-	/*
-	if(!dj_undef(modulename, this.modules_)){
-		return this.modules_[modulename];
-	}
-	*/
-
-	var lmn = (new String(modulename)).toLowerCase();
-
-	if(this.loaded_modules_[lmn]){
-		return this.loaded_modules_[lmn];
-	}
-
-	// see if symbol is defined anyway
-	var module = dojo.evalObjPath(modulename);
-	if((modulename)&&(typeof module != 'undefined')&&(module)){
-		this.loaded_modules_[lmn] = module;
-		return module;
-	}
-
-	if(must_exist){
-		dojo.raise("no loaded module named '" + modulename + "'");
-	}
-	return null;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/bootstrap2.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/bootstrap2.js
deleted file mode 100644
index 488c24a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/bootstrap2.js
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
- * bootstrap2.js - runs after the hostenv_*.js file.
- */
-
-/*
- * This method taks a "map" of arrays which one can use to optionally load dojo
- * modules. The map is indexed by the possible dojo.hostenv.name_ values, with
- * two additional values: "default" and "common". The items in the "default"
- * array will be loaded if none of the other items have been choosen based on
- * the hostenv.name_ item. The items in the "common" array will _always_ be
- * loaded, regardless of which list is chosen.  Here's how it's normally
- * called:
- *
- *	dojo.hostenv.conditionalLoadModule({
- *		browser: [
- *			["foo.bar.baz", true, true], // an example that passes multiple args to loadModule()
- *			"foo.sample.*",
- *			"foo.test,
- *		],
- *		default: [ "foo.sample.*" ],
- *		common: [ "really.important.module.*" ]
- *	});
- */
-dojo.hostenv.conditionalLoadModule = function(modMap){
-	var common = modMap["common"]||[];
-	var result = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]);
-
-	for(var x=0; x<result.length; x++){
-		var curr = result[x];
-		if(curr.constructor == Array){
-			dojo.hostenv.loadModule.apply(dojo.hostenv, curr);
-		}else{
-			dojo.hostenv.loadModule(curr);
-		}
-	}
-}
-
-dojo.hostenv.require = dojo.hostenv.loadModule;
-dojo.require = function(){
-	dojo.hostenv.loadModule.apply(dojo.hostenv, arguments);
-}
-dojo.requireAfter = dojo.require;
-
-dojo.requireIf = function(){
-	if((arguments[0] === true)||(arguments[0]=="common")||(dojo.render[arguments[0]].capable)){
-		var args = [];
-		for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
-		dojo.require.apply(dojo, args);
-	}
-}
-
-dojo.requireAfterIf = dojo.requireIf;
-dojo.conditionalRequire = dojo.requireIf;
-
-dojo.kwCompoundRequire = function(){
-	dojo.hostenv.conditionalLoadModule.apply(dojo.hostenv, arguments);
-}
-
-dojo.hostenv.provide = dojo.hostenv.startPackage;
-dojo.provide = function(){
-	return dojo.hostenv.startPackage.apply(dojo.hostenv, arguments);
-}
-
-dojo.setModulePrefix = function(module, prefix){
-	return dojo.hostenv.setModulePrefix(module, prefix);
-}
-
-// stub
-dojo.profile = { start: function(){}, end: function(){}, dump: function(){} };
-
-// determine if an object supports a given method
-// useful for longer api chains where you have to test each object in the chain
-dojo.exists = function(obj, name){
-	var p = name.split(".");
-	for(var i = 0; i < p.length; i++){
-	if(!(obj[p[i]])) return false;
-		obj = obj[p[i]];
-	}
-	return true;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/browser_debug.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/browser_debug.js
deleted file mode 100644
index 7290c89..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/browser_debug.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.loadedUris.push("../src/bootstrap1.js");
-dojo.hostenv.loadedUris.push("../src/hostenv_browser.js");
-dojo.hostenv.loadedUris.push("../src/bootstrap2.js");
-
-function removeComments(contents){
-	contents = new String((!contents) ? "" : contents);
-	// clobber all comments
-	contents = contents.replace( /^(.*?)\/\/(.*)$/mg , "$1");
-	contents = contents.replace( /(\n)/mg , "__DOJONEWLINE");
-	contents = contents.replace( /\/\*(.*?)\*\//g , "");
-	return contents.replace( /__DOJONEWLINE/mg , "\n");
-}
-
-dojo.hostenv.getRequiresAndProvides = function(contents){
-	// FIXME: should probably memoize this!
-	if(!contents){ return []; }
-
-	// check to see if we need to load anything else first. Ugg.
-	var deps = [];
-	var tmp;
-	RegExp.lastIndex = 0;
-	var testExp = /dojo.(hostenv.loadModule|hosetnv.require|require|requireIf|hostenv.conditionalLoadModule|hostenv.startPackage|hostenv.provide|provide)\([\w\W]*?\)/mg;
-	while((tmp = testExp.exec(contents)) != null){
-		deps.push(tmp[0]);
-	}
-	return deps;
-}
-
-dojo.hostenv.getDelayRequiresAndProvides = function(contents){
-	// FIXME: should probably memoize this!
-	if(!contents){ return []; }
-
-	// check to see if we need to load anything else first. Ugg.
-	var deps = [];
-	var tmp;
-	RegExp.lastIndex = 0;
-	var testExp = /dojo.(requireAfterIf|requireAfter)\([\w\W]*?\)/mg;
-	while((tmp = testExp.exec(contents)) != null){
-		deps.push(tmp[0]);
-	}
-	return deps;
-}
-
-/*
-dojo.getNonExistantDescendants = function(objpath){
-	var ret = [];
-	// fast path for no periods
-	if(typeof objpath != "string"){ return dj_global; }
-	if(objpath.indexOf('.') == -1){
-		if(dj_undef(objpath, dj_global)){
-			ret.push[objpath];
-		}
-		return ret;
-	}
-
-	var syms = objpath.split(/\./);
-	var obj = dj_global;
-	for(var i=0;i<syms.length;++i){
-		if(dj_undef(syms[i], obj)){
-			for(var j=i; j<syms.length; j++){
-				ret.push(syms.slice(0, j+1).join("."));
-			}
-			break;
-		}
-	}
-	return ret;
-}
-*/
-
-dojo.clobberLastObject = function(objpath){
-	if(objpath.indexOf('.') == -1){
-		if(!dj_undef(objpath, dj_global)){
-			delete dj_global[objpath];
-		}
-		return true;
-	}
-
-	var syms = objpath.split(/\./);
-	var base = dojo.evalObjPath(syms.slice(0, -1).join("."), false);
-	var child = syms[syms.length-1];
-	if(!dj_undef(child, base)){
-		// alert(objpath);
-		delete base[child];
-		return true;
-	}
-	return false;
-}
-
-var removals = [];
-
-function zip(arr){
-	var ret = [];
-	var seen = {};
-	for(var x=0; x<arr.length; x++){
-		if(!seen[arr[x]]){
-			ret.push(arr[x]);
-			seen[arr[x]] = true;
-		}
-	}
-	return ret;
-}
-
-// over-write dj_eval to prevent actual loading of subsequent files
-var old_dj_eval = dj_eval;
-dj_eval = function(){ return true; }
-dojo.hostenv.oldLoadUri = dojo.hostenv.loadUri;
-dojo.hostenv.loadUri = function(uri){
-	if(dojo.hostenv.loadedUris[uri]){
-		return;
-	}
-	try{
-		var text = this.getText(uri, null, true);
-		var requires = dojo.hostenv.getRequiresAndProvides(text);
-		eval(requires.join(";"));
-		dojo.hostenv.loadedUris.push(uri);
-		dojo.hostenv.loadedUris[uri] = true;
-		var delayRequires = dojo.hostenv.getDelayRequiresAndProvides(text);
-		eval(delayRequires.join(";"));
-	}catch(e){ 
-		alert(e);
-	}
-	return true;
-}
-
-dojo.hostenv.writeIncludes = function(){
-	for(var x=removals.length-1; x>=0; x--){
-		dojo.clobberLastObject(removals[x]);
-	}
-	var depList = [];
-	var seen = {};
-	for(var x=0; x<dojo.hostenv.loadedUris.length; x++){
-		var curi = dojo.hostenv.loadedUris[x];
-		// dojo.debug(curi);
-		if(!seen[curi]){
-			seen[curi] = true;
-			depList.push(curi);
-		}
-	}
-
-	dojo.hostenv._global_omit_module_check = true;
-	for(var x=3; x<depList.length; x++){
-		document.write("<script type='text/javascript' src='"+depList[x]+"'></script>");
-	}
-	document.write("<script type='text/javascript'>dojo.hostenv._global_omit_module_check = false;</script>");
-	dj_eval = old_dj_eval;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/ArrayList.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/ArrayList.js
deleted file mode 100644
index 8fd51cf..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/ArrayList.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.ArrayList");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.ArrayList = function(arr){
-	var items = [];
-	if (arr) items = items.concat(arr);
-	this.count = items.length;
-	this.add = function(obj){
-		items.push(obj);
-		this.count = items.length;
-	};
-	this.addRange = function(a){
-		if (a.getIterator) {
-			var e = a.getIterator();
-			while (!e.atEnd) {
-				this.add(e.current);
-				e.moveNext();
-			}
-			this.count = items.length;
-		} else {
-			for (var i=0; i<a.length; i++){
-				items.push(a[i]);
-			}
-			this.count = items.length;
-		}
-	};
-	this.clear = function(){
-		items.splice(0, items.length);
-		this.count = 0;
-	};
-	this.clone = function(){
-		return new dojo.collections.ArrayList(items);
-	};
-	this.contains = function(obj){
-		for (var i = 0; i < items.length; i++){
-			if (items[i] == obj) {
-				return true;
-			}
-		}
-		return false;
-	};
-	this.getIterator = function(){
-		return new dojo.collections.Iterator(items);
-	};
-	this.indexOf = function(obj){
-		for (var i = 0; i < items.length; i++){
-			if (items[i] == obj) {
-				return i;
-			}
-		}
-		return -1;
-	};
-	this.insert = function(i, obj){
-		items.splice(i,0,obj);
-		this.count = items.length;
-	};
-	this.item = function(k){
-		return items[k];
-	};
-	this.remove = function(obj){
-		var i = this.indexOf(obj);
-		if (i >=0) {
-			items.splice(i,1);
-		}
-		this.count = items.length;
-	};
-	this.removeAt = function(i){
-		items.splice(i,1);
-		this.count = items.length;
-	};
-	this.reverse = function(){
-		items.reverse();
-	};
-	this.sort = function(fn){
-		if (fn){
-			items.sort(fn);
-		} else {
-			items.sort();
-		}
-	};
-	this.setByIndex = function(i, obj){
-		items[i]=obj;
-		this.count=items.length;
-	};
-	this.toArray = function(){
-		return [].concat(items);
-	}
-	this.toString = function(){
-		return items.join(",");
-	};
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/BinaryTree.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/BinaryTree.js
deleted file mode 100644
index 9166bc5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/BinaryTree.js
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.BinaryTree");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.BinaryTree = function(data){
-	function node(data, rnode, lnode){
-		this.value = data || null;
-		this.right = rnode || null;
-		this.left = lnode || null;
-		this.clone = function(){
-			var c = new node();
-			if (this.value.value) c.value = this.value.clone();
-			else c.value = this.value;
-			if (this.left) c.left = this.left.clone();
-			if (this.right) c.right = this.right.clone();
-		}
-		this.compare = function(n){
-			if (this.value > n.value) return 1;
-			if (this.value < n.value) return -1;
-			return 0;
-		}
-		this.compareData = function(d){
-			if (this.value > d) return 1;
-			if (this.value < d) return -1;
-			return 0;
-		}
-	}
-
-	function inorderTraversalBuildup(current, a){
-		if (current){
-			inorderTraversalBuildup(current.left, a);
-			a.add(current);
-			inorderTraversalBuildup(current.right, a);
-		}
-	}
-
-	function preorderTraversal(current, sep){
-		var s = "";
-		if (current){
-			s = current.value.toString() + sep;
-			s += preorderTraversal(current.left, sep);
-			s += preorderTraversal(current.right, sep);
-		}
-		return s;
-	}
-	function inorderTraversal(current, sep){
-		var s = "";
-		if (current){
-			s = inorderTraversal(current.left, sep);
-			s += current.value.toString() + sep;
-			s += inorderTraversal(current.right, sep);
-		}
-		return s;
-	}
-	function postorderTraversal(current, sep){
-		var s = "";
-		if (current){
-			s = postorderTraversal(current.left, sep);
-			s += postorderTraversal(current.right, sep);
-			s += current.value.toString() + sep;
-		}
-		return s;
-	}
-	
-	function searchHelper(current, data){
-		if (!current) return null;
-		var i = current.compareData(data);
-		if (i == 0) return current;
-		if (result > 0) return searchHelper(current.left, data);
-		else return searchHelper(current.right, data);
-	}
-
-	this.add = function(data){
-		var n = new node(data);
-		var i;
-		var current = root;
-		var parent = null;
-		while (current){
-			i = current.compare(n);
-			if (i == 0) return;
-			parent = current;
-			if (i > 0) current = current.left;
-			else current = current.right;
-		}
-		this.count++;
-		if (!parent) root = n;
-		else {
-			i = parent.compare(n);
-			if (i > 0) parent.left = n;
-			else parent.right = n;
-		}
-	};
-	this.clear = function(){
-		root = null;
-		this.count = 0;
-	};
-	this.clone = function(){
-		var c = new dojo.collections.BinaryTree();
-		c.root = root.clone();
-		c.count = this.count;
-		return c;
-	};
-	this.contains = function(data){
-		return this.search(data) != null;
-	};
-	this.deleteData = function(data){
-		var current = root;
-		var parent = null;
-		var i = current.compareData(data);
-		while (i != 0 && current != null){
-			if (i > 0){
-				parent = current;
-				current = current.left;
-			} else if (i < 0) {
-				parent = current;
-				current = current.right;
-			}
-			i = current.compareData(data);
-		}
-		if (!current) return;
-		this.count--;
-		if (!current.right) {
-			if (!parent) root = current.left;
-			else {
-				i = parent.compare(current);
-				if (i > 0) parent.left = current.left;
-				else if (i < 0) parent.right = current.left;
-			}
-		} else if (!current.right.left){
-			if (!parent) root = current.right;
-			else {
-				i = parent.compare(current);
-				if (i > 0) parent.left = current.right;
-				else if (i < 0) parent.right = current.right;
-			}
-		} else {
-			var leftmost = current.right.left;
-			var lmParent = current.right;
-			while (leftmost.left != null){
-				lmParent = leftmost;
-				leftmost = leftmost.left;
-			}
-			lmParent.left = leftmost.right;
-			leftmost.left = current.left;
-			leftmost.right = current.right;
-			if (!parent) root = leftmost;
-			else {
-				i = parent.compare(current);
-				if (i > 0) parent.left = leftmost;
-				else if (i < 0) parent.right = leftmost;
-			}
-		}
-	};
-	this.getIterator = function(){
-		var a = new ArrayList();
-		inorderTraversalBuildup(root, a);
-		return a.getIterator();
-	};
-	this.search = function(data){
-		return searchHelper(root, data);
-	};
-	this.toString = function(order, sep){
-		if (!order) var order = dojo.collections.BinaryTree.TraversalMethods.Inorder;
-		if (!sep) var sep = " ";
-		var s = "";
-		switch (order){
-			case dojo.collections.BinaryTree.TraversalMethods.Preorder:
-				s = preorderTraversal(root, sep);
-				break;
-			case dojo.collections.BinaryTree.TraversalMethods.Inorder:
-				s = inorderTraversal(root, sep);
-				break;
-			case dojo.collections.BinaryTree.TraversalMethods.Postorder:
-				s = postorderTraversal(root, sep);
-				break;
-		};
-		if (s.length == 0) return "";
-		else return s.substring(0, s.length - sep.length);
-	};
-
-	this.count = 0;
-	var root = this.root = null;
-	if (data) {
-		this.add(data);
-	}
-}
-dojo.collections.BinaryTree.TraversalMethods = {
-	Preorder : 0,
-	Inorder : 1,
-	Postorder : 2
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/ByteArray.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/ByteArray.js
deleted file mode 100644
index b04aaa2..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/ByteArray.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.ByteArray");
-dojo.require("dojo.collections.Collections");
-
-//	the following is an implementation of a 32 bit Byte Array.
-dojo.collections.ByteArray = function(s){
-
-
-
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Collections.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Collections.js
deleted file mode 100644
index 1a0e8bb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Collections.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Collections");
-
-dojo.collections = {Collections:true};
-dojo.collections.DictionaryEntry = function(k,v){
-	this.key = k;
-	this.value = v;
-	this.valueOf = function(){ return this.value; };
-	this.toString = function(){ return this.value; };
-}
-
-dojo.collections.Iterator = function(a){
-	var obj = a;
-	var position = 0;
-	this.atEnd = (position>=obj.length-1);
-	this.current = obj[position];
-	this.moveNext = function(){
-		if(++position>=obj.length){
-			this.atEnd = true;
-		}
-		if(this.atEnd){
-			return false;
-		}
-		this.current=obj[position];
-		return true;
-	}
-	this.reset = function(){
-		position = 0;
-		this.atEnd = false;
-		this.current = obj[position];
-	}
-}
-
-dojo.collections.DictionaryIterator = function(obj){
-	var arr = [] ;	//	Create an indexing array
-	for (var p in obj) arr.push(obj[p]) ;	//	fill it up
-	var position = 0 ;
-	this.atEnd = (position>=arr.length-1);
-	this.current = arr[position]||null ;
-	this.entry = this.current||null ;
-	this.key = (this.entry)?this.entry.key:null ;
-	this.value = (this.entry)?this.entry.value:null ;
-	this.moveNext = function() { 
-		if (++position>=arr.length) {
-			this.atEnd = true ;
-		}
-		if(this.atEnd){
-			return false;
-		}
-		this.entry = this.current = arr[position] ;
-		if (this.entry) {
-			this.key = this.entry.key ;
-			this.value = this.entry.value ;
-		}
-		return true;
-	} ;
-	this.reset = function() { 
-		position = 0 ; 
-		this.atEnd = false ;
-		this.current = arr[position]||null ;
-		this.entry = this.current||null ;
-		this.key = (this.entry)?this.entry.key:null ;
-		this.value = (this.entry)?this.entry.value:null ;
-	} ;
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Dictionary.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Dictionary.js
deleted file mode 100644
index 094078d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Dictionary.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Dictionary");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.Dictionary = function(dictionary){
-	var items = {};
-	this.count = 0;
-
-	this.add = function(k,v){
-		items[k] = new dojo.collections.DictionaryEntry(k,v);
-		this.count++;
-	};
-	this.clear = function(){
-		items = {};
-		this.count = 0;
-	};
-	this.clone = function(){
-		return new dojo.collections.Dictionary(this);
-	};
-	this.contains = this.containsKey = function(k){
-		return (items[k] != null);
-	};
-	this.containsValue = function(v){
-		var e = this.getIterator();
-		while (!e.atEnd) {
-			if (e.value == v) return true;
-			e.moveNext();
-		}
-		return false;
-	};
-	this.getKeyList = function(){
-		var arr = [];
-		var e = this.getIterator();
-		while (!e.atEnd) {
-			arr.push(e.key);
-			e.moveNext();
-		}
-		return arr;
-	};
-	this.getValueList = function(){
-		var arr = [];
-		var e = this.getIterator();
-		while (!e.atEnd) {
-			arr.push(e.value);
-			e.moveNext();
-		}
-		return arr;
-	};
-	this.item = function(k){
-		return items[k];
-	};
-	this.getIterator = function(){
-		return new dojo.collections.DictionaryIterator(items);
-	};
-	this.remove = function(k){
-		delete items[k];
-		this.count--;
-	};
-
-	if (dictionary){
-		var e = dictionary.getIterator();
-		while (!e.atEnd) {
-			 this.add(e.key, e.value);
-			 e.moveNext();
-		}
-	}
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Graph.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Graph.js
deleted file mode 100644
index 8bd10eb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Graph.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Graph");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.Graph = function(nodes){
-	function node(key, data, neighbors) {
-		this.key = key;
-		this.data = data;
-		this.neighbors = neighbors || new adjacencyList();
-		this.addDirected = function(){
-			if (arguments[0].constructor == edgeToNeighbor){
-				this.neighbors.add(arguments[0]);
-			} else {
-				var n = arguments[0];
-				var cost = arguments[1] || 0;
-				this.neighbors.add(new edgeToNeighbor(n, cost));
-			}
-		}
-	}
-	function nodeList(){
-		var d = new dojo.collections.Dictionary();
-		function nodelistiterator(){
-			var o = [] ;	//	Create an indexing array
-			var e = d.getIterator();
-			while (e.moveNext()) o[o.length] = e.current;
-
-			var position = 0 ;
-			this.current = null ;
-			this.entry = null ;
-			this.key = null ;
-			this.value = null ;
-			this.atEnd = false ;
-			this.moveNext = function() { 
-				if (this.atEnd) return !this.atEnd ;
-				this.entry = this.current = o[position] ;
-				if (this.entry) {
-					this.key = this.entry.key ;
-					this.value = this.entry.data ;
-				}
-				if (position == o.length) this.atEnd = true ;
-				position++ ;
-				return !this.atEnd ;
-			} ;
-			this.reset = function() { 
-				position = 0 ; 
-				this.atEnd = false ;
-			} ;
-		}
-		
-		this.add = function(node){
-			d.add(node.key, node);
-		};
-		this.clear = function(){
-			d.clear();
-		};
-		this.containsKey = function(key){
-			return d.containsKey(key);
-		};
-		this.getIterator = function(){
-			return new nodelistiterator(this);
-		};
-		this.item = function(key){
-			return d.item(key);
-		};
-		this.remove = function(node){
-			d.remove(node.key);
-		};
-	}
-	function edgeToNeighbor(node, cost){
-		this.neighbor = node;
-		this.cost = cost;
-	}
-	function adjacencyList(){
-		var d = [];
-		this.add = function(o){
-			d.push(o);
-		};
-		this.item = function(i){
-			return d[i];
-		};
-		this.getIterator = function(){
-			return new dojo.collections.Iterator([].concat(d));
-		};
-	}
-
-	this.nodes = nodes || new nodeList();
-	this.count = this.nodes.count;
-	this.clear = function(){
-		this.nodes.clear();
-		this.count = 0;
-	};
-	this.addNode = function(){
-		var n = arguments[0];
-		if (arguments.length > 1) {
-			n = new node(arguments[0], arguments[1]);
-		}
-		if (!this.nodes.containsKey(n.key)) {
-			this.nodes.add(n);
-			this.count++;
-		}
-	};
-	this.addDirectedEdge = function(uKey, vKey, cost){
-		var uNode, vNode;
-		if (uKey.constructor != node) {
-			uNode = this.nodes.item(uKey);
-			vNode = this.nodes.item(vKey);
-		} else {
-			uNode = uKey;
-			vNode = vKey;
-		}
-		var c = cost || 0;
-		uNode.addDirected(vNode, c);
-	};
-	this.addUndirectedEdge = function(uKey, vKey, cost){
-		var uNode, vNode;
-		if (uKey.constructor != node) {
-			uNode = this.nodes.item(uKey);
-			vNode = this.nodes.item(vKey);
-		} else {
-			uNode = uKey;
-			vNode = vKey;
-		}
-		var c = cost || 0;
-		uNode.addDirected(vNode, c);
-		vNode.addDirected(uNode, c);
-	};
-	this.contains = function(n){
-		return this.nodes.containsKey(n.key);
-	};
-	this.containsKey = function(k){
-		return this.nodes.containsKey(k);
-	};
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/List.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/List.js
deleted file mode 100644
index 6779f0e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/List.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.List");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.List = function(dictionary){
-	dojo.deprecated("dojo.collections.List", "Use dojo.collections.Dictionary instead.");
-	return new dojo.collections.Dictionary(dictionary);
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Queue.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Queue.js
deleted file mode 100644
index 4d68d16..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Queue.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Queue");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.Queue = function(arr){
-	var q = [];
-	if (arr) q = q.concat(arr);
-	this.count = q.length;
-	this.clear = function(){
-		q = [];
-		this.count = q.length;
-	};
-	this.clone = function(){
-		return new dojo.collections.Queue(q);
-	};
-	this.contains = function(o){
-		for (var i = 0; i < q.length; i++){
-			if (q[i] == o) return true;
-		}
-		return false;
-	};
-	this.copyTo = function(arr, i){
-		arr.splice(i,0,q);
-	};
-	this.dequeue = function(){
-		var r = q.shift();
-		this.count = q.length;
-		return r;
-	};
-	this.enqueue = function(o){
-		this.count = q.push(o);
-	};
-	this.getIterator = function(){
-		return new dojo.collections.Iterator(q);
-	};
-	this.peek = function(){
-		return q[0];
-	};
-	this.toArray = function(){
-		return [].concat(q);
-	};
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Set.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Set.js
deleted file mode 100644
index a149187..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Set.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Set");
-dojo.require("dojo.collections.Collections");
-dojo.require("dojo.collections.ArrayList");
-
-//	straight up sets are based on arrays or array-based collections.
-dojo.collections.Set = new function(){
-	this.union = function(setA, setB){
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
-		var result = new dojo.collections.ArrayList(setA.toArray());
-		var e = setB.getIterator();
-		while (!e.atEnd){
-			if (!result.contains(e.current)) result.add(e.current);
-		}
-		return result;
-	};
-	this.intersection = function(setA, setB){
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
-		var result = new dojo.collections.ArrayList();
-		var e = setB.getIterator();
-		while (!e.atEnd){
-			if (setA.contains(e.current)) result.add(e.current);
-			e.moveNext();
-		}
-		return result;
-	};
-	//	returns everything in setA that is not in setB.
-	this.difference = function(setA, setB){
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
-		var result = new dojo.collections.ArrayList();
-		var e = setA.getIterator();
-		while (!e.atEnd){
-			if (!setB.contains(e.current)) result.add(e.current);
-			e.moveNext();
-		}
-		return result;
-	};
-	this.isSubSet = function(setA, setB) {
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
-		var e = setA.getIterator();
-		while (!e.atEnd){
-			if (!setB.contains(e.current)) return false;
-			e.moveNext();
-		}
-		return true;
-	};
-	this.isSuperSet = function(setA, setB){
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
-		var e = setB.getIterator();
-		while (!e.atEnd){
-			if (!setA.contains(e.current)) return false;
-			e.moveNext();
-		}
-		return true;
-	};
-}();
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/SkipList.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/SkipList.js
deleted file mode 100644
index 15d92b9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/SkipList.js
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.SkipList");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.SkipList = function(){
-	function node(height, val){
-		this.value = val;
-		this.height = height;
-		this.nodes = new nodeList(height);
-		this.compare = function(val){
-			if (this.value > val) return 1;
-			if (this.value < val) return -1;
-			return 0;
-		}
-		this.incrementHeight = function(){
-			this.nodes.incrementHeight();
-			this.height++;
-		};
-		this.decrementHeight = function(){
-			this.nodes.decrementHeight();
-			this.height--;
-		};
-	}
-	function nodeList(height){
-		var arr = [];
-		this.height = height;
-		for (var i = 0; i < height; i++) arr[i] = null;
-		this.item = function(i){
-			return arr[i];
-		};
-		this.incrementHeight = function(){
-			this.height++;
-			arr[this.height] = null;
-		};
-		this.decrementHeight = function(){
-			arr.splice(arr.length - 1, 1);
-			this.height--;
-		};
-	}
-	function iterator(list){
-		this.current = list.head;
-		this.atEnd = false;
-		this.moveNext = function(){
-			if (this.atEnd) return !this.atEnd;
-			this.current = this.current.nodes[0];
-			this.atEnd = (current == null);
-			return !this.atEnd;
-		};
-		this.reset = function(){
-			this.current = null;
-		};
-	}
-
-	function chooseRandomHeight(max){
-		var level = 1;
-		while (Math.random() < PROB && level < max) level++;
-		return level;
-	}
-
-	var PROB = 0.5;
-	var comparisons = 0;
-
-	this.head = new node(1);
-	this.count = 0;
-	this.add = function(val){
-		var updates = [];
-		var current = this.head;
-		for (var i = this.head.height; i >= 0; i--){
-			if (!(current.nodes[i] != null && current.nodes[i].compare(val) < 0)) comparisons++;
-			while (current.nodes[i] != null && current.nodes[i].compare(val) < 0){
-				current = current.nodes[i];
-				comparisons++;
-			}
-			updates[i] = current;
-		}
-		if (current.nodes[0] != null && current.nodes[0].compare(val) == 0) return;
-		var n = new node(val, chooseRandomHeight(head.height + 1));
-		this.count++;
-		if (n.height > head.height){
-			head.incrementHeight();
-			head.nodes[head.height - 1] = n;
-		}
-		for (i = 0; i < n.height; i++){
-			if (i < updates.length) {
-				n.nodes[i] = updates[i].nodes[i];
-				updates[i].nodes[i] = n;
-			}
-		}
-	};
-	
-	this.contains = function(val){
-		var current = this.head;
-		var i;
-		for (i = head.height - 1; i >= 0; i--) {
-			while (current.item(i) != null) {
-				comparisons++;
-				var result = current.nodes[i].compare(val);
-				if (result == 0) return true;
-				else if (result < 0) current = current.nodes[i];
-				else break;
-			}
-		}
-		return false;
-	};
-	this.getIterator = function(){
-		return new iterator(this);
-	};
-
-	this.remove = function(val){
-		var updates = [];
-		var current = this.head;
-		for (var i = this.head.height - 1; i >= 0; i--){
-			if (!(current.nodes[i] != null && current.nodes[i].compare(val) < 0)) comparisons++;
-			while (current.nodes[i] != null && current.nodes[i].compare(val) < 0) {
-				current = current.nodes[i];
-				comparisons++;
-			}
-			updates[i] = current;
-		}
-		
-		current = current.nodes[0];
-		if (current != null && current.compare(val) == 0){
-			this.count--;
-			for (var i = 0; i < head.height; i++){
-				if (updates[i].nodes[i] != current) break;
-				else updates[i].nodes[i] = current.nodes[i];
-			}
-			if (head.nodes[head.height - 1] == null) head.decrementHeight();
-		}
-	};
-	this.resetComparisons = function(){ 
-		comparisons = 0; 
-	};
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/SortedList.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/SortedList.js
deleted file mode 100644
index 86acc75..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/SortedList.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.SortedList");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.SortedList = function(dictionary){
-	var _this = this;
-	var items = {};
-	var q = [];
-	var sorter = function(a,b){
-		if (a.key > b.key) return 1;
-		if (a.key < b.key) return -1;
-		return 0;
-	};
-	var build = function(){
-		q = [];
-		var e = _this.getIterator();
-		while (!e.atEnd) {
-			q.push(e.entry);
-			e.moveNext();
-		}
-		q.sort(sorter);
-	};
-
-	this.count = q.length;
-	this.add = function(k,v){
-		if (!items[k]) {
-			items[k] = new dojo.collections.DictionaryEntry(k,v);
-			this.count = q.push(items[k]);
-			q.sort(sorter);
-		}
-	};
-	this.clear = function(){
-		items = {};
-		q = [];
-		this.count = q.length;
-	};
-	this.clone = function(){
-		return new dojo.collections.SortedList(this);
-	};
-	this.contains = this.containsKey = function(k){
-		return (items[k] != null);
-	};
-	this.containsValue = function(o){
-		var e = this.getIterator();
-		while (!e.atEnd){
-			if (e.value == o) return true;
-			e.moveNext();
-		}
-		return false;
-	};
-	this.copyTo = function(arr, i){
-		var e = this.getIterator();
-		var idx = i;
-		while (!e.atEnd){
-			arr.splice(idx, 0, e.entry);
-			idx++;
-			e.moveNext();
-		}
-	};
-	this.getByIndex = function(i){
-		return q[i].value;
-	};
-	this.getIterator = function(){
-		return new dojo.collections.DictionaryIterator(items);
-	};
-	this.getKey = function(i){
-		return q[i].key;
-	};
-	this.getKeyList = function(){
-		var arr = [];
-		var e = this.getIterator();
-		while (!e.atEnd){
-			arr.push(e.key);
-			e.moveNext();
-		}
-		return arr;
-	};
-	this.getValueList = function(){
-		var arr = [];
-		var e = this.getIterator();
-		while (!e.atEnd){
-			arr.push(e.value);
-			e.moveNext();
-		}
-		return arr;
-	};
-	this.indexOfKey = function(k){
-		for (var i = 0; i < q.length; i++){
-			if (q[i].key == k) {
-				return i;
-			}
-		}
-		return -1;
-	};
-	this.indexOfValue = function(o){
-		for (var i = 0; i < q.length; i++){
-			if (q[i].value == o) {
-				return i;
-			}
-		}
-		return -1;
-	};
-	this.item = function(k){
-		return items[k];
-	};
-
-	this.remove = function(k){
-		delete items[k];
-		build();
-		this.count = q.length;
-	};
-	this.removeAt = function(i){
-		delete items[q[i].key];
-		build();
-		this.count = q.length;
-	};
-
-	this.setByIndex = function(i,o){
-		items[q[i].key].value = o;
-		build();
-		this.count = q.length;
-	};
-
-	if (dictionary){
-		var e = dictionary.getIterator();
-		while (!e.atEnd) {
-			q[q.length] = items[e.key] = new dojo.collections.DictionaryEntry(e.key, e.value);
-			e.moveNext();
-		}
-		q.sort(sorter);
-	}
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Stack.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Stack.js
deleted file mode 100644
index c55ab14..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/Stack.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Stack");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.Stack = function(arr){
-	var q = [];
-	if (arr) q = q.concat(arr);
-	this.count = q.length;
-	this.clear = function(){
-		q = [];
-		this.count = q.length;
-	};
-	this.clone = function(){
-		return new dojo.collections.Stack(q);
-	};
-	this.contains = function(o){
-		for (var i = 0; i < q.length; i++){
-			if (q[i] == o) return true;
-		}
-		return false;
-	};
-	this.copyTo = function(arr, i){
-		arr.splice(i,0,q);
-	};
-	this.getIterator = function(){
-		return new dojo.collections.Iterator(q);
-	};
-	this.peek = function(){
-		return q[(q.length - 1)];
-	};
-	this.pop = function(){
-		var r = q.pop();
-		this.count = q.length;
-		return r;
-	};
-	this.push = function(o){
-		this.count = q.push(o);
-	};
-	this.toArray = function(){
-		return [].concat(q);
-	};
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/__package__.js
deleted file mode 100644
index fdcf1aa..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/collections/__package__.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: [
-		"dojo.collections.Collections",
-		"dojo.collections.SortedList", 
-		"dojo.collections.Dictionary", 
-		"dojo.collections.Queue", 
-		"dojo.collections.ArrayList", 
-		"dojo.collections.Stack",
-		"dojo.collections.Set"
-	]
-});
-dojo.hostenv.moduleLoaded("dojo.collections.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto.js
deleted file mode 100644
index 17c8cde..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.crypto");
-
-//	enumerations for use in crypto code. Note that 0 == default, for the most part.
-dojo.crypto.cipherModes={ ECB:0, CBC:1, PCBC:2, CFB:3, OFB:4, CTR:5 };
-dojo.crypto.outputTypes={ Base64:0,Hex:1,String:2,Raw:3 };
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/Blowfish.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/Blowfish.js
deleted file mode 100644
index f4ebf34..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/Blowfish.js
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.Blowfish");
-
-/*	Blowfish
- *	Created based on the C# implementation by Marcus Hahn (http://www.hotpixel.net/)
- *	Unsigned math functions derived from Joe Gregorio's SecureSyndication GM script
- *	http://bitworking.org/projects/securesyndication/
- *	(Note that this is *not* an adaption of the above script)
- *
- *	version 1.0 
- *	TRT 
- *	2005-12-08
- */
-dojo.crypto.Blowfish = new function(){
-	var POW2=Math.pow(2,2);
-	var POW3=Math.pow(2,3);
-	var POW4=Math.pow(2,4);
-	var POW8=Math.pow(2,8);
-	var POW16=Math.pow(2,16);
-	var POW24=Math.pow(2,24);
-	var iv=null;	//	CBC mode initialization vector
-	var boxes={
-		p:[
-			0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 
-			0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 
-			0x9216d5d9, 0x8979fb1b
-		],
-		s0:[
-			0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
-			0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
-			0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
-			0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
-			0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
-			0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
-			0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
-			0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
-			0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
-			0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
-			0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 
-			0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, 
-			0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 
-			0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
-			0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
-			0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
-			0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 
-			0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 
-			0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 
-			0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 
-			0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
-			0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 
-			0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
-			0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, 
-			0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
-			0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
-			0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
-			0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
-			0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
-			0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
-			0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
-			0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
-		],
-		s1:[
-			0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
-			0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
-			0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
-			0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
-			0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
-			0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
-			0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
-			0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 
-			0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 
-			0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
-			0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 
-			0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
-			0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, 
-			0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 
-			0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
-			0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 
-			0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
-			0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 
-			0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
-			0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 
-			0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 
-			0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, 
-			0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
-			0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
-			0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, 
-			0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
-			0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
-			0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
-			0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
-			0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
-			0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
-			0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
-		],
-		s2:[
-			0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
-			0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
-			0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
-			0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
-			0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
-			0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
-			0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
-			0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
-			0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
-			0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
-			0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
-			0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
-			0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
-			0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
-			0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
-			0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
-			0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
-			0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
-			0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
-			0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
-			0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, 
-			0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
-			0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
-			0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 
-			0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 
-			0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 
-			0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, 
-			0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
-			0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
-			0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 
-			0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
-			0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
-		],
-		s3:[
-			0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
-			0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
-			0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 
-			0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
-			0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 
-			0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, 
-			0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
-			0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 
-			0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, 
-			0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, 
-			0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
-			0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 
-			0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 
-			0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 
-			0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
-			0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
-			0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 
-			0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
-			0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 
-			0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 
-			0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 
-			0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 
-			0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
-			0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 
-			0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
-			0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 
-			0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 
-			0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 
-			0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 
-			0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
-			0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
-			0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
-		]
-	}
-////////////////////////////////////////////////////////////////////////////
-	function add(x,y){
-		var sum=(x+y)&0xffffffff;
-		if (sum<0){
-			sum=-sum;
-			return (0x10000*((sum>>16)^0xffff))+(((sum&0xffff)^0xffff)+1);
-		}
-		return sum;
-	}
-	function split(x){
-		var r=x&0xffffffff;
-		if(r<0) {
-			r=-r;
-			return [((r&0xffff)^0xffff)+1,(r>>16)^0xffff];
-		}
-		return [r&0xffff,(r>>16)];
-	}
-	function xor(x,y){
-		var xs=split(x);
-		var ys=split(y);
-		return (0x10000*(xs[1]^ys[1]))+(xs[0]^ys[0]);
-	}
-	function $(v, box){
-		var d=v&0xff; v>>=8;
-		var c=v&0xff; v>>=8;
-		var b=v&0xff; v>>=8;
-		var a=v&0xff;
-		var r=add(box.s0[a],box.s1[b]);
-		r=xor(r,box.s2[c]);
-		return add(r,box.s3[d]);
-	}
-////////////////////////////////////////////////////////////////////////////
-	function eb(o, box){
-		var l=o.left;
-		var r=o.right;
-		l=xor(l,box.p[0]);
-		r=xor(r,xor($(l,box),box.p[1]));
-		l=xor(l,xor($(r,box),box.p[2]));
-		r=xor(r,xor($(l,box),box.p[3]));
-		l=xor(l,xor($(r,box),box.p[4]));
-		r=xor(r,xor($(l,box),box.p[5]));
-		l=xor(l,xor($(r,box),box.p[6]));
-		r=xor(r,xor($(l,box),box.p[7]));
-		l=xor(l,xor($(r,box),box.p[8]));
-		r=xor(r,xor($(l,box),box.p[9]));
-		l=xor(l,xor($(r,box),box.p[10]));
-		r=xor(r,xor($(l,box),box.p[11]));
-		l=xor(l,xor($(r,box),box.p[12]));
-		r=xor(r,xor($(l,box),box.p[13]));
-		l=xor(l,xor($(r,box),box.p[14]));
-		r=xor(r,xor($(l,box),box.p[15]));
-		l=xor(l,xor($(r,box),box.p[16]));
-		o.right=l;
-		o.left=xor(r,box.p[17]);
-	}
-
-	function db(o, box){
-		var l=o.left;
-		var r=o.right;
-		l=xor(l,box.p[17]);
-		r=xor(r,xor($(l,box),box.p[16]));
-		l=xor(l,xor($(r,box),box.p[15]));
-		r=xor(r,xor($(l,box),box.p[14]));
-		l=xor(l,xor($(r,box),box.p[13]));
-		r=xor(r,xor($(l,box),box.p[12]));
-		l=xor(l,xor($(r,box),box.p[11]));
-		r=xor(r,xor($(l,box),box.p[10]));
-		l=xor(l,xor($(r,box),box.p[9]));
-		r=xor(r,xor($(l,box),box.p[8]));
-		l=xor(l,xor($(r,box),box.p[7]));
-		r=xor(r,xor($(l,box),box.p[6]));
-		l=xor(l,xor($(r,box),box.p[5]));
-		r=xor(r,xor($(l,box),box.p[4]));
-		l=xor(l,xor($(r,box),box.p[3]));
-		r=xor(r,xor($(l,box),box.p[2]));
-		l=xor(l,xor($(r,box),box.p[1]));
-		o.right=l;
-		o.left=xor(r,box.p[0]);
-	}
-
-	//	Note that we aren't caching contexts here; it might take a little longer
-	//	but we should be more secure this way.
-	function init(key){
-		var k=key;
-		if (typeof(k)=="string"){
-			var a=[];
-			for(var i=0; i<k.length; i++) 
-				a.push(k.charCodeAt(i)&0xff);
-			k=a;
-		}
-		//	init the boxes
-		var box = { p:[], s0:[], s1:[], s2:[], s3:[] };
-		for(var i=0; i<boxes.p.length; i++) box.p.push(boxes.p[i]);
-		for(var i=0; i<boxes.s0.length; i++) box.s0.push(boxes.s0[i]);
-		for(var i=0; i<boxes.s1.length; i++) box.s1.push(boxes.s1[i]);
-		for(var i=0; i<boxes.s2.length; i++) box.s2.push(boxes.s2[i]);
-		for(var i=0; i<boxes.s3.length; i++) box.s3.push(boxes.s3[i]);
-
-		//	init p with the key
-		var pos=0;
-		var data=0;
-		for(var i=0; i < box.p.length; i++){
-			for (var j=0; j<4; j++){
-				data = (data*POW8) | k[pos];
-				if(++pos==k.length) pos=0;
-			}
-			box.p[i] = xor(box.p[i], data);
-		}
-
-		//	encrypt p and the s boxes
-		var res={ left:0, right:0 };
-		for(var i=0; i<box.p.length;){
-			eb(res, box);
-			box.p[i++]=res.left;
-			box.p[i++]=res.right;
-		}
-		for (var i=0; i<4; i++){
-			for(var j=0; j<box["s"+i].length;){
-				eb(res, box);
-				box["s"+i][j++]=res.left;
-				box["s"+i][j++]=res.right;
-			}
-		}
-		return box;
-	}
-
-////////////////////////////////////////////////////////////////////////////
-//	CONVERSION FUNCTIONS
-////////////////////////////////////////////////////////////////////////////
-	//	these operate on byte arrays, NOT word arrays.
-	function toBase64(ba){ 
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var s=[];
-		var count=0;
-		for (var i =0; i<ba.length;){
-			var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
-			s.push(tab.charAt((t>>>18)&0x3f)); 
-			s.push(tab.charAt((t>>>12)&0x3f));
-			s.push(tab.charAt((t>>>6)&0x3f));
-			s.push(tab.charAt(t&0x3f));
-			count+=4;
-		}
-		var pa=i-ba.length;
-		while((pa--)>0)	s.push(p);	
-		return s.join("");
-	}
-	function fromBase64(str){
-		var s=str.split("");
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var out=[];
-		var l=s.length;
-		while(s[--l]==p){ }
-		for (var i=0; i<l;){
-			var t=tab.indexOf(s[i++])<<18|tab.indexOf(s[i++])<<12|tab.indexOf(s[i++])<<6|tab.indexOf(s[i++]);
-			out.push((t>>>16)&0xff);
-			out.push((t>>>8)&0xff);
-			out.push(t&0xff);
-		}
-		return out;
-	}
-////////////////////////////////////////////////////////////////////////////
-//	PUBLIC FUNCTIONS
-//	0.2: Only supporting ECB mode for now.
-////////////////////////////////////////////////////////////////////////////
-	this.getIV=function(outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				var s=[];
-				for(var i=0; i<iv.length; i++)
-					s.push((iv[i]).toString(16));
-				return s.join("");
-			}
-			case dojo.crypto.outputTypes.String:{
-				return iv.join("");
-			}
-			case dojo.crypto.outputTypes.Raw:{
-				return iv;
-			}
-			default:{
-				return toBase64(iv);
-			}
-		}
-	};
-	this.setIV=function(data, inputType){
-		var ip=inputType||dojo.crypto.outputTypes.Base64;
-		var ba=null;
-		switch(ip){
-			case dojo.crypto.outputTypes.String:{
-				ba=[];
-				for (var i=0; i<data.length; i++){
-					ba.push(data.charCodeAt(i));
-				}
-				break;
-			}
-			case dojo.crypto.outputTypes.Hex:{
-				ba=[];
-				var i=0;
-				while (i+1<data.length){
-					ba.push(parseInt(data.substr(i,2),16));
-					i+=2;
-				}
-				break;
-			}
-			case dojo.crypto.outputTypes.Raw:{
-				ba=data;
-				break;
-			}
-			default:{
-				ba=fromBase64(data);
-				break;
-			}
-		}
-		//	make it a pair of words now
-		iv={};
-		iv.left=ba[0]*POW24|ba[1]*POW16|ba[2]*POW8|ba[3];
-		iv.right=ba[4]*POW24|ba[5]*POW16|ba[6]*POW8|ba[7];
-	}
-	this.encrypt = function(plaintext, key, ao){
-		var out=dojo.crypto.outputTypes.Base64;
-		var mode=dojo.crypto.cipherModes.EBC;
-		if (ao){
-			if (ao.outputType) out=ao.outputType;
-			if (ao.cipherMode) mode=ao.cipherMode;
-		}
-
-		var bx = init(key);
-		var padding = 8-(plaintext.length&7);
-		for (var i=0; i<padding; i++) plaintext+=String.fromCharCode(padding);
-		var cipher=[];
-		var count=plaintext.length >> 3;
-		var pos=0;
-		var o={};
-		var isCBC=(mode==dojo.crypto.cipherModes.CBC);
-		var vector={left:iv.left||null, right:iv.right||null};
-		for(var i=0; i<count; i++){
-			o.left=plaintext.charCodeAt(pos)*POW24
-				|plaintext.charCodeAt(pos+1)*POW16
-				|plaintext.charCodeAt(pos+2)*POW8
-				|plaintext.charCodeAt(pos+3);
-			o.right=plaintext.charCodeAt(pos+4)*POW24
-				|plaintext.charCodeAt(pos+5)*POW16
-				|plaintext.charCodeAt(pos+6)*POW8
-				|plaintext.charCodeAt(pos+7);
-
-			if(isCBC){
-				o.left=xor(o.left, vector.left);
-				o.right=xor(o.right, vector.right);
-			}
-
-			eb(o, bx);	//	encrypt the block
-
-			if(isCBC){
-				vector.left=o.left;
-				vector.right=o.right;dojo.crypto.outputTypes.Hex
-			}
-
-			cipher.push((o.left>>24)&0xff); 
-			cipher.push((o.left>>16)&0xff); 
-			cipher.push((o.left>>8)&0xff);
-			cipher.push(o.left&0xff);
-			cipher.push((o.right>>24)&0xff); 
-			cipher.push((o.right>>16)&0xff); 
-			cipher.push((o.right>>8)&0xff);
-			cipher.push(o.right&0xff);
-			pos+=8;
-		}
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				var s=[];
-				for(var i=0; i<cipher.length; i++)
-					s.push((cipher[i]).toString(16));
-				return s.join("");
-			}
-			case dojo.crypto.outputTypes.String:{
-				return cipher.join("");
-			}
-			case dojo.crypto.outputTypes.Raw:{
-				return cipher;
-			}
-			default:{
-				return toBase64(cipher);
-			}
-		}
-	};
-
-	this.decrypt = function(ciphertext, key, ao){
-		var ip=dojo.crypto.outputTypes.Base64;
-		var mode=dojo.crypto.cipherModes.EBC;
-		if (ao){
-			if (ao.outputType) ip=ao.outputType;
-			if (ao.cipherMode) mode=ao.cipherMode;
-		}
-		var bx = init(key);
-		var pt=[];
-	
-		var c=null;
-		switch(ip){
-			case dojo.crypto.outputTypes.Hex:{
-				c=[];
-				var i=0;
-				while (i+1<ciphertext.length){
-					c.push(parseInt(ciphertext.substr(i,2),16));
-					i+=2;
-				}
-				break;
-			}
-			case dojo.crypto.outputTypes.String:{
-				c=[];
-				for (var i=0; i<ciphertext.length; i++){
-					c.push(ciphertext.charCodeAt(i));
-				}
-				break;
-			}
-			case dojo.crypto.outputTypes.Raw:{
-				c=ciphertext;	//	should be a byte array
-				break;
-			}
-			default:{
-				c=fromBase64(ciphertext);
-				break;
-			}
-		}
-
-		var count=c.length >> 3;
-		var pos=0;
-		var o={};
-		var isCBC=(mode==dojo.crypto.cipherModes.CBC);
-		var vector={left:iv.left||null, right:iv.right||null};
-		for(var i=0; i<count; i++){
-			o.left=c[pos]*POW24|c[pos+1]*POW16|c[pos+2]*POW8|c[pos+3];
-			o.right=c[pos+4]*POW24|c[pos+5]*POW16|c[pos+6]*POW8|c[pos+7];
-
-			if(isCBC){
-				var left=o.left;
-				var right=o.right;
-			}
-
-			db(o, bx);	//	decrypt the block
-
-			if(isCBC){
-				o.left=xor(o.left, vector.left);
-				o.right=xor(o.right, vector.right);
-				vector.left=left;
-				vector.right=right;
-			}
-
-			pt.push((o.left>>24)&0xff);
-			pt.push((o.left>>16)&0xff);
-			pt.push((o.left>>8)&0xff);
-			pt.push(o.left&0xff);
-			pt.push((o.right>>24)&0xff);
-			pt.push((o.right>>16)&0xff);
-			pt.push((o.right>>8)&0xff);
-			pt.push(o.right&0xff);
-			pos+=8;
-		}
-
-		//	check for padding, and remove.
-		if(pt[pt.length-1]==pt[pt.length-2]||pt[pt.length-1]==0x01){
-			var n=pt[pt.length-1];
-			pt.splice(pt.length-n, n);
-		}
-
-		//	convert to string
-		for(var i=0; i<pt.length; i++)
-			pt[i]=String.fromCharCode(pt[i]);
-		return pt.join("");
-	};
-
-	this.setIV("0000000000000000", dojo.crypto.outputTypes.Hex);
-}();
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/LICENSE b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/LICENSE
deleted file mode 100644
index 36ccb77..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/LICENSE
+++ /dev/null
@@ -1,11 +0,0 @@
-License Disclaimer:
-
-All contents of this directory are Copyright (c) the Dojo Foundation, with the
-following exceptions:
--------------------------------------------------------------------------------
-
-MD5.js, SHA1.js:
-	* Copyright 1998-2005, Paul Johnstone
-	  Distributed under the terms of the BSD License
-
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/MD5.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/MD5.js
deleted file mode 100644
index 8d856f0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/MD5.js
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.MD5");
-
-/*	Return to a port of Paul Johnstone's MD5 implementation
- *	http://pajhome.org.uk/crypt/md5/index.html
- *
- *	2005-12-7
- *	All conversions are internalized (no dependencies)
- *	implemented getHMAC for message digest auth.
- */
-dojo.crypto.MD5 = new function(){
-	var chrsz=8;
-	var mask=(1<<chrsz)-1;
-	function toWord(s) {
-	  var wa=[];
-	  for(var i=0; i<s.length*chrsz; i+=chrsz)
-		wa[i>>5]|=(s.charCodeAt(i/chrsz)&mask)<<(i%32);
-	  return wa;
-	}
-	function toString(wa){
-		var s=[];
-		for(var i=0; i<wa.length*32; i+=chrsz)
-			s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask));
-		return s.join("");
-	}
-	function toHex(wa) {
-		var h="0123456789abcdef";
-		var s=[];
-		for(var i=0; i<wa.length*4; i++){
-			s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&0xF)+h.charAt((wa[i>>2]>>((i%4)*8))&0xF));
-		}
-		return s.join("");
-	}
-	function toBase64(wa){
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var s=[];
-		for(var i=0; i<wa.length*4; i+=3){
-			var t=(((wa[i>>2]>>8*(i%4))&0xFF)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&0xFF);
-			for(var j=0; j<4; j++){
-				if(i*8+j*6>wa.length*32) s.push(p);
-				else s.push(tab.charAt((t>>6*(3-j))&0x3F));
-			}
-		}
-		return s.join("");
-	}
-	function add(x,y) {
-		var l=(x&0xFFFF)+(y&0xFFFF);
-		var m=(x>>16)+(y>>16)+(l>>16);
-		return (m<<16)|(l&0xFFFF);
-	}
-	function R(n,c){ return (n<<c)|(n>>>(32-c)); }
-	function C(q,a,b,x,s,t){ return add(R(add(add(a,q),add(x,t)),s),b); }
-	function FF(a,b,c,d,x,s,t){ return C((b&c)|((~b)&d),a,b,x,s,t); }
-	function GG(a,b,c,d,x,s,t){ return C((b&d)|(c&(~d)),a,b,x,s,t); }
-	function HH(a,b,c,d,x,s,t){ return C(b^c^d,a,b,x,s,t); }
-	function II(a,b,c,d,x,s,t){ return C(c^(b|(~d)),a,b,x,s,t); }
-	function core(x,len){
-		x[len>>5]|=0x80<<((len)%32);
-		x[(((len+64)>>>9)<<4)+14]=len;
-		var a= 1732584193;
-		var b=-271733879;
-		var c=-1732584194;
-		var d= 271733878;
-		for(var i=0; i<x.length; i+=16){
-			var olda=a;
-			var oldb=b;
-			var oldc=c;
-			var oldd=d;
-
-			a=FF(a,b,c,d,x[i+ 0],7 ,-680876936);
-			d=FF(d,a,b,c,x[i+ 1],12,-389564586);
-			c=FF(c,d,a,b,x[i+ 2],17, 606105819);
-			b=FF(b,c,d,a,x[i+ 3],22,-1044525330);
-			a=FF(a,b,c,d,x[i+ 4],7 ,-176418897);
-			d=FF(d,a,b,c,x[i+ 5],12, 1200080426);
-			c=FF(c,d,a,b,x[i+ 6],17,-1473231341);
-			b=FF(b,c,d,a,x[i+ 7],22,-45705983);
-			a=FF(a,b,c,d,x[i+ 8],7 , 1770035416);
-			d=FF(d,a,b,c,x[i+ 9],12,-1958414417);
-			c=FF(c,d,a,b,x[i+10],17,-42063);
-			b=FF(b,c,d,a,x[i+11],22,-1990404162);
-			a=FF(a,b,c,d,x[i+12],7 , 1804603682);
-			d=FF(d,a,b,c,x[i+13],12,-40341101);
-			c=FF(c,d,a,b,x[i+14],17,-1502002290);
-			b=FF(b,c,d,a,x[i+15],22, 1236535329);
-
-			a=GG(a,b,c,d,x[i+ 1],5 ,-165796510);
-			d=GG(d,a,b,c,x[i+ 6],9 ,-1069501632);
-			c=GG(c,d,a,b,x[i+11],14, 643717713);
-			b=GG(b,c,d,a,x[i+ 0],20,-373897302);
-			a=GG(a,b,c,d,x[i+ 5],5 ,-701558691);
-			d=GG(d,a,b,c,x[i+10],9 , 38016083);
-			c=GG(c,d,a,b,x[i+15],14,-660478335);
-			b=GG(b,c,d,a,x[i+ 4],20,-405537848);
-			a=GG(a,b,c,d,x[i+ 9],5 , 568446438);
-			d=GG(d,a,b,c,x[i+14],9 ,-1019803690);
-			c=GG(c,d,a,b,x[i+ 3],14,-187363961);
-			b=GG(b,c,d,a,x[i+ 8],20, 1163531501);
-			a=GG(a,b,c,d,x[i+13],5 ,-1444681467);
-			d=GG(d,a,b,c,x[i+ 2],9 ,-51403784);
-			c=GG(c,d,a,b,x[i+ 7],14, 1735328473);
-			b=GG(b,c,d,a,x[i+12],20,-1926607734);
-
-			a=HH(a,b,c,d,x[i+ 5],4 ,-378558);
-			d=HH(d,a,b,c,x[i+ 8],11,-2022574463);
-			c=HH(c,d,a,b,x[i+11],16, 1839030562);
-			b=HH(b,c,d,a,x[i+14],23,-35309556);
-			a=HH(a,b,c,d,x[i+ 1],4 ,-1530992060);
-			d=HH(d,a,b,c,x[i+ 4],11, 1272893353);
-			c=HH(c,d,a,b,x[i+ 7],16,-155497632);
-			b=HH(b,c,d,a,x[i+10],23,-1094730640);
-			a=HH(a,b,c,d,x[i+13],4 , 681279174);
-			d=HH(d,a,b,c,x[i+ 0],11,-358537222);
-			c=HH(c,d,a,b,x[i+ 3],16,-722521979);
-			b=HH(b,c,d,a,x[i+ 6],23, 76029189);
-			a=HH(a,b,c,d,x[i+ 9],4 ,-640364487);
-			d=HH(d,a,b,c,x[i+12],11,-421815835);
-			c=HH(c,d,a,b,x[i+15],16, 530742520);
-			b=HH(b,c,d,a,x[i+ 2],23,-995338651);
-
-			a=II(a,b,c,d,x[i+ 0],6 ,-198630844);
-			d=II(d,a,b,c,x[i+ 7],10, 1126891415);
-			c=II(c,d,a,b,x[i+14],15,-1416354905);
-			b=II(b,c,d,a,x[i+ 5],21,-57434055);
-			a=II(a,b,c,d,x[i+12],6 , 1700485571);
-			d=II(d,a,b,c,x[i+ 3],10,-1894986606);
-			c=II(c,d,a,b,x[i+10],15,-1051523);
-			b=II(b,c,d,a,x[i+ 1],21,-2054922799);
-			a=II(a,b,c,d,x[i+ 8],6 , 1873313359);
-			d=II(d,a,b,c,x[i+15],10,-30611744);
-			c=II(c,d,a,b,x[i+ 6],15,-1560198380);
-			b=II(b,c,d,a,x[i+13],21, 1309151649);
-			a=II(a,b,c,d,x[i+ 4],6 ,-145523070);
-			d=II(d,a,b,c,x[i+11],10,-1120210379);
-			c=II(c,d,a,b,x[i+ 2],15, 718787259);
-			b=II(b,c,d,a,x[i+ 9],21,-343485551);
-
-			a = add(a,olda);
-			b = add(b,oldb);
-			c = add(c,oldc);
-			d = add(d,oldd);
-		}
-		return [a,b,c,d];
-	}
-	function hmac(data,key){
-		var wa=toWord(key);
-		if(wa.length>16) wa=core(wa,key.length*chrsz);
-		var l=[], r=[];
-		for(var i=0; i<16; i++){
-			l[i]=wa[i]^0x36363636;
-			r[i]=wa[i]^0x5c5c5c5c;
-		}
-		var h=core(l.concat(toWord(data)),512+data.length*chrsz);
-		return core(r.concat(h),640);
-	}
-
-	//	Public functions
-	this.compute=function(data,outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(core(toWord(data),data.length*chrsz));
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(core(toWord(data),data.length*chrsz));
-			}
-			default:{
-				return toBase64(core(toWord(data),data.length*chrsz));
-			}
-		}
-	};
-	this.getHMAC=function(data,key,outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(hmac(data,key));
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(hmac(data,key));
-			}
-			default:{
-				return toBase64(hmac(data,key));
-			}
-		}
-	};
-}();
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/Rijndael.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/Rijndael.js
deleted file mode 100644
index b79e2a6..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/Rijndael.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.crypto.Rijndael");
-dojo.require("dojo.crypto");
-
-dojo.crypto.Rijndael = new function(){
-	this.encrypt=function(plaintext, key){
-	};
-	this.decrypt=function(ciphertext, key){
-	};
-}();
-
-dojo.crypto.AES = dojo.crypto.Rijndael;	//	alias
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/SHA.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/SHA.js
deleted file mode 100644
index 9dda46a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/SHA.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.crypto.SHA");
-dojo.require("dojo.crypto");
-
-dojo.crypto.SHA = new function(){
-	this.compute=function(s){
-	};
-}();
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/SHA1.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/SHA1.js
deleted file mode 100644
index 4b48f3f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/SHA1.js
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.SHA1");
-
-dojo.crypto.SHA1 = new function(){
-	var chrsz=8;
-	var mask=(1<<chrsz)-1;
-	function toWord(s) {
-	  var wa=[];
-	  for(var i=0; i<s.length*chrsz; i+=chrsz)
-		wa[i>>5]|=(s.charCodeAt(i/chrsz)&mask)<<(i%32);
-	  return wa;
-	}
-	function toString(wa){
-		var s=[];
-		for(var i=0; i<wa.length*32; i+=chrsz)
-			s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask));
-		return s.join("");
-	}
-	function toHex(wa) {
-		var h="0123456789abcdef";
-		var s=[];
-		for(var i=0; i<wa.length*4; i++){
-			s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&0xF)+h.charAt((wa[i>>2]>>((i%4)*8))&0xF));
-		}
-		return s.join("");
-	}
-	function toBase64(wa){
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var s=[];
-		for(var i=0; i<wa.length*4; i+=3){
-			var t=(((wa[i>>2]>>8*(i%4))&0xFF)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&0xFF);
-			for(var j=0; j<4; j++){
-				if(i*8+j*6>wa.length*32) s.push(p);
-				else s.push(tab.charAt((t>>6*(3-j))&0x3F));
-			}
-		}
-		return s.join("");
-	}
-
-	//	math
-	function add(x,y){
-		var l=(x&0xffff)+(y&0xffff);
-		var m=(x>>16)+(y>>16)+(l>>16);
-		return (m<<16)|(l&0xffff);
-	}
-	function r(x,n){  return (x<<n)|(x>>>(32-n)); }
-	
-	//	SHA rounds
-	function f(u,v,w){ return ((u&v)|(~u&w)); }
-	function g(u,v,w){ return ((u&v)|(u&w)|(v&w)); }
-	function h(u,v,w){ return (u^v^w); }
-	
-	function fn(i,u,v,w){
-		if(i<20) return f(u,v,w);
-		if(i<40) return h(u,v,w);
-		if(i<60) return g(u,v,w);
-		return h(u,v,w);
-	}
-	function cnst(i){
-		if(i<20) return 1518500249;
-		if(i<40) return 1859775393;
-		if(i<60) return -1894007588;
-		return -899497514;
-	}
-
-	function core(x,len){
-		x[len>>5]|=0x80<<(24-len%32);
-		x[((len+64>>9)<<4)+15]=len;
-
-		var w=[];
-		var a= 1732584193;		//	0x67452301
-		var b=-271733879;		//	0xefcdab89
-		var c=-1732584194;		//	0x98badcfe
-		var d= 271733878;		//	0x10325476
-		var e=-1009589776;		//	0xc3d2e1f0
-		
-		for(var i=0; i<x.length; i+=16){
-			var olda=a;
-			var oldb=b;
-			var oldc=c;
-			var oldd=d;
-			var olde=e;
-
-			for(var j=0; j<80; j++){
-				if(j<16) w[j]=x[i+j];
-				else w[j]=r(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);
-				var t=add(add(r(a,5),fn(j,b,c,d)),add(add(e,w[j]),cnst(j)));
-				e=d; d=c; c=r(b,30); b=a; a=t;
-			}
-
-			a=add(a,olda);
-			b=add(b,oldb);
-			c=add(c,oldc);
-			d=add(d,oldd);
-			e=add(e,olde);
-		}
-		return [a,b,c,d,e];
-	}
-	function hmac(data,key){
-		var wa=toWord(key);
-		if(wa.length>16) wa=core(wa,key.length*chrsz);
-		var l=[], r=[];
-		for(var i=0; i<16; i++){
-			l[i]=wa[i]^0x36363636;
-			r[i]=wa[i]^0x5c5c5c5c;
-		}
-		var h=core(l.concat(toWord(data)),512+data.length*chrsz);
-		return core(r.concat(h),640);
-	}
-
-	this.compute=function(data,outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(core(toWord(data),data.length*chrsz));
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(core(toWord(data),data.length*chrsz));
-			}
-			default:{
-				return toBase64(core(toWord(data),data.length*chrsz));
-			}
-		}
-	};
-	this.getHMAC=function(data,key,outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(hmac(data,key));
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(hmac(data,key));
-			}
-			default:{
-				return toBase64(hmac(data,key));
-			}
-		}
-	};
-}();
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/SHA256.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/SHA256.js
deleted file mode 100644
index 515ffe4..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/SHA256.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.crypto.SHA256");
-dojo.require("dojo.crypto");
-
-dojo.crypto.SHA256 = new function(){
-	this.compute=function(s){
-	};
-}();
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/__package__.js
deleted file mode 100644
index a667abb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/crypto/__package__.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: [
-		"dojo.crypto",
-		"dojo.crypto.MD5"
-	]
-});
-dojo.hostenv.moduleLoaded("dojo.crypto.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/data.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/data.js
deleted file mode 100644
index ec52fc3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/data.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data");
-
-// currently a stub for dojo.data
-
-dojo.data = {};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/data/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/data/__package__.js
deleted file mode 100644
index 7836ad1..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/data/__package__.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.data"]
-});
-dojo.hostenv.moduleLoaded("dojo.data.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/date.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/date.js
deleted file mode 100644
index e2d9adc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/date.js
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.date");
-dojo.require("dojo.string");
-
-/**
- * Sets the current Date object to the time given in an ISO 8601 date/time
- * stamp
- *
- * @param string The date/time formted as an ISO 8601 string
- */
-dojo.date.setIso8601 = function (dateObject, string) {
-	var comps = string.split('T');
-	dojo.date.setIso8601Date(dateObject, comps[0]);
-	if (comps.length == 2) { dojo.date.setIso8601Time(dateObject, comps[1]); }
-	return dateObject;
-}
-
-dojo.date.fromIso8601 = function (string) {
-	return dojo.date.setIso8601(new Date(0), string);
-}
-
-/**
- * Sets the current Date object to the date given in an ISO 8601 date
- * stamp. The time is left unchanged.
- *
- * @param string The date formted as an ISO 8601 string
- */
-dojo.date.setIso8601Date = function (dateObject, string) {
-	var regexp = "^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|" +
-			"(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$";
-	var d = string.match(new RegExp(regexp));
-
-	var year = d[1];
-	var month = d[4];
-	var date = d[6];
-	var dayofyear = d[8];
-	var week = d[10];
-	var dayofweek = (d[12]) ? d[12] : 1;
-
-	dateObject.setYear(year);
-	
-	if (dayofyear) { dojo.date.setDayOfYear(dateObject, Number(dayofyear)); }
-	else if (week) {
-		dateObject.setMonth(0);
-		dateObject.setDate(1);
-		var gd = dateObject.getDay();
-		var day =  (gd) ? gd : 7;
-		var offset = Number(dayofweek) + (7 * Number(week));
-		
-		if (day <= 4) { dateObject.setDate(offset + 1 - day); }
-		else { dateObject.setDate(offset + 8 - day); }
-	} else {
-		if (month) { dateObject.setMonth(month - 1); }
-		if (date) { dateObject.setDate(date); }
-	}
-	
-	return dateObject;
-}
-
-dojo.date.fromIso8601Date = function (string) {
-	return dojo.date.setIso8601Date(new Date(0), string);
-}
-
-/**
- * Sets the current Date object to the date given in an ISO 8601 time
- * stamp. The date is left unchanged.
- *
- * @param string The time formted as an ISO 8601 string
- */
-dojo.date.setIso8601Time = function (dateObject, string) {
-	// first strip timezone info from the end
-	var timezone = "Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";
-	var d = string.match(new RegExp(timezone));
-
-	var offset = 0; // local time if no tz info
-	if (d) {
-		if (d[0] != 'Z') {
-			offset = (Number(d[3]) * 60) + Number(d[5]);
-			offset *= ((d[2] == '-') ? 1 : -1);
-		}
-		offset -= dateObject.getTimezoneOffset()
-		string = string.substr(0, string.length - d[0].length);
-	}
-
-	// then work out the time
-	var regexp = "^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(\.([0-9]+))?)?)?$";
-	var d = string.match(new RegExp(regexp));
-
-	var hours = d[1];
-	var mins = Number((d[3]) ? d[3] : 0) + offset;
-	var secs = (d[5]) ? d[5] : 0;
-	var ms = d[7] ? (Number("0." + d[7]) * 1000) : 0;
-
-	dateObject.setHours(hours);
-	dateObject.setMinutes(mins);
-	dateObject.setSeconds(secs);
-	dateObject.setMilliseconds(ms);
-	
-	return dateObject;
-}
-
-dojo.date.fromIso8601Time = function (string) {
-	return dojo.date.setIso8601Time(new Date(0), string);
-}
-
-/**
- * Sets the date to the day of year
- *
- * @param date The day of year
- */
-dojo.date.setDayOfYear = function (dateObject, dayofyear) {
-	dateObject.setMonth(0);
-	dateObject.setDate(dayofyear);
-	return dateObject;
-}
-
-/**
- * Retrieves the day of the year the Date is set to.
- *
- * @return The day of the year
- */
-dojo.date.getDayOfYear = function (dateObject) {
-	var tmpdate = new Date("1/1/" + dateObject.getFullYear());
-	return Math.floor((dateObject.getTime() - tmpdate.getTime()) / 86400000);
-}
-
-dojo.date.getWeekOfYear = function (dateObject) {
-	return Math.ceil(dojo.date.getDayOfYear(dateObject) / 7);
-}
-
-dojo.date.daysInMonth = function (month, year) {
-	dojo.deprecated("daysInMonth(month, year)",
-		"replaced by getDaysInMonth(dateObject)", "0.4");
-	return dojo.date.getDaysInMonth(new Date(year, month, 1));
-}
-
-/**
- * Returns the number of days in the given month. Leap years are accounted
- * for.
- *
- * @param dateObject Date set to the month concerned
- * @return The number of days in the given month
- */
-dojo.date.getDaysInMonth = function (dateObject) {
-	var month = dateObject.getMonth();
-	var year = dateObject.getFullYear();
-	
-	/*
-	 * Leap years are years with an additional day YYYY-02-29, where the year
-	 * number is a multiple of four with the following exception: If a year
-	 * is a multiple of 100, then it is only a leap year if it is also a
-	 * multiple of 400. For example, 1900 was not a leap year, but 2000 is one.
-	 */
-	var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
-	if (month == 1 && year) {
-		if ((!(year % 4) && (year % 100)) ||
-			(!(year % 4) && !(year % 100) && !(year % 400))) { return 29; }
-		else { return 28; }
-	} else { return days[month]; }
-}
-
-
-dojo.date.months = ["January", "February", "March", "April", "May", "June",
-	"July", "August", "September", "October", "November", "December"];
-dojo.date.shortMonths = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"];
-dojo.date.days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
-dojo.date.shortDays = ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"];
-
-/**
- *
- * Returns a string of the date in the version "January 1, 2004"
- *
- * @param date The date object
- */
-dojo.date.toLongDateString = function(date) {
-	return dojo.date.months[date.getMonth()] + " " + date.getDate() + ", " + date.getFullYear();
-}
-
-/**
- *
- * Returns a string of the date in the version "Jan 1, 2004"
- *
- * @param date The date object
- */
-dojo.date.toShortDateString = function(date) {
-	return dojo.date.shortMonths[date.getMonth()] + " " + date.getDate() + ", " + date.getFullYear();
-}
-
-/**
- *
- * Returns military formatted time
- *
- * @param date the date object
- */
-dojo.date.toMilitaryTimeString = function(date){
-	var h = "00" + date.getHours();
-	var m = "00" + date.getMinutes();
-	var s = "00" + date.getSeconds();
-	return h.substr(h.length-2,2) + ":" + m.substr(m.length-2,2) + ":" + s.substr(s.length-2,2);
-}
-
-/**
- *
- * Returns a string of the date relative to the current date.
- *
- * @param date The date object
- *
- * Example returns:
- * - "1 minute ago"
- * - "4 minutes ago"
- * - "Yesterday"
- * - "2 days ago"
- */
-dojo.date.toRelativeString = function(date) {
-	var now = new Date();
-	var diff = (now - date) / 1000;
-	var end = " ago";
-	var future = false;
-	if(diff < 0) {
-		future = true;
-		end = " from now";
-		diff = -diff;
-	}
-
-	if(diff < 60) {
-		diff = Math.round(diff);
-		return diff + " second" + (diff == 1 ? "" : "s") + end;
-	} else if(diff < 3600) {
-		diff = Math.round(diff/60);
-		return diff + " minute" + (diff == 1 ? "" : "s") + end;
-	} else if(diff < 3600*24 && date.getDay() == now.getDay()) {
-		diff = Math.round(diff/3600);
-		return diff + " hour" + (diff == 1 ? "" : "s") + end;
-	} else if(diff < 3600*24*7) {
-		diff = Math.round(diff/(3600*24));
-		if(diff == 1) {
-			return future ? "Tomorrow" : "Yesterday";
-		} else {
-			return diff + " days" + end;
-		}
-	} else {
-		return dojo.date.toShortDateString(date);
-	}
-}
-
-/**
- * Retrieves the day of the week the Date is set to.
- *
- * @return The day of the week
- */
-dojo.date.getDayOfWeekName = function (date) {
-	return dojo.date.days[date.getDay()];
-}
-
-/**
- * Retrieves the short day of the week name the Date is set to.
- *
- * @return The short day of the week name
- */
-dojo.date.getShortDayOfWeekName = function (date) {
-	return dojo.date.shortDays[date.getDay()];
-}
-
-/**
- * Retrieves the month name the Date is set to.
- *
- * @return The month name
- */
-dojo.date.getMonthName = function (date) {
-	return dojo.date.months[date.getMonth()];
-}
-
-/**
- * Retrieves the short month name the Date is set to.
- *
- * @return The short month name
- */
-dojo.date.getShortMonthName = function (date) {
-	return dojo.date.shortMonths[date.getMonth()];
-}
-
-/**
- *
- * Format datetime
- * 
- * @param date the date object
- */
-dojo.date.toString = function(date, format){
-
-	if (format.indexOf("#d") > -1) {
-		format = format.replace(/#dddd/g, dojo.date.getDayOfWeekName(date));
-		format = format.replace(/#ddd/g, dojo.date.getShortDayOfWeekName(date));
-		format = format.replace(/#dd/g, (date.getDate().toString().length==1?"0":"")+date.getDate());
-		format = format.replace(/#d/g, date.getDate());
-	}
-
-	if (format.indexOf("#M") > -1) {
-		format = format.replace(/#MMMM/g, dojo.date.getMonthName(date));
-		format = format.replace(/#MMM/g, dojo.date.getShortMonthName(date));
-		format = format.replace(/#MM/g, ((date.getMonth()+1).toString().length==1?"0":"")+(date.getMonth()+1));
-		format = format.replace(/#M/g, date.getMonth() + 1);
-	}
-
-	if (format.indexOf("#y") > -1) {
-		var fullYear = date.getFullYear().toString();
-		format = format.replace(/#yyyy/g, fullYear);
-		format = format.replace(/#yy/g, fullYear.substring(2));
-		format = format.replace(/#y/g, fullYear.substring(3));
-	}
-
-	// Return if only date needed;
-	if (format.indexOf("#") == -1) {
-		return format;
-	}
-	
-	if (format.indexOf("#h") > -1) {
-		var hours = date.getHours();
-		hours = (hours > 12 ? hours - 12 : (hours == 0) ? 12 : hours);
-		format = format.replace(/#hh/g, (hours.toString().length==1?"0":"")+hours);
-		format = format.replace(/#h/g, hours);
-	}
-	
-	if (format.indexOf("#H") > -1) {
-		format = format.replace(/#HH/g, (date.getHours().toString().length==1?"0":"")+date.getHours());
-		format = format.replace(/#H/g, date.getHours());
-	}
-	
-	if (format.indexOf("#m") > -1) {
-		format = format.replace(/#mm/g, (date.getMinutes().toString().length==1?"0":"")+date.getMinutes());
-		format = format.replace(/#m/g, date.getMinutes());
-	}
-
-	if (format.indexOf("#s") > -1) {
-		format = format.replace(/#ss/g, (date.getSeconds().toString().length==1?"0":"")+date.getSeconds());
-		format = format.replace(/#s/g, date.getSeconds());
-	}
-	
-	if (format.indexOf("#T") > -1) {
-		format = format.replace(/#TT/g, date.getHours() >= 12 ? "PM" : "AM");
-		format = format.replace(/#T/g, date.getHours() >= 12 ? "P" : "A");
-	}
-
-	if (format.indexOf("#t") > -1) {
-		format = format.replace(/#tt/g, date.getHours() >= 12 ? "pm" : "am");
-		format = format.replace(/#t/g, date.getHours() >= 12 ? "p" : "a");
-	}
-					
-	return format;
-	
-}
-
-/**
- * Convert a Date to a SQL string, optionally ignoring the HH:MM:SS portion of the Date
- */
-dojo.date.toSql = function(date, noTime) {
-	var sql = date.getFullYear() + "-" + dojo.string.pad(date.getMonth(), 2) + "-"
-		+ dojo.string.pad(date.getDate(), 2);
-	if(!noTime) {
-		sql += " " + dojo.string.pad(date.getHours(), 2) + ":"
-			+ dojo.string.pad(date.getMinutes(), 2) + ":"
-			+ dojo.string.pad(date.getSeconds(), 2);
-	}
-	return sql;
-}
-
-/**
- * Convert a SQL date string to a JavaScript Date object
- */
-dojo.date.fromSql = function(sqlDate) {
-	var parts = sqlDate.split(/[\- :]/g);
-	while(parts.length < 6) {
-		parts.push(0);
-	}
-	return new Date(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5]);
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/DragAndDrop.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/DragAndDrop.js
deleted file mode 100644
index b46735e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/DragAndDrop.js
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.lang");
-dojo.provide("dojo.dnd.DragSource");
-dojo.provide("dojo.dnd.DropTarget");
-dojo.provide("dojo.dnd.DragObject");
-dojo.provide("dojo.dnd.DragManager");
-dojo.provide("dojo.dnd.DragAndDrop");
-
-dojo.dnd.DragSource = function(){
-	dojo.dnd.dragManager.registerDragSource(this);
-}
-
-dojo.lang.extend(dojo.dnd.DragSource, {
-	type: "",
-	
-	onDragEnd: function(){
-	},
-	
-	onDragStart: function(){
-	},
-
-	unregister: function(){
-		dojo.dnd.dragManager.unregisterDragSource(this);
-	},
-
-	reregister: function(){
-		dojo.dnd.dragManager.registerDragSource(this);
-	}
-});
-
-dojo.dnd.DragObject = function(){
-	dojo.dnd.dragManager.registerDragObject(this);
-}
-
-dojo.lang.extend(dojo.dnd.DragObject, {
-	type: "",
-	
-	onDragStart: function(){
-		// gets called directly after being created by the DragSource
-		// default action is to clone self as icon
-	},
-	
-	onDragMove: function(){
-		// this changes the UI for the drag icon
-		//	"it moves itself"
-	},
-
-	onDragOver: function(){
-	},
-	
-	onDragOut: function(){
-	},
-	
-	onDragEnd: function(){
-	},
-
-	// normal aliases
-	onDragLeave: this.onDragOut,
-	onDragEnter: this.onDragOver,
-
-	// non-camel aliases
-	ondragout: this.onDragOut,
-	ondragover: this.onDragOver
-});
-
-dojo.dnd.DropTarget = function(){
-	if (this.constructor == dojo.dnd.DropTarget) { return; } // need to be subclassed
-	this.acceptedTypes = [];
-	dojo.dnd.dragManager.registerDropTarget(this);
-}
-
-dojo.lang.extend(dojo.dnd.DropTarget, {
-	acceptedTypes: [],
-
-	acceptsType: function(type){
-		if(!dojo.lang.inArray(this.acceptedTypes, "*")){ // wildcard
-			if(!dojo.lang.inArray(this.acceptedTypes, type)) { return false; }
-		}
-		return true;
-	},
-
-	accepts: function(dragObjects){
-		if(!dojo.lang.inArray(this.acceptedTypes, "*")){ // wildcard
-			for (var i = 0; i < dragObjects.length; i++) {
-				if (!dojo.lang.inArray(this.acceptedTypes,
-					dragObjects[i].type)) { return false; }
-			}
-		}
-		return true;
-	},
-
-	onDragOver: function(){
-	},
-	
-	onDragOut: function(){
-	},
-	
-	onDragMove: function(){
-	},
-	
-	onDrop: function(){
-	}
-});
-
-// NOTE: this interface is defined here for the convenience of the DragManager
-// implementor. It is expected that in most cases it will be satisfied by
-// extending a native event (DOM event in HTML and SVG).
-dojo.dnd.DragEvent = function(){
-	this.dragSource = null;
-	this.dragObject = null;
-	this.target = null;
-	this.eventStatus = "success"; 
-	//
-	// can be one of:
-	//	[	"dropSuccess", "dropFailure", "dragMove", 
-	//		"dragStart", "dragEnter", "dragLeave"]
-	//
-}
-
-dojo.dnd.DragManager = function(){
-	/* 
-	 *	The DragManager handles listening for low-level events and dispatching
-	 *	them to higher-level primitives like drag sources and drop targets. In
-	 *	order to do this, it must keep a list of the items.
-	 */
-}
-
-dojo.lang.extend(dojo.dnd.DragManager, {
-	selectedSources: [],
-	dragObjects: [],
-	dragSources: [],
-	registerDragSource: function(){},
-	dropTargets: [],
-	registerDropTarget: function(){},
-	lastDragTarget: null,
-	currentDragTarget: null,
-	onKeyDown: function(){},
-	onMouseOut: function(){},
-	onMouseMove: function(){},
-	onMouseUp: function(){}
-});
-
-// NOTE: despite the existance of the DragManager class, there will be a
-// singleton drag manager provided by the renderer-specific D&D support code.
-// It is therefore sane for us to assign instance variables to the DragManager
-// prototype
-
-// The renderer-specific file will define the following object:
-// dojo.dnd.dragManager = null;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/HtmlDragAndDrop.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/HtmlDragAndDrop.js
deleted file mode 100644
index bd0c68d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/HtmlDragAndDrop.js
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.dnd.HtmlDragAndDrop");
-dojo.provide("dojo.dnd.HtmlDragSource");
-dojo.provide("dojo.dnd.HtmlDropTarget");
-dojo.provide("dojo.dnd.HtmlDragObject");
-
-dojo.require("dojo.dnd.HtmlDragManager");
-dojo.require("dojo.animation.*");
-dojo.require("dojo.dom");
-dojo.require("dojo.style");
-dojo.require("dojo.html");
-dojo.require("dojo.lang");
-
-dojo.dnd.HtmlDragSource = function(node, type){
-	node = dojo.byId(node);
-	this.constrainToContainer = false;
-	if(node){
-		this.domNode = node;
-		this.dragObject = node;
-
-		// register us
-		dojo.dnd.DragSource.call(this);
-
-		// set properties that might have been clobbered by the mixin
-		this.type = type||this.domNode.nodeName.toLowerCase();
-	}
-
-}
-
-dojo.lang.extend(dojo.dnd.HtmlDragSource, {
-	dragClass: "", // CSS classname(s) applied to node when it is being dragged
-
-	onDragStart: function(){
-		var dragObj = new dojo.dnd.HtmlDragObject(this.dragObject, this.type, this.dragClass);
-
-		if (this.constrainToContainer) {
-			dragObj.constrainTo(this.constrainingContainer);
-		}
-
-		return dragObj;
-	},
-	setDragHandle: function(node){
-		node = dojo.byId(node);
-		dojo.dnd.dragManager.unregisterDragSource(this);
-		this.domNode = node;
-		dojo.dnd.dragManager.registerDragSource(this);
-	},
-	setDragTarget: function(node){
-		this.dragObject = node;
-	},
-
-	constrainTo: function(container) {
-		this.constrainToContainer = true;
-
-		if (container) {
-			this.constrainingContainer = container;
-		} else {
-			this.constrainingContainer = this.domNode.parentNode;
-		}
-	}
-});
-
-dojo.dnd.HtmlDragObject = function(node, type, dragClass){
-	this.domNode = dojo.byId(node);
-	this.type = type;
-	if(dragClass) { this.dragClass = dragClass; }
-	this.constrainToContainer = false;
-}
-
-dojo.lang.extend(dojo.dnd.HtmlDragObject, {  
-	dragClass: "",
-	opacity: 0.5,
-
-	// if true, node will not move in X and/or Y direction
-	disableX: false,
-	disableY: false,
-
-	/**
-	 * Creates a clone of this node and replaces this node with the clone in the
-	 * DOM tree. This is done to prevent the browser from selecting the textual
-	 * content of the node. This node is then set to opaque and drags around as
-	 * the intermediate representation.
-	 */
-	onDragStart: function(e){
-		dojo.html.clearSelection();
-		
-		this.scrollOffset = {
-			top: dojo.html.getScrollTop(), // document.documentElement.scrollTop,
-			left: dojo.html.getScrollLeft() // document.documentElement.scrollLeft
-		};
-	
-		this.dragStartPosition = {top: dojo.style.getAbsoluteY(this.domNode, true) + this.scrollOffset.top,
-			left: dojo.style.getAbsoluteX(this.domNode, true) + this.scrollOffset.left};
-		
-
-		this.dragOffset = {top: this.dragStartPosition.top - e.clientY,
-			left: this.dragStartPosition.left - e.clientX};
-
-		this.dragClone = this.domNode.cloneNode(true);
-		//this.domNode.parentNode.replaceChild(this.dragClone, this.domNode);
-
-
- 		if ((this.domNode.parentNode.nodeName.toLowerCase() == 'body') || (dojo.style.getComputedStyle(this.domNode.parentNode,"position") == "static")) {
-			this.parentPosition = {top: 0, left: 0};
-		} else {
-			this.parentPosition = {top: dojo.style.getAbsoluteY(this.domNode.parentNode, true),
-				left: dojo.style.getAbsoluteX(this.domNode.parentNode,true)};
-		}
-	
-		if (this.constrainToContainer) {
-			this.constraints = this.getConstraints();
-		}
-
-		// set up for dragging
-		with(this.dragClone.style){
-			position = "absolute";
-			top = this.dragOffset.top + e.clientY + "px";
-			left = this.dragOffset.left + e.clientX + "px";
-		}
-
-		if(this.dragClass) { dojo.html.addClass(this.dragClone, this.dragClass); }
-		dojo.style.setOpacity(this.dragClone, this.opacity);
-		dojo.html.body().appendChild(this.dragClone);
-	},
-
-	getConstraints: function() {
-
-		if (this.constrainingContainer.nodeName.toLowerCase() == 'body') {
-			width = dojo.html.getViewportWidth();
-			height = dojo.html.getViewportHeight();
-			padLeft = 0;
-			padTop = 0;
-		} else {
-			width = dojo.style.getContentWidth(this.constrainingContainer);
-			height = dojo.style.getContentHeight(this.constrainingContainer);	
-			padLeft = dojo.style.getPixelValue(this.constrainingContainer, "padding-left", true);
-			padTop = dojo.style.getPixelValue(this.constrainingContainer, "padding-top", true);
-		}
-
-		return {
-			minX: padLeft,
-			minY: padTop,
-			maxX: padLeft+width - dojo.style.getOuterWidth(this.domNode),
-			maxY: padTop+height - dojo.style.getOuterHeight(this.domNode) 
-		}
-	},
-
-	updateDragOffset: function() {
-		var sTop = dojo.html.getScrollTop(); // document.documentElement.scrollTop;
-		var sLeft = dojo.html.getScrollLeft(); // document.documentElement.scrollLeft;
-		if(sTop != this.scrollOffset.top) {
-			var diff = sTop - this.scrollOffset.top;
-			this.dragOffset.top += diff;
-			this.scrollOffset.top = sTop;
-		}
-	},
-	
-	/** Moves the node to follow the mouse */
-	onDragMove: function(e){
-		this.updateDragOffset();
-		var x = this.dragOffset.left + e.clientX - this.parentPosition.left;
-		var y = this.dragOffset.top + e.clientY - this.parentPosition.top;
-
-		if (this.constrainToContainer) {
-			if (x < this.constraints.minX) { x = this.constraints.minX; }
-			if (y < this.constraints.minY) { y = this.constraints.minY; }
-			if (x > this.constraints.maxX) { x = this.constraints.maxX; }
-			if (y > this.constraints.maxY) { y = this.constraints.maxY; }
-		}
-
-		if(!this.disableY) { this.dragClone.style.top = y + "px"; }
-		if(!this.disableX) { this.dragClone.style.left = x + "px"; }
-	},
-
-	/**
-	 * If the drag operation returned a success we reomve the clone of
-	 * ourself from the original position. If the drag operation returned
-	 * failure we slide back over to where we came from and end the operation
-	 * with a little grace.
-	 */
-	onDragEnd: function(e){
-		switch(e.dragStatus){
-
-			case "dropSuccess":
-				dojo.dom.removeNode(this.dragClone);
-				this.dragClone = null;
-				break;
-		
-			case "dropFailure": // slide back to the start
-				var startCoords = [dojo.style.getAbsoluteX(this.dragClone), 
-							dojo.style.getAbsoluteY(this.dragClone)];
-				// offset the end so the effect can be seen
-				var endCoords = [this.dragStartPosition.left + 1,
-					this.dragStartPosition.top + 1];
-	
-				// animate
-				var line = new dojo.math.curves.Line(startCoords, endCoords);
-				var anim = new dojo.animation.Animation(line, 300, 0, 0);
-				var dragObject = this;
-				dojo.event.connect(anim, "onAnimate", function(e) {
-					dragObject.dragClone.style.left = e.x + "px";
-					dragObject.dragClone.style.top = e.y + "px";
-				});
-				dojo.event.connect(anim, "onEnd", function (e) {
-					// pause for a second (not literally) and disappear
-					dojo.lang.setTimeout(dojo.dom.removeNode, 200,
-						dragObject.dragClone);
-				});
-				anim.play();
-				break;
-		}
-	},
-
-	constrainTo: function(container) {
-		this.constrainToContainer=true;
-		if (container) {
-			this.constrainingContainer = container;
-		} else {
-			this.constrainingContainer = this.domNode.parentNode;
-		}
-	}
-});
-
-dojo.dnd.HtmlDropTarget = function(node, types){
-	if (arguments.length == 0) { return; }
-	node = dojo.byId(node);
-	this.domNode = node;
-	dojo.dnd.DropTarget.call(this);
-	this.acceptedTypes = types || [];
-}
-dojo.inherits(dojo.dnd.HtmlDropTarget, dojo.dnd.DropTarget);
-
-dojo.lang.extend(dojo.dnd.HtmlDropTarget, {  
-	onDragOver: function(e){
-		if(!this.accepts(e.dragObjects)){ return false; }
-		
-		// cache the positions of the child nodes
-		this.childBoxes = [];
-		for (var i = 0, child; i < this.domNode.childNodes.length; i++) {
-			child = this.domNode.childNodes[i];
-			if (child.nodeType != dojo.dom.ELEMENT_NODE) { continue; }
-			var top = dojo.style.getAbsoluteY(child);
-			var bottom = top + dojo.style.getInnerHeight(child);
-			var left = dojo.style.getAbsoluteX(child);
-			var right = left + dojo.style.getInnerWidth(child);
-			this.childBoxes.push({top: top, bottom: bottom,
-				left: left, right: right, node: child});
-		}
-		
-		// TODO: use dummy node
-		
-		return true;
-	},
-	
-	_getNodeUnderMouse: function(e){
-		var mousex = e.pageX || e.clientX + dojo.html.body().scrollLeft;
-		var mousey = e.pageY || e.clientY + dojo.html.body().scrollTop;
-
-		// find the child
-		for (var i = 0, child; i < this.childBoxes.length; i++) {
-			with (this.childBoxes[i]) {
-				if (mousex >= left && mousex <= right &&
-					mousey >= top && mousey <= bottom) { return i; }
-			}
-		}
-		
-		return -1;
-	},
-
-	createDropIndicator: function() {
-		this.dropIndicator = document.createElement("div");
-		with (this.dropIndicator.style) {
-			position = "absolute";
-			zIndex = 1;
-			borderTopWidth = "1px";
-			borderTopColor = "black";
-			borderTopStyle = "solid";
-			width = dojo.style.getInnerWidth(this.domNode) + "px";
-			left = dojo.style.getAbsoluteX(this.domNode) + "px";
-		}
-	},
-	
-	onDragMove: function(e, dragObjects){
-		var i = this._getNodeUnderMouse(e);
-		
-		if(!this.dropIndicator){
-			this.createDropIndicator();
-		}
-
-		if(i < 0) {
-			if(this.childBoxes.length) {
-				var before = (dojo.html.gravity(this.childBoxes[0].node, e) & dojo.html.gravity.NORTH);
-			} else {
-				var before = true;
-			}
-		} else {
-			var child = this.childBoxes[i];
-			var before = (dojo.html.gravity(child.node, e) & dojo.html.gravity.NORTH);
-		}
-		this.placeIndicator(e, dragObjects, i, before);
-
-		if(!dojo.html.hasParent(this.dropIndicator)) {
-			dojo.html.body().appendChild(this.dropIndicator);
-		}
-	},
-
-	placeIndicator: function(e, dragObjects, boxIndex, before) {
-		with(this.dropIndicator.style){
-			if (boxIndex < 0) {
-				if (this.childBoxes.length) {
-					top = (before ? this.childBoxes[0].top
-						: this.childBoxes[this.childBoxes.length - 1].bottom) + "px";
-				} else {
-					top = dojo.style.getAbsoluteY(this.domNode) + "px";
-				}
-			} else {
-				var child = this.childBoxes[boxIndex];
-				top = (before ? child.top : child.bottom) + "px";
-			}
-		}
-	},
-
-	onDragOut: function(e) {
-		dojo.dom.removeNode(this.dropIndicator);
-		delete this.dropIndicator;
-	},
-	
-	/**
-	 * Inserts the DragObject as a child of this node relative to the
-	 * position of the mouse.
-	 *
-	 * @return true if the DragObject was inserted, false otherwise
-	 */
-	onDrop: function(e){
-		this.onDragOut(e);
-		
-		var i = this._getNodeUnderMouse(e);
-
-		if (i < 0) {
-			if (this.childBoxes.length) {
-				if (dojo.html.gravity(this.childBoxes[0].node, e) & dojo.html.gravity.NORTH) {
-					return this.insert(e, this.childBoxes[0].node, "before");
-				} else {
-					return this.insert(e, this.childBoxes[this.childBoxes.length-1].node, "after");
-				}
-			}
-			return this.insert(e, this.domNode, "append");
-		}
-		
-		var child = this.childBoxes[i];
-		if (dojo.html.gravity(child.node, e) & dojo.html.gravity.NORTH) {
-			return this.insert(e, child.node, "before");
-		} else {
-			return this.insert(e, child.node, "after");
-		}
-	},
-
-	insert: function(e, refNode, position) {
-		var node = e.dragObject.domNode;
-
-		if(position == "before") {
-			return dojo.html.insertBefore(node, refNode);
-		} else if(position == "after") {
-			return dojo.html.insertAfter(node, refNode);
-		} else if(position == "append") {
-			refNode.appendChild(node);
-			return true;
-		}
-
-		return false;
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/HtmlDragManager.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/HtmlDragManager.js
deleted file mode 100644
index 9651a06..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/HtmlDragManager.js
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.dnd.HtmlDragManager");
-dojo.require("dojo.event.*");
-dojo.require("dojo.lang");
-dojo.require("dojo.html");
-dojo.require("dojo.style");
-
-// NOTE: there will only ever be a single instance of HTMLDragManager, so it's
-// safe to use prototype properties for book-keeping.
-dojo.dnd.HtmlDragManager = function(){
-}
-
-dojo.inherits(dojo.dnd.HtmlDragManager, dojo.dnd.DragManager);
-
-dojo.lang.extend(dojo.dnd.HtmlDragManager, {
-	/**
-	 * There are several sets of actions that the DnD code cares about in the
-	 * HTML context:
-	 *	1.) mouse-down ->
-	 *			(draggable selection)
-	 *			(dragObject generation)
-	 *		mouse-move ->
-	 *			(draggable movement)
-	 *			(droppable detection)
-	 *			(inform droppable)
-	 *			(inform dragObject)
-	 *		mouse-up
-	 *			(inform/destroy dragObject)
-	 *			(inform draggable)
-	 *			(inform droppable)
-	 *	2.) mouse-down -> mouse-down
-	 *			(click-hold context menu)
-	 *	3.) mouse-click ->
-	 *			(draggable selection)
-	 *		shift-mouse-click ->
-	 *			(augment draggable selection)
-	 *		mouse-down ->
-	 *			(dragObject generation)
-	 *		mouse-move ->
-	 *			(draggable movement)
-	 *			(droppable detection)
-	 *			(inform droppable)
-	 *			(inform dragObject)
-	 *		mouse-up
-	 *			(inform draggable)
-	 *			(inform droppable)
-	 *	4.) mouse-up
-	 *			(clobber draggable selection)
-	 */
-	disabled: false, // to kill all dragging!
-	nestedTargets: false,
-	mouseDownTimer: null, // used for click-hold operations
-	dsCounter: 0,
-	dsPrefix: "dojoDragSource",
-
-	// dimension calculation cache for use durring drag
-	dropTargetDimensions: [],
-
-	currentDropTarget: null,
-	currentDropTargetPoints: null,
-	previousDropTarget: null,
-	_dragTriggered: false,
-
-	selectedSources: [],
-	dragObjects: [],
-
-	// mouse position properties
-	currentX: null,
-	currentY: null,
-	lastX: null,
-	lastY: null,
-	mouseDownX: null,
-	mouseDownY: null,
-	threshold: 7,
-
-	dropAcceptable: false,
-
-	// method over-rides
-	registerDragSource: function(ds){
-		if(ds["domNode"]){
-			// FIXME: dragSource objects SHOULD have some sort of property that
-			// references their DOM node, we shouldn't just be passing nodes and
-			// expecting it to work.
-			var dp = this.dsPrefix;
-			var dpIdx = dp+"Idx_"+(this.dsCounter++);
-			ds.dragSourceId = dpIdx;
-			this.dragSources[dpIdx] = ds;
-			ds.domNode.setAttribute(dp, dpIdx);
-		}
-	},
-
-	unregisterDragSource: function(ds){
-		if (ds["domNode"]){
-
-			var dp = this.dsPrefix;
-			var dpIdx = ds.dragSourceId;
-			delete ds.dragSourceId;
-			delete this.dragSources[dpIdx];
-			ds.domNode.setAttribute(dp, null);
-		}
-	},
-
-	registerDropTarget: function(dt){
-		this.dropTargets.push(dt);
-	},
-
-	getDragSource: function(e){
-		var tn = e.target;
-		if(tn === dojo.html.body()){ return; }
-		var ta = dojo.html.getAttribute(tn, this.dsPrefix);
-		while((!ta)&&(tn)){
-			tn = tn.parentNode;
-			if((!tn)||(tn === dojo.html.body())){ return; }
-			ta = dojo.html.getAttribute(tn, this.dsPrefix);
-		}
-		return this.dragSources[ta];
-	},
-
-	onKeyDown: function(e){
-	},
-
-	onMouseDown: function(e){
-		if(this.disabled) { return; }
-
-		this.mouseDownX = e.clientX;
-		this.mouseDownY = e.clientY;
-
-		var target = e.target.nodeType == dojo.dom.TEXT_NODE ?
-			e.target.parentNode : e.target;
-
-		// do not start drag involvement if the user is interacting with
-		// a form element.
-		switch(target.tagName.toLowerCase()) {
-			case "a": case "button": case "textarea":
-			case "input":
-				return;
-		}
-		
-		// find a selection object, if one is a parent of the source node
-		var ds = this.getDragSource(e);
-		if(!ds){ return; }
-		if(!dojo.lang.inArray(this.selectedSources, ds)){
-			this.selectedSources.push(ds);
-		}
-		
-		// WARNING: preventing the default action on all mousedown events
-		// prevents user interaction with the contents.
-		e.preventDefault();
-		
-		dojo.event.connect(document, "onmousemove", this, "onMouseMove");
-	},
-
-	onMouseUp: function(e){
-		this.mouseDownX = null;
-		this.mouseDownY = null;
-		this._dragTriggered = false;
-		var _this = this;
-		e.dragSource = this.dragSource;
-		if((!e.shiftKey)&&(!e.ctrlKey)){
-			dojo.lang.forEach(this.dragObjects, function(tempDragObj){
-				var ret = null;
-				if(!tempDragObj){ return; }
-				if(_this.currentDropTarget) {
-					e.dragObject = tempDragObj;
-	
-					// NOTE: we can't get anything but the current drop target
-					// here since the drag shadow blocks mouse-over events.
-					// This is probelematic for dropping "in" something
-					var ce = _this.currentDropTarget.domNode.childNodes;
-					if(ce.length > 0){
-						e.dropTarget = ce[0];
-						while(e.dropTarget == tempDragObj.domNode){
-							e.dropTarget = e.dropTarget.nextSibling;
-						}
-					}else{
-						e.dropTarget = _this.currentDropTarget.domNode;
-					}
-					if (_this.dropAcceptable){
-						ret = _this.currentDropTarget.onDrop(e);
-					} else {
-						 _this.currentDropTarget.onDragOut(e);
-					}
-				}
-				
-				e.dragStatus = _this.dropAcceptable && ret ? "dropSuccess" : "dropFailure";
-				tempDragObj.onDragEnd(e);
-			});
-						
-			this.selectedSources = [];
-			this.dragObjects = [];
-			this.dragSource = null;
-		}
-		dojo.event.disconnect(document, "onmousemove", this, "onMouseMove");
-		this.currentDropTarget = null;
-		this.currentDropTargetPoints = null;
-	},
-
-	scrollBy: function(x, y) {
-		for(var i = 0; i < this.dragObjects.length; i++) {
-			if(this.dragObjects[i].updateDragOffset) {
-				this.dragObjects[i].updateDragOffset();
-			}
-		}
-	},
-
-	_dragStartDistance: function(x, y){
-		if((!this.mouseDownX)||(!this.mouseDownX)){
-			return;
-		}
-		var dx = Math.abs(x-this.mouseDownX);
-		var dx2 = dx*dx;
-		var dy = Math.abs(y-this.mouseDownY);
-		var dy2 = dy*dy;
-		return parseInt(Math.sqrt(dx2+dy2), 10);
-	},
-
-	onMouseMove: function(e){
-		var _this = this;
-		// if we've got some sources, but no drag objects, we need to send
-		// onDragStart to all the right parties and get things lined up for
-		// drop target detection
-		if(	(this.selectedSources.length)&&
-			(!this.dragObjects.length) ){
-			var dx;
-			var dy;
-			if(!this._dragTriggered){
-				this._dragTriggered = (this._dragStartDistance(e.clientX, e.clientY) > this.threshold);
-				if(!this._dragTriggered){ return; }
-				dx = e.clientX-this.mouseDownX;
-				dy = e.clientY-this.mouseDownY;
-			}
-		
-			if (this.selectedSources.length == 1) {
-				this.dragSource = this.selectedSources[0];
-			}
-
-			dojo.lang.forEach(this.selectedSources, function(tempSource){
-				if(!tempSource){ return; }
-				var tdo = tempSource.onDragStart(e);
-				if(tdo){
-					tdo.onDragStart(e);
-
-					// "bump" the drag object to account for the drag threshold
-					tdo.dragOffset.top += dy;
-					tdo.dragOffset.left += dx;
-
-					_this.dragObjects.push(tdo);
-				}
-			});
-
-			this.dropTargetDimensions = [];
-			dojo.lang.forEach(this.dropTargets, function(tempTarget){
-				var tn = tempTarget.domNode;
-				if(!tn){ return; }
-				var ttx = dojo.style.getAbsoluteX(tn, true);
-				var tty = dojo.style.getAbsoluteY(tn, true);
-				_this.dropTargetDimensions.push([
-					[ttx, tty],	// upper-left
-					// lower-right
-					[ ttx+dojo.style.getInnerWidth(tn), tty+dojo.style.getInnerHeight(tn) ],
-					tempTarget
-				]);
-			});
-		}
-		// FIXME: we need to add dragSources and dragObjects to e
-		for (var i = 0; i < this.dragObjects.length; i++){
-			if(this.dragObjects[i]){ this.dragObjects[i].onDragMove(e); }
-		}
-
-		// if we have a current drop target, check to see if we're outside of
-		// it. If so, do all the actions that need doing.
-		var dtp = this.currentDropTargetPoints;
-		if((!this.nestedTargets)&&(dtp)&&(this.isInsideBox(e, dtp))){
-			if(this.dropAcceptable){
-				this.currentDropTarget.onDragMove(e, this.dragObjects);
-			}
-		}else{
-			// FIXME: need to fix the event object!
-			// see if we can find a better drop target
-			var bestBox = this.findBestTarget(e);
-
-			if(bestBox.target == null){
-				if(this.currentDropTarget){
-					this.currentDropTarget.onDragOut(e);
-					this.currentDropTarget = null;
-					this.currentDropTargetPoints = null;
-				}
-				this.dropAcceptable = false;
-				return;
-			}
-
-			if(this.currentDropTarget != bestBox.target){
-				if(this.currentDropTarget){
-					this.currentDropTarget.onDragOut(e);
-				}
-				this.currentDropTarget = bestBox.target;
-				this.currentDropTargetPoints = bestBox.points;
-				e.dragObjects = this.dragObjects;
-				this.dropAcceptable = this.currentDropTarget.onDragOver(e);
-
-			}else{
-				if(this.dropAcceptable){
-					this.currentDropTarget.onDragMove(e, this.dragObjects);
-				}
-			}
-
-		}
-	},
-    
-	findBestTarget: function(e) {
-		var _this = this;
-		var bestBox = new Object();
-		bestBox.target = null;
-		bestBox.points = null;
-		dojo.lang.forEach(this.dropTargetDimensions, function(tmpDA) {
-			if(_this.isInsideBox(e, tmpDA)){
-				bestBox.target = tmpDA[2];
-				bestBox.points = tmpDA;
-				if(!_this.nestedTargets){ return "break"; }
-			}
-		});
-
-		return bestBox;
-	},
-
-	isInsideBox: function(e, coords){
-		if(	(e.clientX > coords[0][0])&&
-			(e.clientX < coords[1][0])&&
-			(e.clientY > coords[0][1])&&
-			(e.clientY < coords[1][1]) ){
-			return true;
-		}
-		return false;
-	},
-
-	onMouseOver: function(e){
-	},
-	
-	onMouseOut: function(e){
-	}
-});
-
-dojo.dnd.dragManager = new dojo.dnd.HtmlDragManager();
-
-// global namespace protection closure
-(function(){
-	var d = document;
-	var dm = dojo.dnd.dragManager;
-	// set up event handlers on the document
-	dojo.event.connect(d, "onkeydown", 		dm, "onKeyDown");
-	dojo.event.connect(d, "onmouseover",	dm, "onMouseOver");
-	dojo.event.connect(d, "onmouseout", 	dm, "onMouseOut");
-	dojo.event.connect(d, "onmousedown",	dm, "onMouseDown");
-	dojo.event.connect(d, "onmouseup",		dm, "onMouseUp");
-	dojo.event.connect(window, "scrollBy",	dm, "scrollBy");
-})();
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/HtmlDragMove.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/HtmlDragMove.js
deleted file mode 100644
index 34bfdef..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/HtmlDragMove.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.dnd.HtmlDragMove");
-dojo.provide("dojo.dnd.HtmlDragMoveSource");
-dojo.provide("dojo.dnd.HtmlDragMoveObject");
-dojo.require("dojo.dnd.*");
-
-dojo.dnd.HtmlDragMoveSource = function(node, type){
-	dojo.dnd.HtmlDragSource.call(this, node, type);
-}
-
-dojo.inherits(dojo.dnd.HtmlDragMoveSource, dojo.dnd.HtmlDragSource);
-
-dojo.lang.extend(dojo.dnd.HtmlDragMoveSource, {
-	onDragStart: function(){
-		var dragObj =  new dojo.dnd.HtmlDragMoveObject(this.dragObject, this.type);
-
-		if (this.constrainToContainer) {
-			dragObj.constrainTo(this.constrainingContainer);
-		}
-		return dragObj;
-	}
-});
-
-dojo.dnd.HtmlDragMoveObject = function(node, type){
-	dojo.dnd.HtmlDragObject.call(this, node, type);
-}
-
-dojo.inherits(dojo.dnd.HtmlDragMoveObject, dojo.dnd.HtmlDragObject);
-
-dojo.lang.extend(dojo.dnd.HtmlDragMoveObject, {
-	onDragEnd: function(e){
-		delete this.dragClone;
-	},
-	
-	onDragStart: function(e){
-		dojo.html.clearSelection();
-		
-		this.dragClone = this.domNode;
-
-		this.scrollOffset = {
-			top: dojo.html.getScrollTop(), // document.documentElement.scrollTop,
-			left: dojo.html.getScrollLeft() // document.documentElement.scrollLeft
-		};
-
-		this.dragStartPosition = {top: dojo.style.getAbsoluteY(this.domNode) ,
-			left: dojo.style.getAbsoluteX(this.domNode) };
-		
-		this.dragOffset = {top: this.dragStartPosition.top - e.clientY,
-			left: this.dragStartPosition.left - e.clientX};
-
-		if (this.domNode.parentNode.nodeName.toLowerCase() == 'body') {
-			this.parentPosition = {top: 0, left: 0};
-		} else {
-			this.parentPosition = {top: dojo.style.getAbsoluteY(this.domNode.parentNode, true),
-				left: dojo.style.getAbsoluteX(this.domNode.parentNode,true)};
-		}
-
-		this.dragClone.style.position = "absolute";
-
-		if (this.constrainToContainer) {
-			this.constraints = this.getConstraints();
-		}
-	}
-
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/Sortable.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/Sortable.js
deleted file mode 100644
index 39c722a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/Sortable.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.dnd.Sortable");
-dojo.require("dojo.dnd.*");
-
-dojo.dnd.Sortable = function () {}
-
-dojo.lang.extend(dojo.dnd.Sortable, {
-
-	ondragstart: function (e) {
-		var dragObject = e.target;
-		while (dragObject.parentNode && dragObject.parentNode != this) {
-			dragObject = dragObject.parentNode;
-		}
-		// TODO: should apply HtmlDropTarget interface to self
-		// TODO: should apply HtmlDragObject interface?
-		return dragObject;
-	}
-
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/TreeDragAndDrop.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/TreeDragAndDrop.js
deleted file mode 100644
index 55bbf58..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/TreeDragAndDrop.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/**
- * TreeDrag* specialized on managing subtree drags
- * It selects nodes and visualises what's going on,
- * but delegates real actions upon tree to the controller
- *
- * This code is considered a part of controller
-*/
-
-dojo.provide("dojo.dnd.TreeDragAndDrop");
-dojo.provide("dojo.dnd.TreeDragSource");
-dojo.provide("dojo.dnd.TreeDropTarget");
-
-dojo.require("dojo.dnd.HtmlDragAndDrop");
-
-dojo.dnd.TreeDragSource = function(node, syncController, type, treeNode){
-	this.controller = syncController;
-	this.treeNode = treeNode;
-
-	dojo.dnd.HtmlDragSource.call(this, node, type);
-}
-
-dojo.inherits(dojo.dnd.TreeDragSource, dojo.dnd.HtmlDragSource);
-
-dojo.lang.extend(dojo.dnd.TreeDragSource, {
-	onDragStart: function(){
-		/* extend adds functions to prototype */
-		var dragObject = dojo.dnd.HtmlDragSource.prototype.onDragStart.call(this);
-		//dojo.debugShallow(dragObject)
-
-		dragObject.treeNode = this.treeNode;
-
-		dragObject.onDragStart = dojo.lang.hitch(dragObject, function(e) {
-
-			/* save selection */
-			this.savedSelectedNode = this.treeNode.tree.selector.selectedNode;
-			if (this.savedSelectedNode) {
-				this.savedSelectedNode.unMarkSelected();
-			}
-
-			var result = dojo.dnd.HtmlDragObject.prototype.onDragStart.apply(this, arguments);
-
-			/* remove background grid from cloned object */
-			dojo.lang.forEach(
-				this.dragClone.getElementsByTagName('img'),
-				function(elem) { elem.style.backgroundImage='' }
-			);
-
-			return result;
-
-
-		});
-
-		dragObject.onDragEnd = function(e) {
-
-			/* restore selection */
-			if (this.savedSelectedNode) {
-				this.savedSelectedNode.markSelected();
-			}
-			//dojo.debug(e.dragStatus);
-
-			return dojo.dnd.HtmlDragObject.prototype.onDragEnd.apply(this, arguments);
-		}
-		//dojo.debug(dragObject.domNode.outerHTML)
-
-
-		return dragObject;
-	},
-
-	onDragEnd: function(e){
-
-
-		 var res = dojo.dnd.HtmlDragSource.prototype.onDragEnd.call(this, e);
-
-
-		 return res;
-	}
-});
-
-// .......................................
-
-dojo.dnd.TreeDropTarget = function(node, syncController, type, treeNode){
-
-	this.treeNode = treeNode;
-	this.controller = syncController; // I will sync-ly process drops
-
-	dojo.dnd.HtmlDropTarget.apply(this, [node, type]);
-
-}
-
-dojo.inherits(dojo.dnd.TreeDropTarget, dojo.dnd.HtmlDropTarget);
-
-dojo.lang.extend(dojo.dnd.TreeDropTarget, {
-
-	/**
-	 * Check if I can drop sourceTreeNode here
-	 * only tree node targets are implemented ATM
-	*/
-	onDragOver: function(e){
-
-		var sourceTreeNode = e.dragObjects[0].treeNode;
-
-
-		if (dojo.lang.isUndefined(sourceTreeNode) || !sourceTreeNode || sourceTreeNode.widgetType != 'EditorTreeNode') {
-			dojo.raise("Source is not of EditorTreeNode widgetType or not found");
-		}
-		//dojo.debug("This " + this.treeNode.title)
-		//dojo.debug("Source " + sourceTreeNode);
-
-		// check types compat
-		var acceptable = dojo.dnd.HtmlDropTarget.prototype.onDragOver.apply(this, arguments);
-
-		//dojo.debug("Check1 "+acceptable)
-
-
-		if (!acceptable) return false;
-
-		// can't drop parent to child etc
-		acceptable = this.controller.canChangeParent(sourceTreeNode, this.treeNode);
-
-
-		//dojo.debug("Check2 "+acceptable)
-
-		if (!acceptable) return false;
-
-
-		// mark current node being dragged into
-		if (sourceTreeNode !== this.treeNode) {
-			this.treeNode.markSelected();
-		}
-
-		return true;
-
-	},
-
-	onDragMove: function(e){
-	},
-
-	onDragOut: function(e) {
-
-		this.treeNode.unMarkSelected();
-
-		//return dojo.dnd.HtmlDropTarget.prototype.onDragOut.call(this, e);
-	},
-
-	onDrop: function(e){
-		this.onDragOut(e);
-
-		//dojo.debug('drop');
-
-		var child = this.domNode;
-		var targetTreeNode = this.treeNode;
-
-
-		if (!dojo.lang.isObject(targetTreeNode)) {
-			dojo.raise("Wrong DropTarget engaged");
-		}
-
-		var sourceTreeNode = e.dragObject.treeNode;
-
-		if (!dojo.lang.isObject(sourceTreeNode)) {
-			return false;
-		}
-
-		// I don't check that trees are same! Target/source system deals with it
-
-		//tree.changeParentRemote(sourceTreeNode, targetTreeNode);
-		return this.controller.processDrop(sourceTreeNode, targetTreeNode);
-
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/__package__.js
deleted file mode 100644
index 50dda49..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dnd/__package__.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.dnd.DragAndDrop"],
-	browser: ["dojo.dnd.HtmlDragAndDrop"]
-});
-dojo.hostenv.moduleLoaded("dojo.dnd.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dom.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dom.js
deleted file mode 100644
index 2fe223a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/dom.js
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.dom");
-dojo.require("dojo.lang");
-
-dojo.dom.ELEMENT_NODE                  = 1;
-dojo.dom.ATTRIBUTE_NODE                = 2;
-dojo.dom.TEXT_NODE                     = 3;
-dojo.dom.CDATA_SECTION_NODE            = 4;
-dojo.dom.ENTITY_REFERENCE_NODE         = 5;
-dojo.dom.ENTITY_NODE                   = 6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE   = 7;
-dojo.dom.COMMENT_NODE                  = 8;
-dojo.dom.DOCUMENT_NODE                 = 9;
-dojo.dom.DOCUMENT_TYPE_NODE            = 10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE        = 11;
-dojo.dom.NOTATION_NODE                 = 12;
-	
-dojo.dom.dojoml = "http://www.dojotoolkit.org/2004/dojoml";
-
-/**
- *	comprehensive list of XML namespaces
-**/
-dojo.dom.xmlns = {
-	svg : "http://www.w3.org/2000/svg",
-	smil : "http://www.w3.org/2001/SMIL20/",
-	mml : "http://www.w3.org/1998/Math/MathML",
-	cml : "http://www.xml-cml.org",
-	xlink : "http://www.w3.org/1999/xlink",
-	xhtml : "http://www.w3.org/1999/xhtml",
-	xul : "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-	xbl : "http://www.mozilla.org/xbl",
-	fo : "http://www.w3.org/1999/XSL/Format",
-	xsl : "http://www.w3.org/1999/XSL/Transform",
-	xslt : "http://www.w3.org/1999/XSL/Transform",
-	xi : "http://www.w3.org/2001/XInclude",
-	xforms : "http://www.w3.org/2002/01/xforms",
-	saxon : "http://icl.com/saxon",
-	xalan : "http://xml.apache.org/xslt",
-	xsd : "http://www.w3.org/2001/XMLSchema",
-	dt: "http://www.w3.org/2001/XMLSchema-datatypes",
-	xsi : "http://www.w3.org/2001/XMLSchema-instance",
-	rdf : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
-	rdfs : "http://www.w3.org/2000/01/rdf-schema#",
-	dc : "http://purl.org/dc/elements/1.1/",
-	dcq: "http://purl.org/dc/qualifiers/1.0",
-	"soap-env" : "http://schemas.xmlsoap.org/soap/envelope/",
-	wsdl : "http://schemas.xmlsoap.org/wsdl/",
-	AdobeExtensions : "http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-};
-
-dojo.dom.isNode = dojo.lang.isDomNode = function(wh){
-	if(typeof Element == "object") {
-		try {
-			return wh instanceof Element;
-		} catch(E) {}
-	} else {
-		// best-guess
-		return wh && !isNaN(wh.nodeType);
-	}
-}
-dojo.lang.whatAmI.custom["node"] = dojo.dom.isNode;
-
-dojo.dom.getTagName = function(node){
-	var tagName = node.tagName;
-	if(tagName.substr(0,5).toLowerCase()!="dojo:"){
-		
-		if(tagName.substr(0,4).toLowerCase()=="dojo"){
-			// FIXME: this assuumes tag names are always lower case
-			return "dojo:" + tagName.substring(4).toLowerCase();
-		}
-
-		// allow lower-casing
-		var djt = node.getAttribute("dojoType")||node.getAttribute("dojotype");
-		if(djt){
-			return "dojo:"+djt.toLowerCase();
-		}
-		
-		if((node.getAttributeNS)&&(node.getAttributeNS(this.dojoml,"type"))){
-			return "dojo:" + node.getAttributeNS(this.dojoml,"type").toLowerCase();
-		}
-		try{
-			// FIXME: IE really really doesn't like this, so we squelch
-			// errors for it
-			djt = node.getAttribute("dojo:type");
-		}catch(e){ /* FIXME: log? */ }
-		if(djt){
-			return "dojo:"+djt.toLowerCase();
-		}
-
-		if((!dj_global["djConfig"])||(!djConfig["ignoreClassNames"])){
-			// FIXME: should we make this optionally enabled via djConfig?
-			var classes = node.className||node.getAttribute("class");
-			// FIXME: following line, without check for existence of classes.indexOf
-			// breaks firefox 1.5's svg widgets
-			if((classes)&&(classes.indexOf)&&(classes.indexOf("dojo-") != -1)){
-				var aclasses = classes.split(" ");
-				for(var x=0; x<aclasses.length; x++){
-					if((aclasses[x].length>5)&&(aclasses[x].indexOf("dojo-")>=0)){
-						return "dojo:"+aclasses[x].substr(5).toLowerCase();
-					}
-				}
-			}
-		}
-
-	}
-	return tagName.toLowerCase();
-}
-
-dojo.dom.getUniqueId = function(){
-	do {
-		var id = "dj_unique_" + (++arguments.callee._idIncrement);
-	}while(document.getElementById(id));
-	return id;
-}
-dojo.dom.getUniqueId._idIncrement = 0;
-
-dojo.dom.firstElement = dojo.dom.getFirstChildElement = function(parentNode, tagName){
-	var node = parentNode.firstChild;
-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE){
-		node = node.nextSibling;
-	}
-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
-		node = dojo.dom.nextElement(node, tagName);
-	}
-	return node;
-}
-
-dojo.dom.lastElement = dojo.dom.getLastChildElement = function(parentNode, tagName){
-	var node = parentNode.lastChild;
-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE) {
-		node = node.previousSibling;
-	}
-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
-		node = dojo.dom.prevElement(node, tagName);
-	}
-	return node;
-}
-
-dojo.dom.nextElement = dojo.dom.getNextSiblingElement = function(node, tagName){
-	if(!node) { return null; }
-	do {
-		node = node.nextSibling;
-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);
-
-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
-		return dojo.dom.nextElement(node, tagName);
-	}
-	return node;
-}
-
-dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement = function(node, tagName){
-	if(!node) { return null; }
-	if(tagName) { tagName = tagName.toLowerCase(); }
-	do {
-		node = node.previousSibling;
-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);
-
-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
-		return dojo.dom.prevElement(node, tagName);
-	}
-	return node;
-}
-
-// TODO: hmph
-/*this.forEachChildTag = function(node, unaryFunc) {
-	var child = this.getFirstChildTag(node);
-	while(child) {
-		if(unaryFunc(child) == "break") { break; }
-		child = this.getNextSiblingTag(child);
-	}
-}*/
-
-dojo.dom.moveChildren = function(srcNode, destNode, trim){
-	var count = 0;
-	if(trim) {
-		while(srcNode.hasChildNodes() &&
-			srcNode.firstChild.nodeType == dojo.dom.TEXT_NODE) {
-			srcNode.removeChild(srcNode.firstChild);
-		}
-		while(srcNode.hasChildNodes() &&
-			srcNode.lastChild.nodeType == dojo.dom.TEXT_NODE) {
-			srcNode.removeChild(srcNode.lastChild);
-		}
-	}
-	while(srcNode.hasChildNodes()){
-		destNode.appendChild(srcNode.firstChild);
-		count++;
-	}
-	return count;
-}
-
-dojo.dom.copyChildren = function(srcNode, destNode, trim){
-	var clonedNode = srcNode.cloneNode(true);
-	return this.moveChildren(clonedNode, destNode, trim);
-}
-
-dojo.dom.removeChildren = function(node){
-	var count = node.childNodes.length;
-	while(node.hasChildNodes()){ node.removeChild(node.firstChild); }
-	return count;
-}
-
-dojo.dom.replaceChildren = function(node, newChild){
-	// FIXME: what if newChild is an array-like object?
-	dojo.dom.removeChildren(node);
-	node.appendChild(newChild);
-}
-
-dojo.dom.removeNode = function(node){
-	if(node && node.parentNode){
-		// return a ref to the removed child
-		return node.parentNode.removeChild(node);
-	}
-}
-
-dojo.dom.getAncestors = function(node, filterFunction, returnFirstHit) {
-	var ancestors = [];
-	var isFunction = dojo.lang.isFunction(filterFunction);
-	while(node) {
-		if (!isFunction || filterFunction(node)) {
-			ancestors.push(node);
-		}
-		if (returnFirstHit && ancestors.length > 0) { return ancestors[0]; }
-		
-		node = node.parentNode;
-	}
-	if (returnFirstHit) { return null; }
-	return ancestors;
-}
-
-dojo.dom.getAncestorsByTag = function(node, tag, returnFirstHit) {
-	tag = tag.toLowerCase();
-	return dojo.dom.getAncestors(node, function(el){
-		return ((el.tagName)&&(el.tagName.toLowerCase() == tag));
-	}, returnFirstHit);
-}
-
-dojo.dom.getFirstAncestorByTag = function(node, tag) {
-	return dojo.dom.getAncestorsByTag(node, tag, true);
-}
-
-dojo.dom.isDescendantOf = function(node, ancestor, guaranteeDescendant){
-	// guaranteeDescendant allows us to be a "true" isDescendantOf function
-	if(guaranteeDescendant && node) { node = node.parentNode; }
-	while(node) {
-		if(node == ancestor){ return true; }
-		node = node.parentNode;
-	}
-	return false;
-}
-
-dojo.dom.innerXML = function(node){
-	if(node.innerXML){
-		return node.innerXML;
-	}else if(typeof XMLSerializer != "undefined"){
-		return (new XMLSerializer()).serializeToString(node);
-	}
-}
-
-dojo.dom.createDocumentFromText = function(str, mimetype){
-	if(!mimetype) { mimetype = "text/xml"; }
-	if(typeof DOMParser != "undefined") {
-		var parser = new DOMParser();
-		return parser.parseFromString(str, mimetype);
-	}else if(typeof ActiveXObject != "undefined"){
-		var domDoc = new ActiveXObject("Microsoft.XMLDOM");
-		if(domDoc) {
-			domDoc.async = false;
-			domDoc.loadXML(str);
-			return domDoc;
-		}else{
-			dojo.debug("toXml didn't work?");
-		}
-	/*
-	}else if((dojo.render.html.capable)&&(dojo.render.html.safari)){
-		// FIXME: this doesn't appear to work!
-		// from: http://web-graphics.com/mtarchive/001606.php
-		// var xml = '<?xml version="1.0"?>'+str;
-		var mtype = "text/xml";
-		var xml = '<?xml version="1.0"?>'+str;
-		var url = "data:"+mtype+";charset=utf-8,"+encodeURIComponent(xml);
-		var request = new XMLHttpRequest();
-		request.open("GET", url, false);
-		request.overrideMimeType(mtype);
-		request.send(null);
-		return request.responseXML;
-	*/
-	}else if(document.createElement){
-		// FIXME: this may change all tags to uppercase!
-		var tmp = document.createElement("xml");
-		tmp.innerHTML = str;
-		if(document.implementation && document.implementation.createDocument) {
-			var xmlDoc = document.implementation.createDocument("foo", "", null);
-			for(var i = 0; i < tmp.childNodes.length; i++) {
-				xmlDoc.importNode(tmp.childNodes.item(i), true);
-			}
-			return xmlDoc;
-		}
-		// FIXME: probably not a good idea to have to return an HTML fragment
-		// FIXME: the tmp.doc.firstChild is as tested from IE, so it may not
-		// work that way across the board
-		return tmp.document && tmp.document.firstChild ?
-			tmp.document.firstChild : tmp;
-	}
-	return null;
-}
-
-dojo.dom.prependChild = function(node, parent) {
-	if(parent.firstChild) {
-		parent.insertBefore(node, parent.firstChild);
-	} else {
-		parent.appendChild(node);
-	}
-	return true;
-}
-
-dojo.dom.insertBefore = function(node, ref, force){
-	if (force != true &&
-		(node === ref || node.nextSibling === ref)){ return false; }
-	var parent = ref.parentNode;
-	parent.insertBefore(node, ref);
-	return true;
-}
-
-dojo.dom.insertAfter = function(node, ref, force){
-	var pn = ref.parentNode;
-	if(ref == pn.lastChild){
-		if((force != true)&&(node === ref)){
-			return false;
-		}
-		pn.appendChild(node);
-	}else{
-		return this.insertBefore(node, ref.nextSibling, force);
-	}
-	return true;
-}
-
-dojo.dom.insertAtPosition = function(node, ref, position){
-	if((!node)||(!ref)||(!position)){ return false; }
-	switch(position.toLowerCase()){
-		case "before":
-			return dojo.dom.insertBefore(node, ref);
-		case "after":
-			return dojo.dom.insertAfter(node, ref);
-		case "first":
-			if(ref.firstChild){
-				return dojo.dom.insertBefore(node, ref.firstChild);
-			}else{
-				ref.appendChild(node);
-				return true;
-			}
-			break;
-		default: // aka: last
-			ref.appendChild(node);
-			return true;
-	}
-}
-
-dojo.dom.insertAtIndex = function(node, containingNode, insertionIndex){
-	var siblingNodes = containingNode.childNodes;
-
-	// if there aren't any kids yet, just add it to the beginning
-
-	if (!siblingNodes.length){
-		containingNode.appendChild(node);
-		return true;
-	}
-
-	// otherwise we need to walk the childNodes
-	// and find our spot
-
-	var after = null;
-
-	for(var i=0; i<siblingNodes.length; i++){
-
-		var sibling_index = siblingNodes.item(i)["getAttribute"] ? parseInt(siblingNodes.item(i).getAttribute("dojoinsertionindex")) : -1;
-
-		if (sibling_index < insertionIndex){
-			after = siblingNodes.item(i);
-		}
-	}
-
-	if (after){
-		// add it after the node in {after}
-
-		return dojo.dom.insertAfter(node, after);
-	}else{
-		// add it to the start
-
-		return dojo.dom.insertBefore(node, siblingNodes.item(0));
-	}
-}
-	
-/**
- * implementation of the DOM Level 3 attribute.
- * 
- * @param node The node to scan for text
- * @param text Optional, set the text to this value.
- */
-dojo.dom.textContent = function(node, text){
-	if (text) {
-		dojo.dom.replaceChildren(node, document.createTextNode(text));
-		return text;
-	} else {
-		var _result = "";
-		if (node == null) { return _result; }
-		for (var i = 0; i < node.childNodes.length; i++) {
-			switch (node.childNodes[i].nodeType) {
-				case 1: // ELEMENT_NODE
-				case 5: // ENTITY_REFERENCE_NODE
-					_result += dojo.dom.textContent(node.childNodes[i]);
-					break;
-				case 3: // TEXT_NODE
-				case 2: // ATTRIBUTE_NODE
-				case 4: // CDATA_SECTION_NODE
-					_result += node.childNodes[i].nodeValue;
-					break;
-				default:
-					break;
-			}
-		}
-		return _result;
-	}
-}
-
-dojo.dom.collectionToArray = function(collection){
-	dojo.deprecated("dojo.dom.collectionToArray", "use dojo.lang.toArray instead");
-	return dojo.lang.toArray(collection);
-}
-
-dojo.dom.hasParent = function(node) {
-	if(!node || !node.parentNode || (node.parentNode && !node.parentNode.tagName)) {
-		return false;
-	}
-	return true;
-}
-
-/**
- * Determines if node has any of the provided tag names and
- * returns the tag name that matches, empty string otherwise.
- *
- * Examples:
- *
- * myFooNode = <foo />
- * isTag(myFooNode, "foo"); // returns "foo"
- * isTag(myFooNode, "bar"); // returns ""
- * isTag(myFooNode, "FOO"); // returns ""
- * isTag(myFooNode, "hey", "foo", "bar"); // returns "foo"
-**/
-dojo.dom.isTag = function(node /* ... */) {
-	if(node && node.tagName) {
-		var arr = dojo.lang.toArray(arguments, 1);
-		return arr[ dojo.lang.find(node.tagName, arr) ] || "";
-	}
-	return "";
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event.js
deleted file mode 100644
index 325cbf3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event.js
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.lang");
-dojo.provide("dojo.event");
-
-dojo.event = new function(){
-	this.canTimeout = dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-
-	// FIXME: where should we put this method (not here!)?
-	function interpolateArgs(args){
-		var dl = dojo.lang;
-		var ao = {
-			srcObj: dj_global,
-			srcFunc: null,
-			adviceObj: dj_global,
-			adviceFunc: null,
-			aroundObj: null,
-			aroundFunc: null,
-			adviceType: (args.length>2) ? args[0] : "after",
-			precedence: "last",
-			once: false,
-			delay: null,
-			rate: 0,
-			adviceMsg: false
-		};
-
-		switch(args.length){
-			case 0: return;
-			case 1: return;
-			case 2:
-				ao.srcFunc = args[0];
-				ao.adviceFunc = args[1];
-				break;
-			case 3:
-				if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-				}else if((dl.isString(args[1]))&&(dl.isString(args[2]))){
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-				}else if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					var tmpName  = dojo.lang.nameAnonFunc(args[2], ao.adviceObj);
-					ao.adviceFunc = tmpName;
-				}else if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = dj_global;
-					var tmpName  = dojo.lang.nameAnonFunc(args[0], ao.srcObj);
-					ao.srcFunc = tmpName;
-					ao.adviceObj = args[1];
-					ao.adviceFunc = args[2];
-				}
-				break;
-			case 4:
-				if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){
-					// we can assume that we've got an old-style "connect" from
-					// the sigslot school of event attachment. We therefore
-					// assume after-advice.
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){
-					ao.adviceType = args[0];
-					ao.srcObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
-					ao.adviceType = args[0];
-					ao.srcObj = dj_global;
-					var tmpName  = dojo.lang.nameAnonFunc(args[1], dj_global);
-					ao.srcFunc = tmpName;
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if(dl.isObject(args[1])){
-					ao.srcObj = args[1];
-					ao.srcFunc = args[2];
-					ao.adviceObj = dj_global;
-					ao.adviceFunc = args[3];
-				}else if(dl.isObject(args[2])){
-					ao.srcObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else{
-					ao.srcObj = ao.adviceObj = ao.aroundObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-					ao.aroundFunc = args[3];
-				}
-				break;
-			case 6:
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundFunc = args[5];
-				ao.aroundObj = dj_global;
-				break;
-			default:
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundObj = args[5];
-				ao.aroundFunc = args[6];
-				ao.once = args[7];
-				ao.delay = args[8];
-				ao.rate = args[9];
-				ao.adviceMsg = args[10];
-				break;
-		}
-
-		if((typeof ao.srcFunc).toLowerCase() != "string"){
-			ao.srcFunc = dojo.lang.getNameInObj(ao.srcObj, ao.srcFunc);
-		}
-
-		if((typeof ao.adviceFunc).toLowerCase() != "string"){
-			ao.adviceFunc = dojo.lang.getNameInObj(ao.adviceObj, ao.adviceFunc);
-		}
-
-		if((ao.aroundObj)&&((typeof ao.aroundFunc).toLowerCase() != "string")){
-			ao.aroundFunc = dojo.lang.getNameInObj(ao.aroundObj, ao.aroundFunc);
-		}
-
-		if(!ao.srcObj){
-			dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
-		}
-		if(!ao.adviceObj){
-			dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
-		}
-		return ao;
-	}
-
-	this.connect = function(){
-		var ao = interpolateArgs(arguments);
-
-		// FIXME: just doing a "getForMethod()" seems to be enough to put this into infinite recursion!!
-		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc);
-		if(ao.adviceFunc){
-			var mjp2 = dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj, ao.adviceFunc);
-		}
-
-		mjp.kwAddAdvice(ao);
-
-		return mjp;	// advanced users might want to fsck w/ the join point
-					// manually
-	}
-
-	this.connectBefore = function() {
-		var args = ["before"];
-		for(var i = 0; i < arguments.length; i++) { args.push(arguments[i]); }
-		return this.connect.apply(this, args);
-	}
-
-	this.connectAround = function() {
-		var args = ["around"];
-		for(var i = 0; i < arguments.length; i++) { args.push(arguments[i]); }
-		return this.connect.apply(this, args);
-	}
-
-	this._kwConnectImpl = function(kwArgs, disconnect){
-		var fn = (disconnect) ? "disconnect" : "connect";
-		if(typeof kwArgs["srcFunc"] == "function"){
-			kwArgs.srcObj = kwArgs["srcObj"]||dj_global;
-			var tmpName  = dojo.lang.nameAnonFunc(kwArgs.srcFunc, kwArgs.srcObj);
-			kwArgs.srcFunc = tmpName;
-		}
-		if(typeof kwArgs["adviceFunc"] == "function"){
-			kwArgs.adviceObj = kwArgs["adviceObj"]||dj_global;
-			var tmpName  = dojo.lang.nameAnonFunc(kwArgs.adviceFunc, kwArgs.adviceObj);
-			kwArgs.adviceFunc = tmpName;
-		}
-		return dojo.event[fn](	(kwArgs["type"]||kwArgs["adviceType"]||"after"),
-									kwArgs["srcObj"]||dj_global,
-									kwArgs["srcFunc"],
-									kwArgs["adviceObj"]||kwArgs["targetObj"]||dj_global,
-									kwArgs["adviceFunc"]||kwArgs["targetFunc"],
-									kwArgs["aroundObj"],
-									kwArgs["aroundFunc"],
-									kwArgs["once"],
-									kwArgs["delay"],
-									kwArgs["rate"],
-									kwArgs["adviceMsg"]||false );
-	}
-
-	this.kwConnect = function(kwArgs){
-		return this._kwConnectImpl(kwArgs, false);
-
-	}
-
-	this.disconnect = function(){
-		var ao = interpolateArgs(arguments);
-		if(!ao.adviceFunc){ return; } // nothing to disconnect
-		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc);
-		return mjp.removeAdvice(ao.adviceObj, ao.adviceFunc, ao.adviceType, ao.once);
-	}
-
-	this.kwDisconnect = function(kwArgs){
-		return this._kwConnectImpl(kwArgs, true);
-	}
-}
-
-// exactly one of these is created whenever a method with a joint point is run,
-// if there is at least one 'around' advice.
-dojo.event.MethodInvocation = function(join_point, obj, args) {
-	this.jp_ = join_point;
-	this.object = obj;
-	this.args = [];
-	for(var x=0; x<args.length; x++){
-		this.args[x] = args[x];
-	}
-	// the index of the 'around' that is currently being executed.
-	this.around_index = -1;
-}
-
-dojo.event.MethodInvocation.prototype.proceed = function() {
-	this.around_index++;
-	if(this.around_index >= this.jp_.around.length){
-		return this.jp_.object[this.jp_.methodname].apply(this.jp_.object, this.args);
-		// return this.jp_.run_before_after(this.object, this.args);
-	}else{
-		var ti = this.jp_.around[this.around_index];
-		var mobj = ti[0]||dj_global;
-		var meth = ti[1];
-		return mobj[meth].call(mobj, this);
-	}
-} 
-
-
-dojo.event.MethodJoinPoint = function(obj, methname){
-	this.object = obj||dj_global;
-	this.methodname = methname;
-	this.methodfunc = this.object[methname];
-	this.before = [];
-	this.after = [];
-	this.around = [];
-}
-
-dojo.event.MethodJoinPoint.getForMethod = function(obj, methname) {
-	// if(!(methname in obj)){
-	if(!obj){ obj = dj_global; }
-	if(!obj[methname]){
-		// supply a do-nothing method implementation
-		obj[methname] = function(){};
-	}else if((!dojo.lang.isFunction(obj[methname]))&&(!dojo.lang.isAlien(obj[methname]))){
-		return null; // FIXME: should we throw an exception here instead?
-	}
-	// we hide our joinpoint instance in obj[methname + '$joinpoint']
-	var jpname = methname + "$joinpoint";
-	var jpfuncname = methname + "$joinpoint$method";
-	var joinpoint = obj[jpname];
-	if(!joinpoint){
-		var isNode = false;
-		if(dojo.event["browser"]){
-			if( (obj["attachEvent"])||
-				(obj["nodeType"])||
-				(obj["addEventListener"]) ){
-				isNode = true;
-				dojo.event.browser.addClobberNodeAttrs(obj, [jpname, jpfuncname, methname]);
-			}
-		}
-		obj[jpfuncname] = obj[methname];
-		// joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, methname);
-		joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, jpfuncname);
-		obj[methname] = function(){ 
-			var args = [];
-
-			if((isNode)&&(!arguments.length)&&(window.event)){
-				args.push(dojo.event.browser.fixEvent(window.event));
-			}else{
-				for(var x=0; x<arguments.length; x++){
-					if((x==0)&&(isNode)&&(dojo.event.browser.isEvent(arguments[x]))){
-						args.push(dojo.event.browser.fixEvent(arguments[x]));
-					}else{
-						args.push(arguments[x]);
-					}
-				}
-			}
-			// return joinpoint.run.apply(joinpoint, arguments); 
-			return joinpoint.run.apply(joinpoint, args); 
-		}
-	}
-	return joinpoint;
-}
-
-dojo.lang.extend(dojo.event.MethodJoinPoint, {
-	unintercept: function() {
-		this.object[this.methodname] = this.methodfunc;
-	},
-
-	run: function() {
-		var obj = this.object||dj_global;
-		var args = arguments;
-
-		// optimization. We only compute once the array version of the arguments
-		// pseudo-arr in order to prevent building it each time advice is unrolled.
-		var aargs = [];
-		for(var x=0; x<args.length; x++){
-			aargs[x] = args[x];
-		}
-
-		var unrollAdvice  = function(marr){ 
-			if(!marr){
-				dojo.debug("Null argument to unrollAdvice()");
-				return;
-			}
-		  
-			var callObj = marr[0]||dj_global;
-			var callFunc = marr[1];
-			
-			if(!callObj[callFunc]){
-				dojo.raise("function \"" + callFunc + "\" does not exist on \"" + callObj + "\"");
-			}
-			
-			var aroundObj = marr[2]||dj_global;
-			var aroundFunc = marr[3];
-			var msg = marr[6];
-			var undef;
-
-			var to = {
-				args: [],
-				jp_: this,
-				object: obj,
-				proceed: function(){
-					return callObj[callFunc].apply(callObj, to.args);
-				}
-			};
-			to.args = aargs;
-
-			var delay = parseInt(marr[4]);
-			var hasDelay = ((!isNaN(delay))&&(marr[4]!==null)&&(typeof marr[4] != "undefined"));
-			if(marr[5]){
-				var rate = parseInt(marr[5]);
-				var cur = new Date();
-				var timerSet = false;
-				if((marr["last"])&&((cur-marr.last)<=rate)){
-					if(dojo.event.canTimeout){
-						if(marr["delayTimer"]){
-							clearTimeout(marr.delayTimer);
-						}
-						var tod = parseInt(rate*2); // is rate*2 naive?
-						var mcpy = dojo.lang.shallowCopy(marr);
-						marr.delayTimer = setTimeout(function(){
-							// FIXME: on IE at least, event objects from the
-							// browser can go out of scope. How (or should?) we
-							// deal with it?
-							mcpy[5] = 0;
-							unrollAdvice(mcpy);
-						}, tod);
-					}
-					return;
-				}else{
-					marr.last = cur;
-				}
-			}
-
-			// FIXME: need to enforce rates for a connection here!
-
-			if(aroundFunc){
-				// NOTE: around advice can't delay since we might otherwise depend
-				// on execution order!
-				aroundObj[aroundFunc].call(aroundObj, to);
-			}else{
-				// var tmjp = dojo.event.MethodJoinPoint.getForMethod(obj, methname);
-				if((hasDelay)&&((dojo.render.html)||(dojo.render.svg))){  // FIXME: the render checks are grotty!
-					dj_global["setTimeout"](function(){
-						if(msg){
-							callObj[callFunc].call(callObj, to); 
-						}else{
-							callObj[callFunc].apply(callObj, args); 
-						}
-					}, delay);
-				}else{ // many environments can't support delay!
-					if(msg){
-						callObj[callFunc].call(callObj, to); 
-					}else{
-						callObj[callFunc].apply(callObj, args); 
-					}
-				}
-			}
-		}
-
-		if(this.before.length>0){
-			dojo.lang.forEach(this.before, unrollAdvice, true);
-		}
-
-		var result;
-		if(this.around.length>0){
-			var mi = new dojo.event.MethodInvocation(this, obj, args);
-			result = mi.proceed();
-		}else if(this.methodfunc){
-			result = this.object[this.methodname].apply(this.object, args);
-		}
-
-		if(this.after.length>0){
-			dojo.lang.forEach(this.after, unrollAdvice, true);
-		}
-
-		return (this.methodfunc) ? result : null;
-	},
-
-	getArr: function(kind){
-		var arr = this.after;
-		// FIXME: we should be able to do this through props or Array.in()
-		if((typeof kind == "string")&&(kind.indexOf("before")!=-1)){
-			arr = this.before;
-		}else if(kind=="around"){
-			arr = this.around;
-		}
-		return arr;
-	},
-
-	kwAddAdvice: function(args){
-		this.addAdvice(	args["adviceObj"], args["adviceFunc"], 
-						args["aroundObj"], args["aroundFunc"], 
-						args["adviceType"], args["precedence"], 
-						args["once"], args["delay"], args["rate"], 
-						args["adviceMsg"]);
-	},
-
-	addAdvice: function(	thisAdviceObj, thisAdvice, 
-							thisAroundObj, thisAround, 
-							advice_kind, precedence, 
-							once, delay, rate, asMessage){
-		var arr = this.getArr(advice_kind);
-		if(!arr){
-			dojo.raise("bad this: " + this);
-		}
-
-		var ao = [thisAdviceObj, thisAdvice, thisAroundObj, thisAround, delay, rate, asMessage];
-		
-		if(once){
-			if(this.hasAdvice(thisAdviceObj, thisAdvice, advice_kind, arr) >= 0){
-				return;
-			}
-		}
-
-		if(precedence == "first"){
-			arr.unshift(ao);
-		}else{
-			arr.push(ao);
-		}
-	},
-
-	hasAdvice: function(thisAdviceObj, thisAdvice, advice_kind, arr){
-		if(!arr){ arr = this.getArr(advice_kind); }
-		var ind = -1;
-		for(var x=0; x<arr.length; x++){
-			if((arr[x][0] == thisAdviceObj)&&(arr[x][1] == thisAdvice)){
-				ind = x;
-			}
-		}
-		return ind;
-	},
-
-	removeAdvice: function(thisAdviceObj, thisAdvice, advice_kind, once){
-		var arr = this.getArr(advice_kind);
-		var ind = this.hasAdvice(thisAdviceObj, thisAdvice, advice_kind, arr);
-		if(ind == -1){
-			return false;
-		}
-		while(ind != -1){
-			arr.splice(ind, 1);
-			if(once){ break; }
-			ind = this.hasAdvice(thisAdviceObj, thisAdvice, advice_kind, arr);
-		}
-		return true;
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event/__package__.js
deleted file mode 100644
index 48354f2..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event/__package__.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.event", "dojo.event.topic"],
-	browser: ["dojo.event.browser"]
-});
-dojo.hostenv.moduleLoaded("dojo.event.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event/browser.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event/browser.js
deleted file mode 100644
index 0f8bdb3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event/browser.js
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.event.browser");
-dojo.require("dojo.event");
-
-dojo_ie_clobber = new function(){
-	this.clobberNodes = [];
-
-	function nukeProp(node, prop){
-		// try{ node.removeAttribute(prop); 	}catch(e){ /* squelch */ }
-		try{ node[prop] = null; 			}catch(e){ /* squelch */ }
-		try{ delete node[prop]; 			}catch(e){ /* squelch */ }
-		// FIXME: JotLive needs this, but I'm not sure if it's too slow or not
-		try{ node.removeAttribute(prop);	}catch(e){ /* squelch */ }
-	}
-
-	this.clobber = function(nodeRef){
-		var na;
-		var tna;
-		if(nodeRef){
-			tna = nodeRef.getElementsByTagName("*");
-			na = [nodeRef];
-			for(var x=0; x<tna.length; x++){
-				// if we're gonna be clobbering the thing, at least make sure
-				// we aren't trying to do it twice
-				if(tna[x]["__doClobber__"]){
-					na.push(tna[x]);
-				}
-			}
-		}else{
-			try{ window.onload = null; }catch(e){}
-			na = (this.clobberNodes.length) ? this.clobberNodes : document.all;
-		}
-		tna = null;
-		var basis = {};
-		for(var i = na.length-1; i>=0; i=i-1){
-			var el = na[i];
-			if(el["__clobberAttrs__"]){
-				for(var j=0; j<el.__clobberAttrs__.length; j++){
-					nukeProp(el, el.__clobberAttrs__[j]);
-				}
-				nukeProp(el, "__clobberAttrs__");
-				nukeProp(el, "__doClobber__");
-			}
-		}
-		na = null;
-	}
-}
-
-if(dojo.render.html.ie){
-	window.onunload = function(){
-		dojo_ie_clobber.clobber();
-		try{
-			if((dojo["widget"])&&(dojo.widget["manager"])){
-				dojo.widget.manager.destroyAll();
-			}
-		}catch(e){}
-		try{ window.onload = null; }catch(e){}
-		try{ window.onunload = null; }catch(e){}
-		dojo_ie_clobber.clobberNodes = [];
-		// CollectGarbage();
-	}
-}
-
-dojo.event.browser = new function(){
-
-	var clobberIdx = 0;
-
-	this.clean = function(node){
-		if(dojo.render.html.ie){ 
-			dojo_ie_clobber.clobber(node);
-		}
-	}
-
-	this.addClobberNode = function(node){
-		if(!node["__doClobber__"]){
-			node.__doClobber__ = true;
-			dojo_ie_clobber.clobberNodes.push(node);
-			// this might not be the most efficient thing to do, but it's
-			// much less error prone than other approaches which were
-			// previously tried and failed
-			node.__clobberAttrs__ = [];
-		}
-	}
-
-	this.addClobberNodeAttrs = function(node, props){
-		this.addClobberNode(node);
-		for(var x=0; x<props.length; x++){
-			node.__clobberAttrs__.push(props[x]);
-		}
-	}
-
-	this.removeListener = function(node, evtName, fp, capture){
-		if(!capture){ var capture = false; }
-		evtName = evtName.toLowerCase();
-		if(evtName.substr(0,2)=="on"){ evtName = evtName.substr(2); }
-		// FIXME: this is mostly a punt, we aren't actually doing anything on IE
-		if(node.removeEventListener){
-			node.removeEventListener(evtName, fp, capture);
-		}
-	}
-
-	this.addListener = function(node, evtName, fp, capture, dontFix){
-		if(!node){ return; } // FIXME: log and/or bail?
-		if(!capture){ var capture = false; }
-		evtName = evtName.toLowerCase();
-		if(evtName.substr(0,2)!="on"){ evtName = "on"+evtName; }
-
-		if(!dontFix){
-			// build yet another closure around fp in order to inject fixEvent
-			// around the resulting event
-			var newfp = function(evt){
-				if(!evt){ evt = window.event; }
-				var ret = fp(dojo.event.browser.fixEvent(evt));
-				if(capture){
-					dojo.event.browser.stopEvent(evt);
-				}
-				return ret;
-			}
-		}else{
-			newfp = fp;
-		}
-
-		if(node.addEventListener){ 
-			node.addEventListener(evtName.substr(2), newfp, capture);
-			return newfp;
-		}else{
-			if(typeof node[evtName] == "function" ){
-				var oldEvt = node[evtName];
-				node[evtName] = function(e){
-					oldEvt(e);
-					return newfp(e);
-				}
-			}else{
-				node[evtName]=newfp;
-			}
-			if(dojo.render.html.ie){
-				this.addClobberNodeAttrs(node, [evtName]);
-			}
-			return newfp;
-		}
-	}
-
-	this.isEvent = function(obj){
-		// FIXME: event detection hack ... could test for additional attributes
-		// if necessary
-		return (typeof obj != "undefined")&&(typeof Event != "undefined")&&(obj.eventPhase);
-		// Event does not support instanceof in Opera, otherwise:
-		//return (typeof Event != "undefined")&&(obj instanceof Event);
-	}
-
-	this.currentEvent = null;
-	
-	this.callListener = function(listener, curTarget){
-		if(typeof listener != 'function'){
-			dojo.raise("listener not a function: " + listener);
-		}
-		dojo.event.browser.currentEvent.currentTarget = curTarget;
-		return listener.call(curTarget, dojo.event.browser.currentEvent);
-	}
-
-	this.stopPropagation = function(){
-		dojo.event.browser.currentEvent.cancelBubble = true;
-	}
-
-	this.preventDefault = function(){
-	  dojo.event.browser.currentEvent.returnValue = false;
-	}
-
-	this.keys = {
-		KEY_BACKSPACE: 8,
-		KEY_TAB: 9,
-		KEY_ENTER: 13,
-		KEY_SHIFT: 16,
-		KEY_CTRL: 17,
-		KEY_ALT: 18,
-		KEY_PAUSE: 19,
-		KEY_CAPS_LOCK: 20,
-		KEY_ESCAPE: 27,
-		KEY_SPACE: 32,
-		KEY_PAGE_UP: 33,
-		KEY_PAGE_DOWN: 34,
-		KEY_END: 35,
-		KEY_HOME: 36,
-		KEY_LEFT_ARROW: 37,
-		KEY_UP_ARROW: 38,
-		KEY_RIGHT_ARROW: 39,
-		KEY_DOWN_ARROW: 40,
-		KEY_INSERT: 45,
-		KEY_DELETE: 46,
-		KEY_LEFT_WINDOW: 91,
-		KEY_RIGHT_WINDOW: 92,
-		KEY_SELECT: 93,
-		KEY_F1: 112,
-		KEY_F2: 113,
-		KEY_F3: 114,
-		KEY_F4: 115,
-		KEY_F5: 116,
-		KEY_F6: 117,
-		KEY_F7: 118,
-		KEY_F8: 119,
-		KEY_F9: 120,
-		KEY_F10: 121,
-		KEY_F11: 122,
-		KEY_F12: 123,
-		KEY_NUM_LOCK: 144,
-		KEY_SCROLL_LOCK: 145
-	};
-
-	// reverse lookup
-	this.revKeys = [];
-	for(var key in this.keys){
-		this.revKeys[this.keys[key]] = key;
-	}
-
-	this.fixEvent = function(evt){
-		if((!evt)&&(window["event"])){
-			var evt = window.event;
-		}
-		
-		if((evt["type"])&&(evt["type"].indexOf("key") == 0)){ // key events
-			evt.keys = this.revKeys;
-			// FIXME: how can we eliminate this iteration?
-			for(var key in this.keys) {
-				evt[key] = this.keys[key];
-			}
-			if((dojo.render.html.ie)&&(evt["type"] == "keypress")){
-				evt.charCode = evt.keyCode;
-			}
-		}
-	
-		if(dojo.render.html.ie){
-			if(!evt.target){ evt.target = evt.srcElement; }
-			if(!evt.currentTarget){ evt.currentTarget = evt.srcElement; }
-			if(!evt.layerX){ evt.layerX = evt.offsetX; }
-			if(!evt.layerY){ evt.layerY = evt.offsetY; }
-			// mouseover
-			if(evt.fromElement){ evt.relatedTarget = evt.fromElement; }
-			// mouseout
-			if(evt.toElement){ evt.relatedTarget = evt.toElement; }
-			this.currentEvent = evt;
-			evt.callListener = this.callListener;
-			evt.stopPropagation = this.stopPropagation;
-			evt.preventDefault = this.preventDefault;
-		}
-		return evt;
-	}
-
-	this.stopEvent = function(ev) {
-		if(window.event){
-			ev.returnValue = false;
-			ev.cancelBubble = true;
-		}else{
-			ev.preventDefault();
-			ev.stopPropagation();
-		}
-	}
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event/topic.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event/topic.js
deleted file mode 100644
index 7474593..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/event/topic.js
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.event");
-dojo.provide("dojo.event.topic");
-
-dojo.event.topic = new function(){
-	this.topics = {};
-
-	this.getTopic = function(topicName){
-		if(!this.topics[topicName]){
-			this.topics[topicName] = new this.TopicImpl(topicName);
-		}
-		return this.topics[topicName];
-	}
-
-	this.registerPublisher = function(topic, obj, funcName){
-		var topic = this.getTopic(topic);
-		topic.registerPublisher(obj, funcName);
-	}
-
-	this.subscribe = function(topic, obj, funcName){
-		var topic = this.getTopic(topic);
-		topic.subscribe(obj, funcName);
-	}
-
-	this.unsubscribe = function(topic, obj, funcName){
-		var topic = this.getTopic(topic);
-		topic.unsubscribe(obj, funcName);
-	}
-
-	this.publish = function(topic, message){
-		var topic = this.getTopic(topic);
-		// if message is an array, we treat it as a set of arguments,
-		// otherwise, we just pass on the arguments passed in as-is
-		var args = [];
-		if((arguments.length == 2)&&(message.length)&&(typeof message != "string")){
-			args = message;
-		}else{
-			var args = [];
-			for(var x=1; x<arguments.length; x++){
-				args.push(arguments[x]);
-			}
-		}
-		topic.sendMessage.apply(topic, args);
-	}
-}
-
-dojo.event.topic.TopicImpl = function(topicName){
-	this.topicName = topicName;
-	var self = this;
-
-	self.subscribe = function(listenerObject, listenerMethod){
-		var tf = listenerMethod||listenerObject;
-		var to = (!listenerMethod) ? dj_global : listenerObject;
-		dojo.event.kwConnect({
-			srcObj:		self, 
-			srcFunc:	"sendMessage", 
-			adviceObj:	to,
-			adviceFunc: tf
-		});
-	}
-
-	self.unsubscribe = function(listenerObject, listenerMethod){
-		var tf = (!listenerMethod) ? listenerObject : listenerMethod;
-		var to = (!listenerMethod) ? null : listenerObject;
-		dojo.event.kwDisconnect({
-			srcObj:		self, 
-			srcFunc:	"sendMessage", 
-			adviceObj:	to,
-			adviceFunc: tf
-		});
-	}
-
-	self.registerPublisher = function(publisherObject, publisherMethod){
-		dojo.event.connect(publisherObject, publisherMethod, self, "sendMessage");
-	}
-
-	self.sendMessage = function(message){
-		// The message has been propagated
-	}
-}
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/flash.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/flash.js
deleted file mode 100644
index 5e0a42d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/flash.js
+++ /dev/null
@@ -1,703 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.flash");

-

-dojo.require("dojo.string.*");

-dojo.require("dojo.uri.*");

-

-/** 

-		Provides an easy object for interacting with the Flash plugin. This

-		object provides methods to determine the current version of the Flash

-		plugin (dojo.flash.info); execute Flash instance methods 

-		independent of the Flash version

-		being used (dojo.flash.comm); write out the necessary markup to 

-		dynamically insert a Flash object into the page (dojo.flash.Embed; and 

-		do dynamic installation and upgrading of the current Flash plugin in 

-		use (dojo.flash.Install).

-		

-		To use dojo.flash, you must first wait until Flash is finished loading 

-		and initializing before you attempt communication or interaction. 

-		To know when Flash is finished use dojo.event:

-		

-		dojo.event.bind(dojo.flash, "loaded", myInstance, "myCallback");

-		

-		Then, while the page is still loading provide the file name

-		and the major version of Flash that will be used for Flash/JavaScript

-		communication (see "Flash Communication" below for information on the 

-		different kinds of Flash/JavaScript communication supported and how they 

-		depend on the version of Flash installed):

-		

-		dojo.flash.setSwf({flash8: "src/storage/storage_flash8.swf"});

-		

-		This will cause dojo.flash to load and initialize your

-		Flash file "src/storage/storage_flash8.swf, and use the Flash 8

-		ExternalInterface for Flash/JavaScript communication.

-		

-		If you want to use Flash 6 features for communication between

-		Flash and JavaScript, use the following:

-		

-		dojo.flash.setSwf({flash6: "src/storage/storage_flash6.swf"});

-		

-		Flash 6 is currently the best way to do Flash/JavaScript communication

-		(see the section "Flash Communication" below for further

-		details), but doesn't work on all browers. If you want dojo.flash to 

-		pick the best way of communicating

-		based on the platform, specify Flash files for both forms of 

-		communication:

-		

-		dojo.flash.setSwf({flash6: "src/storage/storage_flash6.swf",

-											 flash8: "src/storage/storage_flash8.swf"});

-											 

-		If no SWF files are specified, then Flash is not initialized.

-		

-		Your Flash must use DojoExternalInterface to expose Flash methods and

-		to call JavaScript; see "Flash Communication" below for details.

-		

-		setSwf can take an optional 'visible' attribute to control whether

-		the Flash file is visible or not; the default is visible:

-		

-		dojo.flash.setSwf({flash6: "src/storage/storage_flash6.swf",

-											 flash8: "src/storage/storage_flash8.swf",

-											 visible: false});

-		

-		Once finished, you can query Flash version information:

-		

-		dojo.flash.info.version

-		

-		Or can communicate with Flash methods that were exposed:

-		

-		var results = dojo.flash.comm.sayHello("Some Message");

-		

-		Only string values are currently supported.

-		

-		-------------------

-		Flash Communication

-		-------------------

-		

-		dojo.flash allows Flash/JavaScript communication in 

-		a way that can pass large amounts of data back and forth reliably,

-		very fast, and with synchronous method calls. The dojo.flash

-		framework encapsulates the specific way in which this communication occurs,

-		presenting a common interface to JavaScript irrespective of the underlying

-		Flash version.

-		

-		There are currently three major ways to do Flash/JavaScript communication

-		in the Flash community:

-		

-		1) Flash 6+ - Uses Flash methods, such as SetVariable and TCallLabel,

-		and the fscommand handler to do communication. Strengths: Very fast,

-		mature, and can send extremely large amounts of data; can do

-		synchronous method calls. Problems: Does not work on Safari; works on 

-		Firefox/Mac OS X only if Flash 8 plugin is installed; cryptic to work with.

-		

-		2) Flash 8+ - Uses ExternalInterface, which provides a way for Flash

-		methods to register themselves for callbacks from JavaScript, and a way

-		for Flash to call JavaScript. Strengths: Works on Safari; elegant to

-		work with; can do synchronous method calls. Problems: Extremely buggy 

-		(fails if there are new lines in the data, for example); two orders of 

-		magnitude slower than the Flash 6+ method; locks up the browser while

-		it is communicating.

-		

-		3) Flash 6+ - Uses two seperate Flash applets, one that we 

-		create over and over, passing input data into it using the PARAM tag, 

-		which then uses a Flash LocalConnection to pass the data to the main Flash

-		applet; communication back to Flash is accomplished using a getURL

-		call with a javascript protocol handler, such as "javascript:myMethod()".

-		Strengths: the most cross browser, cross platform pre-Flash 8 method

-		of Flash communication known; works on Safari. Problems: Timing issues;

-		clunky and complicated; slow; can only send very small amounts of

-		data (several K); all method calls are asynchronous.

-		

-		dojo.flash.comm uses only the first two methods. This framework

-		was created primarily for dojo.storage, which needs to pass very large

-		amounts of data synchronously and reliably across the Flash/JavaScript

-		boundary. We use the first method, the Flash 6 method, on all platforms

-		that support it, while using the Flash 8 ExternalInterface method

-		only on Safari with some special code to help correct ExternalInterface's

-		bugs.

-		

-		Since dojo.flash needs to have two versions of the Flash

-		file it wants to generate, a Flash 6 and a Flash 8 version to gain

-		true cross-browser compatibility, several tools are provided to ease

-		development on the Flash side.

-		

-		In your Flash file, if you want to expose Flash methods that can be

-		called, use the DojoExternalInterface class to register methods. This

-		class is an exact API clone of the standard ExternalInterface class, but

-		can work in Flash 6+ browsers. Under the covers it uses the best

-		mechanism to do communication:

-		

-		class HelloWorld{

-			function HelloWorld(){

-				// Initialize the DojoExternalInterface class

-				DojoExternalInterface.initialize();

-				

-				// Expose your methods

-				DojoExternalInterface.addCallback("sayHello", this, this.sayHello);

-				

-				// Tell JavaScript that you are ready to have method calls

-				DojoExternalInterface.loaded();

-				

-				// Call some JavaScript

-				DojoExternalInterface.call("someJavaScriptMethod");

-			}

-			

-			function sayHello(){ ... }

-			

-			static main(){ ... }

-		}

-		

-		DojoExternalInterface adds to new functions to the ExternalInterface

-		API: initialize() and loaded(). Initialize() must be called before

-		any addCallback() or call() methods are run, and loaded() must be

-		called after you are finished adding your callbacks. Calling loaded()

-		will fire the dojo.flash.loaded() event, so that JavaScript can know that

-		Flash has finished loading and adding its callbacks, and can begin to

-		interact with the Flash file.

-		

-		To generate your SWF files, use the ant task

-		"buildFlash". You must have the open source Motion Twin ActionScript 

-		compiler (mtasc) installed and in your path to use the "buildFlash"

-		ant task; download and install mtasc from http://www.mtasc.org/.

-		

-		buildFlash usage:

-		

-		ant buildFlash -Ddojo.flash.file=../tests/flash/HelloWorld.as

-		

-		where "dojo.flash.file" is the relative path to your Flash 

-		ActionScript file.

-		

-		This will generate two SWF files, one ending in _flash6.swf and the other

-		ending in _flash8.swf in the same directory as your ActionScript method:

-		

-		HelloWorld_flash6.swf

-		HelloWorld_flash8.swf

-		

-		Initialize dojo.flash with the filename and Flash communication version to

-		use during page load; see the documentation for dojo.flash for details:

-		

-		dojo.flash.setSwf({flash6: "tests/flash/HelloWorld_flash6.swf",

-											 flash8: "tests/flash/HelloWorld_flash8.swf"});

-		

-		Now, your Flash methods can be called from JavaScript as if they are native

-		Flash methods, mirrored exactly on the JavaScript side:

-		

-		dojo.flash.comm.sayHello();

-		

-		Only Strings are supported being passed back and forth currently.

-		

-		-------------------

-		Notes

-		-------------------

-		

-		If you have both Flash 6 and Flash 8 versions of your file:

-		

-		dojo.flash.setSwf({flash6: "tests/flash/HelloWorld_flash6.swf",

-											 flash8: "tests/flash/HelloWorld_flash8.swf"});

-											 

-		but want to force the browser to use a certain version of Flash for

-		all platforms (for testing, for example), use the djConfig

-		variable 'forceFlashComm' with the version number to force:

-		

-		var djConfig = { forceFlashComm: 6 };

-		

-		Two values are currently supported, 6 and 8, for the two styles of

-		communication described above.

-		

-		Also note that dojo.flash can currently only work with one Flash applet

-		on the page; it and the API do not yet support multiple Flash applets on

-		the same page.

-		

-		@author Brad Neuberg, bkn3@columbia.edu

-*/

-

-dojo.flash = {

-	flash6_version: null,

-	flash8_version: null,

-	_visible: true,

-	

-	/** Sets the SWF files and versions we are using. */

-	setSwf: function(fileInfo){

-		if(fileInfo == null || dojo.lang.isUndefined(fileInfo)){

-			return;

-		}

-		

-		if(fileInfo.flash6 != null && !dojo.lang.isUndefined(fileInfo.flash6)){

-			this.flash6_version = fileInfo.flash6;

-		}

-		

-		if(fileInfo.flash8 != null && !dojo.lang.isUndefined(fileInfo.flash8)){

-			this.flash8_version = fileInfo.flash8;

-		}

-		

-		if(fileInfo.visible){

-			this._visible = fileInfo.visible;

-		}

-		

-		// now initialize ourselves

-		this._initialize();

-	},

-	

-	/** Returns whether we are using Flash 6 for communication on this platform. */

-	useFlash6: function(){

-		if(this.flash6_version == null){

-			return false;

-		}else if (this.flash6_version != null && dojo.flash.info.commVersion == 6){

-			// if we have a flash 6 version of this SWF, and this browser supports 

-			// communicating using Flash 6 features...

-			return true;

-		}else{

-			return false;

-		}

-	},

-	

-	/** Returns whether we are using Flash 8 for communication on this platform. */

-	useFlash8: function(){

-		if(this.flash8_version == null){

-			return false;

-		}else if (this.flash8_version != null && dojo.flash.info.commVersion == 8){

-			// if we have a flash 8 version of this SWF, and this browser supports

-			// communicating using Flash 8 features...

-			return true;

-		}else{

-			return false;

-		}

-	},

-	

-	/** Initializes dojo.flash. */

-	_initialize: function(){

-		// do nothing if no SWF files are defined

-		if(this.flash6_version == null && this.flash8_version == null){

-			this.info = new Object();

-			this.info.capable = false;

-			return;

-		}

-	

-		// find out if Flash is installed

-		this.info = new dojo.flash.Info();

-		

-		// if we are not installed, install Flash

-		if(this.info.capable == false){

-			var installer = new dojo.flash.Install();

-			installer.install();

-		}else if(this.info.capable == true){

-			// write the flash object into the page

-			dojo.flash.obj = new dojo.flash.Embed();

-			dojo.flash.obj.setVisible(this._visible);

-			dojo.flash.obj.write();

-			

-			// initialize the way we do Flash/JavaScript communication

-			dojo.flash.comm = new dojo.flash.Communicator();

-		}

-	},

-

-	/** 

-			A callback when the Flash subsystem is finished loading and can be

-			worked with. To be notified when Flash is finished loading, connect

-			your callback to this method using the following:

-			

-			dojo.event.connect(dojo.flash, "loaded", myInstance, "myCallback");

-	*/

-	loaded: function(){

-	}

-};

-

-

-/** 

-		A class that helps us determine whether Flash is available,

-		it's major and minor versions, and what Flash version features should

-		be used for Flash/JavaScript communication. Parts of this code

-		are adapted from the automatic Flash plugin detection code autogenerated 

-		by the Macromedia Flash 8 authoring environment. 

-		

-		An instance of this class can be accessed on dojo.flash.info after

-		the page is finished loading.

-		

-		This constructor must be called before the page is finished loading. 

-*/

-dojo.flash.Info = function(){

-	// Visual basic helper required to detect Flash Player ActiveX control 

-	// version information on Internet Explorer

-	if(dojo.render.html.ie){

-		document.writeln('<script language="VBScript" type="text/vbscript"\>');

-		document.writeln('Function VBGetSwfVer(i)');

-		document.writeln('  on error resume next');

-		document.writeln('  Dim swControl, swVersion');

-		document.writeln('  swVersion = 0');

-		document.writeln('  set swControl = CreateObject("ShockwaveFlash.ShockwaveFlash." + CStr(i))');

-		document.writeln('  if (IsObject(swControl)) then');

-		document.writeln('    swVersion = swControl.GetVariable("$version")');

-		document.writeln('  end if');

-		document.writeln('  VBGetSwfVer = swVersion');

-		document.writeln('End Function');

-		document.writeln('</script\>');

-	}

-	

-	this._detectVersion();

-	this._detectCommunicationVersion();

-}

-

-dojo.flash.Info.prototype = {

-	/** The full version string, such as "8r22". */

-	version: -1,

-	

-	/** 

-			The major, minor, and revisions of the plugin. For example, if the

-			plugin is 8r22, then the major version is 8, the minor version is 0,

-			and the revision is 22. 

-	*/

-	versionMajor: -1,

-	versionMinor: -1,

-	versionRevision: -1,

-	

-	/** Whether this platform has Flash already installed. */

-	capable: false,

-	

-	/** 

-			The major version number for how our Flash and JavaScript communicate.

-			This can currently be the following values:

-			6 - We use a combination of the Flash plugin methods, such as SetVariable

-			and TCallLabel, along with fscommands, to do communication.

-			8 - We use the ExternalInterface API. 

-			-1 - For some reason neither method is supported, and no communication

-			is possible. 

-	*/

-	commVersion: 6,

-	

-	/** 

-			Asserts that this environment has the given major, minor, and revision

-			numbers for the Flash player. Returns true if the player is equal

-			or above the given version, false otherwise.

-			

-			Example: To test for Flash Player 7r14:

-			

-			dojo.flash.info.isVersionOrAbove(7, 0, 14)

-	*/

-	isVersionOrAbove: function(reqMajorVer, reqMinorVer, reqVer){

-		// make the revision a decimal (i.e. transform revision 14 into

-		// 0.14

-		reqVer = parseFloat("." + reqVer);

-		if(this.versionMajor > reqMajorVer && this.version >= reqVer){

-			return true;

-		}else if(this.version >= reqVer && this.versionMinor >= reqMinorVer){

-			return true;

-		}else{

-			return false;

-		}

-	},

-	

-	_detectVersion: function(){

-		var versionStr;

-		

-		// loop backwards through the versions until we find the newest version	

-		for(var testVersion = 25; testVersion > 0; testVersion--){

-			if(dojo.render.html.ie){

-				versionStr = VBGetSwfVer(testVersion);

-			}else{

-				versionStr = this._JSFlashInfo(testVersion);		

-			}

-				

-			if(versionStr == -1 ){

-				this.capable = false; 

-				return;

-			}else if(versionStr != 0){

-				var versionArray;

-				if(dojo.render.html.ie){

-					var tempArray = versionStr.split(" ");

-					var tempString = tempArray[1];

-					versionArray = tempString.split(",");

-				}else{

-					versionArray = versionStr.split(".");

-				}

-					

-				this.versionMajor = versionArray[0];

-				this.versionMinor = versionArray[1];

-				this.versionRevision = versionArray[2];

-				

-				// 7.0r24 == 7.24

-				versionString = this.versionMajor + "." + this.versionRevision;

-				this.version = parseFloat(versionString);

-				

-				this.capable = true;

-				

-				break;

-			}

-		}

-	},

-	

-	/** 

-			JavaScript helper required to detect Flash Player PlugIn version 

-			information. Internet Explorer uses a corresponding Visual Basic

-			version to interact with the Flash ActiveX control. 

-	*/

-	_JSFlashInfo: function(testVersion){

-		// NS/Opera version >= 3 check for Flash plugin in plugin array

-		if(navigator.plugins != null && navigator.plugins.length > 0){

-			if(navigator.plugins["Shockwave Flash 2.0"] || 

-				 navigator.plugins["Shockwave Flash"]){

-				var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";

-				var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;

-				var descArray = flashDescription.split(" ");

-				var tempArrayMajor = descArray[2].split(".");

-				var versionMajor = tempArrayMajor[0];

-				var versionMinor = tempArrayMajor[1];

-				if(descArray[3] != ""){

-					tempArrayMinor = descArray[3].split("r");

-				}else{

-					tempArrayMinor = descArray[4].split("r");

-				}

-				var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;

-				var version = versionMajor + "." + versionMinor + "." 

-											+ versionRevision;

-											

-				return version;

-			}

-		}

-		

-		return -1;

-	},

-	

-	/** 

-			Detects the mechanisms that should be used for Flash/JavaScript 

-			communication, setting 'commVersion' to either 6 or 8. If the value is

-			6, we use Flash Plugin 6+ features, such as GetVariable, TCallLabel,

-			and fscommand, to do Flash/JavaScript communication; if the value is

-			8, we use the ExternalInterface API for communication. 

-	*/

-	_detectCommunicationVersion: function(){

-		// we prefer Flash 6 features over Flash 8, because they are much faster

-		// and much less buggy

-		

-		// does the Flash plugin have some of the Flash methods?

-		

-		// otherwise, is the ExternalInterface API present?

-	}

-};

-

-/** A class that is used to write out the Flash object into the page. */

-dojo.flash.Embed = function(){

-}

-

-dojo.flash.Embed.prototype = {

-	/** 

-			The width of this Flash applet. The default is the minimal width

-			necessary to show the Flash settings dialog. 

-	*/

-	width: 215,

-	

-	/** 

-			The height of this Flash applet. The default is the minimal height

-			necessary to show the Flash settings dialog. 

-	*/

-	width: 138,

-	

-	/** The id of the Flash object. */

-	id: "flashObject",

-	

-	/** Controls whether this is a visible Flash applet or not. */

-	_visible: true,

-			

-	/** 

-			Writes the Flash into the page. This must be called before the page

-			is finished loading. 

-	*/

-	write: function(){

-		// determine our container div's styling

-		var containerStyle = new dojo.string.Builder();

-		containerStyle.append("width: " + this.width + "px; ");

-		containerStyle.append("height: " + this.height + "px; ");

-		if(this._visible == false){

-			containerStyle.append("position: absolute; ");

-			containerStyle.append("z-index: 100; ");

-			containerStyle.append("top: -1000px; ");

-			containerStyle.append("left: -1000px; ");

-		}

-		containerStyle = containerStyle.toString();

-	

-		// Flash 6

-		if(dojo.flash.useFlash6()){

-			var swfloc = dojo.flash.flash6_version;

-			

-			document.writeln('<div id="' + this.id + 'Div" style="' + containerStyle + '">');

-			document.writeln('  <embed id="' + this.id + '" src="' + swfloc + '" ');

-			document.writeln('    quality="high" bgcolor="#ffffff" ');

-			document.writeln('    width="' + this.width + '" height="' + this.height + '" name="' + this.id + '" ');

-			document.writeln('    align="middle" allowScriptAccess="sameDomain" ');

-			document.writeln('    type="application/x-shockwave-flash" swLiveConnect="true" ');

-			document.writeln('    pluginspage="http://www.macromedia.com/go/getflashplayer"> ');

-			document.writeln('</div>');

-		}

-		// Flash 8

-		else if (dojo.flash.useFlash8()){

-			var swfloc = dojo.uri.dojoUri(dojo.flash.flash8_version).toString();

-		}

-	},

-	

-	/** Gets the Flash object DOM node. */

-	get: function(){

-		return (dojo.render.html.ie) ? window[this.id] : document[this.id];

-	},

-	

-	/** Sets the visibility of this Flash object. */

-	setVisible: function(){

-		//FIXME: Dynamically make the movie visible or not

-	},

-	

-	/** Centers the flash applet on the page. */

-	center: function(){

-	}

-};

-

-

-/** 

-		A class that is used to communicate between Flash and JavaScript in 

-		a way that can pass large amounts of data back and forth reliably,

-		very fast, and with synchronous method calls. This class encapsulates the 

-		specific way in which this communication occurs,

-		presenting a common interface to JavaScript irrespective of the underlying

-		Flash version.

-*/

-dojo.flash.Communicator = function(){

-	if(dojo.flash.useFlash6()){

-		this._writeFlash6();

-	}else if (dojo.flash.useFlash8()){

-		this._writeFlash8();

-	}

-}

-

-dojo.flash.Communicator.prototype = {

-	_writeFlash6: function(){

-		var id = dojo.flash.obj.id;

-		

-		// global function needed for Flash 6 callback;

-		// we write it out as a script tag because the VBScript hook for IE

-		// callbacks does not work properly if this function is evalled() from

-		// within the Dojo system

-		document.writeln('<script language="JavaScript">');

-		document.writeln('  function ' + id + '_DoFSCommand(command, args){ ');

-		document.writeln('    dojo.flash.comm._handleFSCommand(command, args); ');

-		document.writeln('}');

-		document.writeln('</script>');

-		

-		// hook for Internet Explorer to receive FSCommands from Flash

-		if(dojo.render.html.ie){

-			document.writeln('<SCRIPT LANGUAGE=VBScript\> ');

-			document.writeln('on error resume next ');

-			document.writeln('Sub ' + id + '_FSCommand(ByVal command, ByVal args)');

-			document.writeln(' call ' + id + '_DoFSCommand(command, args)');

-			document.writeln('end sub');

-			document.writeln('</SCRIPT\> ');

-		}

-	},

-	

-	_writeFlash8: function(){

-		// nothing needed for Flash 8 communication; happens automatically

-	},

-	

-	/** Handles fscommand's from Flash to JavaScript. Flash 6 communication. */

-	_handleFSCommand: function(command, args){

-		if(command == "addCallback"){ // add Flash method for JavaScript callback

-			this._fscommandAddCallback(command, args);

-		}else if (command == "call"){ // Flash to JavaScript method call

-			this._fscommandCall(command, args);

-		}

-	},

-	

-	_fscommandAddCallback: function(command, args){

-		var functionName = args;

-			

-		// do a trick, where we link this function name to our wrapper

-		// function, _call, that does the actual JavaScript to Flash call

-		var callFunc = function(){

-			return dojo.flash.comm._call(functionName, arguments);

-		};			

-		dojo.flash.comm[functionName] = callFunc;

-		

-		// indicate that the call was successful

-		dojo.flash.obj.get().SetVariable("_succeeded", true);

-	},

-	

-	_fscommandCall: function(command, args){

-		var plugin = dojo.flash.obj.get();

-		var functionName = args;

-		

-		// get the number of arguments to this method call and build them up

-		var numArgs = parseInt(plugin.GetVariable("_numArgs"));

-		var flashArgs = new Array();

-		for(var i = 0; i < numArgs; i++){

-			var currentArg = plugin.GetVariable("_" + i);

-			flashArgs.push(currentArg);

-		}

-		

-		// get the function instance; we technically support more capabilities

-		// than ExternalInterface, which can only call global functions; if

-		// the method name has a dot in it, such as "dojo.flash.loaded", we

-		// eval it so that the method gets run against an instance

-		var runMe;

-		if(functionName.indexOf(".") == -1){ // global function

-			runMe = window[functionName];

-		}else{

-			// instance function

-			runMe = eval(functionName);

-		}

-		

-		// make the call and get the results

-		var results = null;

-		if(!dojo.lang.isUndefined(runMe) && runMe != null){

-			results = runMe.apply(null, flashArgs);

-		}

-		

-		// return the results to flash

-		plugin.SetVariable("_returnResult", results);

-	},

-	

-	/** 

-			The actual function that will execute a JavaScript to Flash call; used

-			by the Flash 6 communication method. 

-	*/

-	_call: function(functionName, args){

-		// we do JavaScript to Flash method calls by setting a Flash variable

-		// "_functionName" with the function name; "_numArgs" with the number

-		// of arguments; and "_0", "_1", etc for each numbered argument. Flash

-		// reads these, executes the function call, and returns the result

-		// in "_returnResult"

-		var plugin = dojo.flash.obj.get();

-		plugin.SetVariable("_functionName", functionName);

-		plugin.SetVariable("_numArgs", args.length);

-		for(var i = 0; i < args.length; i++){

-			plugin.SetVariable("_" + i, args[i]);

-		}

-		

-		// now tell Flash to execute this method using the Flash Runner

-		plugin.SetVariable("_execute", true);

-		plugin.Play();

-		

-		// get the results

-		var results = plugin.GetVariable("_returnResult");

-		dojo.debug("inside, results="+results);

-		

-		return results;

-	}

-}

-

-/** 

-		Figures out the best way to automatically install the Flash plugin

-		for this browser and platform. 

-*/

-dojo.flash.Install = function(){

-}

-

-dojo.flash.Install.prototype = {

-	install: function(){

-	}

-}

-

-// vim:ts=4:noet:tw=0:

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/flash/flash6/DojoExternalInterface.as b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/flash/flash6/DojoExternalInterface.as
deleted file mode 100644
index 700e008..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/flash/flash6/DojoExternalInterface.as
+++ /dev/null
@@ -1,154 +0,0 @@
-/** 

-		An implementation of Flash 8's ExternalInterface that works with Flash 6

-		and which is source-compatible with Flash 8. 

-		

-		@author Brad Neuberg, bkn3@columbia.edu 

-*/

-

-class DojoExternalInterface{

-	public static var available:Boolean;

-	private static var callbacks = new Object();

-	

-	public static function initialize(){

-		// FIXME: Set available variable

-		// FIXME: do a test run to see if we can communicate from Flash to JavaScript

-		// and back again to make sure we can actually communicate (set 'available'

-		// variable)

-		

-		initializeFlashRunner();

-	}

-	

-	public static function addCallback(methodName:String, instance:Object, 

-										 								 method:Function) : Boolean{

-		// A variable that indicates whether the call below succeeded

-		_root._succeeded = null;

-		

-		// Callbacks are registered with the JavaScript side as follows.

-		// On the Flash side, we maintain a lookup table that associates

-		// the methodName with the actual instance and method that are

-		// associated with this method.

-		// Using fscommand, we send over the action "addCallback", with the

-		// argument being the methodName to add, such as "foobar".

-		// The JavaScript takes these values and registers the existence of

-		// this callback point.

-		

-		// precede the method name with a _ character in case it starts

-		// with a number

-		callbacks["_" + methodName] = {_instance: instance, _method: method};

-		fscommand("addCallback", methodName);

-		

-		// The API for ExternalInterface says we have to make sure the call

-		// succeeded; check to see if there is a value 

-		// for _succeeded, which is set by the JavaScript side

-		if(_root._succeeded == null){

-			return false;

-		}else{

-			return true;

-		}

-	}

-	

-	public static function call(methodName:String) : Object{

-		// FIXME: support full JSON serialization

-		

-		// First, we pack up all of the arguments to this call and set them

-		// as Flash variables, which the JavaScript side will unpack using

-		// plugin.GetVariable(). We set the number of arguments as "_numArgs",

-		// and add each argument as a variable, such as "_1", "_2", etc., starting

-		// from 0.

-		// We then execute an fscommand with the action "call" and the

-		// argument being the method name. JavaScript takes the method name,

-		// retrieves the arguments using GetVariable, executes the method,

-		// and then places the return result in a Flash variable

-		// named "_returnResult".

-		_root._numArgs = arguments.length - 1;

-		for(var i = 1; i < arguments.length; i++){

-			var argIndex = i - 1;

-			_root["_" + argIndex] = arguments[i];

-		}

-		

-		_root._returnResult = undefined;

-		fscommand("call", methodName);

-		return _root.returnResult;

-	}

-	

-	/** 

-			Called by Flash to indicate to JavaScript that we are ready to have

-			our Flash functions called. Calling loaded()

-			will fire the dojo.flash.loaded() event, so that JavaScript can know that

-			Flash has finished loading and adding its callbacks, and can begin to

-			interact with the Flash file.

-	*/

-	public static function loaded(){

-		call("dojo.flash.loaded");

-	}

-	

-	/** 

-			When JavaScript wants to communicate with Flash it simply sets

-			the Flash variable "_execute" to true; this method creates the

-			internal Movie Clip, called the Flash Runner, that makes this

-			magic happen.

-	*/

-	private static function initializeFlashRunner(){

-		// create our Flash runner movie clip and instance, and attach it to

-		// the root stage

-		_root.createEmptyMovieClip("_flashRunner_mc");

-		_root.attachMovie("_flashRunner_mc", "_flashRunner");

-		

-		// get the actual object instance of the Flash runner movie clip and

-		// make it invisible

-		var _flashRunner:MovieClip = _root._flashRunner;

-		_flashRunner._visible = false;

-		

-		// ActionScript 2 has no way to dynamically add new script to a

-		// dynamic Movie Clip's keyframes or labels. Instead, we use the 

-		// onEnterFrame handler, which is called invoked continually at the frame 

-		// rate of the SWF file. When the JavaScript wants to tell the

-		// Flash Runner to execute, it simply sets the Flash variable

-		// "_execute" to true, and our onEnterFrame handler knows to execute

-		// a Flash method

-		_root._execute = "false";

-		_flashRunner.onEnterFrame = function(){

-			// SetVariable on the JavaScript side turns all values into strings,

-			// so this comes over as "true" not a Boolean true

-			if(_root._execute == "true"){

-				// reset the execution request

-				_root._execute = "false";

-				

-				// handle and execute it

-				DojoExternalInterface._handleJSCall();

-			}

-		}

-	}

-	

-	/** 

-			Handles and executes a JavaScript to Flash method call. Used by

-			initializeFlashRunner. 

-	*/

-	public static function _handleJSCall(){

-		// get our parameters

-		var numArgs = parseInt(_root._numArgs);

-		var jsArgs = new Array();

-		for(var i = 0; i < numArgs; i++){

-			var currentValue = _root["_" + i];

-			jsArgs.push(currentValue);

-		}

-		

-		// get our function name

-		var functionName = _root._functionName;

-		

-		// now get the actual instance and method object to execute on,

-		// using our lookup table that was constructed by calls to

-		// addCallback on initialization

-		var instance = callbacks["_" + functionName]._instance;

-		var method = callbacks["_" + functionName]._method;

-		

-		// execute it

-		var results = method.apply(instance, jsArgs);

-		getURL("javascript:dojo.debug('FLASH: result="+results+"')");

-		

-		// return the results

-		_root._returnResult = results;

-	}

-}

-

-// vim:ts=4:noet:tw=0:

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/flash/flash8/DojoExternalInterface.as b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/flash/flash8/DojoExternalInterface.as
deleted file mode 100644
index f8199eb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/flash/flash8/DojoExternalInterface.as
+++ /dev/null
@@ -1,44 +0,0 @@
-/**

-	A wrapper around Flash 8's ExternalInterface; this is needed so that we

-	can do a Flash 6 implementation of ExternalInterface, and be able

-	to support having a single codebase that uses DojoExternalInterface

-	across Flash versions rather than having two seperate source bases,

-	where one uses ExternalInterface and the other uses DojoExternalInterface.

-	

-	@author Brad Neuberg, bkn3@columbia.edu

-*/

-import flash.external.ExternalInterface;

-

-class DojoExternalInterface{

-	public static var available:Boolean;

-	

-	public static function initialize(){

-		// set whether communication is available

-		DojoExternalInterface.available = ExternalInterface.available;

-		DojoExternalInterface.call("loaded");

-	}

-	

-	public static function addCallback(methodName:String, instance:Object, 

-										 								 method:Function) : Boolean{

-		return ExternalInterface.addCallback(methodName, instance, method);									 

-	}

-	

-	public static function call(methodName:String) : Object{

-		// we might have any number of optional arguments, so we have to 

-		// pass them in dynamically

-		return ExternalInterface.call.apply(ExternalInterface, arguments);

-	}

-	

-	/** 

-			Called by Flash to indicate to JavaScript that we are ready to have

-			our Flash functions called. Calling loaded()

-			will fire the dojo.flash.loaded() event, so that JavaScript can know that

-			Flash has finished loading and adding its callbacks, and can begin to

-			interact with the Flash file.

-	*/

-	public static function loaded(){

-		DojoExternalInterface.call("dojo.flash.loaded");

-	}

-}

-

-// vim:ts=4:noet:tw=0:

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/fx/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/fx/__package__.js
deleted file mode 100644
index e2ddd81..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/fx/__package__.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	browser: ["dojo.fx.html"]
-});
-dojo.hostenv.moduleLoaded("dojo.fx.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/fx/html.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/fx/html.js
deleted file mode 100644
index cb0b9e0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/fx/html.js
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.fx.html");
-
-dojo.require("dojo.html");
-dojo.require("dojo.style");
-dojo.require("dojo.lang");
-dojo.require("dojo.animation.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.graphics.color");
-
-dojo.fx.duration = 500;
-
-dojo.fx.html._makeFadeable = function(node){
-	if(dojo.render.html.ie){
-		// only set the zoom if the "tickle" value would be the same as the
-		// default
-		if( (node.style.zoom.length == 0) &&
-			(dojo.style.getStyle(node, "zoom") == "normal") ){
-			// make sure the node "hasLayout"
-			// NOTE: this has been tested with larger and smaller user-set text
-			// sizes and works fine
-			node.style.zoom = "1";
-			// node.style.zoom = "normal";
-		}
-		// don't set the width to auto if it didn't already cascade that way.
-		// We don't want to f anyones designs
-		if(	(node.style.width.length == 0) &&
-			(dojo.style.getStyle(node, "width") == "auto") ){
-			node.style.width = "auto";
-		}
-	}
-}
-
-dojo.fx.html.fadeOut = function(node, duration, callback, dontPlay) {
-	return dojo.fx.html.fade(node, duration, dojo.style.getOpacity(node), 0, callback, dontPlay);
-};
-
-dojo.fx.html.fadeIn = function(node, duration, callback, dontPlay) {
-	return dojo.fx.html.fade(node, duration, dojo.style.getOpacity(node), 1, callback, dontPlay);
-};
-
-dojo.fx.html.fadeHide = function(node, duration, callback, dontPlay) {
-	node = dojo.byId(node);
-	if(!duration) { duration = 150; } // why not have a default?
-	return dojo.fx.html.fadeOut(node, duration, function(node) {
-		node.style.display = "none";
-		if(typeof callback == "function") { callback(node); }
-	});
-};
-
-dojo.fx.html.fadeShow = function(node, duration, callback, dontPlay) {
-	node = dojo.byId(node);
-	if(!duration) { duration = 150; } // why not have a default?
-	node.style.display = "block";
-	return dojo.fx.html.fade(node, duration, 0, 1, callback, dontPlay);
-};
-
-dojo.fx.html.fade = function(node, duration, startOpac, endOpac, callback, dontPlay) {
-	node = dojo.byId(node);
-	dojo.fx.html._makeFadeable(node);
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line([startOpac],[endOpac]),
-		duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		dojo.style.setOpacity(node, e.x);
-	});
-	if(callback) {
-		dojo.event.connect(anim, "onEnd", function(e) {
-			callback(node, anim);
-		});
-	}
-	if(!dontPlay) { anim.play(true); }
-	return anim;
-};
-
-dojo.fx.html.slideTo = function(node, duration, endCoords, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = endCoords;
-		endCoords = tmp;
-	}
-	node = dojo.byId(node);
-
-	var top = node.offsetTop;
-	var left = node.offsetLeft;
-	var pos = dojo.style.getComputedStyle(node, 'position');
-
-	if (pos == 'relative' || pos == 'static') {
-		top = parseInt(dojo.style.getComputedStyle(node, 'top')) || 0;
-		left = parseInt(dojo.style.getComputedStyle(node, 'left')) || 0;
-	}
-
-	return dojo.fx.html.slide(node, duration, [left, top],
-		endCoords, callback, dontPlay);
-};
-
-dojo.fx.html.slideBy = function(node, duration, coords, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = coords;
-		coords = tmp;
-	}
-	node = dojo.byId(node);
-
-	var top = node.offsetTop;
-	var left = node.offsetLeft;
-	var pos = dojo.style.getComputedStyle(node, 'position');
-
-	if (pos == 'relative' || pos == 'static') {
-		top = parseInt(dojo.style.getComputedStyle(node, 'top')) || 0;
-		left = parseInt(dojo.style.getComputedStyle(node, 'left')) || 0;
-	}
-
-	return dojo.fx.html.slideTo(node, duration, [left+coords[0], top+coords[1]],
-		callback, dontPlay);
-};
-
-dojo.fx.html.slide = function(node, duration, startCoords, endCoords, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = endCoords;
-		endCoords = startCoords;
-		startCoords = tmp;
-	}
-	node = dojo.byId(node);
-
-	if (dojo.style.getComputedStyle(node, 'position') == 'static') {
-		node.style.position = 'relative';
-	}
-
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line(startCoords, endCoords),
-		duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		with( node.style ) {
-			left = e.x + "px";
-			top = e.y + "px";
-		}
-	});
-	if(callback) {
-		dojo.event.connect(anim, "onEnd", function(e) {
-			callback(node, anim);
-		});
-	}
-	if(!dontPlay) { anim.play(true); }
-	return anim;
-};
-
-// Fade from startColor to the node's background color
-dojo.fx.html.colorFadeIn = function(node, duration, startColor, delay, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = startColor;
-		startColor = tmp;
-	}
-	node = dojo.byId(node);
-	var color = dojo.html.getBackgroundColor(node);
-	var bg = dojo.style.getStyle(node, "background-color").toLowerCase();
-	var wasTransparent = bg == "transparent" || bg == "rgba(0, 0, 0, 0)";
-	while(color.length > 3) { color.pop(); }
-
-	var rgb = new dojo.graphics.color.Color(startColor).toRgb();
-	var anim = dojo.fx.html.colorFade(node, duration||dojo.fx.duration, startColor, color, callback, true);
-	dojo.event.connect(anim, "onEnd", function(e) {
-		if( wasTransparent ) {
-			node.style.backgroundColor = "transparent";
-		}
-	});
-	if( delay > 0 ) {
-		node.style.backgroundColor = "rgb(" + rgb.join(",") + ")";
-		if(!dontPlay) { setTimeout(function(){anim.play(true)}, delay); }
-	} else {
-		if(!dontPlay) { anim.play(true); }
-	}
-	return anim;
-};
-// alias for (probably?) common use/terminology
-dojo.fx.html.highlight = dojo.fx.html.colorFadeIn;
-dojo.fx.html.colorFadeFrom = dojo.fx.html.colorFadeIn;
-
-// Fade from node's background color to endColor
-dojo.fx.html.colorFadeOut = function(node, duration, endColor, delay, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = endColor;
-		endColor = tmp;
-	}
-	node = dojo.byId(node);
-	var color = new dojo.graphics.color.Color(dojo.html.getBackgroundColor(node)).toRgb();
-
-	var rgb = new dojo.graphics.color.Color(endColor).toRgb();
-	var anim = dojo.fx.html.colorFade(node, duration||dojo.fx.duration, color, rgb, callback, delay > 0 || dontPlay);
-	if( delay > 0 ) {
-		node.style.backgroundColor = "rgb(" + color.join(",") + ")";
-		if(!dontPlay) { setTimeout(function(){anim.play(true)}, delay); }
-	}
-	return anim;
-};
-// FIXME: not sure which name is better. an alias here may be bad.
-dojo.fx.html.unhighlight = dojo.fx.html.colorFadeOut;
-dojo.fx.html.colorFadeTo = dojo.fx.html.colorFadeOut;
-
-// Fade node background from startColor to endColor
-dojo.fx.html.colorFade = function(node, duration, startColor, endColor, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = endColor;
-		endColor = startColor;
-		startColor = tmp;
-	}
-	node = dojo.byId(node);
-	var startRgb = new dojo.graphics.color.Color(startColor).toRgb();
-	var endRgb = new dojo.graphics.color.Color(endColor).toRgb();
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line(startRgb, endRgb),
-		duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		node.style.backgroundColor = "rgb(" + e.coordsAsInts().join(",") + ")";
-	});
-	if(callback) {
-		dojo.event.connect(anim, "onEnd", function(e) {
-			callback(node, anim);
-		});
-	}
-	if( !dontPlay ) { anim.play(true); }
-	return anim;
-};
-
-dojo.fx.html.wipeShow = function(node, duration, callback, dontPlay) {
-	node = dojo.byId(node);
-	var overflow = dojo.html.getStyle(node, "overflow");
-	node.style.overflow = "hidden";
-	node.style.height = 0;
-	dojo.html.show(node);
-	var anim = new dojo.animation.Animation([[0], [node.scrollHeight]], duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		node.style.height = e.x + "px";
-	});
-	dojo.event.connect(anim, "onEnd", function() {
-		node.style.overflow = overflow;
-		node.style.height = "auto";
-		if(callback) { callback(node, anim); }
-	});
-	if(!dontPlay) { anim.play(); }
-	return anim;
-}
-
-dojo.fx.html.wipeHide = function(node, duration, callback, dontPlay) {
-	node = dojo.byId(node);
-	var overflow = dojo.html.getStyle(node, "overflow");
-	node.style.overflow = "hidden";
-	var anim = new dojo.animation.Animation([[node.offsetHeight], [0]], duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		node.style.height = e.x + "px";
-	});
-	dojo.event.connect(anim, "onEnd", function() {
-		node.style.overflow = overflow;
-		dojo.html.hide(node);
-		if(callback) { callback(node, anim); }
-	});
-	if(!dontPlay) { anim.play(); }
-	return anim;
-}
-
-dojo.fx.html.wiper = function(node, controlNode) {
-	this.node = dojo.byId(node);
-	if(controlNode) {
-		dojo.event.connect(dojo.byId(controlNode), "onclick", this, "toggle");
-	}
-}
-dojo.lang.extend(dojo.fx.html.wiper, {
-	duration: dojo.fx.duration,
-	_anim: null,
-
-	toggle: function() {
-		if(!this._anim) {
-			var type = "wipe" + (dojo.html.isVisible(this.node) ? "Hide" : "Show");
-			this._anim = dojo.fx[type](this.node, this.duration, dojo.lang.hitch(this, "_callback"));
-		}
-	},
-
-	_callback: function() {
-		this._anim = null;
-	}
-});
-
-dojo.fx.html.wipeIn = function(node, duration, callback, dontPlay) {
-	node = dojo.byId(node);
-	var savedHeight = dojo.html.getStyle(node, "height");
-	dojo.html.show(node);
-	var height = node.offsetHeight;
-	var anim = dojo.fx.html.wipeInToHeight(node, duration, height, function(e) {
-		node.style.height = savedHeight || "auto";
-		if(callback) { callback(node, anim); }
-	}, dontPlay);
-};
-
-dojo.fx.html.wipeInToHeight = function(node, duration, height, callback, dontPlay) {
-	node = dojo.byId(node);
-	var savedOverflow = dojo.html.getStyle(node, "overflow");
-	// FIXME: should we be setting display to something other than "" for the table elements?
-	node.style.height = "0px";
-	node.style.display = "none";
-	if(savedOverflow == "visible") {
-		node.style.overflow = "hidden";
-	}
-	var dispType = dojo.lang.inArray(node.tagName.toLowerCase(), ['tr', 'td', 'th']) ? "" : "block";
-	node.style.display = dispType;
-
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line([0], [height]),
-		duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		node.style.height = Math.round(e.x) + "px";
-	});
-	dojo.event.connect(anim, "onEnd", function(e) {
-		if(savedOverflow != "visible") {
-			node.style.overflow = savedOverflow;
-		}
-		if(callback) { callback(node, anim); }
-	});
-	if( !dontPlay ) { anim.play(true); }
-	return anim;
-}
-
-dojo.fx.html.wipeOut = function(node, duration, callback, dontPlay) {
-	node = dojo.byId(node);
-	var savedOverflow = dojo.html.getStyle(node, "overflow");
-	var savedHeight = dojo.html.getStyle(node, "height");
-	var height = node.offsetHeight;
-	node.style.overflow = "hidden";
-
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line([height], [0]),
-		duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		node.style.height = Math.round(e.x) + "px";
-	});
-	dojo.event.connect(anim, "onEnd", function(e) {
-		node.style.display = "none";
-		node.style.overflow = savedOverflow;
-		node.style.height = savedHeight || "auto";
-		if(callback) { callback(node, anim); }
-	});
-	if( !dontPlay ) { anim.play(true); }
-	return anim;
-};
-
-dojo.fx.html.explode = function(start, endNode, duration, callback, dontPlay) {
-	var startCoords = dojo.html.toCoordinateArray(start);
-
-	var outline = document.createElement("div");
-	with(outline.style) {
-		position = "absolute";
-		border = "1px solid black";
-		display = "none";
-	}
-	dojo.html.body().appendChild(outline);
-
-	endNode = dojo.byId(endNode);
-	with(endNode.style) {
-		visibility = "hidden";
-		display = "block";
-	}
-	var endCoords = dojo.html.toCoordinateArray(endNode);
-
-	with(endNode.style) {
-		display = "none";
-		visibility = "visible";
-	}
-
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line(startCoords, endCoords),
-		duration||dojo.fx.duration, 0
-	);
-	dojo.event.connect(anim, "onBegin", function(e) {
-		outline.style.display = "block";
-	});
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		with(outline.style) {
-			left = e.x + "px";
-			top = e.y + "px";
-			width = e.coords[2] + "px";
-			height = e.coords[3] + "px";
-		}
-	});
-
-	dojo.event.connect(anim, "onEnd", function() {
-		endNode.style.display = "block";
-		outline.parentNode.removeChild(outline);
-		if(callback) { callback(endNode, anim); }
-	});
-	if(!dontPlay) { anim.play(); }
-	return anim;
-};
-
-dojo.fx.html.implode = function(startNode, end, duration, callback, dontPlay) {
-	var startCoords = dojo.html.toCoordinateArray(startNode);
-	var endCoords = dojo.html.toCoordinateArray(end);
-
-	startNode = dojo.byId(startNode);
-	var outline = document.createElement("div");
-	with(outline.style) {
-		position = "absolute";
-		border = "1px solid black";
-		display = "none";
-	}
-	dojo.html.body().appendChild(outline);
-
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line(startCoords, endCoords),
-		duration||dojo.fx.duration, 0
-	);
-	dojo.event.connect(anim, "onBegin", function(e) {
-		startNode.style.display = "none";
-		outline.style.display = "block";
-	});
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		with(outline.style) {
-			left = e.x + "px";
-			top = e.y + "px";
-			width = e.coords[2] + "px";
-			height = e.coords[3] + "px";
-		}
-	});
-
-	dojo.event.connect(anim, "onEnd", function() {
-		outline.parentNode.removeChild(outline);
-		if(callback) { callback(startNode, anim); }
-	});
-	if(!dontPlay) { anim.play(); }
-	return anim;
-};
-
-dojo.fx.html.Exploder = function(triggerNode, boxNode) {
-	triggerNode = dojo.byId(triggerNode);
-	boxNode = dojo.byId(boxNode);
-	var _this = this;
-
-	// custom options
-	this.waitToHide = 500;
-	this.timeToShow = 100;
-	this.waitToShow = 200;
-	this.timeToHide = 70;
-	this.autoShow = false;
-	this.autoHide = false;
-
-	var animShow = null;
-	var animHide = null;
-
-	var showTimer = null;
-	var hideTimer = null;
-
-	var startCoords = null;
-	var endCoords = null;
-
-	this.showing = false;
-
-	this.onBeforeExplode = null;
-	this.onAfterExplode = null;
-	this.onBeforeImplode = null;
-	this.onAfterImplode = null;
-	this.onExploding = null;
-	this.onImploding = null;
-
-	this.timeShow = function() {
-		clearTimeout(showTimer);
-		showTimer = setTimeout(_this.show, _this.waitToShow);
-	}
-
-	this.show = function() {
-		clearTimeout(showTimer);
-		clearTimeout(hideTimer);
-		//triggerNode.blur();
-
-		if( (animHide && animHide.status() == "playing")
-			|| (animShow && animShow.status() == "playing")
-			|| _this.showing ) { return; }
-
-		if(typeof _this.onBeforeExplode == "function") { _this.onBeforeExplode(triggerNode, boxNode); }
-		animShow = dojo.fx.html.explode(triggerNode, boxNode, _this.timeToShow, function(e) {
-			_this.showing = true;
-			if(typeof _this.onAfterExplode == "function") { _this.onAfterExplode(triggerNode, boxNode); }
-		});
-		if(typeof _this.onExploding == "function") {
-			dojo.event.connect(animShow, "onAnimate", this, "onExploding");
-		}
-	}
-
-	this.timeHide = function() {
-		clearTimeout(showTimer);
-		clearTimeout(hideTimer);
-		if(_this.showing) {
-			hideTimer = setTimeout(_this.hide, _this.waitToHide);
-		}
-	}
-
-	this.hide = function() {
-		clearTimeout(showTimer);
-		clearTimeout(hideTimer);
-		if( animShow && animShow.status() == "playing" ) {
-			return;
-		}
-
-		_this.showing = false;
-		if(typeof _this.onBeforeImplode == "function") { _this.onBeforeImplode(triggerNode, boxNode); }
-		animHide = dojo.fx.html.implode(boxNode, triggerNode, _this.timeToHide, function(e){
-			if(typeof _this.onAfterImplode == "function") { _this.onAfterImplode(triggerNode, boxNode); }
-		});
-		if(typeof _this.onImploding == "function") {
-			dojo.event.connect(animHide, "onAnimate", this, "onImploding");
-		}
-	}
-
-	// trigger events
-	dojo.event.connect(triggerNode, "onclick", function(e) {
-		if(_this.showing) {
-			_this.hide();
-		} else {
-			_this.show();
-		}
-	});
-	dojo.event.connect(triggerNode, "onmouseover", function(e) {
-		if(_this.autoShow) {
-			_this.timeShow();
-		}
-	});
-	dojo.event.connect(triggerNode, "onmouseout", function(e) {
-		if(_this.autoHide) {
-			_this.timeHide();
-		}
-	});
-
-	// box events
-	dojo.event.connect(boxNode, "onmouseover", function(e) {
-		clearTimeout(hideTimer);
-	});
-	dojo.event.connect(boxNode, "onmouseout", function(e) {
-		if(_this.autoHide) {
-			_this.timeHide();
-		}
-	});
-
-	// document events
-	dojo.event.connect(document.documentElement || dojo.html.body(), "onclick", function(e) {
-		if(_this.autoHide && _this.showing
-			&& !dojo.dom.isDescendantOf(e.target, boxNode)
-			&& !dojo.dom.isDescendantOf(e.target, triggerNode) ) {
-			_this.hide();
-		}
-	});
-
-	return this;
-};
-
-dojo.lang.mixin(dojo.fx, dojo.fx.html);
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/fx/svg.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/fx/svg.js
deleted file mode 100644
index 6406161..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/fx/svg.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.fx.svg");
-
-dojo.require("dojo.svg");
-dojo.require("dojo.lang");
-dojo.require("dojo.animation.*");
-dojo.require("dojo.event.*");
-
-dojo.fx.svg.fadeOut = function(node, duration, callback){
-	return dojo.fx.svg.fade(node, duration, dojo.svg.getOpacity(node), 0, callback);
-};
-dojo.fx.svg.fadeIn = function(node, duration, callback){
-	return dojo.fx.svg.fade(node, duration, dojo.svg.getOpacity(node), 1, callback);
-};
-dojo.fx.svg.fadeHide = function(node, duration, callback){
-	if(!duration) { duration = 150; } // why not have a default?
-	return dojo.fx.svg.fadeOut(node, duration, function(node) {
-		if(typeof callback == "function") { callback(node); }
-	});
-};
-dojo.fx.svg.fadeShow = function(node, duration, callback){
-	if(!duration) { duration = 150; } // why not have a default?
-	return dojo.fx.svg.fade(node, duration, 0, 1, callback);
-};
-dojo.fx.svg.fade = function(node, duration, startOpac, endOpac, callback){
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line([startOpac],[endOpac]),
-		duration,
-		0
-	);
-	dojo.event.connect(anim, "onAnimate", function(e){
-		dojo.svg.setOpacity(node, e.x);
-	});
-	if (callback) {
-		dojo.event.connect(anim, "onEnd", function(e){
-			callback(node, anim);
-		});
-	};
-	anim.play(true);
-	return anim;
-};
-
-/////////////////////////////////////////////////////////////////////////////////////////
-//	TODO
-/////////////////////////////////////////////////////////////////////////////////////////
-
-//	SLIDES
-dojo.fx.svg.slideTo = function(node, endCoords, duration, callback) { };
-dojo.fx.svg.slideBy = function(node, coords, duration, callback) { };
-dojo.fx.svg.slide = function(node, startCoords, endCoords, duration, callback) { 
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line([startCoords],[endCoords]),
-		duration,
-		0
-	);
-	dojo.event.connect(anim, "onAnimate", function(e){
-		dojo.svg.setCoords(node, {x: e.x, y: e.y });
-	});
-	if (callback) {
-		dojo.event.connect(anim, "onEnd", function(e){
-			callback(node, anim);
-		});
-	};
-	anim.play(true);
-	return anim;
-};
-
-//	COLORS
-dojo.fx.svg.colorFadeIn = function(node, startRGB, duration, delay, callback) { };
-dojo.fx.svg.highlight = dojo.fx.svg.colorFadeIn;
-dojo.fx.svg.colorFadeFrom = dojo.fx.svg.colorFadeIn;
-
-dojo.fx.svg.colorFadeOut = function(node, endRGB, duration, delay, callback) { };
-dojo.fx.svg.unhighlight = dojo.fx.svg.colorFadeOut;
-dojo.fx.svg.colorFadeTo = dojo.fx.svg.colorFadeOut;
-
-dojo.fx.svg.colorFade = function(node, startRGB, endRGB, duration, callback, dontPlay) { };
-
-//	WIPES
-dojo.fx.svg.wipeIn = function(node, duration, callback, dontPlay) { };
-dojo.fx.svg.wipeInToHeight = function(node, duration, height, callback, dontPlay) { }
-dojo.fx.svg.wipeOut = function(node, duration, callback, dontPlay) { };
-
-//	Explode and Implode
-dojo.fx.svg.explode = function(startNode, endNode, duration, callback) { };
-dojo.fx.svg.explodeFromBox = function(startCoords, endNode, duration, callback) { };
-dojo.fx.svg.implode = function(startNode, endNode, duration, callback) { };
-dojo.fx.svg.implodeToBox = function(startNode, endCoords, duration, callback) { };
-dojo.fx.svg.Exploder = function(triggerNode, boxNode) { };
-
-//	html mixes in, we want SVG to remain separate
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/Colorspace.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/Colorspace.js
deleted file mode 100644
index 42d712e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/Colorspace.js
+++ /dev/null
@@ -1,944 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.graphics.Colorspace");
-
-dojo.require("dojo.lang");
-dojo.require("dojo.math.matrix");
-
-//
-// to convert to YUV:
-//   c.whitePoint = 'D65';
-//   c.RGBWorkingSpace = 'pal_secam_rgb';
-//   var out = c.convert([r,g,b], 'RGB', 'XYZ');
-//
-// to convert to YIQ:
-//   c.whitePoint = 'D65';
-//   c.RGBWorkingSpace = 'ntsc_rgb';
-//   var out = c.convert([r,g,b], 'RGB', 'XYZ');
-//
-
-dojo.graphics.Colorspace =function(){
-
-	this.whitePoint = 'D65';
-	this.stdObserver = '10';
-	this.chromaticAdaptationAlg = 'bradford';
-	this.RGBWorkingSpace = 's_rgb';
-	this.useApproxCIELabMapping = 1; // see http://www.brucelindbloom.com/LContinuity.html
-
-	this.chainMaps = {
-		'RGB_to_xyY'  : ['XYZ'],
-		'xyY_to_RGB'  : ['XYZ'],
-		'RGB_to_Lab'  : ['XYZ'],
-		'Lab_to_RGB'  : ['XYZ'],
-		'RGB_to_LCHab': ['XYZ', 'Lab'],
-		'LCHab_to_RGB': ['Lab'],
-		'xyY_to_Lab'  : ['XYZ'],
-		'Lab_to_xyY'  : ['XYZ'],
-		'XYZ_to_LCHab': ['Lab'],
-		'LCHab_to_XYZ': ['Lab'],
-		'xyY_to_LCHab': ['XYZ', 'Lab'],
-		'LCHab_to_xyY': ['Lab', 'XYZ'],
-		'RGB_to_Luv'  : ['XYZ'],
-		'Luv_to_RGB'  : ['XYZ'],
-		'xyY_to_Luv'  : ['XYZ'],
-		'Luv_to_xyY'  : ['XYZ'],
-		'Lab_to_Luv'  : ['XYZ'],
-		'Luv_to_Lab'  : ['XYZ'],
-		'LCHab_to_Luv': ['Lab', 'XYZ'],
-		'Luv_to_LCHab': ['XYZ', 'Lab'],
-		'RGB_to_LCHuv'  : ['XYZ', 'Luv'],
-		'LCHuv_to_RGB'  : ['Luv', 'XYZ'],
-		'XYZ_to_LCHuv'  : ['Luv'],
-		'LCHuv_to_XYZ'  : ['Luv'],
-		'xyY_to_LCHuv'  : ['XYZ', 'Luv'],
-		'LCHuv_to_xyY'  : ['Luv', 'XYZ'],
-		'Lab_to_LCHuv'  : ['XYZ', 'Luv'],
-		'LCHuv_to_Lab'  : ['Luv', 'XYZ'],
-		'LCHab_to_LCHuv': ['Lab', 'XYZ', 'Luv'],
-		'LCHuv_to_LCHab': ['Luv', 'XYZ', 'Lab'],
-		'XYZ_to_CMY'    : ['RGB'],
-		'CMY_to_XYZ'    : ['RGB'],
-		'xyY_to_CMY'    : ['RGB'],
-		'CMY_to_xyY'    : ['RGB'],
-		'Lab_to_CMY'    : ['RGB'],
-		'CMY_to_Lab'    : ['RGB'],
-		'LCHab_to_CMY'  : ['RGB'],
-		'CMY_to_LCHab'  : ['RGB'],
-		'Luv_to_CMY'    : ['RGB'],
-		'CMY_to_Luv'    : ['RGB'],
-		'LCHuv_to_CMY'  : ['RGB'],
-		'CMY_to_LCHuv'  : ['RGB'],
-		'XYZ_to_HSL'    : ['RGB'],
-		'HSL_to_XYZ'    : ['RGB'],
-		'xyY_to_HSL'    : ['RGB'],
-		'HSL_to_xyY'    : ['RGB'],
-		'Lab_to_HSL'    : ['RGB'],
-		'HSL_to_Lab'    : ['RGB'],
-		'LCHab_to_HSL'  : ['RGB'],
-		'HSL_to_LCHab'  : ['RGB'],
-		'Luv_to_HSL'    : ['RGB'],
-		'HSL_to_Luv'    : ['RGB'],
-		'LCHuv_to_HSL'  : ['RGB'],
-		'HSL_to_LCHuv'  : ['RGB'],
-		'CMY_to_HSL'    : ['RGB'],
-		'HSL_to_CMY'    : ['RGB'],
-		'CMYK_to_HSL'   : ['RGB'],
-		'HSL_to_CMYK'   : ['RGB'],
-		'XYZ_to_HSV'    : ['RGB'],
-		'HSV_to_XYZ'    : ['RGB'],
-		'xyY_to_HSV'    : ['RGB'],
-		'HSV_to_xyY'    : ['RGB'],
-		'Lab_to_HSV'    : ['RGB'],
-		'HSV_to_Lab'    : ['RGB'],
-		'LCHab_to_HSV'  : ['RGB'],
-		'HSV_to_LCHab'  : ['RGB'],
-		'Luv_to_HSV'    : ['RGB'],
-		'HSV_to_Luv'    : ['RGB'],
-		'LCHuv_to_HSV'  : ['RGB'],
-		'HSV_to_LCHuv'  : ['RGB'],
-		'CMY_to_HSV'    : ['RGB'],
-		'HSV_to_CMY'    : ['RGB'],
-		'CMYK_to_HSV'   : ['RGB'],
-		'HSV_to_CMYK'   : ['RGB'],
-		'HSL_to_HSV'    : ['RGB'],
-		'HSV_to_HSL'    : ['RGB'],
-		'XYZ_to_CMYK'   : ['RGB'],
-		'CMYK_to_XYZ'   : ['RGB'],
-		'xyY_to_CMYK'   : ['RGB'],
-		'CMYK_to_xyY'   : ['RGB'],
-		'Lab_to_CMYK'   : ['RGB'],
-		'CMYK_to_Lab'   : ['RGB'],
-		'LCHab_to_CMYK' : ['RGB'],
-		'CMYK_to_LCHab' : ['RGB'],
-		'Luv_to_CMYK'   : ['RGB'],
-		'CMYK_to_Luv'   : ['RGB'],
-		'LCHuv_to_CMYK' : ['RGB'],
-		'CMYK_to_LCHuv' : ['RGB']
-	};
-
-
-	return this;
-}
-
-dojo.graphics.Colorspace.prototype.convert = function(col, model_from, model_to){
-
-	var k = model_from+'_to_'+model_to;
-
-	if (this[k]){
-		return this[k](col);
-	}else{
-		if (this.chainMaps[k]){
-
-			var cur = model_from;
-			var models = this.chainMaps[k].concat();
-			models.push(model_to);
-
-			for(var i=0; i<models.length; i++){
-
-				col = this.convert(col, cur, models[i]);
-				cur = models[i];
-			}
-
-			return col;
-
-		}else{
-
-			dojo.debug("Can't convert from "+model_from+' to '+model_to);
-		}
-	}
-}
-
-dojo.graphics.Colorspace.prototype.munge = function(keys, args){
-
-	if (dojo.lang.isArray(args[0])){
-		args = args[0];
-	}
-
-	var out = new Array();
-
-	for (var i=0; i<keys.length; i++){
-		out[keys.charAt(i)] = args[i];
-	}
-
-	return out;
-}
-
-dojo.graphics.Colorspace.prototype.getWhitePoint = function(){
-
-	var x = 0;
-	var y = 0;
-	var t = 0;
-
-	// ref: http://en.wikipedia.org/wiki/White_point
-	// TODO: i need some good/better white point values
-
-	switch(this.stdObserver){
-		case '2' :
-			switch(this.whitePoint){
-				case 'E'   : x=1/3    ; y=1/3    ; t=5400; break; //Equal energy
-				case 'D50' : x=0.34567; y=0.35850; t=5000; break;
-				case 'D55' : x=0.33242; y=0.34743; t=5500; break;
-				case 'D65' : x=0.31271; y=0.32902; t=6500; break;
-				case 'D75' : x=0.29902; y=0.31485; t=7500; break;
-				case 'A'   : x=0.44757; y=0.40745; t=2856; break; //Incandescent tungsten
-				case 'B'   : x=0.34842; y=0.35161; t=4874; break;
-				case 'C'   : x=0.31006; y=0.31616; t=6774; break;
-				case '9300': x=0.28480; y=0.29320; t=9300; break; //Blue phosphor monitors
-				case 'F2'  : x=0.37207; y=0.37512; t=4200; break; //Cool White Fluorescent
-				case 'F7'  : x=0.31285; y=0.32918; t=6500; break; //Narrow Band Daylight Fluorescent
-				case 'F11' : x=0.38054; y=0.37691; t=4000; break; //Narrow Band White Fluorescent
-				default: dojo.debug('White point '+this.whitePoint+" isn't defined for Std. Observer "+this.strObserver);
-			};
-			break;
-		case '10' :
-			switch(this.whitePoint){
-				case 'E'   : x=1/3    ; y=1/3    ; t=5400; break; //Equal energy
-				case 'D50' : x=0.34773; y=0.35952; t=5000; break;
-				case 'D55' : x=0.33411; y=0.34877; t=5500; break;
-				case 'D65' : x=0.31382; y=0.33100; t=6500; break;
-				case 'D75' : x=0.29968; y=0.31740; t=7500; break;
-				case 'A'   : x=0.45117; y=0.40594; t=2856; break; //Incandescent tungsten
-				case 'B'   : x=0.3498 ; y=0.3527 ; t=4874; break;
-				case 'C'   : x=0.31039; y=0.31905; t=6774; break;
-				case 'F2'  : x=0.37928; y=0.36723; t=4200; break; //Cool White Fluorescent
-				case 'F7'  : x=0.31565; y=0.32951; t=6500; break; //Narrow Band Daylight Fluorescent
-				case 'F11' : x=0.38543; y=0.37110; t=4000; break; //Narrow Band White Fluorescent
-				default: dojo.debug('White point '+this.whitePoint+" isn't defined for Std. Observer "+this.strObserver);
-			};
-			break;
-		default:
-			dojo.debug("Std. Observer "+this.strObserver+" isn't defined");
-	}
-
-	var z = 1 - x - y;
-
-	var wp = {'x':x, 'y':y, 'z':z, 't':t};
-
-	wp.Y = 1;
-
-	var XYZ = this.xyY_to_XYZ([wp.x, wp.y, wp.Y]);
-
-	wp.X = XYZ[0];
-	wp.Y = XYZ[1];
-	wp.Z = XYZ[2];
-
-	return wp
-}
-
-dojo.graphics.Colorspace.prototype.getPrimaries = function(){
-
-	// ref: http://www.fho-emden.de/~hoffmann/ciexyz29082000.pdf
-	// ref: http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
-
-	var m = [];
-
-	switch(this.RGBWorkingSpace){
-
-		case 'adobe_rgb_1998'	: m = [2.2, 'D65', 0.6400, 0.3300, 0.297361, 0.2100, 0.7100, 0.627355, 0.1500, 0.0600, 0.075285]; break;
-		case 'apple_rgb'	: m = [1.8, 'D65', 0.6250, 0.3400, 0.244634, 0.2800, 0.5950, 0.672034, 0.1550, 0.0700, 0.083332]; break;
-		case 'best_rgb'		: m = [2.2, 'D50', 0.7347, 0.2653, 0.228457, 0.2150, 0.7750, 0.737352, 0.1300, 0.0350, 0.034191]; break;
-		case 'beta_rgb'		: m = [2.2, 'D50', 0.6888, 0.3112, 0.303273, 0.1986, 0.7551, 0.663786, 0.1265, 0.0352, 0.032941]; break;
-		case 'bruce_rgb'	: m = [2.2, 'D65', 0.6400, 0.3300, 0.240995, 0.2800, 0.6500, 0.683554, 0.1500, 0.0600, 0.075452]; break;
-		case 'cie_rgb'		: m = [2.2, 'E'  , 0.7350, 0.2650, 0.176204, 0.2740, 0.7170, 0.812985, 0.1670, 0.0090, 0.010811]; break;
-		case 'color_match_rgb'	: m = [1.8, 'D50', 0.6300, 0.3400, 0.274884, 0.2950, 0.6050, 0.658132, 0.1500, 0.0750, 0.066985]; break;
-		case 'don_rgb_4'	: m = [2.2, 'D50', 0.6960, 0.3000, 0.278350, 0.2150, 0.7650, 0.687970, 0.1300, 0.0350, 0.033680]; break;
-		case 'eci_rgb'		: m = [1.8, 'D50', 0.6700, 0.3300, 0.320250, 0.2100, 0.7100, 0.602071, 0.1400, 0.0800, 0.077679]; break;
-		case 'ekta_space_ps5'	: m = [2.2, 'D50', 0.6950, 0.3050, 0.260629, 0.2600, 0.7000, 0.734946, 0.1100, 0.0050, 0.004425]; break;
-		case 'ntsc_rgb'		: m = [2.2, 'C'  , 0.6700, 0.3300, 0.298839, 0.2100, 0.7100, 0.586811, 0.1400, 0.0800, 0.114350]; break;
-		case 'pal_secam_rgb'	: m = [2.2, 'D65', 0.6400, 0.3300, 0.222021, 0.2900, 0.6000, 0.706645, 0.1500, 0.0600, 0.071334]; break;
-		case 'pro_photo_rgb'	: m = [1.8, 'D50', 0.7347, 0.2653, 0.288040, 0.1596, 0.8404, 0.711874, 0.0366, 0.0001, 0.000086]; break;
-		case 'smpte-c_rgb'	: m = [2.2, 'D65', 0.6300, 0.3400, 0.212395, 0.3100, 0.5950, 0.701049, 0.1550, 0.0700, 0.086556]; break;
-		case 's_rgb'		: m = [2.2, 'D65', 0.6400, 0.3300, 0.212656, 0.3000, 0.6000, 0.715158, 0.1500, 0.0600, 0.072186]; break;
-		case 'wide_gamut_rgb'	: m = [2.2, 'D50', 0.7350, 0.2650, 0.258187, 0.1150, 0.8260, 0.724938, 0.1570, 0.0180, 0.016875]; break;
-
-		default: dojo.debug("RGB working space "+this.RGBWorkingSpace+" isn't defined");
-	}
-
-	var p = {};
-
-	p.name = this.RGBWorkingSpace;
-	p.gamma = m[0];
-	p.wp = m[1];
-
-	p.xr = m[2];
-	p.yr = m[3];
-	p.Yr = m[4];
-
-	p.xg = m[5];
-	p.yg = m[6];
-	p.Yg = m[7];
-
-	p.xb = m[8];
-	p.yb = m[9];
-	p.Yb = m[10];
-
-	// if WP doesn't match current WP, convert the primaries over
-
-	if (p.wp != this.whitePoint){
-
-		var r = this.XYZ_to_xyY( this.chromaticAdaptation( this.xyY_to_XYZ([p.xr, p.yr, p.Yr]), p.wp, this.whitePoint ) );
-		var g = this.XYZ_to_xyY( this.chromaticAdaptation( this.xyY_to_XYZ([p.xg, p.yg, p.Yg]), p.wp, this.whitePoint ) );
-		var b = this.XYZ_to_xyY( this.chromaticAdaptation( this.xyY_to_XYZ([p.xb, p.yb, p.Yb]), p.wp, this.whitePoint ) );
-
-		p.xr = r[0];
-		p.yr = r[1];
-		p.Yr = r[2];
-
-		p.xg = g[0];
-		p.yg = g[1];
-		p.Yg = g[2];
-
-		p.xb = b[0];
-		p.yb = b[1];
-		p.Yb = b[2];
-
-		p.wp = this.whitePoint;
-	}
-
-	p.zr = 1 - p.xr - p.yr;
-	p.zg = 1 - p.xg - p.yg;
-	p.zb = 1 - p.xb - p.yb;
-
-	return p;
-}
-
-dojo.graphics.Colorspace.prototype.epsilon = function(){
-
-	return this.useApproxCIELabMapping ? 0.008856 : 216 / 24289;
-}
-
-dojo.graphics.Colorspace.prototype.kappa = function(){
-
-	return this.useApproxCIELabMapping ? 903.3 : 24389 / 27;
-}
-
-dojo.graphics.Colorspace.prototype.XYZ_to_xyY = function(){
-	var src = this.munge('XYZ', arguments);
-
-	var sum = src.X + src.Y + src.Z;
-
-	if (sum == 0){
-
-		var wp = this.getWhitePoint();
-		var x = wp.x;
-		var y = wp.y;
-	}else{
-		var x = src.X / sum;
-		var y = src.Y / sum;
-	}
-
-	var Y = src.Y;
-
-
-	return [x, y, Y];
-}
-
-dojo.graphics.Colorspace.prototype.xyY_to_XYZ = function(){
-	var src = this.munge('xyY', arguments);
-
-	if (src.y == 0){
-
-		var X = 0;
-		var Y = 0;
-		var Z = 0;
-	}else{
-		var X = (src.x * src.Y) / src.y;
-		var Y = src.Y;
-		var Z = ((1 - src.x - src.y) * src.Y) / src.y;
-	}
-
-	return [X, Y, Z];
-}
-
-dojo.graphics.Colorspace.prototype.RGB_to_XYZ = function(){
-	var src = this.munge('RGB', arguments);
-
-	var m = this.getRGB_XYZ_Matrix();
-	var pr = this.getPrimaries();
-
-	if (this.RGBWorkingSpace == 's_rgb'){
-
-		var r = (src.R > 0.04045) ? Math.pow(((src.R + 0.055) / 1.055), 2.4) : src.R / 12.92;
-		var g = (src.G > 0.04045) ? Math.pow(((src.G + 0.055) / 1.055), 2.4) : src.G / 12.92;
-		var b = (src.B > 0.04045) ? Math.pow(((src.B + 0.055) / 1.055), 2.4) : src.B / 12.92;
-
-	}else{
-
-		var r = Math.pow(src.R, pr.gamma);
-		var g = Math.pow(src.G, pr.gamma);
-		var b = Math.pow(src.B, pr.gamma);
-	}
-
-	var XYZ = dojo.math.matrix.multiply([[r, g, b]], m);
-
-	return [XYZ[0][0], XYZ[0][1], XYZ[0][2]];
-}
-
-dojo.graphics.Colorspace.prototype.XYZ_to_RGB = function(){
-	var src = this.munge('XYZ', arguments);
-
-	var mi = this.getXYZ_RGB_Matrix();
-	var pr = this.getPrimaries();
-
-	var rgb = dojo.math.matrix.multiply([[src.X, src.Y, src.Z]], mi);
-	var r = rgb[0][0];
-	var g = rgb[0][1];
-	var b = rgb[0][2];
-
-	if (this.RGBWorkingSpace == 's_rgb'){
-
-		var R = (r > 0.0031308) ? (1.055 * Math.pow(r, 1.0/2.4)) - 0.055 : 12.92 * r;
-		var G = (g > 0.0031308) ? (1.055 * Math.pow(g, 1.0/2.4)) - 0.055 : 12.92 * g;
-		var B = (b > 0.0031308) ? (1.055 * Math.pow(b, 1.0/2.4)) - 0.055 : 12.92 * b;
-	}else{
-		var R = Math.pow(r, 1/pr.gamma);
-		var G = Math.pow(g, 1/pr.gamma);
-		var B = Math.pow(b, 1/pr.gamma);
-	}
-
-	return [R, G, B];
-}
-
-dojo.graphics.Colorspace.prototype.XYZ_to_Lab = function(){
-	var src = this.munge('XYZ', arguments);
-
-	var wp = this.getWhitePoint();
-
-	var xr = src.X / wp.X;
-	var yr = src.Y / wp.Y;
-	var zr = src.Z / wp.Z;
-
-	var fx = (xr > this.epsilon()) ? Math.pow(xr, 1/3) : (this.kappa() * xr + 16) / 116;
-	var fy = (yr > this.epsilon()) ? Math.pow(yr, 1/3) : (this.kappa() * yr + 16) / 116;
-	var fz = (zr > this.epsilon()) ? Math.pow(zr, 1/3) : (this.kappa() * zr + 16) / 116;
-
-	var L = 116 * fy - 16;
-	var a = 500 * (fx - fy);
-	var b = 200 * (fy - fz);
-
-	return [L, a, b];
-}
-
-dojo.graphics.Colorspace.prototype.Lab_to_XYZ = function(){
-	var src = this.munge('Lab', arguments);
-
-	var wp = this.getWhitePoint();
-
-	var yr = (src.L > (this.kappa() * this.epsilon())) ? Math.pow((src.L + 16) / 116, 3) : src.L / this.kappa();
-
-	var fy = (yr > this.epsilon()) ? (src.L + 16) / 116 : (this.kappa() * yr + 16) / 116;
-
-	var fx = (src.a / 500) + fy;
-	var fz = fy - (src.b / 200);
-
-	var fxcube = Math.pow(fx, 3);
-	var fzcube = Math.pow(fz, 3);
-
-	var xr = (fxcube > this.epsilon()) ? fxcube : (116 * fx - 16) / this.kappa();
-	var zr = (fzcube > this.epsilon()) ? fzcube : (116 * fz - 16) / this.kappa();
-
-	var X = xr * wp.X;
-	var Y = yr * wp.Y;
-	var Z = zr * wp.Z;
-
-	return [X, Y, Z];
-}
-
-dojo.graphics.Colorspace.prototype.Lab_to_LCHab = function(){
-	var src = this.munge('Lab', arguments);
-
-	var L = src.L;
-	var C = Math.pow(src.a * src.a + src.b * src.b, 0.5);
-	var H = Math.atan2(src.b, src.a) * (180 / Math.PI);
-
-	if (H < 0){ H += 360; }
-	if (H > 360){ H -= 360; }
-
-	return [L, C, H];
-}
-
-dojo.graphics.Colorspace.prototype.LCHab_to_Lab = function(){
-	var src = this.munge('LCH', arguments);
-
-	var H_rad = src.H * (Math.PI / 180);
-
-	var L = src.L;
-
-	var a = src.C / Math.pow(Math.pow(Math.tan(H_rad), 2) + 1, 0.5);
-	if ((90 < src.H) && (src.H < 270)){ a= -a; }
-
-	var b = Math.pow(Math.pow(src.C, 2) - Math.pow(a, 2), 0.5);
-	if (src.H > 180){ b = -b; }
-
-	return [L, a, b];
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// this function converts an XYZ color array (col) from one whitepoint (src_w) to another (dst_w)
-//
-
-dojo.graphics.Colorspace.prototype.chromaticAdaptation = function(col, src_w, dst_w){
-
-	col = this.munge('XYZ', [col]);
-
-	//
-	// gather white point data for the source and dest
-	//
-
-	var old_wp = this.whitePoint;
-
-	this.whitePoint = src_w;
-	var wp_src = this.getWhitePoint();
-
-	this.whitePoint = dst_w;
-	var wp_dst = this.getWhitePoint();
-
-	this.whitePoint = old_wp;
-
-
-	//
-	// get a transformation matricies
-	//
-
-	switch(this.chromaticAdaptationAlg){
-		case 'xyz_scaling':
-			var ma = [[1,0,0],[0,1,0],[0,0,1]];
-			var mai = [[1,0,0],[0,1,0],[0,0,1]];
-			break;
-		case 'bradford':
-			var ma = [[0.8951, -0.7502, 0.0389],[0.2664, 1.7135, -0.0685],[-0.1614, 0.0367, 1.0296]];
-			var mai = [[0.986993, 0.432305, -0.008529],[-0.147054, 0.518360, 0.040043],[0.159963, 0.049291, 0.968487]];
-			break;
-		case 'von_kries':
-			var ma = [[0.40024, -0.22630, 0.00000],[0.70760, 1.16532, 0.00000],[-0.08081, 0.04570, 0.91822]]
-			var mai = [[1.859936, 0.361191, 0.000000],[-1.129382, 0.638812, 0.000000],[0.219897, -0.000006, 1.089064]]
-			break;
-		default:
-			dojo.debug("The "+this.chromaticAdaptationAlg+" chromatic adaptation algorithm matricies are not defined");
-	}
-
-
-	//
-	// calculate the cone response domains
-	//
-
-	var domain_src = dojo.math.matrix.multiply( [[wp_src.x, wp_src.y, wp_src.z]], ma);
-	var domain_dst = dojo.math.matrix.multiply( [[wp_dst.x, wp_dst.y, wp_dst.z]], ma);
-
-
-	//
-	// construct the centre matrix
-	//
-
-	var centre = [
-		[domain_dst[0][0]/domain_src[0][0], 0, 0],
-		[0, domain_dst[0][1]/domain_src[0][1], 0],
-		[0, 0, domain_dst[0][2]/domain_src[0][2]]
-	];
-
-
-	//
-	// caclulate 'm'
-	//
-
-	var m = dojo.math.matrix.multiply( dojo.math.matrix.multiply( ma, centre ), mai );
-
-
-	//
-	// construct source color matrix
-	//
-
-	var dst = dojo.math.matrix.multiply( [[ col.X, col.Y, col.Z ]], m );
-
-	return dst[0];
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-dojo.graphics.Colorspace.prototype.getRGB_XYZ_Matrix = function(){
-
-	var wp = this.getWhitePoint();
-	var pr = this.getPrimaries();
-
-	var Xr = pr.xr / pr.yr;
-	var Yr = 1;
-	var Zr = (1 - pr.xr - pr.yr) / pr.yr;
-
-	var Xg = pr.xg / pr.yg;
-	var Yg = 1;
-	var Zg = (1 - pr.xg - pr.yg) / pr.yg;
-
-	var Xb = pr.xb / pr.yb;
-	var Yb = 1;
-	var Zb = (1 - pr.xb - pr.yb) / pr.yb;
-
-	var m1 = [[Xr, Yr, Zr],[Xg, Yg, Zg],[Xb, Yb, Zb]];
-	var m2 = [[wp.X, wp.Y, wp.Z]];
-	var sm = dojo.math.matrix.multiply(m2, dojo.math.matrix.inverse(m1));
-
-	var Sr = sm[0][0];
-	var Sg = sm[0][1];
-	var Sb = sm[0][2];
-
-	var m4 = [[Sr*Xr, Sr*Yr, Sr*Zr],
-		  [Sg*Xg, Sg*Yg, Sg*Zg],
-		  [Sb*Xb, Sb*Yb, Sb*Zb]];
-
-	return m4;
-}
-
-dojo.graphics.Colorspace.prototype.getXYZ_RGB_Matrix = function(){
-
-	var m = this.getRGB_XYZ_Matrix();
-
-	return dojo.math.matrix.inverse(m);
-}
-
-dojo.graphics.Colorspace.prototype.XYZ_to_Luv = function(){
-
-	var src = this.munge('XYZ', arguments);
-
-	var wp = this.getWhitePoint();
-
-	var ud = (4 * src.X) / (src.X + 15 * src.Y + 3 * src.Z);
-	var vd = (9 * src.Y) / (src.X + 15 * src.Y + 3 * src.Z);
-
-	var udr = (4 * wp.X) / (wp.X + 15 * wp.Y + 3 * wp.Z);
-	var vdr = (9 * wp.Y) / (wp.X + 15 * wp.Y + 3 * wp.Z);
-
-	var yr = src.Y / wp.Y;
-
-	var L = (yr > this.epsilon()) ? 116 * Math.pow(yr, 1/3) - 16 : this.kappa() * yr;
-	var u = 13 * L * (ud-udr);
-	var v = 13 * L * (vd-vdr);
-
-	return [L, u, v];
-}
-
-dojo.graphics.Colorspace.prototype.Luv_to_XYZ = function(){
-
-	var src = this.munge('Luv', arguments);
-
-	var wp = this.getWhitePoint();
-
-	var uz = (4 * wp.X) / (wp.X + 15 * wp.Y + 3 * wp.Z);
-	var vz = (9 * wp.Y) / (wp.X + 15 * wp.Y + 3 * wp.Z);
-
-	var Y = (src.L > this.kappa() * this.epsilon()) ? Math.pow((src.L + 16) / 116, 3) : src.L / this.kappa();
-
-	var a = (1 / 3) * (((52 * src.L) / (src.u + 13 * src.L * uz)) - 1);
-	var b = -5 * Y;
-	var c = - (1 / 3);
-	var d = Y * (((39 * src.L) / (src.v + 13 * src.L * vz)) - 5);
-
-	var X = (d - b) / (a - c);
-	var Z = X * a + b;
-
-	return [X, Y, Z];
-}
-
-dojo.graphics.Colorspace.prototype.Luv_to_LCHuv = function(){
-
-	var src = this.munge('Luv', arguments);
-
-	var L = src.L;
-	var C = Math.pow(src.u * src.u + src.v * src.v, 0.5);
-	var H = Math.atan2(src.v, src.u) * (180 / Math.PI);
-
-	if (H < 0){ H += 360; }
-	if (H > 360){ H -= 360; }
-
-	return [L, C, H];
-}
-
-dojo.graphics.Colorspace.prototype.LCHuv_to_Luv = function(){
-
-	var src = this.munge('LCH', arguments);
-
-	var H_rad = src.H * (Math.PI / 180);
-
-	var L = src.L;
-	var u = src.C / Math.pow(Math.pow(Math.tan(H_rad), 2) + 1, 0.5);
-	var v = Math.pow(src.C * src.C - u * u, 0.5);
-
-	if ((90 < src.H) && (src.H < 270)){ u *= -1; }
-	if (src.H > 180){ v *= -1; }
-
-	return [L, u, v];
-}
-
-dojo.graphics.Colorspace.colorTemp_to_whitePoint = function(T){
-
-	if (T < 4000){
-		dojo.debug("Can't find a white point for temperatures under 4000K");
-		return [0,0];
-	}
-
-	if (T > 25000){
-		dojo.debug("Can't find a white point for temperatures over 25000K");
-		return [0,0];
-	}
-
-	var T1 = T;
-	var T2 = T * T;
-	var T3 = T2 * T;
-
-	var ten9 = Math.pow(10, 9);
-	var ten6 = Math.pow(10, 6);
-	var ten3 = Math.pow(10, 3);
-
-	if (T <= 7000){
-
-		var x = (-4.6070 * ten9 / T3) + (2.9678 * ten6 / T2) + (0.09911 * ten3 / T) + 0.244063;
-	}else{
-		var x = (-2.0064 * ten9 / T3) + (1.9018 * ten6 / T2) + (0.24748 * ten3 / T) + 0.237040;
-	}
-
-	var y = -3.000 * x * x + 2.870 * x - 0.275;
-
-	return [x, y];
-}
-
-dojo.graphics.Colorspace.prototype.RGB_to_CMY = function(){
-
-	var src = this.munge('RGB', arguments);
-
-	var C = 1 - src.R;
-	var M = 1 - src.G;
-	var Y = 1 - src.B;
-
-	return [C, M, Y];
-}
-
-dojo.graphics.Colorspace.prototype.CMY_to_RGB = function(){
-
-	var src = this.munge('CMY', arguments);
-
-	var R = 1 - src.C;
-	var G = 1 - src.M;
-	var B = 1 - src.Y;
-
-	return [R, G, B];
-}
-
-dojo.graphics.Colorspace.prototype.RGB_to_CMYK = function(){
-
-	var src = this.munge('RGB', arguments);
-
-	var K = Math.min(1-src.R, 1-src.G, 1-src.B);
-	var C = (1 - src.R - K) / (1 - K);
-	var M = (1 - src.G - K) / (1 - K);
-	var Y = (1 - src.B - K) / (1 - K);
-
-	return [C, M, Y, K];
-}
-
-dojo.graphics.Colorspace.prototype.CMYK_to_RGB = function(){
-
-	var src = this.munge('CMYK', arguments);
-
-	var R = 1 - Math.min(1, src.C * (1-src.K) + src.K);
-	var G = 1 - Math.min(1, src.M * (1-src.K) + src.K);
-	var B = 1 - Math.min(1, src.Y * (1-src.K) + src.K);
-
-	return [R, G, B];
-}
-
-dojo.graphics.Colorspace.prototype.CMY_to_CMYK = function(){
-
-	var src = this.munge('CMY', arguments);
-
-	var K = Math.min(src.C, src.M, src.Y);
-	var C = (src.C - K) / (1 - K);
-	var M = (src.M - K) / (1 - K);
-	var Y = (src.Y - K) / (1 - K);
-
-	return [C, M, Y, K];
-}
-
-dojo.graphics.Colorspace.prototype.CMYK_to_CMY = function(){
-
-	var src = this.munge('CMYK', arguments);
-
-	var C = Math.min(1, src.C * (1-src.K) + src.K);
-	var M = Math.min(1, src.M * (1-src.K) + src.K);
-	var Y = Math.min(1, src.Y * (1-src.K) + src.K);
-
-	return [C, M, Y];
-}
-
-dojo.graphics.Colorspace.prototype.RGB_to_HSV = function(){
-
-	var src = this.munge('RGB', arguments);
-
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 592. 
-
-	var min = Math.min(src.R, src.G, src.B);
-	var V = Math.max(src.R, src.G, src.B);
-
-	var delta = V - min;
-
-	var H = null;
-	var S = (V == 0) ? 0 : delta / V;
-
-	if (S == 0){
-		H = 0;
-	}else{
-		if (src.R == V){
-			H = 60 * (src.G - src.B) / delta;
-		}else{
-			if (src.G == V){
-				H = 120 + 60 * (src.B - src.R) / delta;
-			}else{
-				if (src.B == V){
-					// between magenta and cyan
-					H = 240 + 60 * (src.R - src.G) / delta;
-				}
-			}
-		}
-		if (H < 0){
-			H += 360;
-		}
-	}
-
-	H = (H == 0) ? 360 : H;
-
-	return [H, S, V];
-}
-
-dojo.graphics.Colorspace.prototype.HSV_to_RGB = function(){
- 
-	var src = this.munge('HSV', arguments);
-
-	if (src.H == 360){ src.H = 0;}
-
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 593.
-
-	var r = null;
-	var g = null;
-	var b = null;
-
-	if (src.S == 0){
-		// color is on black-and-white center line
-		// achromatic: shades of gray
-		R = src.V;
-		G = src.V;
-		B = src.V;
-	}else{
-		// chromatic color
-		var hTemp = src.H / 60;		// h is now IN [0,6]
-		var i = Math.floor(hTemp);	// largest integer <= h
-		var f = hTemp - i;		// fractional part of h
-
-		var p = src.V * (1 - src.S);
-		var q = src.V * (1 - (src.S * f));
-		var t = src.V * (1 - (src.S * (1 - f)));
-
-		switch(i){
-			case 0: R = src.V; G = t    ; B = p    ; break;
-			case 1: R = q    ; G = src.V; B = p    ; break;
-			case 2: R = p    ; G = src.V; B = t    ; break;
-			case 3: R = p    ; G = q    ; B = src.V; break;
-			case 4: R = t    ; G = p    ; B = src.V; break;
-			case 5: R = src.V; G = p    ; B = q    ; break;
-		}
-	}
-
-	return [R, G, B];
-}
-
-dojo.graphics.Colorspace.prototype.RGB_to_HSL = function(){
-
-	var src = this.munge('RGB', arguments);
-
-	//
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	//
-
-
-	var min = Math.min(src.R, src.G, src.B);
-	var max = Math.max(src.R, src.G, src.B);
-	var delta = max - min;
-
-	var H = 0;
-	var S = 0;
-	var L = (min + max) / 2;
-
-	if ((L > 0) && (L < 1)){
-		S = delta / ((L < 0.5) ? (2 * L) : (2 - 2 * L));
-	}
-
-	if (delta > 0) {
-		if ((max == src.R) && (max != src.G)){
-			H += (src.G - src.B) / delta;
-		}
-		if ((max == src.G) && (max != src.B)){
-			H += (2 + (src.B - src.R) / delta);
-		}
-		if ((max == src.B) && (max != src.R)){
-			H += (4 + (src.R - src.G) / delta);
-		}
-		H *= 60;
-	}
-
-	H = (H == 0) ? 360 : H;
-
-	return [H, S, L];
-}
-
-dojo.graphics.Colorspace.prototype.HSL_to_RGB = function(){
- 
-	var src = this.munge('HSL', arguments);
-
-	//
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	//
-
-	while (src.H < 0){ src.H += 360; }
-	while (src.H >= 360){ src.H -= 360; }
-
-	var R = 0;
-	var G = 0;
-	var B = 0;
-
-	if (src.H < 120){
-		R = (120 - src.H) / 60;
-		G = src.H / 60;
-		B = 0;
-	}else if (src.H < 240){
-		R = 0;
-		G = (240 - src.H) / 60;
-		B = (src.H - 120) / 60;
-	}else{
-		R = (src.H - 240) / 60;
-		G = 0;
-		B = (360 - src.H) / 60;
-	}
-
-	R = 2 * src.S * Math.min(R, 1) + (1 - src.S);
-	G = 2 * src.S * Math.min(G, 1) + (1 - src.S);
-	B = 2 * src.S * Math.min(B, 1) + (1 - src.S);
-
-	if (src.L < 0.5){
-		R = src.L * R;
-		G = src.L * G;
-		B = src.L * B;
-	}else{
-		R = (1 - src.L) * R + 2 * src.L - 1;
-		G = (1 - src.L) * G + 2 * src.L - 1;
-		B = (1 - src.L) * B + 2 * src.L - 1;
-	}
-
-	return [R, G, B];
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/__package__.js
deleted file mode 100644
index 4d145a4..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/__package__.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	browser:	["dojo.graphics.htmlEffects"]
-});
-dojo.hostenv.moduleLoaded("dojo.graphics.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/color.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/color.js
deleted file mode 100644
index aef32ce..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/color.js
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.graphics.color");
-dojo.require("dojo.lang");
-dojo.require("dojo.string");
-dojo.require("dojo.math");
-
-// TODO: rewrite the "x2y" methods to take advantage of the parsing
-//       abilities of the Color object. Also, beef up the Color
-//       object (as possible) to parse most common formats
-
-// takes an r, g, b, a(lpha) value, [r, g, b, a] array, "rgb(...)" string, hex string (#aaa, #aaaaaa, aaaaaaa)
-dojo.graphics.color.Color = function(r, g, b, a) {
-	// dojo.debug("r:", r[0], "g:", r[1], "b:", r[2]);
-	if(dojo.lang.isArray(r)) {
-		this.r = r[0];
-		this.g = r[1];
-		this.b = r[2];
-		this.a = r[3]||1.0;
-	} else if(dojo.lang.isString(r)) {
-		var rgb = dojo.graphics.color.extractRGB(r);
-		this.r = rgb[0];
-		this.g = rgb[1];
-		this.b = rgb[2];
-		this.a = g||1.0;
-	} else if(r instanceof dojo.graphics.color.Color) {
-		this.r = r.r;
-		this.b = r.b;
-		this.g = r.g;
-		this.a = r.a;
-	} else {
-		this.r = r;
-		this.g = g;
-		this.b = b;
-		this.a = a;
-	}
-}
-
-dojo.lang.extend(dojo.graphics.color.Color, {
-	toRgb: function(includeAlpha) {
-		if(includeAlpha) {
-			return this.toRgba();
-		} else {
-			return [this.r, this.g, this.b];
-		}
-	},
-
-	toRgba: function() {
-		return [this.r, this.g, this.b, this.a];
-	},
-
-	toHex: function() {
-		return dojo.graphics.color.rgb2hex(this.toRgb());
-	},
-
-	toCss: function() {
-		return "rgb(" + this.toRgb().join() + ")";
-	},
-
-	toString: function() {
-		return this.toHex(); // decent default?
-	},
-
-	toHsv: function() {
-		return dojo.graphics.color.rgb2hsv(this.toRgb());
-	},
-
-	toHsl: function() {
-		return dojo.graphics.color.rgb2hsl(this.toRgb());
-	},
-
-	blend: function(color, weight) {
-		return dojo.graphics.color.blend(this.toRgb(), new Color(color).toRgb(), weight);
-	}
-});
-
-dojo.graphics.color.named = {
-	white:      [255,255,255],
-	black:      [0,0,0],
-	red:        [255,0,0],
-	green:	    [0,255,0],
-	blue:       [0,0,255],
-	navy:       [0,0,128],
-	gray:       [128,128,128],
-	silver:     [192,192,192]
-};
-
-// blend colors a and b (both as RGB array or hex strings) with weight from -1 to +1, 0 being a 50/50 blend
-dojo.graphics.color.blend = function(a, b, weight) {
-	if(typeof a == "string") { return dojo.graphics.color.blendHex(a, b, weight); }
-	if(!weight) { weight = 0; }
-	else if(weight > 1) { weight = 1; }
-	else if(weight < -1) { weight = -1; }
-	var c = new Array(3);
-	for(var i = 0; i < 3; i++) {
-		var half = Math.abs(a[i] - b[i])/2;
-		c[i] = Math.floor(Math.min(a[i], b[i]) + half + (half * weight));
-	}
-	return c;
-}
-
-// very convenient blend that takes and returns hex values
-// (will get called automatically by blend when blend gets strings)
-dojo.graphics.color.blendHex = function(a, b, weight) {
-	return dojo.graphics.color.rgb2hex(dojo.graphics.color.blend(dojo.graphics.color.hex2rgb(a), dojo.graphics.color.hex2rgb(b), weight));
-}
-
-// get RGB array from css-style color declarations
-dojo.graphics.color.extractRGB = function(color) {
-	var hex = "0123456789abcdef";
-	color = color.toLowerCase();
-	if( color.indexOf("rgb") == 0 ) {
-		var matches = color.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-		var ret = matches.splice(1, 3);
-		return ret;
-	} else {
-		var colors = dojo.graphics.color.hex2rgb(color);
-		if(colors) {
-			return colors;
-		} else {
-			// named color (how many do we support?)
-			return dojo.graphics.color.named[color] || [255, 255, 255];
-		}
-	}
-}
-
-dojo.graphics.color.hex2rgb = function(hex) {
-	var hexNum = "0123456789ABCDEF";
-	var rgb = new Array(3);
-	if( hex.indexOf("#") == 0 ) { hex = hex.substring(1); }
-	hex = hex.toUpperCase();
-	if(hex.replace(new RegExp("["+hexNum+"]", "g"), "") != "") {
-		return null;
-	}
-	if( hex.length == 3 ) {
-		rgb[0] = hex.charAt(0) + hex.charAt(0)
-		rgb[1] = hex.charAt(1) + hex.charAt(1)
-		rgb[2] = hex.charAt(2) + hex.charAt(2);
-	} else {
-		rgb[0] = hex.substring(0, 2);
-		rgb[1] = hex.substring(2, 4);
-		rgb[2] = hex.substring(4);
-	}
-	for(var i = 0; i < rgb.length; i++) {
-		rgb[i] = hexNum.indexOf(rgb[i].charAt(0)) * 16 + hexNum.indexOf(rgb[i].charAt(1));
-	}
-	return rgb;
-}
-
-dojo.graphics.color.rgb2hex = function(r, g, b) {
-	if(dojo.lang.isArray(r)) {
-		g = r[1] || 0;
-		b = r[2] || 0;
-		r = r[0] || 0;
-	}
-	return ["#",
-		dojo.string.pad(r.toString(16), 2),
-		dojo.string.pad(g.toString(16), 2),
-		dojo.string.pad(b.toString(16), 2)].join("");
-}
-
-dojo.graphics.color.rgb2hsv = function(r, g, b){
-
-	if (dojo.lang.isArray(r)) {
-		b = r[2] || 0;
-		g = r[1] || 0;
-		r = r[0] || 0;
-	}
-
-	// r,g,b, each 0 to 255, to HSV.
-	// h = 0.0 to 360.0 (corresponding to 0..360.0 degrees around hexcone)
-	// s = 0.0 (shade of gray) to 1.0 (pure color)
-	// v = 0.0 (black) to 1.0 {white)
-	//
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 592. 
-	//
-	// our calculatuions are based on 'regular' values (0-360, 0-1, 0-1) 
-	// but we return bytes values (0-255, 0-255, 0-255)
-
-	var h = null;
-	var s = null;
-	var v = null;
-
-	var min = Math.min(r, g, b);
-	v = Math.max(r, g, b);
-
-	var delta = v - min;
-
-	// calculate saturation (0 if r, g and b are all 0)
-
-	s = (v == 0) ? 0 : delta/v;
-
-	if (s == 0){
-		// achromatic: when saturation is, hue is undefined
-		h = 0;
-	}else{
-		// chromatic
-		if (r == v){
-			// between yellow and magenta
-			h = 60 * (g - b) / delta;
-		}else{
-			if (g == v){
-				// between cyan and yellow
-				h = 120 + 60 * (b - r) / delta;
-			}else{
-				if (b == v){
-					// between magenta and cyan
-					h = 240 + 60 * (r - g) / delta;
-				}
-			}
-		}
-		if (h < 0){
-			h += 360;
-		}
-	}
-
-
-	h = (h == 0) ? 360 : Math.ceil((h / 360) * 255);
-	s = Math.ceil(s * 255);
-
-	return [h, s, v];
-}
-
-dojo.graphics.color.hsv2rgb = function(h, s, v){
- 
-	if (dojo.lang.isArray(h)) {
-		v = h[2] || 0;
-		s = h[1] || 0;
-		h = h[0] || 0;
-	}
-
-	h = (h / 255) * 360;
-	if (h == 360){ h = 0;}
-
-	s = s / 255;
-	v = v / 255;
-
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 593.
-	//
-	// H = 0.0 to 360.0 (corresponding to 0..360 degrees around hexcone) 0 for S = 0
-	// S = 0.0 (shade of gray) to 1.0 (pure color)
-	// V = 0.0 (black) to 1.0 (white)
-
-	var r = null;
-	var g = null;
-	var b = null;
-
-	if (s == 0){
-		// color is on black-and-white center line
-		// achromatic: shades of gray
-		r = v;
-		g = v;
-		b = v;
-	}else{
-		// chromatic color
-		var hTemp = h / 60;		// h is now IN [0,6]
-		var i = Math.floor(hTemp);	// largest integer <= h
-		var f = hTemp - i;		// fractional part of h
-
-		var p = v * (1 - s);
-		var q = v * (1 - (s * f));
-		var t = v * (1 - (s * (1 - f)));
-
-		switch(i){
-			case 0: r = v; g = t; b = p; break;
-			case 1: r = q; g = v; b = p; break;
-			case 2: r = p; g = v; b = t; break;
-			case 3: r = p; g = q; b = v; break;
-			case 4: r = t; g = p; b = v; break;
-			case 5: r = v; g = p; b = q; break;
-		}
-	}
-
-	r = Math.ceil(r * 255);
-	g = Math.ceil(g * 255);
-	b = Math.ceil(b * 255);
-
-	return [r, g, b];
-}
-
-dojo.graphics.color.rgb2hsl = function(r, g, b){
-
-	if (dojo.lang.isArray(r)) {
-		b = r[2] || 0;
-		g = r[1] || 0;
-		r = r[0] || 0;
-	}
-
-	r /= 255;
-	g /= 255;
-	b /= 255;
-
-	//
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	//
-
-	var h = null;
-	var s = null;
-	var l = null;
-
-
-	var min = Math.min(r, g, b);
-	var max = Math.max(r, g, b);
-	var delta = max - min;
-
-	l = (min + max) / 2;
-
-	s = 0;
-
-	if ((l > 0) && (l < 1)){
-		s = delta / ((l < 0.5) ? (2 * l) : (2 - 2 * l));
-	}
-
-	h = 0;
-
-	if (delta > 0) {
-		if ((max == r) && (max != g)){
-			h += (g - b) / delta;
-		}
-		if ((max == g) && (max != b)){
-			h += (2 + (b - r) / delta);
-		}
-		if ((max == b) && (max != r)){
-			h += (4 + (r - g) / delta);
-		}
-		h *= 60;
-	}
-
-	h = (h == 0) ? 360 : Math.ceil((h / 360) * 255);
-	s = Math.ceil(s * 255);
-	l = Math.ceil(l * 255);
-
-	return [h, s, l];
-}
-
-dojo.graphics.color.hsl2rgb = function(h, s, l){
- 
-	if (dojo.lang.isArray(h)) {
-		l = h[2] || 0;
-		s = h[1] || 0;
-		h = h[0] || 0;
-	}
-
-	h = (h / 255) * 360;
-	if (h == 360){ h = 0;}
-	s = s / 255;
-	l = l / 255;
-
-	//
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	//
-
-
-	while (h < 0){ h += 360; }
-	while (h > 360){ h -= 360; }
-
-	if (h < 120){
-		r = (120 - h) / 60;
-		g = h / 60;
-		b = 0;
-	}else if (h < 240){
-		r = 0;
-		g = (240 - h) / 60;
-		b = (h - 120) / 60;
-	}else{
-		r = (h - 240) / 60;
-		g = 0;
-		b = (360 - h) / 60;
-	}
-
-	r = Math.min(r, 1);
-	g = Math.min(g, 1);
-	b = Math.min(b, 1);
-
-	r = 2 * s * r + (1 - s);
-	g = 2 * s * g + (1 - s);
-	b = 2 * s * b + (1 - s);
-
-	if (l < 0.5){
-		r = l * r;
-		g = l * g;
-		b = l * b;
-	}else{
-		r = (1 - l) * r + 2 * l - 1;
-		g = (1 - l) * g + 2 * l - 1;
-		b = (1 - l) * b + 2 * l - 1;
-	}
-
-	r = Math.ceil(r * 255);
-	g = Math.ceil(g * 255);
-	b = Math.ceil(b * 255);
-
-	return [r, g, b];
-}
-
-dojo.graphics.color.hsl2hex = function(h, s, l){
-	var rgb = dojo.graphics.color.hsl2rgb(h, s, l);
-	return dojo.graphics.color.rgb2hex(rgb[0], rgb[1], rgb[2]);
-}
-
-dojo.graphics.color.hex2hsl = function(hex){
-	var rgb = dojo.graphics.color.hex2rgb(hex);
-	return dojo.graphics.color.rgb2hsl(rgb[0], rgb[1], rgb[2]);
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/htmlEffects.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/htmlEffects.js
deleted file mode 100644
index 4303670..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/graphics/htmlEffects.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.graphics.htmlEffects");
-dojo.require("dojo.fx.*");
-
-dj_deprecated("dojo.graphics.htmlEffects is deprecated, use dojo.fx.html instead");
-
-dojo.graphics.htmlEffects = dojo.fx.html;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_adobesvg.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_adobesvg.js
deleted file mode 100644
index b8816b4..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_adobesvg.js
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
- * Adobe SVG Viewer host environment
- */
-if(typeof window == 'undefined'){
-	dj_throw("attempt to use adobe svg hostenv when no window object");
-}
-
-with(dojo.render){
-	name = navigator.appName;
-	ver = parseFloat(navigator.appVersion, 10);
-	switch(navigator.platform){
-		case "MacOS":
-			os.osx =  true;
-			break;
-		case "Linux":
-			os.linux =  true;
-			break;
-		case "Windows":
-			os.win =  true;
-			break;
-		default:
-			os.linux = true;
-			break;
-	};
-	svg.capable = true;
-	svg.support.builtin = true;
-	svg.adobe = true;
-};
-
-// browserEval("alert(window.location);");
-
-dojo.hostenv.println = function(s){
-	try{
-    // FIXME: this may not work with adobe's viewer, as we may first need a 
-		// reference to the svgDocument
-		// FIXME: need a way to determine where to position the text for this
-    var ti = document.createElement("text");
-    ti.setAttribute("x","50");
-		var yPos = 25 + 15*document.getElementsByTagName("text").length;
-    ti.setAttribute("y",yPos);
-		var tn = document.createTextNode(s);
-		ti.appendChild(tn);
-		document.documentElement.appendChild(ti);
-	}catch(e){
-
-	}
-}
-
-dojo.debug = function() {
-	if (!djConfig.isDebug) { return; }
-	var args = arguments;
-	if(typeof dojo.hostenv.println != 'function'){
-		dj_throw("attempt to call dojo.debug when there is no dojo.hostenv println implementation (yet?)");
-	}
-	var isJUM = dj_global["jum"];
-	var s = isJUM ? "": "DEBUG: ";
-	for(var i=0;i<args.length;++i){ s += args[i]; }
-	if(isJUM){ // this seems to be the only way to get JUM to "play nice"
-		jum.debug(s);
-	}else{
-		dojo.hostenv.println(s);
-	}
-}
-
-dojo.hostenv.startPackage("dojo.hostenv");
-
-dojo.hostenv.name_ = 'adobesvg';
-
-dojo.hostenv.anonCtr = 0;
-dojo.hostenv.anon = {};
-
-dojo.hostenv.nameAnonFunc = function(anonFuncPtr, namespaceObj){
-	var ret = "_"+this.anonCtr++;
-	var nso = (namespaceObj || this.anon);
-	while(typeof nso[ret] != "undefined"){
-		ret = "_"+this.anonCtr++;
-	}
-	nso[ret] = anonFuncPtr;
-	return ret;
-}
-
-dojo.hostenv.modulesLoadedFired = false;
-dojo.hostenv.modulesLoadedListeners = [];
-dojo.hostenv.getTextStack = [];
-dojo.hostenv.loadUriStack = [];
-dojo.hostenv.loadedUris = [];
-
-
-dojo.hostenv.modulesLoaded = function(){
-	if(this.modulesLoadedFired){ return; }
-	if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){
-		if(this.inFlightCount > 0){ 
-			dojo.debug("couldn't initialize, there are files still in flight");
-			return;
-		}
-		this.modulesLoadedFired = true;
-		var mll = this.modulesLoadedListeners;
-		for(var x=0; x<mll.length; x++){
-			mll[x]();
-		}
-	}
-}
-
-dojo.hostenv.getNewAnonFunc = function(){
-	var ret = "_"+this.anonCtr++;
-	while(typeof this.anon[ret] != "undefined"){
-		ret = "_"+this.anonCtr++;
-	}
-	// this.anon[ret] = function(){};
-	eval("dojo.nostenv.anon."+ret+" = function(){};");
-	return [ret, this.anon[ret]];
-}
-
-dojo.hostenv.displayStack = function(){
-	var oa = [];
-	var stack = this.loadUriStack;
-	for(var x=0; x<stack.length; x++){
-		oa.unshift([stack[x][0], (typeof stack[x][2])]);
-	}
-	dojo.debug("<pre>"+oa.join("\n")+"</pre>");
-}
-
-dojo.hostenv.unwindUriStack = function(){
-	var stack = this.loadUriStack;
-	for(var x in dojo.hostenv.loadedUris){
-		for(var y=stack.length-1; y>=0; y--){
-			if(stack[y][0]==x){
-				stack.splice(y, 1);
-			}
-		}
-	}
-	var next = stack.pop();
-	if((!next)&&(stack.length==0)){ 
-		return;
-	}
-	for(var x=0; x<stack.length; x++){
-		if((stack[x][0]==next[0])&&(stack[x][2])){
-			next[2] == stack[x][2]
-		}
-	}
-	var last = next;
-	while(dojo.hostenv.loadedUris[next[0]]){
-		last = next;
-		next = stack.pop();
-	}
-	while(typeof next[2] == "string"){ // unwind as far as we can
-		try{
-			// dojo.debug("<pre><![CDATA["+next[2]+"]]></pre>");
-			dj_eval(next[2]);
-			next[1](true);
-		}catch(e){
-			dojo.debug("we got an error when loading "+next[0]);
-			dojo.debug("error: "+e);
-			// for(var x in e){ alert(x+" "+e[x]); }
-		}
-		dojo.hostenv.loadedUris[next[0]] = true;
-		dojo.hostenv.loadedUris.push(next[0]);
-		last = next;
-		next = stack.pop();
-		if((!next)&&(stack.length==0)){ break; }
-		while(dojo.hostenv.loadedUris[next[0]]){
-			last = next;
-			next = stack.pop();
-		}
-	}
-	if(next){
-		stack.push(next);
-		dojo.debug("### CHOKED ON: "+next[0]);
-	}
-}
-
-/**
- * Reads the contents of the URI, and evaluates the contents.
- * Returns true if it succeeded. Returns false if the URI reading failed. Throws if the evaluation throws.
- * The result of the eval is not available to the caller.
- */
-dojo.hostenv.loadUri = function(uri, cb){
-	if(dojo.hostenv.loadedUris[uri]){
-		return;
-	}
-	var stack = this.loadUriStack;
-	stack.push([uri, cb, null]);
-	var tcb = function(contents){
-		// gratuitous hack for Adobe SVG 3, what a fucking POS
-		if(contents.content){
-			contents = contents.content;
-		}
-
-		// stack management
-		var next = stack.pop();
-		if((!next)&&(stack.length==0)){ 
-			dojo.hostenv.modulesLoaded();
-			return;
-		}
-		if(typeof contents == "string"){
-			stack.push(next);
-			for(var x=0; x<stack.length; x++){
-				if(stack[x][0]==uri){
-					stack[x][2] = contents;
-				}
-			}
-			next = stack.pop();
-		}
-		if(dojo.hostenv.loadedUris[next[0]]){ 
-			// dojo.debug("WE ALREADY HAD: "+next[0]);
-			dojo.hostenv.unwindUriStack();
-			return;
-		}
-		// push back onto stack
-		stack.push(next);
-		if(next[0]!=uri){
-			//  and then unwind as far as we can
-			if(typeof next[2] == "string"){
-				dojo.hostenv.unwindUriStack();
-			}
-
-		}else{
-			if(!contents){ 
-				next[1](false);
-			}else{
-				var deps = dojo.hostenv.getDepsForEval(next[2]);
-				if(deps.length>0){
-					eval(deps.join(";"));
-				}else{
-					dojo.hostenv.unwindUriStack();
-				}
-			}
-		}
-	}
-	this.getText(uri, tcb, true);
-}
-
-/**
- * Reads the contents of the URI, and evaluates the contents.
- * Returns true if it succeeded. Returns false if the URI reading failed. Throws if the evaluation throws.
- * The result of the eval is not available to the caller.
- */
-dojo.hostenv.loadUri = function(uri, cb){
-	if(dojo.hostenv.loadedUris[uri]){
-		return;
-	}
-	var stack = this.loadUriStack;
-	stack.push([uri, cb, null]);
-	var tcb = function(contents){
-		// gratuitous hack for Adobe SVG 3, what a fucking POS
-		if(contents.content){
-			contents = contents.content;
-		}
-
-		// stack management
-		var next = stack.pop();
-		if((!next)&&(stack.length==0)){ 
-			dojo.hostenv.modulesLoaded();
-			return;
-		}
-		if(typeof contents == "string"){
-			stack.push(next);
-			for(var x=0; x<stack.length; x++){
-				if(stack[x][0]==uri){
-					stack[x][2] = contents;
-				}
-			}
-			next = stack.pop();
-		}
-		if(dojo.hostenv.loadedUris[next[0]]){ 
-			// dojo.debug("WE ALREADY HAD: "+next[0]);
-			dojo.hostenv.unwindUriStack();
-			return;
-		}
-		// push back onto stack
-		stack.push(next);
-		if(next[0]!=uri){
-			//  and then unwind as far as we can
-			if(typeof next[2] == "string"){
-				dojo.hostenv.unwindUriStack();
-			}
-
-		}else{
-			if(!contents){ 
-				next[1](false);
-			}else{
-				var deps = dojo.hostenv.getDepsForEval(next[2]);
-				if(deps.length>0){
-					eval(deps.join(";"));
-				}else{
-					dojo.hostenv.unwindUriStack();
-				}
-			}
-		}
-	}
-	this.getText(uri, tcb, true);
-}
-
-/**
-* loadModule("A.B") first checks to see if symbol A.B is defined. 
-* If it is, it is simply returned (nothing to do).
-* If it is not defined, it will look for "A/B.js" in the script root directory, followed
-* by "A.js".
-* It throws if it cannot find a file to load, or if the symbol A.B is not defined after loading.
-* It returns the object A.B.
-*
-* This does nothing about importing symbols into the current package.
-* It is presumed that the caller will take care of that. For example, to import
-* all symbols:
-*
-*    with (dojo.hostenv.loadModule("A.B")) {
-*       ...
-*    }
-*
-* And to import just the leaf symbol:
-*
-*    var B = dojo.hostenv.loadModule("A.B");
-*    ...
-*
-* dj_load is an alias for dojo.hostenv.loadModule
-*/
-dojo.hostenv.loadModule = function(modulename, exact_only, omit_module_check){
-	// alert("dojo.hostenv.loadModule('"+modulename+"');");
-	var module = this.findModule(modulename, 0);
-	if(module){
-		return module;
-	}
-
-	// dojo.debug("dojo.hostenv.loadModule('"+modulename+"');");
-
-	// protect against infinite recursion from mutual dependencies
-	if (typeof this.loading_modules_[modulename] !== 'undefined'){
-		// NOTE: this should never throw an exception!! "recursive" includes
-		// are normal in the course of app and module building, so blow out of
-		// it gracefully, but log it in debug mode
-
-		// dj_throw("recursive attempt to load module '" + modulename + "'");
-		dojo.debug("recursive attempt to load module '" + modulename + "'");
-	}else{
-		this.addedToLoadingCount.push(modulename);
-	}
-	this.loading_modules_[modulename] = 1;
-
-
-	// convert periods to slashes
-	var relpath = modulename.replace(/\./g, '/') + '.js';
-
-	var syms = modulename.split(".");
-	var nsyms = modulename.split(".");
-	if(syms[0]=="dojo"){ // FIXME: need a smarter way to do this!
-		syms[0] = "src"; 
-	}
-	var last = syms.pop();
-	syms.push(last);
-	// figure out if we're looking for a full package, if so, we want to do
-	// things slightly diffrently
-	var _this = this;
-	var pfn = this.pkgFileName;
-	if(last=="*"){
-		modulename = (nsyms.slice(0, -1)).join('.');
-
-		var module = this.findModule(modulename, 0);
-		// dojo.debug("found: "+modulename+"="+module);
-		if(module){
-			_this.removedFromLoadingCount.push(modulename);
-			return module;
-		}
-
-		var nextTry = function(lastStatus){
-			if(lastStatus){ 
-				module = _this.findModule(modulename, false); // pass in false so we can give better error
-				if((!module)&&(syms[syms.length-1]!=pfn)){
-					dj_throw("Module symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); 
-				}
-				if(module){
-					_this.removedFromLoadingCount.push(modulename);
-					dojo.hostenv.modulesLoaded();
-					return;
-				}
-			}
-			syms.pop();
-			syms.push(pfn);
-			// dojo.debug("syms: "+syms);
-			relpath = syms.join("/") + '.js';
-			if(relpath.charAt(0)=="/"){
-				relpath = relpath.slice(1);
-			}
-			// dojo.debug("relpath: "+relpath);
-			_this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
-		}
-
-		nextTry();
-	}else{
-		relpath = syms.join("/") + '.js';
-		modulename = nsyms.join('.');
-
-		var nextTry = function(lastStatus){
-			// dojo.debug("lastStatus: "+lastStatus);
-			if(lastStatus){ 
-				// dojo.debug("inital relpath: "+relpath);
-				module = _this.findModule(modulename, false); // pass in false so we can give better error
-				// if(!module){
-				if((!module)&&(syms[syms.length-1]!=pfn)){
-					dj_throw("Module symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); 
-				}
-				if(module){
-					_this.removedFromLoadingCount.push(modulename);
-					dojo.hostenv.modulesLoaded();
-					return;
-				}
-			}
-			var setPKG = (syms[syms.length-1]==pfn) ? false : true;
-			syms.pop();
-			if(setPKG){
-				syms.push(pfn);
-			}
-			relpath = syms.join("/") + '.js';
-			if(relpath.charAt(0)=="/"){
-				relpath = relpath.slice(1);
-			}
-			// dojo.debug("relpath: "+relpath);
-			_this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
-		}
-
-		this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
-	}
-	return;
-}
-
-/**
- * Read the contents of the specified uri and return those contents.
- *
- * FIXME: Make sure this is consistent with other implementations of getText
- * @param uri A relative or absolute uri. If absolute, it still must be in the same "domain" as we are.
- * @param async_cb If not specified, returns false as synchronous is not
- * supported. If specified, load asynchronously, and use async_cb as the handler which receives the result of the request.
- * @param fail_ok Default false. If fail_ok and !async_cb and loading fails, return null instead of throwing.
- */ 
-dojo.hostenv.async_cb = null;
-
-dojo.hostenv.unWindGetTextStack = function(){
-	if(dojo.hostenv.inFlightCount>0){
-		setTimeout("dojo.hostenv.unWindGetTextStack()", 100);
-		return;
-	}
-	// we serialize because this goddamned environment is too fucked up
-	// to know how to do anything else
-	dojo.hostenv.inFlightCount++;
-	var next = dojo.hostenv.getTextStack.pop();
-	if((!next)&&(dojo.hostenv.getTextStack.length==0)){ 
-		dojo.hostenv.inFlightCount--;
-		dojo.hostenv.async_cb = function(){};
-		return;
-	}
-	dojo.hostenv.async_cb = next[1];
-	// http = window.getURL(uri, dojo.hostenv.anon[cbn]);
-	window.getURL(next[0], function(result){ 
-		dojo.hostenv.inFlightCount--;
-		dojo.hostenv.async_cb(result.content);
-		dojo.hostenv.unWindGetTextStack();
-	});
-}
-
-dojo.hostenv.getText = function(uri, async_cb, fail_ok){
-	// dojo.debug("Calling getText()");
-	try{
-		if(async_cb){
-			dojo.hostenv.getTextStack.push([uri, async_cb, fail_ok]);
-			dojo.hostenv.unWindGetTextStack();
-		}else{
-			return dj_throw("No synchronous XMLHTTP implementation available, for uri " + uri);
-		}
-	}catch(e){
-		return dj_throw("No XMLHTTP implementation available, for uri " + uri);
-	}
-}
-
-
-/**
- * Makes an async post to the specified uri.
- *
- * FIXME: Not sure that we need this, but adding for completeness.
- * More details about the implementation of this are available at 
- * http://wiki.svg.org/index.php/PostUrl
- * @param uri A relative or absolute uri. If absolute, it still must be in the same "domain" as we are.
- * @param async_cb If not specified, returns false as synchronous is not
- * supported. If specified, load asynchronously, and use async_cb as the progress handler which takes the xmlhttp object as its argument. If async_cb, this function returns null.
- * @param text Data to post
- * @param fail_ok Default false. If fail_ok and !async_cb and loading fails, return null instead of throwing.
- * @param mime_type optional MIME type of the posted data (such as "text/plain")
- * @param encoding optional encoding for data. null, 'gzip' and 'deflate' are possible values. If browser does not support binary post this parameter is ignored.
- */ 
-dojo.hostenv.postText = function(uri, async_cb, text, fail_ok, mime_type, encoding){
-	var http = null;
-	
-	var async_callback = function(httpResponse){
-		if (!httpResponse.success) {
-			dj_throw("Request for uri '" + uri + "' resulted in " + httpResponse.status);
-		}
-		
-		if(!httpResponse.content) {
-			if (!fail_ok) dj_throw("Request for uri '" + uri + "' resulted in no content");
-			return null;
-		}
-		// FIXME: wtf, I'm losing a reference to async_cb
-		async_cb(httpResponse.content);
-	}
-	
-	try {
-		if(async_cb) {
-			http = window.postURL(uri, text, async_callback, mimeType, encoding);
-		} else {
-		return dj_throw("No synchronous XMLHTTP post implementation available, for uri " + uri);
-		}
-	} catch(e) {
-		return dj_throw("No XMLHTTP post implementation available, for uri " + uri);
-	}
-}
-
-/*
- * It turns out that if we check *right now*, as this script file is being loaded,
- * then the last script element in the window DOM is ourselves.
- * That is because any subsequent script elements haven't shown up in the document
- * object yet.
- */
-function dj_last_script_src() {
-	var scripts = window.document.getElementsByTagName('script');
-	if(scripts.length < 1){ 
-		dj_throw("No script elements in window.document, so can't figure out my script src"); 
-	}
-	var li = scripts.length-1;
-	var xlinkNS = "http://www.w3.org/1999/xlink";
-	var src = null;
-	var script = null;
-	while(!src){
-		script = scripts.item(li);
-		src = script.getAttributeNS(xlinkNS,"href");
-		li--;
-		if(li<0){ break; }
-		// break;
-	}
-	if(!src){
-		dj_throw("Last script element (out of " + scripts.length + ") has no src");
-	}
-	return src;
-}
-
-if(!dojo.hostenv["library_script_uri_"]){
-	dojo.hostenv.library_script_uri_ = dj_last_script_src();
-}
-
-// dojo.hostenv.loadUri = function(uri){
-	/* FIXME: adding a script element doesn't seem to be synchronous, and so
-	 * checking for namespace or object existance after loadUri using this
-	 * method will error out. Need to figure out some other way of handling
-	 * this!
-	 */
-	/*
-	var se = document.createElement("script");
-	se.src = uri;
-	var head = document.getElementsByTagName("head")[0];
-	head.appendChild(se);
-	// document.write("<script type='text/javascript' src='"+uri+"' />");
-	return 1;
-}
-*/
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_browser.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_browser.js
deleted file mode 100644
index edab7eb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_browser.js
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/**
-* @file hostenv_browser.js
-*
-* Implements the hostenv interface for a browser environment. 
-*
-* Perhaps it could be called a "dom" or "useragent" environment.
-*
-* @author Copyright 2004 Mark D. Anderson (mda@discerning.com)
-* @author Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php
-*/
-
-// make jsc shut up (so we can use jsc to sanity check the code even if it will never run it).
-/*@cc_on
-@if (@_jscript_version >= 7)
-var window; var XMLHttpRequest;
-@end
-@*/
-
-if(typeof window == 'undefined'){
-	dojo.raise("no window object");
-}
-
-// attempt to figure out the path to dojo if it isn't set in the config
-(function() {
-	// before we get any further with the config options, try to pick them out
-	// of the URL. Most of this code is from NW
-	if(djConfig.allowQueryConfig){
-		var baseUrl = document.location.toString(); // FIXME: use location.query instead?
-		var params = baseUrl.split("?", 2);
-		if(params.length > 1){
-			var paramStr = params[1];
-			var pairs = paramStr.split("&");
-			for(var x in pairs){
-				var sp = pairs[x].split("=");
-				// FIXME: is this eval dangerous?
-				if((sp[0].length > 9)&&(sp[0].substr(0, 9) == "djConfig.")){
-					var opt = sp[0].substr(9);
-					try{
-						djConfig[opt]=eval(sp[1]);
-					}catch(e){
-						djConfig[opt]=sp[1];
-					}
-				}
-			}
-		}
-	}
-
-	if(((djConfig["baseScriptUri"] == "")||(djConfig["baseRelativePath"] == "")) &&(document && document.getElementsByTagName)){
-		var scripts = document.getElementsByTagName("script");
-		var rePkg = /(__package__|dojo)\.js([\?\.]|$)/i;
-		for(var i = 0; i < scripts.length; i++) {
-			var src = scripts[i].getAttribute("src");
-			if(!src) { continue; }
-			var m = src.match(rePkg);
-			if(m) {
-				root = src.substring(0, m.index);
-				if(!this["djConfig"]) { djConfig = {}; }
-				if(djConfig["baseScriptUri"] == "") { djConfig["baseScriptUri"] = root; }
-				if(djConfig["baseRelativePath"] == "") { djConfig["baseRelativePath"] = root; }
-				break;
-			}
-		}
-	}
-
-	var dr = dojo.render;
-	var drh = dojo.render.html;
-	var dua = drh.UA = navigator.userAgent;
-	var dav = drh.AV = navigator.appVersion;
-	var t = true;
-	var f = false;
-	drh.capable = t;
-	drh.support.builtin = t;
-
-	dr.ver = parseFloat(drh.AV);
-	dr.os.mac = dav.indexOf("Macintosh") >= 0;
-	dr.os.win = dav.indexOf("Windows") >= 0;
-	// could also be Solaris or something, but it's the same browser
-	dr.os.linux = dav.indexOf("X11") >= 0;
-
-	drh.opera = dua.indexOf("Opera") >= 0;
-	drh.khtml = (dav.indexOf("Konqueror") >= 0)||(dav.indexOf("Safari") >= 0);
-	drh.safari = dav.indexOf("Safari") >= 0;
-	var geckoPos = dua.indexOf("Gecko");
-	drh.mozilla = drh.moz = (geckoPos >= 0)&&(!drh.khtml);
-	if (drh.mozilla) {
-		// gecko version is YYYYMMDD
-		drh.geckoVersion = dua.substring(geckoPos + 6, geckoPos + 14);
-	}
-	drh.ie = (document.all)&&(!drh.opera);
-	drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0")>=0;
-	drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5")>=0;
-	drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0")>=0;
-
-	dr.vml.capable=drh.ie;
-	dr.svg.capable = f;
-	dr.svg.support.plugin = f;
-	dr.svg.support.builtin = f;
-	dr.svg.adobe = f;
-	if (document.implementation 
-		&& document.implementation.hasFeature
-		&& document.implementation.hasFeature("org.w3c.dom.svg", "1.0")
-	){
-		dr.svg.capable = t;
-		dr.svg.support.builtin = t;
-		dr.svg.support.plugin = f;
-		dr.svg.adobe = f;
-	}else{ 
-		//	check for ASVG
-		if(navigator.mimeTypes && navigator.mimeTypes.length > 0){
-			var result = navigator.mimeTypes["image/svg+xml"] ||
-				navigator.mimeTypes["image/svg"] ||
-				navigator.mimeTypes["image/svg-xml"];
-			if (result){
-				dr.svg.adobe = result && result.enabledPlugin &&
-					result.enabledPlugin.description && 
-					(result.enabledPlugin.description.indexOf("Adobe") > -1);
-				if(dr.svg.adobe) {
-					dr.svg.capable = t;
-					dr.svg.support.plugin = t;
-				}
-			}
-		}else if(drh.ie && dr.os.win){
-			var result = f;
-			try {
-				var test = new ActiveXObject("Adobe.SVGCtl");
-				result = t;
-			} catch(e){}
-			if (result){
-				dr.svg.capable = t;
-				dr.svg.support.plugin = t;
-				dr.svg.adobe = t;
-			}
-		}else{
-			dr.svg.capable = f;
-			dr.svg.support.plugin = f;
-			dr.svg.adobe = f;
-		}
-	}
-})();
-
-dojo.hostenv.startPackage("dojo.hostenv");
-
-dojo.hostenv.name_ = 'browser';
-dojo.hostenv.searchIds = [];
-
-// These are in order of decreasing likelihood; this will change in time.
-var DJ_XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
-
-dojo.hostenv.getXmlhttpObject = function(){
-    var http = null;
-	var last_e = null;
-	try{ http = new XMLHttpRequest(); }catch(e){}
-    if(!http){
-		for(var i=0; i<3; ++i){
-			var progid = DJ_XMLHTTP_PROGIDS[i];
-			try{
-				http = new ActiveXObject(progid);
-			}catch(e){
-				last_e = e;
-			}
-
-			if(http){
-				DJ_XMLHTTP_PROGIDS = [progid];  // so faster next time
-				break;
-			}
-		}
-
-		/*if(http && !http.toString) {
-			http.toString = function() { "[object XMLHttpRequest]"; }
-		}*/
-	}
-
-	if(!http){
-		return dojo.raise("XMLHTTP not available", last_e);
-	}
-
-	return http;
-}
-
-/**
- * Read the contents of the specified uri and return those contents.
- *
- * @param uri A relative or absolute uri. If absolute, it still must be in the
- * same "domain" as we are.
- *
- * @param async_cb If not specified, load synchronously. If specified, load
- * asynchronously, and use async_cb as the progress handler which takes the
- * xmlhttp object as its argument. If async_cb, this function returns null.
- *
- * @param fail_ok Default false. If fail_ok and !async_cb and loading fails,
- * return null instead of throwing.
- */ 
-dojo.hostenv.getText = function(uri, async_cb, fail_ok){
-	
-	var http = this.getXmlhttpObject();
-
-	if(async_cb){
-		http.onreadystatechange = function(){ 
-			if((4==http.readyState)&&(http["status"])){
-				if(http.status==200){
-					// dojo.debug("LOADED URI: "+uri);
-					async_cb(http.responseText);
-				}
-			}
-		}
-	}
-
-	http.open('GET', uri, async_cb ? true : false);
-	http.send(null);
-	if(async_cb){
-		return null;
-	}
-	
-	return http.responseText;
-}
-
-/*
- * It turns out that if we check *right now*, as this script file is being loaded,
- * then the last script element in the window DOM is ourselves.
- * That is because any subsequent script elements haven't shown up in the document
- * object yet.
- */
- /*
-function dj_last_script_src() {
-    var scripts = window.document.getElementsByTagName('script');
-    if(scripts.length < 1){ 
-		dojo.raise("No script elements in window.document, so can't figure out my script src"); 
-	}
-    var script = scripts[scripts.length - 1];
-    var src = script.src;
-    if(!src){
-		dojo.raise("Last script element (out of " + scripts.length + ") has no src");
-	}
-    return src;
-}
-
-if(!dojo.hostenv["library_script_uri_"]){
-	dojo.hostenv.library_script_uri_ = dj_last_script_src();
-}
-*/
-
-dojo.hostenv.defaultDebugContainerId = 'dojoDebug';
-dojo.hostenv._println_buffer = [];
-dojo.hostenv._println_safe = false;
-dojo.hostenv.println = function (line){
-	if(!dojo.hostenv._println_safe){
-		dojo.hostenv._println_buffer.push(line);
-	}else{
-		try {
-			var console = document.getElementById(djConfig.debugContainerId ?
-				djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId);
-			if(!console) { console = document.getElementsByTagName("body")[0] || document.body; }
-
-			var div = document.createElement("div");
-			div.appendChild(document.createTextNode(line));
-			console.appendChild(div);
-		} catch (e) {
-			try{
-				// safari needs the output wrapped in an element for some reason
-				document.write("<div>" + line + "</div>");
-			}catch(e2){
-				window.status = line;
-			}
-		}
-	}
-}
-
-dojo.addOnLoad(function(){
-	dojo.hostenv._println_safe = true;
-	while(dojo.hostenv._println_buffer.length > 0){
-		dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-	}
-});
-
-function dj_addNodeEvtHdlr (node, evtName, fp, capture){
-	var oldHandler = node["on"+evtName] || function(){};
-	node["on"+evtName] = function(){
-		fp.apply(node, arguments);
-		oldHandler.apply(node, arguments);
-	}
-	return true;
-}
-
-dj_addNodeEvtHdlr(window, "load", function(){
-	if(dojo.render.html.ie){
-		dojo.hostenv.makeWidgets();
-	}
-	dojo.hostenv.modulesLoaded();
-});
-
-dojo.hostenv.makeWidgets = function(){
-	// you can put searchIds in djConfig and dojo.hostenv at the moment
-	// we should probably eventually move to one or the other
-	var sids = [];
-	if(djConfig.searchIds && djConfig.searchIds.length > 0) {
-		sids = sids.concat(djConfig.searchIds);
-	}
-	if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) {
-		sids = sids.concat(dojo.hostenv.searchIds);
-	}
-
-	if((djConfig.parseWidgets)||(sids.length > 0)){
-		if(dojo.evalObjPath("dojo.widget.Parse")){
-			// we must do this on a delay to avoid:
-			//	http://www.shaftek.org/blog/archives/000212.html
-			// IE is such a tremendous peice of shit.
-			try{
-				var parser = new dojo.xml.Parse();
-				if(sids.length > 0){
-					for(var x=0; x<sids.length; x++){
-						var tmpNode = document.getElementById(sids[x]);
-						if(!tmpNode){ continue; }
-						var frag = parser.parseElement(tmpNode, null, true);
-						dojo.widget.getParser().createComponents(frag);
-					}
-				}else if(djConfig.parseWidgets){
-					var frag  = parser.parseElement(document.getElementsByTagName("body")[0] || document.body, null, true);
-					dojo.widget.getParser().createComponents(frag);
-				}
-			}catch(e){
-				dojo.debug("auto-build-widgets error:", e);
-			}
-		}
-	}
-}
-
-dojo.hostenv.modulesLoadedListeners.push(function(){
-	if(!dojo.render.html.ie) {
-		dojo.hostenv.makeWidgets();
-	}
-});
-
-// we assume that we haven't hit onload yet. Lord help us.
-try {
-	if (dojo.render.html.ie) {
-		document.write('<style>v\:*{ behavior:url(#default#VML); }</style>');
-		document.write('<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v"/>');
-	}
-} catch (e) { }
-
-// stub, over-ridden by debugging code. This will at least keep us from
-// breaking when it's not included
-dojo.hostenv.writeIncludes = function(){} 
-
-dojo.hostenv.byId = dojo.byId = function(id, doc){
-	if(typeof id == "string" || id instanceof String){
-		if(!doc){ doc = document; }
-		return doc.getElementById(id);
-	}
-	return id; // assume it's a node
-}
-
-dojo.hostenv.byIdArray = dojo.byIdArray = function(){
-	var ids = [];
-	for(var i = 0; i < arguments.length; i++){
-		if((arguments[i] instanceof Array)||(typeof arguments[i] == "array")){
-			for(var j = 0; j < arguments[i].length; j++){
-				ids = ids.concat(dojo.hostenv.byIdArray(arguments[i][j]));
-			}
-		}else{
-			ids.push(dojo.hostenv.byId(arguments[i]));
-		}
-	}
-	return ids;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_jsc.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_jsc.js
deleted file mode 100644
index 347f102..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_jsc.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
- * JScript .NET jsc
- *
- */
-
-dojo.hostenv.name_ = 'jsc';
-
-// Sanity check this is the right hostenv.
-// See the Rotor source code jscript/engine/globalobject.cs for what globals
-// are available.
-if((typeof ScriptEngineMajorVersion != 'function')||(ScriptEngineMajorVersion() < 7)){
-	dj_throw("attempt to use JScript .NET host environment with inappropriate ScriptEngine"); 
-}
-
-// for more than you wanted to know about why this import is required even if
-// we fully qualify all symbols, see
-// http://groups.google.com/groups?th=f050c7aeefdcbde2&rnum=12
-import System;
-
-dojo.hostenv.getText = function(uri){
-	if(!System.IO.File.Exists(uri)){
-		// dj_throw("No such file '" + uri + "'");
-		return 0;
-	}
-	var reader = new System.IO.StreamReader(uri);
-	var contents : String = reader.ReadToEnd();
-	return contents;
-}
-
-dojo.hostenv.loadUri = function(uri){
-	var contents = this.getText(uri);
-	if(!contents){
-		dj_throw("got no back contents from uri '" + uri + "': " + contents);
-	}
-	// TODO: in JScript .NET, eval will not affect the symbol table of the current code?
-	var value = dj_eval(contents);
-	dojo.debug("jsc eval of contents returned: ", value);
-	return 1;
-
-	// for an example doing runtime code compilation, see:
-	// http://groups.google.com/groups?selm=eQ1aeciCBHA.1644%40tkmsftngp05&rnum=6
-	// Microsoft.JScript or System.CodeDom.Compiler ?
-	// var engine = new Microsoft.JScript.Vsa.VsaEngine()
-	// what about loading a js file vs. a dll?
-	// GetObject("script:" . uri);
-}
-
-/* The System.Environment object is useful:
-    print ("CommandLine='" + System.Environment.CommandLine + "' " +
-	   "program name='" + System.Environment.GetCommandLineArgs()[0] + "' " +
-	   "CurrentDirectory='" + System.Environment.CurrentDirectory + "' " +
-	   "StackTrace='" + System.Environment.StackTrace + "'");
-*/
-
-// same as System.Console.WriteLine
-// sigh; Rotor treats symbol "print" at parse time without actually putting it
-// in the builtin symbol table.
-// Note that the print symbol is not available if jsc is run with the "/print-"
-// option.
-dojo.hostenv.println = function(s){
-	print(s); // = print
-}
-
-dojo.hostenv.getLibraryScriptUri = function(){
-	return System.Environment.GetCommandLineArgs()[0];
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_rhino.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_rhino.js
deleted file mode 100644
index 9e989fd..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_rhino.js
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
-* Rhino host environment
-*/
-
-// make jsc shut up (so we can use jsc for sanity checking) 
-/*@cc_on
-@if (@_jscript_version >= 7)
-var loadClass; var print; var load; var quit; var version; var Packages; var java;
-@end
-@*/
-
-// TODO: not sure what we gain from the next line, anyone?
-//if (typeof loadClass == 'undefined') { dj_throw("attempt to use Rhino host environment when no 'loadClass' global"); }
-
-dojo.hostenv.name_ = 'rhino';
-dojo.hostenv.getVersion = function() {return version()};
-
-// see comments in spidermonkey loadUri
-dojo.hostenv.loadUri = function(uri, cb){
-	dojo.debug("uri: "+uri);
-	try{
-		// FIXME: what about remote URIs?
-		var found = true;
-		if(!(new java.io.File(uri)).exists()){
-			try{
-				// try it as a file first, URL second
-				(new java.io.URL(uri)).openStream();
-			}catch(e){
-				found = false;
-			}
-		}
-		if(!found){
-			dojo.debug(uri+" does not exist");
-			if(cb){ cb(0); }
-			return 0;
-		}
-		var ok = load(uri);
-		// dojo.debug(typeof ok);
-		dojo.debug("rhino load('", uri, "') returned. Ok: ", ok);
-		if(cb){ cb(1); }
-		return 1;
-	}catch(e){
-		dojo.debug("rhino load('", uri, "') failed");
-		if(cb){ cb(0); }
-		return 0;
-	}
-}
-
-dojo.hostenv.println = print;
-dojo.hostenv.exit = function(exitcode){ 
-	quit(exitcode);
-}
-
-// Hack to determine current script...
-//
-// These initial attempts failed:
-//   1. get an EcmaError and look at e.getSourceName(): try {eval ("static in return")} catch(e) { ...
-//   Won't work because NativeGlobal.java only does a put of "name" and "message", not a wrapped reflecting object.
-//   Even if the EcmaError object had the sourceName set.
-//  
-//   2. var e = Packages.org.mozilla.javascript.Context.getCurrentContext().reportError('');
-//   Won't work because it goes directly to the errorReporter, not the return value.
-//   We want context.interpreterSourceFile and context.interpreterLine, which are used in static Context.getSourcePositionFromStack
-//   (set by Interpreter.java at interpretation time, if in interpreter mode).
-//
-//   3. var e = Packages.org.mozilla.javascript.Context.getCurrentContext().reportRuntimeError('');
-//   This returns an object, but e.message still does not have source info.
-//   In compiler mode, perhaps not set; in interpreter mode, perhaps not used by errorReporter?
-//
-// What we found works is to do basically the same hack as is done in getSourcePositionFromStack,
-// making a new java.lang.Exception() and then calling printStackTrace on a string stream.
-// We have to parse the string for the .js files (different from the java files).
-// This only works however in compiled mode (-opt 0 or higher).
-// In interpreter mode, entire stack is java.
-// When compiled, printStackTrace is like:
-// java.lang.Exception
-//	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-//	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
-//	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
-//	at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
-//	at org.mozilla.javascript.NativeJavaClass.constructSpecific(NativeJavaClass.java:228)
-//	at org.mozilla.javascript.NativeJavaClass.construct(NativeJavaClass.java:185)
-//	at org.mozilla.javascript.ScriptRuntime.newObject(ScriptRuntime.java:1269)
-//	at org.mozilla.javascript.gen.c2.call(/Users/mda/Sites/burstproject/testrhino.js:27)
-//    ...
-//	at org.mozilla.javascript.tools.shell.Main.main(Main.java:76)
-//
-// Note may get different answers based on:
-//    Context.setOptimizationLevel(-1)
-//    Context.setGeneratingDebug(true)
-//    Context.setGeneratingSource(true) 
-//
-// Some somewhat helpful posts:
-//    http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&safe=off&selm=9v9n0g%246gr1%40ripley.netscape.com
-//    http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&safe=off&selm=3BAA2DC4.6010702%40atg.com
-//
-// Note that Rhino1.5R5 added source name information in some exceptions.
-// But this seems not to help in command-line Rhino, because Context.java has an error reporter
-// so no EvaluationException is thrown.
-
-// do it by using java java.lang.Exception
-function dj_rhino_current_script_via_java(depth) {
-    var optLevel = Packages.org.mozilla.javascript.Context.getCurrentContext().getOptimizationLevel();  
-    if (optLevel == -1) dj_unimplemented("getCurrentScriptURI (determine current script path for rhino when interpreter mode)", '');
-    var caw = new java.io.CharArrayWriter();
-    var pw = new java.io.PrintWriter(caw);
-    var exc = new java.lang.Exception();
-    exc.printStackTrace(pw);
-    var s = caw.toString();
-    // we have to exclude the ones with or without line numbers because they put double entries in:
-    //   at org.mozilla.javascript.gen.c3._c4(/Users/mda/Sites/burstproject/burst/Runtime.js:56)
-    //   at org.mozilla.javascript.gen.c3.call(/Users/mda/Sites/burstproject/burst/Runtime.js)
-    var matches = s.match(/[^\(]*\.js\)/gi);
-    if(!matches){
-		throw Error("cannot parse printStackTrace output: " + s);
-	}
-
-    // matches[0] is entire string, matches[1] is this function, matches[2] is caller, ...
-    var fname = ((typeof depth != 'undefined')&&(depth)) ? matches[depth + 1] : matches[matches.length - 1];
-    var fname = matches[3];
-	if(!fname){ fname = matches[1]; }
-    // print("got fname '" + fname + "' from stack string '" + s + "'");
-    if (!fname) throw Error("could not find js file in printStackTrace output: " + s);
-    //print("Rhino getCurrentScriptURI returning '" + fname + "' from: " + s); 
-    return fname;
-}
-
-// UNUSED: leverage new support in native exception for getSourceName
-/*
-function dj_rhino_current_script_via_eval_exception() {
-    var exc;
-    // 'ReferenceError: "undefinedsymbol" is not defined.'
-    try {eval ("undefinedsymbol()") } catch(e) {exc = e;}
-    // 'Error: whatever'
-    // try{throw Error("whatever");} catch(e) {exc = e;}
-    // 'SyntaxError: identifier is a reserved word'
-    // try {eval ("static in return")} catch(e) { exc = e; }
-    print("got exception: '" + exc + "'");
-    print("exc.stack=" + (typeof exc.stack));
-    var sn = exc.getSourceName();
-    print("SourceName=" + sn);
-    return sn;
-} 
-*/
-
-// reading a file from disk in Java is a humiliating experience by any measure.
-// Lets avoid that and just get the freaking text
-function readText(uri){
-	// NOTE: we intentionally avoid handling exceptions, since the caller will
-	// want to know
-	var jf = new java.io.File(uri);
-	var sb = new java.lang.StringBuffer();
-	var input = new java.io.BufferedReader(new java.io.FileReader(jf));
-	var line = "";
-	while((line = input.readLine()) != null){
-		sb.append(line);
-		sb.append(java.lang.System.getProperty("line.separator"));
-	}
-	return sb.toString();
-}
-
-// call this now because later we may not be on the top of the stack
-if(!djConfig.libraryScriptUri.length){
-	djConfig.libraryScriptUri = dj_rhino_current_script_via_java(1);
-}
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_spidermonkey.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_spidermonkey.js
deleted file mode 100644
index 23bc4be..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_spidermonkey.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
- * SpiderMonkey host environment
- */
-
-dojo.hostenv.name_ = 'spidermonkey';
-
-dojo.hostenv.println = print;
-dojo.hostenv.exit = function(exitcode){ 
-	quit(exitcode); 
-}
-
-// version() returns 0, sigh. and build() returns nothing but just prints.
-dojo.hostenv.getVersion = function(){ return version(); }
-
-// make jsc shut up (so we can use jsc for sanity checking) 
-/*@cc_on
-@if (@_jscript_version >= 7)
-var line2pc; var print; var load; var quit;
-@end
-@*/
-
-if(typeof line2pc == 'undefined'){
-	dojo.raise("attempt to use SpiderMonkey host environment when no 'line2pc' global");
-}
-
-/*
- * This is a hack that determines the current script file by parsing a generated
- * stack trace (relying on the non-standard "stack" member variable of the
- * SpiderMonkey Error object).
- * If param depth is passed in, it'll return the script file which is that far down
- * the stack, but that does require that you know how deep your stack is when you are
- * calling.
- */
-function dj_spidermonkey_current_file(depth){
-    var s = '';
-    try{
-		throw Error("whatever");
-	}catch(e){
-		s = e.stack;
-	}
-    // lines are like: bu_getCurrentScriptURI_spidermonkey("ScriptLoader.js")@burst/Runtime.js:101
-    var matches = s.match(/[^@]*\.js/gi);
-    if(!matches){ 
-		dojo.raise("could not parse stack string: '" + s + "'");
-	}
-    var fname = (typeof depth != 'undefined' && depth) ? matches[depth + 1] : matches[matches.length - 1];
-    if(!fname){ 
-		dojo.raise("could not find file name in stack string '" + s + "'");
-	}
-    //print("SpiderMonkeyRuntime got fname '" + fname + "' from stack string '" + s + "'");
-    return fname;
-}
-
-// call this now because later we may not be on the top of the stack
-//dojo.hostenv.getLibraryScriptUri = dj_spidermonkey_current_file;
-if(!dojo.hostenv.library_script_uri_){ 
-	dojo.hostenv.library_script_uri_ = dj_spidermonkey_current_file(0); 
-}
-
-dojo.hostenv.loadUri = function(uri){
-	// spidermonkey load() evaluates the contents into the global scope (which
-	// is what we want).
-	// TODO: sigh, load() does not return a useful value. 
-	// Perhaps it is returning the value of the last thing evaluated?
-	var ok = load(uri);
-	// dojo.debug("spidermonkey load(", uri, ") returned ", ok);
-	return 1;
-}
-
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_svg.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_svg.js
deleted file mode 100644
index 62cf203..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_svg.js
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-//	hostenv_svg
-if(typeof window == 'undefined'){
-	dj_throw("attempt to use adobe svg hostenv when no window object");
-}
-dojo.debug = function(){ 
-	if (!djConfig.isDebug) { return; }
-	var args = arguments;
-	var isJUM = dj_global["jum"];
-	var s = isJUM ? "": "DEBUG: ";
-	for (var i = 0; i < args.length; ++i){ s += args[i]; }
-	if (isJUM){ // this seems to be the only way to get JUM to "play nice"
-		jum.debug(s);
-	} else{ 
-		dojo.hostenv.println(s);
-	}
-};
-
-//	set up dojo.render.
-dojo.render.name = navigator.appName;
-dojo.render.ver = parseFloat(navigator.appVersion, 10);
-switch(navigator.platform){
-	case "MacOS":
-		dojo.render.os.osx =  true;
-		break;
-	case "Linux":
-		dojo.render.os.linux =  true;
-		break;
-	case "Windows":
-		dojo.render.os.win =  true;
-		break;
-	default:
-		dojo.render.os.linux = true;
-		break;
-};
-dojo.render.svg.capable = true;
-dojo.render.svg.support.builtin = true;
-//	FIXME the following two is a big-ass hack for now.
-dojo.render.svg.moz = ((navigator.userAgent.indexOf("Gecko") >= 0) && (!((navigator.appVersion.indexOf("Konqueror") >= 0) || (navigator.appVersion.indexOf("Safari") >= 0))));
-dojo.render.svg.adobe = (window.parseXML != null);
-
-//	agent-specific implementations.
-
-//	from old hostenv_adobesvg.
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.hostenv.println = function(s){ 
-	try {
-		var ti = document.createElement("text");
-		ti.setAttribute("x","50");
-		ti.setAttribute("y", (25 + 15 * document.getElementsByTagName("text").length));
-		ti.appendChild(document.createTextNode(s));
-		document.documentElement.appendChild(ti);
-	} catch(e){ }
-};
-dojo.hostenv.name_ = "svg";
-
-//	expected/defined by bootstrap1.js
-dojo.hostenv.setModulePrefix = function(module, prefix){ };
-dojo.hostenv.getModulePrefix = function(module){ };
-dojo.hostenv.getTextStack = [];
-dojo.hostenv.loadUriStack = [];
-dojo.hostenv.loadedUris = [];
-dojo.hostenv.modules_ = {};
-dojo.hostenv.modulesLoadedFired = false;
-dojo.hostenv.modulesLoadedListeners = [];
-dojo.hostenv.getText = function(uri, cb, data){ 
-	if (!cb) var cb = function(result){ window.alert(result); };
-	if (!data) {
-		window.getUrl(uri, cb);
-	} else {
-		window.postUrl(uri, data, cb);
-	}
-};
-dojo.hostenv.getLibaryScriptUri = function(){ };
-
-dojo.hostenv.loadUri = function(uri){ };
-dojo.hostenv.loadUriAndCheck = function(uri, module){ };
-
-//	aliased in bootstrap2, don't ignore
-//	we are going to kill loadModule for the first round of SVG stuff, and include shit manually.
-dojo.hostenv.loadModule = function(moduleName){
-	//	just like startPackage, but this time we're just checking to make sure it exists already.
-	var a = moduleName.split(".");
-	var currentObj = window;
-	var s = [];
-	for (var i = 0; i < a.length; i++){
-		if (a[i] == "*") continue;
-		s.push(a[i]);
-		if (!currentObj[a[i]]){
-			dj_throw("dojo.require('" + moduleName + "'): module does not exist.");
-		} else currentObj = currentObj[a[i]];
-	}
-	return; 
-};
-dojo.hostenv.startPackage = function(moduleName){
-	var a = moduleName.split(".");
-	var currentObj = window;
-	var s = [];
-	for (var i = 0; i < a.length; i++){
-		if (a[i] == "*") continue;
-		s.push(a[i]);
-		if (!currentObj[a[i]]) currentObj[a[i]] = {};
-		currentObj = currentObj[a[i]];
-	}
-	return; 
-};
-
-//	wrapper objects for ASVG
-if (window.parseXML){
-	window.XMLSerialzer = function(){
-		//	based on WebFX RichTextControl getXHTML() function.
-		function nodeToString(n, a) {
-			function fixText(s) { return String(s).replace(/\&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;"); }
-			function fixAttribute(s) { return fixText(s).replace(/\"/g, "&quot;"); }
-			switch (n.nodeType) {
-				case 1:	{	//	ELEMENT
-					var name = n.nodeName;
-					a.push("<" + name);
-					for (var i = 0; i < n.attributes.length; i++) {
-						if (n.attributes.item(i).specified) {
-							a.push(" " + n.attributes.item(i).nodeName.toLowerCase() + "=\"" + fixAttribute(n.attributes.item(i).nodeValue) + "\"");
-						}
-					}
-					if (n.canHaveChildren || n.hasChildNodes()) {
-						a.push(">");
-						for (var i = 0; i < n.childNodes.length; i++) nodeToString(n.childNodes.item(i), a);
-						a.push("</" + name + ">\n");
-					} else a.push(" />\n");
-					break;
-				}
-				case 3: {	//	TEXT
-					a.push(fixText(n.nodeValue));
-					break;
-				}
-				case 4: {	//	CDATA
-					a.push("<![CDA" + "TA[\n" + n.nodeValue + "\n]" + "]>");
-					break;
-				}
-				case 7:{	//	PROCESSING INSTRUCTION
-					a.push(n.nodeValue);
-					if (/(^<\?xml)|(^<\!DOCTYPE)/.test(n.nodeValue)) a.push("\n");
-					break;
-				}
-				case 8:{	//	COMMENT
-					a.push("<!-- " + n.nodeValue + " -->\n");
-					break;
-				}
-				case 9:		//	DOCUMENT
-				case 11:{	//	DOCUMENT FRAGMENT
-					for (var i = 0; i < n.childNodes.length; i++) nodeToString(n.childNodes.item(i), a);
-					break;
-				}
-				default:{
-					a.push("<!--\nNot Supported:\n\n" + "nodeType: " + n.nodeType + "\nnodeName: " + n.nodeName + "\n-->");
-				}
-			}
-		}
-		this.serializeToString = function(node){
-			var a = [];
-			nodeToString(node, a);
-			return a.join("");
-		};
-	};
-
-	window.DOMParser = function(){
-		//	mimetype is basically ignored
-		this.parseFromString = function(s){
-			return parseXML(s, window.document);
-		}
-	};
-
-	window.XMLHttpRequest = function(){
-		//	we ignore the setting and getting of content-type.
-		var uri = null;
-		var method = "POST";
-		var isAsync = true;	
-		var cb = function(d){
-			this.responseText = d.content;
-			try {
-				this.responseXML = parseXML(this.responseText, window.document);
-			} catch(e){}
-			this.status = "200";
-			this.statusText = "OK";
-			if (!d.success) {
-				this.status = "500";
-				this.statusText = "Internal Server Error";
-			}
-			this.onload();
-			this.onreadystatechange();
-		};
-		this.onload = function(){};
-		this.readyState = 4;
-		this.onreadystatechange = function(){};
-		this.status = 0;
-		this.statusText = "";
-		this.responseBody = null;
-		this.responseStream = null;
-		this.responseXML = null;
-		this.responseText = null;
-		this.abort = function(){ return; };
-		this.getAllResponseHeaders = function(){ return []; };
-		this.getResponseHeader = function(n){ return null; };
-		this.setRequestHeader = function(nm, val){ };
-		this.open = function(meth, url, async){ 
-			method = meth;
-			uri = url;
-		};
-		this.send = function(data){
-			var d = data || null;
-			if (method == "GET") getURL(uri, cb);
-			else postURL(uri, data, cb);
-		};
-	};
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_wsh.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_wsh.js
deleted file mode 100644
index f016079..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/hostenv_wsh.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
- * WSH
- */
-
-dojo.hostenv.name_ = 'wsh';
-
-// make jsc shut up (so can sanity check)
-/*@cc_on
-@if (@_jscript_version >= 7)
-var WScript;
-@end
-@*/
-
-// make sure we are in right environment
-if(typeof WScript == 'undefined'){
-	dj_throw("attempt to use WSH host environment when no WScript global");
-}
-
-dojo.hostenv.println = WScript.Echo;
-
-dojo.hostenv.getCurrentScriptUri = function(){
-	return WScript.ScriptFullName();
-}
-
-dojo.hostenv.getText = function(fpath){
-	var fso = new ActiveXObject("Scripting.FileSystemObject");
-	var istream = fso.OpenTextFile(fpath, 1); // iomode==1 means read only
-	if(!istream){
-		return null;
-	}
-	var contents = istream.ReadAll();
-	istream.Close();
-	return contents;
-}
-
-dojo.hostenv.exit = function(exitcode){ WScript.Quit(exitcode); }
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/html.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/html.js
deleted file mode 100644
index 6e86393..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/html.js
+++ /dev/null
@@ -1,987 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.html");
-dojo.require("dojo.dom");
-dojo.require("dojo.style");
-dojo.require("dojo.string");
-
-dojo.lang.mixin(dojo.html, dojo.dom);
-dojo.lang.mixin(dojo.html, dojo.style);
-
-// FIXME: we are going to assume that we can throw any and every rendering
-// engine into the IE 5.x box model. In Mozilla, we do this w/ CSS.
-// Need to investigate for KHTML and Opera
-
-dojo.html.clearSelection = function(){
-	try{
-		if(window["getSelection"]){ 
-			if(dojo.render.html.safari){
-				// pulled from WebCore/ecma/kjs_window.cpp, line 2536
-				window.getSelection().collapse();
-			}else{
-				window.getSelection().removeAllRanges();
-			}
-		}else if(document.selection){
-			if(document.selection.empty){
-				document.selection.empty();
-			}else if(document.selection.clear){
-				document.selection.clear();
-			}
-		}
-		return true;
-	}catch(e){
-		dojo.debug(e);
-		return false;
-	}
-}
-
-dojo.html.disableSelection = function(element){
-	element = dojo.byId(element)||dojo.html.body();
-	var h = dojo.render.html;
-	
-	if(h.mozilla){
-		element.style.MozUserSelect = "none";
-	}else if(h.safari){
-		element.style.KhtmlUserSelect = "none"; 
-	}else if(h.ie){
-		element.unselectable = "on";
-	}else{
-		return false;
-	}
-	return true;
-}
-
-dojo.html.enableSelection = function(element){
-	element = dojo.byId(element)||dojo.html.body();
-	
-	var h = dojo.render.html;
-	if(h.mozilla){ 
-		element.style.MozUserSelect = ""; 
-	}else if(h.safari){
-		element.style.KhtmlUserSelect = "";
-	}else if(h.ie){
-		element.unselectable = "off";
-	}else{
-		return false;
-	}
-	return true;
-}
-
-dojo.html.selectElement = function(element){
-	element = dojo.byId(element);
-	if(document.selection && dojo.html.body().createTextRange){ // IE
-		var range = dojo.html.body().createTextRange();
-		range.moveToElementText(element);
-		range.select();
-	}else if(window["getSelection"]){
-		var selection = window.getSelection();
-		// FIXME: does this work on Safari?
-		if(selection["selectAllChildren"]){ // Mozilla
-			selection.selectAllChildren(element);
-		}
-	}
-}
-
-dojo.html.isSelectionCollapsed = function(){
-	if(document["selection"]){ // IE
-		return document.selection.createRange().text == "";
-	}else if(window["getSelection"]){
-		var selection = window.getSelection();
-		if(dojo.lang.isString(selection)){ // Safari
-			return selection == "";
-		}else{ // Mozilla/W3
-			return selection.isCollapsed;
-		}
-	}
-}
-
-dojo.html.getEventTarget = function(evt){
-	if(!evt) { evt = window.event || {} };
-	if(evt.srcElement) {
-		return evt.srcElement;
-	} else if(evt.target) {
-		return evt.target;
-	}
-	return null;
-}
-
-// FIXME: should the next set of functions take an optional document to operate
-// on so as to be useful for getting this information from iframes?
-dojo.html.getScrollTop = function(){
-	return document.documentElement.scrollTop || dojo.html.body().scrollTop || 0;
-}
-
-dojo.html.getScrollLeft = function(){
-	return document.documentElement.scrollLeft || dojo.html.body().scrollLeft || 0;
-}
-
-dojo.html.getDocumentWidth = function(){
-	dojo.deprecated("dojo.html.getDocument* has been deprecated in favor of dojo.html.getViewport*");
-	return dojo.html.getViewportWidth();
-}
-
-dojo.html.getDocumentHeight = function(){
-	dojo.deprecated("dojo.html.getDocument* has been deprecated in favor of dojo.html.getViewport*");
-	return dojo.html.getViewportHeight();
-}
-
-dojo.html.getDocumentSize = function(){
-	dojo.deprecated("dojo.html.getDocument* has been deprecated in favor of dojo.html.getViewport*");
-	return dojo.html.getViewportSize();
-}
-
-dojo.html.getViewportWidth = function(){
-	var w = 0;
-
-	if(window.innerWidth){
-		w = window.innerWidth;
-	}
-
-	if(dojo.exists(document, "documentElement.clientWidth")){
-		// IE6 Strict
-		var w2 = document.documentElement.clientWidth;
-		// this lets us account for scrollbars
-		if(!w || w2 && w2 < w) {
-			w = w2;
-		}
-		return w;
-	}
-
-	if(document.body){
-		// IE
-		return document.body.clientWidth;
-	}
-
-	return 0;
-}
-
-dojo.html.getViewportHeight = function(){
-	if (window.innerHeight){
-		return window.innerHeight;
-	}
-
-	if (dojo.exists(document, "documentElement.clientHeight")){
-		// IE6 Strict
-		return document.documentElement.clientHeight;
-	}
-
-	if (document.body){
-		// IE
-		return document.body.clientHeight;
-	}
-
-	return 0;
-}
-
-dojo.html.getViewportSize = function(){
-	var ret = [dojo.html.getViewportWidth(), dojo.html.getViewportHeight()];
-	ret.w = ret[0];
-	ret.h = ret[1];
-	return ret;
-}
-
-dojo.html.getScrollOffset = function(){
-	var ret = [0, 0];
-
-	if(window.pageYOffset){
-		ret = [window.pageXOffset, window.pageYOffset];
-	}else if(dojo.exists(document, "documentElement.scrollTop")){
-		ret = [document.documentElement.scrollLeft, document.documentElement.scrollTop];
-	} else if(document.body){
-		ret = [document.body.scrollLeft, document.body.scrollTop];
-	}
-
-	ret.x = ret[0];
-	ret.y = ret[1];
-	return ret;
-}
-
-dojo.html.getParentOfType = function(node, type){
-	dojo.deprecated("dojo.html.getParentOfType has been deprecated in favor of dojo.html.getParentByType*");
-	return dojo.html.getParentByType(node, type);
-}
-
-dojo.html.getParentByType = function(node, type) {
-	var parent = dojo.byId(node);
-	type = type.toLowerCase();
-	while((parent)&&(parent.nodeName.toLowerCase()!=type)){
-		if(parent==(document["body"]||document["documentElement"])){
-			return null;
-		}
-		parent = parent.parentNode;
-	}
-	return parent;
-}
-
-// RAR: this function comes from nwidgets and is more-or-less unmodified.
-// We should probably look ant Burst and f(m)'s equivalents
-dojo.html.getAttribute = function(node, attr){
-	node = dojo.byId(node);
-	// FIXME: need to add support for attr-specific accessors
-	if((!node)||(!node.getAttribute)){
-		// if(attr !== 'nwType'){
-		//	alert("getAttr of '" + attr + "' with bad node"); 
-		// }
-		return null;
-	}
-	var ta = typeof attr == 'string' ? attr : new String(attr);
-
-	// first try the approach most likely to succeed
-	var v = node.getAttribute(ta.toUpperCase());
-	if((v)&&(typeof v == 'string')&&(v!="")){ return v; }
-
-	// try returning the attributes value, if we couldn't get it as a string
-	if(v && v.value){ return v.value; }
-
-	// this should work on Opera 7, but it's a little on the crashy side
-	if((node.getAttributeNode)&&(node.getAttributeNode(ta))){
-		return (node.getAttributeNode(ta)).value;
-	}else if(node.getAttribute(ta)){
-		return node.getAttribute(ta);
-	}else if(node.getAttribute(ta.toLowerCase())){
-		return node.getAttribute(ta.toLowerCase());
-	}
-	return null;
-}
-	
-/**
- *	Determines whether or not the specified node carries a value for the
- *	attribute in question.
- */
-dojo.html.hasAttribute = function(node, attr){
-	node = dojo.byId(node);
-	return dojo.html.getAttribute(node, attr) ? true : false;
-}
-	
-/**
- * Returns the string value of the list of CSS classes currently assigned
- * directly to the node in question. Returns an empty string if no class attribute
- * is found;
- */
-dojo.html.getClass = function(node){
-	node = dojo.byId(node);
-	if(!node){ return ""; }
-	var cs = "";
-	if(node.className){
-		cs = node.className;
-	}else if(dojo.html.hasAttribute(node, "class")){
-		cs = dojo.html.getAttribute(node, "class");
-	}
-	return dojo.string.trim(cs);
-}
-
-/**
- * Returns an array of CSS classes currently assigned
- * directly to the node in question. Returns an empty array if no classes
- * are found;
- */
-dojo.html.getClasses = function(node) {
-	node = dojo.byId(node);
-	var c = dojo.html.getClass(node);
-	return (c == "") ? [] : c.split(/\s+/g);
-}
-
-/**
- * Returns whether or not the specified classname is a portion of the
- * class list currently applied to the node. Does not cover cascaded
- * styles, only classes directly applied to the node.
- */
-dojo.html.hasClass = function(node, classname){
-	node = dojo.byId(node);
-	return dojo.lang.inArray(dojo.html.getClasses(node), classname);
-}
-
-/**
- * Adds the specified class to the beginning of the class list on the
- * passed node. This gives the specified class the highest precidence
- * when style cascading is calculated for the node. Returns true or
- * false; indicating success or failure of the operation, respectively.
- */
-dojo.html.prependClass = function(node, classStr){
-	node = dojo.byId(node);
-	if(!node){ return false; }
-	classStr += " " + dojo.html.getClass(node);
-	return dojo.html.setClass(node, classStr);
-}
-
-/**
- * Adds the specified class to the end of the class list on the
- *	passed &node;. Returns &true; or &false; indicating success or failure.
- */
-dojo.html.addClass = function(node, classStr){
-	node = dojo.byId(node);
-	if (!node) { return false; }
-	if (dojo.html.hasClass(node, classStr)) {
-	  return false;
-	}
-	classStr = dojo.string.trim(dojo.html.getClass(node) + " " + classStr);
-	return dojo.html.setClass(node, classStr);
-}
-
-/**
- *	Clobbers the existing list of classes for the node, replacing it with
- *	the list given in the 2nd argument. Returns true or false
- *	indicating success or failure.
- */
-dojo.html.setClass = function(node, classStr){
-	node = dojo.byId(node);
-	if(!node){ return false; }
-	var cs = new String(classStr);
-	try{
-		if(typeof node.className == "string"){
-			node.className = cs;
-		}else if(node.setAttribute){
-			node.setAttribute("class", classStr);
-			node.className = cs;
-		}else{
-			return false;
-		}
-	}catch(e){
-		dojo.debug("dojo.html.setClass() failed", e);
-	}
-	return true;
-}
-
-/**
- * Removes the className from the node;. Returns
- * true or false indicating success or failure.
- */ 
-dojo.html.removeClass = function(node, classStr, allowPartialMatches){
-	node = dojo.byId(node);
-	if(!node){ return false; }
-	var classStr = dojo.string.trim(new String(classStr));
-
-	try{
-		var cs = dojo.html.getClasses(node);
-		var nca	= [];
-		if(allowPartialMatches){
-			for(var i = 0; i<cs.length; i++){
-				if(cs[i].indexOf(classStr) == -1){ 
-					nca.push(cs[i]);
-				}
-			}
-		}else{
-			for(var i=0; i<cs.length; i++){
-				if(cs[i] != classStr){ 
-					nca.push(cs[i]);
-				}
-			}
-		}
-		dojo.html.setClass(node, nca.join(" "));
-	}catch(e){
-		dojo.debug("dojo.html.removeClass() failed", e);
-	}
-
-	return true;
-}
-
-/**
- * Replaces 'oldClass' and adds 'newClass' to node
- */
-dojo.html.replaceClass = function(node, newClass, oldClass) {
-	node = dojo.byId(node);
-	dojo.html.removeClass(node, oldClass);
-	dojo.html.addClass(node, newClass);
-}
-
-// Enum type for getElementsByClass classMatchType arg:
-dojo.html.classMatchType = {
-	ContainsAll : 0, // all of the classes are part of the node's class (default)
-	ContainsAny : 1, // any of the classes are part of the node's class
-	IsOnly : 2 // only all of the classes are part of the node's class
-}
-
-
-/**
- * Returns an array of nodes for the given classStr, children of a
- * parent, and optionally of a certain nodeType
- */
-dojo.html.getElementsByClass = function(classStr, parent, nodeType, classMatchType){
-	parent = dojo.byId(parent);
-	if(!parent){ parent = document; }
-	var classes = classStr.split(/\s+/g);
-	var nodes = [];
-	if( classMatchType != 1 && classMatchType != 2 ) classMatchType = 0; // make it enum
-	var reClass = new RegExp("(\\s|^)((" + classes.join(")|(") + "))(\\s|$)");
-
-	// FIXME: doesn't have correct parent support!
-	if(!nodeType){ nodeType = "*"; }
-	var candidateNodes = parent.getElementsByTagName(nodeType);
-
-	outer:
-	for(var i = 0; i < candidateNodes.length; i++) {
-		var node = candidateNodes[i];
-		var nodeClasses = dojo.html.getClasses(node);
-		if(nodeClasses.length == 0) { continue outer; }
-		var matches = 0;
-
-		for(var j = 0; j < nodeClasses.length; j++) {
-			if( reClass.test(nodeClasses[j]) ) {
-				if( classMatchType == dojo.html.classMatchType.ContainsAny ) {
-					nodes.push(node);
-					continue outer;
-				} else {
-					matches++;
-				}
-			} else {
-				if( classMatchType == dojo.html.classMatchType.IsOnly ) {
-					continue outer;
-				}
-			}
-		}
-
-		if( matches == classes.length ) {
-			if( classMatchType == dojo.html.classMatchType.IsOnly && matches == nodeClasses.length ) {
-				nodes.push(node);
-			} else if( classMatchType == dojo.html.classMatchType.ContainsAll ) {
-				nodes.push(node);
-			}
-		}
-	}
-	
-	return nodes;
-}
-dojo.html.getElementsByClassName = dojo.html.getElementsByClass;
-
-/**
- * Calculates the mouse's direction of gravity relative to the centre
- * of the given node.
- * <p>
- * If you wanted to insert a node into a DOM tree based on the mouse
- * position you might use the following code:
- * <pre>
- * if (gravity(node, e) & gravity.NORTH) { [insert before]; }
- * else { [insert after]; }
- * </pre>
- *
- * @param node The node
- * @param e		The event containing the mouse coordinates
- * @return		 The directions, NORTH or SOUTH and EAST or WEST. These
- *						 are properties of the function.
- */
-dojo.html.gravity = function(node, e){
-	node = dojo.byId(node);
-	var mousex = e.pageX || e.clientX + dojo.html.body().scrollLeft;
-	var mousey = e.pageY || e.clientY + dojo.html.body().scrollTop;
-	
-	with (dojo.html) {
-		var nodecenterx = getAbsoluteX(node) + (getInnerWidth(node) / 2);
-		var nodecentery = getAbsoluteY(node) + (getInnerHeight(node) / 2);
-	}
-	
-	with (dojo.html.gravity) {
-		return ((mousex < nodecenterx ? WEST : EAST) |
-			(mousey < nodecentery ? NORTH : SOUTH));
-	}
-}
-
-dojo.html.gravity.NORTH = 1;
-dojo.html.gravity.SOUTH = 1 << 1;
-dojo.html.gravity.EAST = 1 << 2;
-dojo.html.gravity.WEST = 1 << 3;
-	
-dojo.html.overElement = function(element, e){
-	element = dojo.byId(element);
-	var mousex = e.pageX || e.clientX + dojo.html.body().scrollLeft;
-	var mousey = e.pageY || e.clientY + dojo.html.body().scrollTop;
-	
-	with(dojo.html){
-		var top = getAbsoluteY(element);
-		var bottom = top + getInnerHeight(element);
-		var left = getAbsoluteX(element);
-		var right = left + getInnerWidth(element);
-	}
-	
-	return (mousex >= left && mousex <= right &&
-		mousey >= top && mousey <= bottom);
-}
-
-/**
- * Attempts to return the text as it would be rendered, with the line breaks
- * sorted out nicely. Unfinished.
- */
-dojo.html.renderedTextContent = function(node){
-	node = dojo.byId(node);
-	var result = "";
-	if (node == null) { return result; }
-	for (var i = 0; i < node.childNodes.length; i++) {
-		switch (node.childNodes[i].nodeType) {
-			case 1: // ELEMENT_NODE
-			case 5: // ENTITY_REFERENCE_NODE
-				var display = "unknown";
-				try {
-					display = dojo.style.getStyle(node.childNodes[i], "display");
-				} catch(E) {}
-				switch (display) {
-					case "block": case "list-item": case "run-in":
-					case "table": case "table-row-group": case "table-header-group":
-					case "table-footer-group": case "table-row": case "table-column-group":
-					case "table-column": case "table-cell": case "table-caption":
-						// TODO: this shouldn't insert double spaces on aligning blocks
-						result += "\n";
-						result += dojo.html.renderedTextContent(node.childNodes[i]);
-						result += "\n";
-						break;
-					
-					case "none": break;
-					
-					default:
-						if(node.childNodes[i].tagName && node.childNodes[i].tagName.toLowerCase() == "br") {
-							result += "\n";
-						} else {
-							result += dojo.html.renderedTextContent(node.childNodes[i]);
-						}
-						break;
-				}
-				break;
-			case 3: // TEXT_NODE
-			case 2: // ATTRIBUTE_NODE
-			case 4: // CDATA_SECTION_NODE
-				var text = node.childNodes[i].nodeValue;
-				var textTransform = "unknown";
-				try {
-					textTransform = dojo.style.getStyle(node, "text-transform");
-				} catch(E) {}
-				switch (textTransform){
-					case "capitalize": text = dojo.string.capitalize(text); break;
-					case "uppercase": text = text.toUpperCase(); break;
-					case "lowercase": text = text.toLowerCase(); break;
-					default: break; // leave as is
-				}
-				// TODO: implement
-				switch (textTransform){
-					case "nowrap": break;
-					case "pre-wrap": break;
-					case "pre-line": break;
-					case "pre": break; // leave as is
-					default:
-						// remove whitespace and collapse first space
-						text = text.replace(/\s+/, " ");
-						if (/\s$/.test(result)) { text.replace(/^\s/, ""); }
-						break;
-				}
-				result += text;
-				break;
-			default:
-				break;
-		}
-	}
-	return result;
-}
-
-dojo.html.setActiveStyleSheet = function(title){
-	var i, a, main;
-	for(i=0; (a = document.getElementsByTagName("link")[i]); i++){
-		if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")){
-			a.disabled = true;
-			if (a.getAttribute("title") == title) { a.disabled = false; }
-		}
-	}
-}
-
-dojo.html.getActiveStyleSheet = function(){
-	var i, a;
-	// FIXME: getElementsByTagName returns a live collection. This seems like a
-	// bad key for iteration.
-	for(i=0; (a = document.getElementsByTagName("link")[i]); i++){
-		if (a.getAttribute("rel").indexOf("style") != -1 &&
-			a.getAttribute("title") && !a.disabled) { return a.getAttribute("title"); }
-	}
-	return null;
-}
-
-dojo.html.getPreferredStyleSheet = function(){
-	var i, a;
-	for(i=0; (a = document.getElementsByTagName("link")[i]); i++){
-		if(a.getAttribute("rel").indexOf("style") != -1
-			&& a.getAttribute("rel").indexOf("alt") == -1
-			&& a.getAttribute("title")) { return a.getAttribute("title"); }
-	}
-	return null;
-}
-
-dojo.html.body = function(){
-	return document.body || document.getElementsByTagName("body")[0];
-}
-
-dojo.html.createNodesFromText = function(txt, trim){
-	if(trim) { txt = dojo.string.trim(txt); }
-
-	var tn = document.createElement("div");
-	// tn.style.display = "none";
-	tn.style.visibility= "hidden";
-	document.body.appendChild(tn);
-	var tableType = "none";
-	if((/^<t[dh][\s\r\n>]/i).test(dojo.string.trimStart(txt))) {
-		txt = "<table><tbody><tr>" + txt + "</tr></tbody></table>";
-		tableType = "cell";
-	} else if((/^<tr[\s\r\n>]/i).test(dojo.string.trimStart(txt))) {
-		txt = "<table><tbody>" + txt + "</tbody></table>";
-		tableType = "row";
-	} else if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(dojo.string.trimStart(txt))) {
-		txt = "<table>" + txt + "</table>";
-		tableType = "section";
-	}
-	tn.innerHTML = txt;
-	tn.normalize();
-
-	var parent = null;
-	switch(tableType) {
-		case "cell":
-			parent = tn.getElementsByTagName("tr")[0];
-			break;
-		case "row":
-			parent = tn.getElementsByTagName("tbody")[0];
-			break;
-		case "section":
-			parent = tn.getElementsByTagName("table")[0];
-			break;
-		default:
-			parent = tn;
-			break;
-	}
-
-	/* this doesn't make much sense, I'm assuming it just meant trim() so wrap was replaced with trim
-	if(wrap){ 
-		var ret = [];
-		// start hack
-		var fc = tn.firstChild;
-		ret[0] = ((fc.nodeValue == " ")||(fc.nodeValue == "\t")) ? fc.nextSibling : fc;
-		// end hack
-		// tn.style.display = "none";
-		document.body.removeChild(tn);
-		return ret;
-	}
-	*/
-	var nodes = [];
-	for(var x=0; x<parent.childNodes.length; x++){
-		nodes.push(parent.childNodes[x].cloneNode(true));
-	}
-	tn.style.display = "none"; // FIXME: why do we do this?
-	document.body.removeChild(tn);
-	return nodes;
-}
-
-// FIXME: this should be removed after 0.2 release
-if(!dojo.evalObjPath("dojo.dom.createNodesFromText")){
-	dojo.dom.createNodesFromText = function() {
-		dojo.deprecated("dojo.dom.createNodesFromText", "use dojo.html.createNodesFromText instead");
-		return dojo.html.createNodesFromText.apply(dojo.html, arguments);
-	}
-}
-
-dojo.html.isVisible = function(node){
-	node = dojo.byId(node);
-	// FIXME: this should also look at visibility!
-	return dojo.style.getComputedStyle(node||this.domNode, "display") != "none";
-}
-
-dojo.html.show  = function(node){
-	node = dojo.byId(node);
-	if(node.style){
-		node.style.display = dojo.lang.inArray(['tr', 'td', 'th'], node.tagName.toLowerCase()) ? "" : "block";
-	}
-}
-
-dojo.html.hide = function(node){
-	node = dojo.byId(node);
-	if(node.style){
-		node.style.display = "none";
-	}
-}
-
-dojo.html.toggleVisible = function(node) {
-	if(dojo.html.isVisible(node)) {
-		dojo.html.hide(node);
-		return false;
-	} else {
-		dojo.html.show(node);
-		return true;
-	}
-}
-
-/**
- * Like dojo.dom.isTag, except case-insensitive
-**/
-dojo.html.isTag = function(node /* ... */) {
-	node = dojo.byId(node);
-	if(node && node.tagName) {
-		var arr = dojo.lang.map(dojo.lang.toArray(arguments, 1),
-			function(a) { return String(a).toLowerCase(); });
-		return arr[ dojo.lang.find(node.tagName.toLowerCase(), arr) ] || "";
-	}
-	return "";
-}
-
-// in: coordinate array [x,y,w,h] or dom node
-// return: coordinate array
-dojo.html.toCoordinateArray = function(coords, includeScroll) {
-	if(dojo.lang.isArray(coords)){
-		// coords is already an array (of format [x,y,w,h]), just return it
-		while ( coords.length < 4 ) { coords.push(0); }
-		while ( coords.length > 4 ) { coords.pop(); }
-		var ret = coords;
-	} else {
-		// coords is an dom object (or dom object id); return it's coordinates
-		var node = dojo.byId(coords);
-		var ret = [
-			dojo.html.getAbsoluteX(node, includeScroll),
-			dojo.html.getAbsoluteY(node, includeScroll),
-			dojo.html.getInnerWidth(node),
-			dojo.html.getInnerHeight(node)
-		];
-	}
-	ret.x = ret[0];
-	ret.y = ret[1];
-	ret.w = ret[2];
-	ret.h = ret[3];
-	return ret;
-};
-
-/* TODO: merge placeOnScreen and placeOnScreenPoint to make 1 function that allows you
- * to define which corner(s) you want to bind to. Something like so:
- *
- * kes(node, desiredX, desiredY, "TR")
- * kes(node, [desiredX, desiredY], ["TR", "BL"])
- *
- * TODO: make this function have variable call sigs
- *
- * kes(node, ptArray, cornerArray, padding, hasScroll)
- * kes(node, ptX, ptY, cornerA, cornerB, cornerC, paddingArray, hasScroll)
- */
-
-/**
- * Keeps 'node' in the visible area of the screen while trying to
- * place closest to desiredX, desiredY. The input coordinates are
- * expected to be the desired screen position, not accounting for
- * scrolling. If you already accounted for scrolling, set 'hasScroll'
- * to true. Set padding to either a number or array for [paddingX, paddingY]
- * to put some buffer around the element you want to position.
- * NOTE: node is assumed to be absolutely or relatively positioned.
- *
- * Alternate call sig:
- *  placeOnScreen(node, [x, y], padding, hasScroll)
- *
- * Examples:
- *  placeOnScreen(node, 100, 200)
- *  placeOnScreen("myId", [800, 623], 5)
- *  placeOnScreen(node, 234, 3284, [2, 5], true)
- */
-dojo.html.placeOnScreen = function(node, desiredX, desiredY, padding, hasScroll) {
-	if(dojo.lang.isArray(desiredX)) {
-		hasScroll = padding;
-		padding = desiredY;
-		desiredY = desiredX[1];
-		desiredX = desiredX[0];
-	}
-
-	if(!isNaN(padding)) {
-		padding = [Number(padding), Number(padding)];
-	} else if(!dojo.lang.isArray(padding)) {
-		padding = [0, 0];
-	}
-
-	var scroll = dojo.html.getScrollOffset();
-	var view = dojo.html.getViewportSize();
-
-	node = dojo.byId(node);
-	var w = node.offsetWidth + padding[0];
-	var h = node.offsetHeight + padding[1];
-
-	if(hasScroll) {
-		desiredX -= scroll.x;
-		desiredY -= scroll.y;
-	}
-
-	var x = desiredX + w;
-	if(x > view.w) {
-		x = view.w - w;
-	} else {
-		x = desiredX;
-	}
-	x = Math.max(padding[0], x) + scroll.x;
-
-	var y = desiredY + h;
-	if(y > view.h) {
-		y = view.h - h;
-	} else {
-		y = desiredY;
-	}
-	y = Math.max(padding[1], y) + scroll.y;
-
-	node.style.left = x + "px";
-	node.style.top = y + "px";
-
-	var ret = [x, y];
-	ret.x = x;
-	ret.y = y;
-	return ret;
-}
-
-/**
- * Like placeOnScreenPoint except that it attempts to keep one of the node's
- * corners at desiredX, desiredY. Also note that padding is only taken into
- * account if none of the corners can be kept and thus placeOnScreenPoint falls
- * back to placeOnScreen to place the node.
- *
- * Examples placing node at mouse position (where e = [Mouse event]):
- *  placeOnScreenPoint(node, e.clientX, e.clientY);
- */
-dojo.html.placeOnScreenPoint = function(node, desiredX, desiredY, padding, hasScroll) {
-	if(dojo.lang.isArray(desiredX)) {
-		hasScroll = padding;
-		padding = desiredY;
-		desiredY = desiredX[1];
-		desiredX = desiredX[0];
-	}
-
-	var scroll = dojo.html.getScrollOffset();
-	var view = dojo.html.getViewportSize();
-
-	node = dojo.byId(node);
-	var w = node.offsetWidth;
-	var h = node.offsetHeight;
-
-	if(hasScroll) {
-		desiredX -= scroll.x;
-		desiredY -= scroll.y;
-	}
-
-	var x = -1, y = -1;
-	//dojo.debug(desiredX + w, "<=", view.w, "&&", desiredY + h, "<=", view.h);
-	if(desiredX + w <= view.w && desiredY + h <= view.h) { // TL
-		x = desiredX;
-		y = desiredY;
-		//dojo.debug("TL", x, y);
-	}
-
-	//dojo.debug(desiredX, "<=", view.w, "&&", desiredY + h, "<=", view.h);
-	if((x < 0 || y < 0) && desiredX <= view.w && desiredY + h <= view.h) { // TR
-		x = desiredX - w;
-		y = desiredY;
-		//dojo.debug("TR", x, y);
-	}
-
-	//dojo.debug(desiredX + w, "<=", view.w, "&&", desiredY, "<=", view.h);
-	if((x < 0 || y < 0) && desiredX + w <= view.w && desiredY <= view.h) { // BL
-		x = desiredX;
-		y = desiredY - h;
-		//dojo.debug("BL", x, y);
-	}
-
-	//dojo.debug(desiredX, "<=", view.w, "&&", desiredY, "<=", view.h);
-	if((x < 0 || y < 0) && desiredX <= view.w && desiredY <= view.h) { // BR
-		x = desiredX - w;
-		y = desiredY - h;
-		//dojo.debug("BR", x, y);
-	}
-
-	if(x < 0 || y < 0 || (x + w > view.w) || (y + h > view.h)) {
-		return dojo.html.placeOnScreen(node, desiredX, desiredY, padding, hasScroll);
-	}
-
-	x += scroll.x;
-	y += scroll.y;
-
-	node.style.left = x + "px";
-	node.style.top = y + "px";
-
-	var ret = [x, y];
-	ret.x = x;
-	ret.y = y;
-	return ret;
-}
-
-/**
- * For IE z-index schenanigans
- * See Dialog widget for sample use
- */
-dojo.html.BackgroundIframe = function() {
-	if(this.ie) {
-		this.iframe = document.createElement("<iframe frameborder='0' src='about:blank'>");
-		var s = this.iframe.style;
-		s.position = "absolute";
-		s.left = s.top = "0px";
-		s.zIndex = 2;
-		s.display = "none";
-		dojo.style.setOpacity(this.iframe, 0.0);
-		dojo.html.body().appendChild(this.iframe);
-	} else {
-		this.enabled = false;
-	}
-}
-dojo.lang.extend(dojo.html.BackgroundIframe, {
-	ie: dojo.render.html.ie,
-	enabled: true,
-	visibile: false,
-	iframe: null,
-	sizeNode: null,
-	sizeCoords: null,
-
-	size: function(node /* or coords */) {
-		if(!this.ie || !this.enabled) { return; }
-
-		if(dojo.dom.isNode(node)) {
-			this.sizeNode = node;
-		} else if(arguments.length > 0) {
-			this.sizeNode = null;
-			this.sizeCoords = node;
-		}
-		this.update();
-	},
-
-	update: function() {
-		if(!this.ie || !this.enabled) { return; }
-
-		if(this.sizeNode) {
-			this.sizeCoords = dojo.html.toCoordinateArray(this.sizeNode, true);
-		} else if(this.sizeCoords) {
-			this.sizeCoords = dojo.html.toCoordinateArray(this.sizeCoords, true);
-		} else {
-			return;
-		}
-
-		var s = this.iframe.style;
-		var dims = this.sizeCoords;
-		s.width = dims.w + "px";
-		s.height = dims.h + "px";
-		s.left = dims.x + "px";
-		s.top = dims.y + "px";
-	},
-
-	setZIndex: function(node /* or number */) {
-		if(!this.ie || !this.enabled) { return; }
-
-		if(dojo.dom.isNode(node)) {
-			this.iframe.zIndex = dojo.html.getStyle(node, "z-index") - 1;
-		} else if(!isNaN(node)) {
-			this.iframe.zIndex = node;
-		}
-	},
-
-	show: function(node /* or coords */) {
-		if(!this.ie || !this.enabled) { return; }
-
-		this.size(node);
-		this.iframe.style.display = "block";
-	},
-
-	hide: function() {
-		if(!this.ie) { return; }
-		var s = this.iframe.style;
-		s.display = "none";
-		s.width = s.height = "1px";
-	},
-
-	remove: function() {
-		dojo.dom.removeNode(this.iframe);
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/iCalendar.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/iCalendar.js
deleted file mode 100644
index 787f572..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/iCalendar.js
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.iCalendar");
-dojo.provide("dojo.iCalendar.Component");
-dojo.provide("dojo.iCalendar.Property");
-dojo.require("dojo.text.textDirectory");
-dojo.require("dojo.date");
-// iCalendar support adapted from Paul Sowden's iCalendar work
-
-dojo.iCalendar = function (/* string */calbody) {
-	// summary
-	// Main iCalendar Object. 
-	// In actuality it is a VCALENDAR component.
-
-	// ugly ugly way to inherit
-	for (prop in dojo.iCalendar.Component.prototype) {
-		this[prop] = dojo.iCalendar.Component.prototype[prop];
-	}
-
-	dojo.iCalendar.Component.call(this, "VCALENDAR", calbody);
-}
-
-dojo.lang.extend(dojo.iCalendar, {
-	getEvents: function (/* string */ startDate, /* string */ endDate) {
-	// summary
-	// retrieve an array of events that fall between startDate and endDate
-
-		var evts = [];
-
-		if (dojo.lang.isString(startDate)) {
-			var start = dojo.date.fromIso8601(startDate);
-		} else {
-			start = startDate;
-		}
-
-		if (dojo.lang.isString(endDate)) {
-			var end = dojo.date.fromIso8601(endDate);
-		} else {
-			end = endDate;
-		}	
-
-		//dojo.debug("getting events between " + start+ " and " + end);
-		//dojo.debug("Total events to search: " + this.components.length.toString());
-		for (var x=0; x<this.components.length; x++) {
-			if (this.components[x].name == "VEVENT") {
-				evtStart = dojo.date.fromIso8601(this.components[x].dtstart.value);
-				evtEnd= dojo.date.fromIso8601(this.components[x].dtend.value);
-	 		
-				if (((evtStart >= start) && (evtStart <= end)) || ((evtStart <= end) && (evtEnd >= start))) {
-					//dojo.debug("Outside of range: " + evtStart + " " + evtEnd);
-					evts.push(this.components[x]);
-				} 
-			}
-		}		
-		return /* array */ evts;
-	}
-});
-
-
-dojo.iCalendar.fromText =  function (/* string */text) {
-	// summary
-	// Parse text of an iCalendar and return an array of iCalendar objects
-
-	var properties = dojo.textDirectoryTokeniser.tokenise(text);
-	var calendars = [];
-
-	for (var i = 0, begun = false; i < properties.length; i++) {
-		var prop = properties[i];
-		//dojo.debug("Property Name: " + prop.name + " = " + prop.value);
-		if (!begun) {
-			if (prop.name == 'BEGIN' && prop.value == 'VCALENDAR') {
-				begun = true;
-				var calbody = [];
-			}
-		} else if (prop.name == 'END' && prop.value == 'VCALENDAR') {
-			calendars.push(new dojo.iCalendar(calbody));
-			begun = false;
-		} else {
-			calbody.push(prop);
-		}
-	}
-	return /* array */calendars;
-}
-
-dojo.iCalendar.Component = function (/* string */ name, /* string */ body) {
-	// summary
-	// A component is the basic container of all this stuff.  A VCALENDAR is a component that 
-	// holds VEVENT Componenets for example.  A particular component is made up of its own
-	// properties as well as other components that it holds.
-
-	this.name = name;
-	this.properties = [];
-	this.components = [];
-
-	for (var i = 0, context = ''; i < body.length; i++) {
-		if (context == '') {
-			if (body[i].name == 'BEGIN') {
-				context = body[i].value;
-				var childprops = [];
-			} else {
-				this.addProperty(new dojo.iCalendar.Property(body[i]));
-			}
-		} else if (body[i].name == 'END' && body[i].value == context) {
-			this.addComponent(new dojo.iCalendar.Component(context, childprops));
-			context = '';
-		} else {
-			childprops.push(body[i]);
-		}
-	}
-}
-
-dojo.lang.extend(dojo.iCalendar.Component, {
-
-	addProperty: function (prop) {
-		// summary
-		// push a nuew propertie onto a component.
-		this.properties.push(prop);
-		this[prop.name.toLowerCase()] = prop;
-	},
-
-	addComponent: function (prop) {
-		// summary
-		// add a component to this components list of children.
-		this.components.push(prop);
-	},
-
-	
-	toString: function () {
-		// summary
-		// output a string representation of this component.
-		return "[iCalendar.Component; " + this.name + ", " + this.properties.length +
-			" properties, " + this.components.length + " components]";
-	}
-});
-
-dojo.iCalendar.Property = function (prop) {
-	// summary
-	// A single property of a component.
-
-	// unpack the values
-	this.name = prop.name;
-	this.group = prop.group;
-	this.params = prop.params;
-	this.value = prop.value;
-}
-
-dojo.lang.extend(dojo.iCalendar.Property, {
-	toString: function () {	
-		// summary
-		// output a string reprensentation of this component.
-		return "[iCalenday.Property; " + this.name + ": " + this.value + "]";
-	}
-});
-
-/*
- * Here is a whole load of stuff that could go towards making this
- * class validating, but right now I'm not caring
- */
-
-/*
-
-
-dojo.iCalendar.VEVENT = function () {}
-
-dojo.iCalendar.VEVENT.prototype.addProperty = function (prop) {
-
-}
-
-dojo.iCalendar.VTODO = function () {}
-dojo.iCalendar.VJOURNAL = function () {}
-dojo.iCalendar.VFREEBUSY = function () {}
-dojo.iCalendar.VTIMEZONE = function () {}
-
-var _ = function (n, oc, request) {
-	return {name: n, required: (request) ? true : false,
-		occurance: (oc == '*' || !oc) ? -1 : oc}
-}
-
-var VEVENT = [
-	// these can occur once only
-	_("class", 1), _("created", 1), _("description", 1), _("dtstart", 1),
-	_("geo", 1), _("last-mod", 1), _("location", 1), _("organizer", 1),
-	_("priority", 1), _("dtstamp", 1), _("seq", 1), _("status", 1),
-	_("summary", 1), _("transp", 1), _("uid", 1), _("url", 1), _("recurid", 1),
-	// these two are exclusive
-	[_("dtend", 1), _("duration", 1)],
-	// these can occur many times over
-	_("attach"), _("attendee"), _("categories"), _("comment"), _("contact"),
-	_("exdate"), _("exrule"), _("rstatus"), _("related"), _("resources"),
-	_("rdate"), _("rrule")
-]
-
-
-var VTODO = [
-	// these can occur once only
-	_("class", 1), _("completed", 1), _("created", 1), _("description", 1),
-	_("dtstart", 1), _("geo", 1), _("last-mod", 1), _("location", 1),
-	_("organizer", 1), _("percent", 1), _("priority", 1), _("dtstamp", 1),
-	_("seq", 1), _("status", 1), _("summary", 1), _("uid", 1), _("url", 1),
-	_("recurid", 1),
-	// these two are exclusive
-	[_("due", 1), _("duration", 1)],
-	// these can occur many times over
-	_("attach"), _("attendee"), _("categories"), _("comment"), _("contact"),
-	_("exdate"), _("exrule"), _("rstatus"), _("related"), _("resources"),
-	_("rdate"), _("rrule")
-]
-
-var VJOURNAL = [
-	// these can occur once only
-	_("class", 1), _("created", 1), _("description", 1), _("dtstart", 1),
-	_("last-mod", 1), _("organizer", 1), _("dtstamp", 1), _("seq", 1),
-	_("status", 1), _("summary", 1), _("uid", 1), _("url", 1), _("recurid", 1),
-	// these can occur many times over
-	_("attach"), _("attendee"), _("categories"), _("comment"), _("contact"),
-	_("exdate"), _("exrule"), _("related"), _("rstatus"), _("rdate"), _("rrule")
-]
-
-var VFREEBUSY = [
-	// these can occur once only
-	_("contact"), _("dtstart", 1), _("dtend"), _("duration"),
-	_("organizer", 1), _("dtstamp", 1), _("uid", 1), _("url", 1),
-	// these can occur many times over
-	_("attendee"), _("comment"), _("freebusy"), _("rstatus")
-]
-
-var VTIMEZONE = [
-	_("tzid", 1, true), _("last-mod", 1), _("tzurl", 1)
-
-	// one of 'standardc' or 'daylightc' must occur
-	// and each may occur more than once.
-]
-
-var STANDARD = [
-	_("dtstart", 1, true), _("tzoffsett", 1, true), _("tzoffsetfrom", 1, true),
-	_("comment"), _("rdate"), _("rrule"), _("tzname")];
-var daylight = standard;
-
-var VALARM = [
-
-[_("action", 1, true), _("trigger", 1, true), [_("duration", 1), _("repeat", 1)],
-_("attach", 1)];
-                
-[_("action", 1, true), _("description", 1, true), _("trigger", 1, true),
-[_("duration", 1), _("repeat", 1)]];
-
-[_("action", 1, true), _("description", 1, true), _("trigger", 1, true),
-_("summary", 1, true), _("attendee", "*", true),
-[_("duration", 1), _("repeat", 1)],
-_("attach", 1)];
-
-[_("action", 1, true), _("attach", 1, true), _("trigger", 1, true),
-[_("duration", 1), _("repeat", 1)],
-_("description", 1)];
-
-]*/
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io.js
deleted file mode 100644
index de99dc0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io.js
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.io.IO");
-dojo.require("dojo.string");
-
-/******************************************************************************
- *	Notes about dojo.io design:
- *	
- *	The dojo.io.* package has the unenviable task of making a lot of different
- *	types of I/O feel natural, despite a universal lack of good (or even
- *	reasonable!) I/O capability in the host environment. So lets pin this down
- *	a little bit further.
- *
- *	Rhino:
- *		perhaps the best situation anywhere. Access to Java classes allows you
- *		to do anything one might want in terms of I/O, both synchronously and
- *		async. Can open TCP sockets and perform low-latency client/server
- *		interactions. HTTP transport is available through Java HTTP client and
- *		server classes. Wish it were always this easy.
- *
- *	xpcshell:
- *		XPCOM for I/O. A cluster-fuck to be sure.
- *
- *	spidermonkey:
- *		S.O.L.
- *
- *	Browsers:
- *		Browsers generally do not provide any useable filesystem access. We are
- *		therefore limited to HTTP for moving information to and from Dojo
- *		instances living in a browser.
- *
- *		XMLHTTP:
- *			Sync or async, allows reading of arbitrary text files (including
- *			JS, which can then be eval()'d), writing requires server
- *			cooperation and is limited to HTTP mechanisms (POST and GET).
- *
- *		<iframe> hacks:
- *			iframe document hacks allow browsers to communicate asynchronously
- *			with a server via HTTP POST and GET operations. With significant
- *			effort and server cooperation, low-latency data transit between
- *			client and server can be acheived via iframe mechanisms (repubsub).
- *
- *		SVG:
- *			Adobe's SVG viewer implements helpful primitives for XML-based
- *			requests, but receipt of arbitrary text data seems unlikely w/o
- *			<![CDATA[]]> sections.
- *
- *
- *	A discussion between Dylan, Mark, Tom, and Alex helped to lay down a lot
- *	the IO API interface. A transcript of it can be found at:
- *		http://dojotoolkit.org/viewcvs/viewcvs.py/documents/irc/irc_io_api_log.txt?rev=307&view=auto
- *	
- *	Also referenced in the design of the API was the DOM 3 L&S spec:
- *		http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html
- ******************************************************************************/
-
-// a map of the available transport options. Transports should add themselves
-// by calling add(name)
-dojo.io.transports = [];
-dojo.io.hdlrFuncNames = [ "load", "error" ]; // we're omitting a progress() event for now
-
-dojo.io.Request = function(url, mimetype, transport, changeUrl){
-	if((arguments.length == 1)&&(arguments[0].constructor == Object)){
-		this.fromKwArgs(arguments[0]);
-	}else{
-		this.url = url;
-		if(mimetype){ this.mimetype = mimetype; }
-		if(transport){ this.transport = transport; }
-		if(arguments.length >= 4){ this.changeUrl = changeUrl; }
-	}
-}
-
-dojo.lang.extend(dojo.io.Request, {
-
-	/** The URL to hit */
-	url: "",
-	
-	/** The mime type used to interrpret the response body */
-	mimetype: "text/plain",
-	
-	/** The HTTP method to use */
-	method: "GET",
-	
-	/** An Object containing key-value pairs to be included with the request */
-	content: undefined, // Object
-	
-	/** The transport medium to use */
-	transport: undefined, // String
-	
-	/** If defined the URL of the page is physically changed */
-	changeUrl: undefined, // String
-	
-	/** A form node to use in the request */
-	formNode: undefined, // HTMLFormElement
-	
-	/** Whether the request should be made synchronously */
-	sync: false,
-	
-	bindSuccess: false,
-
-	/** Cache/look for the request in the cache before attempting to request?
-	 *  NOTE: this isn't a browser cache, this is internal and would only cache in-page
-	 */
-	useCache: false,
-
-	/** Prevent the browser from caching this by adding a query string argument to the URL */
-	preventCache: false,
-	
-	// events stuff
-	load: function(type, data, evt){ },
-	error: function(type, error){ },
-	handle: function(){ },
-
-	// the abort method needs to be filled in by the transport that accepts the
-	// bind() request
-	abort: function(){ },
-	
-	// backButton: function(){ },
-	// forwardButton: function(){ },
-
-	fromKwArgs: function(kwArgs){
-		// normalize args
-		if(kwArgs["url"]){ kwArgs.url = kwArgs.url.toString(); }
-		if(!kwArgs["method"] && kwArgs["formNode"] && kwArgs["formNode"].method) {
-			kwArgs.method = kwArgs["formNode"].method;
-		}
-		
-		// backwards compatibility
-		if(!kwArgs["handle"] && kwArgs["handler"]){ kwArgs.handle = kwArgs.handler; }
-		if(!kwArgs["load"] && kwArgs["loaded"]){ kwArgs.load = kwArgs.loaded; }
-		if(!kwArgs["changeUrl"] && kwArgs["changeURL"]) { kwArgs.changeUrl = kwArgs.changeURL; }
-
-		// encoding fun!
-		kwArgs.encoding = dojo.lang.firstValued(kwArgs["encoding"], djConfig["bindEncoding"], "");
-
-		kwArgs.sendTransport = dojo.lang.firstValued(kwArgs["sendTransport"], djConfig["ioSendTransport"], true);
-
-		var isFunction = dojo.lang.isFunction;
-		for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){
-			var fn = dojo.io.hdlrFuncNames[x];
-			if(isFunction(kwArgs[fn])){ continue; }
-			if(isFunction(kwArgs["handle"])){
-				kwArgs[fn] = kwArgs.handle;
-			}
-			// handler is aliased above, shouldn't need this check
-			/* else if(dojo.lang.isObject(kwArgs.handler)){
-				if(isFunction(kwArgs.handler[fn])){
-					kwArgs[fn] = kwArgs.handler[fn]||kwArgs.handler["handle"]||function(){};
-				}
-			}*/
-		}
-		dojo.lang.mixin(this, kwArgs);
-	}
-
-});
-
-dojo.io.Error = function(msg, type, num){
-	this.message = msg;
-	this.type =  type || "unknown"; // must be one of "io", "parse", "unknown"
-	this.number = num || 0; // per-substrate error number, not normalized
-}
-
-dojo.io.transports.addTransport = function(name){
-	this.push(name);
-	// FIXME: do we need to handle things that aren't direct children of the
-	// dojo.io namespace? (say, dojo.io.foo.fooTransport?)
-	this[name] = dojo.io[name];
-}
-
-// binding interface, the various implementations register their capabilities
-// and the bind() method dispatches
-dojo.io.bind = function(request){
-	// if the request asks for a particular implementation, use it
-	if(!(request instanceof dojo.io.Request)){
-		try{
-			request = new dojo.io.Request(request);
-		}catch(e){ dojo.debug(e); }
-	}
-	var tsName = "";
-	if(request["transport"]){
-		tsName = request["transport"];
-		// FIXME: it would be good to call the error handler, although we'd
-		// need to use setTimeout or similar to accomplish this and we can't
-		// garuntee that this facility is available.
-		if(!this[tsName]){ return request; }
-	}else{
-		// otherwise we do our best to auto-detect what available transports
-		// will handle 
-		for(var x=0; x<dojo.io.transports.length; x++){
-			var tmp = dojo.io.transports[x];
-			if((this[tmp])&&(this[tmp].canHandle(request))){
-				tsName = tmp;
-			}
-		}
-		if(tsName == ""){ return request; }
-	}
-	this[tsName].bind(request);
-	request.bindSuccess = true;
-	return request;
-}
-
-dojo.io.queueBind = function(request){
-	if(!(request instanceof dojo.io.Request)){
-		try{
-			request = new dojo.io.Request(request);
-		}catch(e){ dojo.debug(e); }
-	}
-
-	// make sure we get called if/when we get a response
-	var oldLoad = request.load;
-	request.load = function(){
-		dojo.io._queueBindInFlight = false;
-		var ret = oldLoad.apply(this, arguments);
-		dojo.io._dispatchNextQueueBind();
-		return ret;
-	}
-
-	var oldErr = request.error;
-	request.error = function(){
-		dojo.io._queueBindInFlight = false;
-		var ret = oldErr.apply(this, arguments);
-		dojo.io._dispatchNextQueueBind();
-		return ret;
-	}
-
-	dojo.io._bindQueue.push(request);
-	dojo.io._dispatchNextQueueBind();
-	return request;
-}
-
-dojo.io._dispatchNextQueueBind = function(){
-	if(!dojo.io._queueBindInFlight){
-		dojo.io._queueBindInFlight = true;
-		dojo.io.bind(dojo.io._bindQueue.shift());
-	}
-}
-dojo.io._bindQueue = [];
-dojo.io._queueBindInFlight = false;
-
-dojo.io.argsFromMap = function(map, encoding){
-	var control = new Object();
-	var mapStr = "";
-	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;
-	for(var x in map){
-		if(!control[x]){
-			mapStr+= enc(x)+"="+enc(map[x])+"&";
-		}
-	}
-
-	return mapStr;
-}
-
-/*
-dojo.io.sampleTranport = new function(){
-	this.canHandle = function(kwArgs){
-		// canHandle just tells dojo.io.bind() if this is a good transport to
-		// use for the particular type of request.
-		if(	
-			(
-				(kwArgs["mimetype"] == "text/plain") ||
-				(kwArgs["mimetype"] == "text/html") ||
-				(kwArgs["mimetype"] == "text/javascript")
-			)&&(
-				(kwArgs["method"] == "get") ||
-				( (kwArgs["method"] == "post") && (!kwArgs["formNode"]) )
-			)
-		){
-			return true;
-		}
-
-		return false;
-	}
-
-	this.bind = function(kwArgs){
-		var hdlrObj = {};
-
-		// set up a handler object
-		for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){
-			var fn = dojo.io.hdlrFuncNames[x];
-			if(typeof kwArgs.handler == "object"){
-				if(typeof kwArgs.handler[fn] == "function"){
-					hdlrObj[fn] = kwArgs.handler[fn]||kwArgs.handler["handle"];
-				}
-			}else if(typeof kwArgs[fn] == "function"){
-				hdlrObj[fn] = kwArgs[fn];
-			}else{
-				hdlrObj[fn] = kwArgs["handle"]||function(){};
-			}
-		}
-
-		// build a handler function that calls back to the handler obj
-		var hdlrFunc = function(evt){
-			if(evt.type == "onload"){
-				hdlrObj.load("load", evt.data, evt);
-			}else if(evt.type == "onerr"){
-				var errObj = new dojo.io.Error("sampleTransport Error: "+evt.msg);
-				hdlrObj.error("error", errObj);
-			}
-		}
-
-		// the sample transport would attach the hdlrFunc() when sending the
-		// request down the pipe at this point
-		var tgtURL = kwArgs.url+"?"+dojo.io.argsFromMap(kwArgs.content);
-		// sampleTransport.sendRequest(tgtURL, hdlrFunc);
-	}
-
-	dojo.io.transports.addTransport("sampleTranport");
-}
-*/
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/BrowserIO.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/BrowserIO.js
deleted file mode 100644
index 8cfd12f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/BrowserIO.js
+++ /dev/null
@@ -1,623 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.io.BrowserIO");
-
-dojo.require("dojo.io");
-dojo.require("dojo.lang");
-dojo.require("dojo.dom");
-
-try {
-	if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-		document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+'iframe_history.html')+"'></iframe>");
-	}
-}catch(e){/* squelch */}
-
-dojo.io.checkChildrenForFile = function(node){
-	var hasFile = false;
-	var inputs = node.getElementsByTagName("input");
-	dojo.lang.forEach(inputs, function(input){
-		if(hasFile){ return; }
-		if(input.getAttribute("type")=="file"){
-			hasFile = true;
-		}
-	});
-	return hasFile;
-}
-
-dojo.io.formHasFile = function(formNode){
-	return dojo.io.checkChildrenForFile(formNode);
-}
-
-// TODO: Move to htmlUtils
-dojo.io.encodeForm = function(formNode, encoding){
-	if((!formNode)||(!formNode.tagName)||(!formNode.tagName.toLowerCase() == "form")){
-		dojo.raise("Attempted to encode a non-form element.");
-	}
-	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;
-	var values = [];
-
-	for(var i = 0; i < formNode.elements.length; i++){
-		var elm = formNode.elements[i];
-		if(elm.disabled || elm.tagName.toLowerCase() == "fieldset" || !elm.name){
-			continue;
-		}
-		var name = enc(elm.name);
-		var type = elm.type.toLowerCase();
-
-		if(type == "select-multiple"){
-			for(var j = 0; j < elm.options.length; j++){
-				if(elm.options[j].selected) {
-					values.push(name + "=" + enc(elm.options[j].value));
-				}
-			}
-		}else if(dojo.lang.inArray(type, ["radio", "checkbox"])){
-			if(elm.checked){
-				values.push(name + "=" + enc(elm.value));
-			}
-		}else if(!dojo.lang.inArray(type, ["file", "submit", "reset", "button"])) {
-			values.push(name + "=" + enc(elm.value));
-		}
-	}
-
-	// now collect input type="image", which doesn't show up in the elements array
-	var inputs = formNode.getElementsByTagName("input");
-	for(var i = 0; i < inputs.length; i++) {
-		var input = inputs[i];
-		if(input.type.toLowerCase() == "image" && input.form == formNode) {
-			var name = enc(input.name);
-			values.push(name + "=" + enc(input.value));
-			values.push(name + ".x=0");
-			values.push(name + ".y=0");
-		}
-	}
-	return values.join("&") + "&";
-}
-
-dojo.io.setIFrameSrc = function(iframe, src, replace){
-	try{
-		var r = dojo.render.html;
-		// dojo.debug(iframe);
-		if(!replace){
-			if(r.safari){
-				iframe.location = src;
-			}else{
-				frames[iframe.name].location = src;
-			}
-		}else{
-			// Fun with DOM 0 incompatibilities!
-			var idoc;
-			if(r.ie){
-				idoc = iframe.contentWindow.document;
-			}else if(r.moz){
-				idoc = iframe.contentWindow;
-			}else if(r.safari){
-				idoc = iframe.document;
-			}
-			idoc.location.replace(src);
-		}
-	}catch(e){ 
-		dojo.debug(e); 
-		dojo.debug("setIFrameSrc: "+e); 
-	}
-}
-
-dojo.io.XMLHTTPTransport = new function(){
-	var _this = this;
-
-	this.initialHref = window.location.href;
-	this.initialHash = window.location.hash;
-
-	this.moveForward = false;
-
-	var _cache = {}; // FIXME: make this public? do we even need to?
-	this.useCache = false; // if this is true, we'll cache unless kwArgs.useCache = false
-	this.preventCache = false; // if this is true, we'll always force GET requests to cache
-	this.historyStack = [];
-	this.forwardStack = [];
-	this.historyIframe = null;
-	this.bookmarkAnchor = null;
-	this.locationTimer = null;
-
-	/* NOTES:
-	 *	Safari 1.2: 
-	 *		back button "works" fine, however it's not possible to actually
-	 *		DETECT that you've moved backwards by inspecting window.location.
-	 *		Unless there is some other means of locating.
-	 *		FIXME: perhaps we can poll on history.length?
-	 *	IE 5.5 SP2:
-	 *		back button behavior is macro. It does not move back to the
-	 *		previous hash value, but to the last full page load. This suggests
-	 *		that the iframe is the correct way to capture the back button in
-	 *		these cases.
-	 *	IE 6.0:
-	 *		same behavior as IE 5.5 SP2
-	 * Firefox 1.0:
-	 *		the back button will return us to the previous hash on the same
-	 *		page, thereby not requiring an iframe hack, although we do then
-	 *		need to run a timer to detect inter-page movement.
-	 */
-
-	// FIXME: Should this even be a function? or do we just hard code it in the next 2 functions?
-	function getCacheKey(url, query, method) {
-		return url + "|" + query + "|" + method.toLowerCase();
-	}
-
-	function addToCache(url, query, method, http) {
-		_cache[getCacheKey(url, query, method)] = http;
-	}
-
-	function getFromCache(url, query, method) {
-		return _cache[getCacheKey(url, query, method)];
-	}
-
-	this.clearCache = function() {
-		_cache = {};
-	}
-
-	// moved successful load stuff here
-	function doLoad(kwArgs, http, url, query, useCache) {
-		if((http.status==200)||(location.protocol=="file:" && http.status==0)) {
-			var ret;
-			if(kwArgs.method.toLowerCase() == "head"){
-				var headers = http.getAllResponseHeaders();
-				ret = {};
-				ret.toString = function(){ return headers; }
-				var values = headers.split(/[\r\n]+/g);
-				for(var i = 0; i < values.length; i++) {
-					var pair = values[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-					if(pair) {
-						ret[pair[1]] = pair[2];
-					}
-				}
-			}else if(kwArgs.mimetype == "text/javascript"){
-				try{
-					ret = dj_eval(http.responseText);
-				}catch(e){
-					dojo.debug(e);
-					dojo.debug(http.responseText);
-					ret = null;
-				}
-			}else if(kwArgs.mimetype == "text/json"){
-				try{
-					ret = dj_eval("("+http.responseText+")");
-				}catch(e){
-					dojo.debug(e);
-					dojo.debug(http.responseText);
-					ret = false;
-				}
-			}else if((kwArgs.mimetype == "application/xml")||
-						(kwArgs.mimetype == "text/xml")){
-				ret = http.responseXML;
-				if(!ret || typeof ret == "string") {
-					ret = dojo.dom.createDocumentFromText(http.responseText);
-				}
-			}else{
-				ret = http.responseText;
-			}
-
-			if(useCache){ // only cache successful responses
-				addToCache(url, query, kwArgs.method, http);
-			}
-			kwArgs[(typeof kwArgs.load == "function") ? "load" : "handle"]("load", ret, http);
-		}else{
-			var errObj = new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-			kwArgs[(typeof kwArgs.error == "function") ? "error" : "handle"]("error", errObj, http);
-		}
-	}
-
-	// set headers (note: Content-Type will get overriden if kwArgs.contentType is set)
-	function setHeaders(http, kwArgs){
-		if(kwArgs["headers"]) {
-			for(var header in kwArgs["headers"]) {
-				if(header.toLowerCase() == "content-type" && !kwArgs["contentType"]) {
-					kwArgs["contentType"] = kwArgs["headers"][header];
-				} else {
-					http.setRequestHeader(header, kwArgs["headers"][header]);
-				}
-			}
-		}
-	}
-
-	this.addToHistory = function(args){
-		var callback = args["back"]||args["backButton"]||args["handle"];
-		var hash = null;
-		if(!this.historyIframe){
-			this.historyIframe = window.frames["djhistory"];
-		}
-		if(!this.bookmarkAnchor){
-			this.bookmarkAnchor = document.createElement("a");
-			(document.body||document.getElementsByTagName("body")[0]).appendChild(this.bookmarkAnchor);
-			this.bookmarkAnchor.style.display = "none";
-		}
-		if((!args["changeUrl"])||(dojo.render.html.ie)){
-			var url = dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
-			this.moveForward = true;
-			dojo.io.setIFrameSrc(this.historyIframe, url, false);
-		}
-		if(args["changeUrl"]){
-			hash = "#"+ ((args["changeUrl"]!==true) ? args["changeUrl"] : (new Date()).getTime());
-			setTimeout("window.location.href = '"+hash+"';", 1);
-			this.bookmarkAnchor.href = hash;
-			if(dojo.render.html.ie){
-				// IE requires manual setting of the hash since we are catching
-				// events from the iframe
-				var oldCB = callback;
-				var lh = null;
-				var hsl = this.historyStack.length-1;
-				if(hsl>=0){
-					while(!this.historyStack[hsl]["urlHash"]){
-						hsl--;
-					}
-					lh = this.historyStack[hsl]["urlHash"];
-				}
-				if(lh){
-					callback = function(){
-						if(window.location.hash != ""){
-							setTimeout("window.location.href = '"+lh+"';", 1);
-						}
-						oldCB();
-					}
-				}
-				// when we issue a new bind(), we clobber the forward 
-				// FIXME: is this always a good idea?
-				this.forwardStack = []; 
-				var oldFW = args["forward"]||args["forwardButton"];;
-				var tfw = function(){
-					if(window.location.hash != ""){
-						window.location.href = hash;
-					}
-					if(oldFW){ // we might not actually have one
-						oldFW();
-					}
-				}
-				if(args["forward"]){
-					args.forward = tfw;
-				}else if(args["forwardButton"]){
-					args.forwardButton = tfw;
-				}
-			}else if(dojo.render.html.moz){
-				// start the timer
-				if(!this.locationTimer){
-					this.locationTimer = setInterval("dojo.io.XMLHTTPTransport.checkLocation();", 200);
-				}
-			}
-		}
-
-		this.historyStack.push({"url": url, "callback": callback, "kwArgs": args, "urlHash": hash});
-	}
-
-	this.checkLocation = function(){
-		var hsl = this.historyStack.length;
-
-		if((window.location.hash == this.initialHash)||(window.location.href == this.initialHref)&&(hsl == 1)){
-			// FIXME: could this ever be a forward button?
-			// we can't clear it because we still need to check for forwards. Ugg.
-			// clearInterval(this.locationTimer);
-			this.handleBackButton();
-			return;
-		}
-		// first check to see if we could have gone forward. We always halt on
-		// a no-hash item.
-		if(this.forwardStack.length > 0){
-			if(this.forwardStack[this.forwardStack.length-1].urlHash == window.location.hash){
-				this.handleForwardButton();
-				return;
-			}
-		}
-		// ok, that didn't work, try someplace back in the history stack
-		if((hsl >= 2)&&(this.historyStack[hsl-2])){
-			if(this.historyStack[hsl-2].urlHash==window.location.hash){
-				this.handleBackButton();
-				return;
-			}
-		}
-	}
-
-	this.iframeLoaded = function(evt, ifrLoc){
-		var isp = ifrLoc.href.split("?");
-		if(isp.length < 2){ 
-			// alert("iframeLoaded");
-			// we hit the end of the history, so we should go back
-			if(this.historyStack.length == 1){
-				this.handleBackButton();
-			}
-			return;
-		}
-		var query = isp[1];
-		if(this.moveForward){
-			// we were expecting it, so it's not either a forward or backward
-			// movement
-			this.moveForward = false;
-			return;
-		}
-
-		var last = this.historyStack.pop();
-		// we don't have anything in history, so it could be a forward button
-		if(!last){ 
-			if(this.forwardStack.length > 0){
-				var next = this.forwardStack[this.forwardStack.length-1];
-				if(query == next.url.split("?")[1]){
-					this.handleForwardButton();
-				}
-			}
-			// regardless, we didnt' have any history, so it can't be a back button
-			return;
-		}
-		// put it back on the stack so we can do something useful with it when
-		// we call handleBackButton()
-		this.historyStack.push(last);
-		if(this.historyStack.length >= 2){
-			if(isp[1] == this.historyStack[this.historyStack.length-2].url.split("?")[1]){
-				// looks like it IS a back button press, so handle it
-				this.handleBackButton();
-			}
-		}else{
-			this.handleBackButton();
-		}
-	}
-
-	this.handleBackButton = function(){
-		var last = this.historyStack.pop();
-		if(!last){ return; }
-		if(last["callback"]){
-			last.callback();
-		}else if(last.kwArgs["backButton"]){
-			last.kwArgs["backButton"]();
-		}else if(last.kwArgs["back"]){
-			last.kwArgs["back"]();
-		}else if(last.kwArgs["handle"]){
-			last.kwArgs.handle("back");
-		}
-		this.forwardStack.push(last);
-	}
-
-	this.handleForwardButton = function(){
-		// FIXME: should we build in support for re-issuing the bind() call here?
-		// alert("alert we found a forward button call");
-		var last = this.forwardStack.pop();
-		if(!last){ return; }
-		if(last.kwArgs["forward"]){
-			last.kwArgs.forward();
-		}else if(last.kwArgs["forwardButton"]){
-			last.kwArgs.forwardButton();
-		}else if(last.kwArgs["handle"]){
-			last.kwArgs.handle("forward");
-		}
-		this.historyStack.push(last);
-	}
-
-	this.inFlight = [];
-	this.inFlightTimer = null;
-
-	this.startWatchingInFlight = function(){
-		if(!this.inFlightTimer){
-			this.inFlightTimer = setInterval("dojo.io.XMLHTTPTransport.watchInFlight();", 10);
-		}
-	}
-
-	this.watchInFlight = function(){
-		for(var x=this.inFlight.length-1; x>=0; x--){
-			var tif = this.inFlight[x];
-			if(!tif){ this.inFlight.splice(x, 1); continue; }
-			if(4==tif.http.readyState){
-				// remove it so we can clean refs
-				this.inFlight.splice(x, 1);
-				doLoad(tif.req, tif.http, tif.url, tif.query, tif.useCache);
-				if(this.inFlight.length == 0){
-					clearInterval(this.inFlightTimer);
-					this.inFlightTimer = null;
-				}
-			} // FIXME: need to implement a timeout param here!
-		}
-	}
-
-	var hasXmlHttp = dojo.hostenv.getXmlhttpObject() ? true : false;
-	this.canHandle = function(kwArgs){
-		// canHandle just tells dojo.io.bind() if this is a good transport to
-		// use for the particular type of request.
-
-		// FIXME: we need to determine when form values need to be
-		// multi-part mime encoded and avoid using this transport for those
-		// requests.
-		return hasXmlHttp
-			&& dojo.lang.inArray((kwArgs["mimetype"]||"".toLowerCase()), ["text/plain", "text/html", "application/xml", "text/xml", "text/javascript", "text/json"])
-			&& dojo.lang.inArray(kwArgs["method"].toLowerCase(), ["post", "get", "head"])
-			&& !( kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"]) );
-	}
-
-	this.multipartBoundary = "45309FFF-BD65-4d50-99C9-36986896A96F";	// unique guid as a boundary value for multipart posts
-
-	this.bind = function(kwArgs){
-		if(!kwArgs["url"]){
-			// are we performing a history action?
-			if( !kwArgs["formNode"]
-				&& (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"] || kwArgs["watchForURL"])
-				&& (!djConfig.preventBackButtonFix)) {
-				this.addToHistory(kwArgs);
-				return true;
-			}
-		}
-
-		// build this first for cache purposes
-		var url = kwArgs.url;
-		var query = "";
-		if(kwArgs["formNode"]){
-			var ta = kwArgs.formNode.getAttribute("action");
-			if((ta)&&(!kwArgs["url"])){ url = ta; }
-			var tp = kwArgs.formNode.getAttribute("method");
-			if((tp)&&(!kwArgs["method"])){ kwArgs.method = tp; }
-			query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding);
-		}
-
-		if(url.indexOf("#") > -1) {
-			dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url);
-			url = url.split("#")[0];
-		}
-
-		if(kwArgs["file"]){
-			// force post for file transfer
-			kwArgs.method = "post";
-		}
-
-		if(!kwArgs["method"]){
-			kwArgs.method = "get";
-		}
-
-		// guess the multipart value		
-		if(kwArgs.method.toLowerCase() == "get"){
-			// GET cannot use multipart
-			kwArgs.multipart = false;
-		}else{
-			if(kwArgs["file"]){
-				// enforce multipart when sending files
-				kwArgs.multipart = true;
-			}else if(!kwArgs["multipart"]){
-				// default 
-				kwArgs.multipart = false;
-			}
-		}
-
-		if(kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]){
-			this.addToHistory(kwArgs);
-		}
-
-		var content = kwArgs["content"] || {};
-
-		if(kwArgs.sendTransport) {
-			content["dojo.transport"] = "xmlhttp";
-		}
-
-		do { // break-block
-			if(kwArgs.postContent){
-				query = kwArgs.postContent;
-				break;
-			}
-
-			if(content) {
-				query += dojo.io.argsFromMap(content, kwArgs.encoding);
-			}
-			
-			if(kwArgs.method.toLowerCase() == "get" || !kwArgs.multipart){
-				break;
-			}
-
-			var	t = [];
-			if(query.length){
-				var q = query.split("&");
-				for(var i = 0; i < q.length; ++i){
-					if(q[i].length){
-						var p = q[i].split("=");
-						t.push(	"--" + this.multipartBoundary,
-								"Content-Disposition: form-data; name=\"" + p[0] + "\"", 
-								"",
-								p[1]);
-					}
-				}
-			}
-
-			if(kwArgs.file){
-				if(dojo.lang.isArray(kwArgs.file)){
-					for(var i = 0; i < kwArgs.file.length; ++i){
-						var o = kwArgs.file[i];
-						t.push(	"--" + this.multipartBoundary,
-								"Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"",
-								"Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"),
-								"",
-								o.content);
-					}
-				}else{
-					var o = kwArgs.file;
-					t.push(	"--" + this.multipartBoundary,
-							"Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"",
-							"Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"),
-							"",
-							o.content);
-				}
-			}
-
-			if(t.length){
-				t.push("--"+this.multipartBoundary+"--", "");
-				query = t.join("\r\n");
-			}
-		}while(false);
-
-		// kwArgs.Connection = "close";
-
-		var async = kwArgs["sync"] ? false : true;
-
-		var preventCache = kwArgs["preventCache"] ||
-			(this.preventCache == true && kwArgs["preventCache"] != false);
-		var useCache = kwArgs["useCache"] == true ||
-			(this.useCache == true && kwArgs["useCache"] != false );
-
-		// preventCache is browser-level (add query string junk), useCache
-		// is for the local cache. If we say preventCache, then don't attempt
-		// to look in the cache, but if useCache is true, we still want to cache
-		// the response
-		if(!preventCache && useCache){
-			var cachedHttp = getFromCache(url, query, kwArgs.method);
-			if(cachedHttp){
-				doLoad(kwArgs, cachedHttp, url, query, false);
-				return;
-			}
-		}
-
-		// much of this is from getText, but reproduced here because we need
-		// more flexibility
-		var http = dojo.hostenv.getXmlhttpObject();
-		var received = false;
-
-		// build a handler function that calls back to the handler obj
-		if(async){
-			// FIXME: setting up this callback handler leaks on IE!!!
-			this.inFlight.push({
-				"req":		kwArgs,
-				"http":		http,
-				"url":		url,
-				"query":	query,
-				"useCache":	useCache
-			});
-			this.startWatchingInFlight();
-		}
-
-		if(kwArgs.method.toLowerCase() == "post"){
-			// FIXME: need to hack in more flexible Content-Type setting here!
-			http.open("POST", url, async);
-			setHeaders(http, kwArgs);
-			http.setRequestHeader("Content-Type", kwArgs.multipart ? ("multipart/form-data; boundary=" + this.multipartBoundary) : 
-				(kwArgs.contentType || "application/x-www-form-urlencoded"));
-			http.send(query);
-		}else{
-			var tmpUrl = url;
-			if(query != "") {
-				tmpUrl += (tmpUrl.indexOf("?") > -1 ? "&" : "?") + query;
-			}
-			if(preventCache) {
-				tmpUrl += (dojo.string.endsWithAny(tmpUrl, "?", "&")
-					? "" : (tmpUrl.indexOf("?") > -1 ? "&" : "?")) + "dojo.preventCache=" + new Date().valueOf();
-			}
-			http.open(kwArgs.method.toUpperCase(), tmpUrl, async);
-			setHeaders(http, kwArgs);
-			http.send(null);
-		}
-
-		if( !async ) {
-			doLoad(kwArgs, http, url, query, useCache);
-		}
-
-		kwArgs.abort = function(){
-			return http.abort();
-		}
-
-		return;
-	}
-	dojo.io.transports.addTransport("XMLHTTPTransport");
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/IframeIO.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/IframeIO.js
deleted file mode 100644
index 098b3cc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/IframeIO.js
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.io.IframeIO");
-dojo.require("dojo.io.BrowserIO");
-dojo.require("dojo.uri.*");
-
-dojo.io.createIFrame = function(fname, onloadstr){
-	if(window[fname]){ return window[fname]; }
-	if(window.frames[fname]){ return window.frames[fname]; }
-	var r = dojo.render.html;
-	var cframe = null;
-	var turi = dojo.uri.dojoUri("iframe_history.html?noInit=true");
-	var ifrstr = ((r.ie)&&(dojo.render.os.win)) ? "<iframe name='"+fname+"' src='"+turi+"' onload='"+onloadstr+"'>" : "iframe";
-	cframe = document.createElement(ifrstr);
-	with(cframe){
-		name = fname;
-		setAttribute("name", fname);
-		id = fname;
-	}
-	(document.body||document.getElementsByTagName("body")[0]).appendChild(cframe);
-	window[fname] = cframe;
-	with(cframe.style){
-		position = "absolute";
-		left = top = "0px";
-		height = width = "1px";
-		visibility = "hidden";
-		/*
-		if(djConfig.isDebug){
-			position = "relative";
-			height = "300px";
-			width = "600px";
-			visibility = "visible";
-		}
-		*/
-	}
-
-	if(!r.ie){
-		dojo.io.setIFrameSrc(cframe, turi, true);
-		cframe.onload = new Function(onloadstr);
-	}
-	return cframe;
-}
-
-// thanks burstlib!
-dojo.io.iframeContentWindow = function(iframe_el) {
-	var win = iframe_el.contentWindow || // IE
-		dojo.io.iframeContentDocument(iframe_el).defaultView || // Moz, opera
-		// Moz. TODO: is this available when defaultView isn't?
-		dojo.io.iframeContentDocument(iframe_el).__parent__ || 
-		(iframe_el.name && document.frames[iframe_el.name]) || null;
-	return win;
-}
-
-dojo.io.iframeContentDocument = function(iframe_el){
-	var doc = iframe_el.contentDocument || // W3
-		(
-			(iframe_el.contentWindow)&&(iframe_el.contentWindow.document)
-		) ||  // IE
-		(
-			(iframe_el.name)&&(document.frames[iframe_el.name])&&
-			(document.frames[iframe_el.name].document)
-		) || null;
-	return doc;
-}
-
-dojo.io.IframeTransport = new function(){
-	var _this = this;
-	this.currentRequest = null;
-	this.requestQueue = [];
-	this.iframeName = "dojoIoIframe";
-
-	this.fireNextRequest = function(){
-		if((this.currentRequest)||(this.requestQueue.length == 0)){ return; }
-		// dojo.debug("fireNextRequest");
-		var cr = this.currentRequest = this.requestQueue.shift();
-		var fn = cr["formNode"];
-		var content = cr["content"] || {};
-		if(cr.sendTransport) {
-			content["dojo.transport"] = "iframe";
-		}
-		if(fn){
-			if(content){
-				// if we have things in content, we need to add them to the form
-				// before submission
-				for(var x in content){
-					if(!fn[x]){
-						var tn;
-						if(dojo.render.html.ie){
-							tn = document.createElement("<input type='hidden' name='"+x+"' value='"+content[x]+"'>");
-							fn.appendChild(tn);
-						}else{
-							tn = document.createElement("input");
-							fn.appendChild(tn);
-							tn.type = "hidden";
-							tn.name = x;
-							tn.value = content[x];
-						}
-					}else{
-						fn[x].value = content[x];
-					}
-				}
-			}
-			if(cr["url"]){
-				fn.setAttribute("action", cr.url);
-			}
-			if(!fn.getAttribute("method")){
-				fn.setAttribute("method", (cr["method"]) ? cr["method"] : "post");
-			}
-			fn.setAttribute("target", this.iframeName);
-			fn.target = this.iframeName;
-			fn.submit();
-		}else{
-			// otherwise we post a GET string by changing URL location for the
-			// iframe
-			var query = dojo.io.argsFromMap(this.currentRequest.content);
-			var tmpUrl = (cr.url.indexOf("?") > -1 ? "&" : "?") + query;
-			dojo.io.setIFrameSrc(this.iframe, tmpUrl, true);
-		}
-	}
-
-	this.canHandle = function(kwArgs){
-		return (
-			(
-				// FIXME: can we really handle text/plain and
-				// text/javascript requests?
-				dojo.lang.inArray(kwArgs["mimetype"], 
-				[	"text/plain", "text/html", 
-					"application/xml", "text/xml", 
-					"text/javascript", "text/json"])
-			)&&(
-				// make sur we really only get used in file upload cases	
-				(kwArgs["formNode"])&&(dojo.io.checkChildrenForFile(kwArgs["formNode"]))
-			)&&(
-				dojo.lang.inArray(kwArgs["method"].toLowerCase(), ["post", "get"])
-			)&&(
-				// never handle a sync request
-				!  ((kwArgs["sync"])&&(kwArgs["sync"] == true))
-			)
-		);
-	}
-
-	this.bind = function(kwArgs){
-		this.requestQueue.push(kwArgs);
-		this.fireNextRequest();
-		return;
-	}
-
-	this.setUpIframe = function(){
-
-		// NOTE: IE 5.0 and earlier Mozilla's don't support an onload event for
-		//       iframes. OTOH, we don't care.
-		this.iframe = dojo.io.createIFrame(this.iframeName, "dojo.io.IframeTransport.iframeOnload();");
-	}
-
-	this.iframeOnload = function(){
-		if(!_this.currentRequest){
-			_this.fireNextRequest();
-			return;
-		}
-		var ifr = _this.iframe;
-		var ifw = dojo.io.iframeContentWindow(ifr);
-		// handle successful returns
-		// FIXME: how do we determine success for iframes? Is there an equiv of
-		// the "status" property?
-		var value;
-		var success = false;
-
-		try{
-			var cmt = _this.currentRequest.mimetype;
-			if((cmt == "text/javascript")||(cmt == "text/json")){
-				// FIXME: not sure what to do here? try to pull some evalulable
-				// text from a textarea or cdata section? 
-				// how should we set up the contract for that?
-				var cd = dojo.io.iframeContentDocument(_this.iframe);
-				var js = cd.getElementsByTagName("textarea")[0].value;
-				if(cmt == "text/json") { js = "(" + js + ")"; }
-				value = dj_eval(js);
-			}else if((cmt == "application/xml")||(cmt == "text/xml")){
-				value = dojo.io.iframeContentDocument(_this.iframe);
-			}else{ // text/plain
-				value = ifw.innerHTML;
-			}
-			success = true;
-		}catch(e){ 
-			// looks like we didn't get what we wanted!
-			var errObj = new dojo.io.Error("IframeTransport Error");
-			if(dojo.lang.isFunction(_this.currentRequest["error"])){
-				_this.currentRequest.error("error", errObj, _this.currentRequest);
-			}
-		}
-
-		// don't want to mix load function errors with processing errors, thus
-		// a separate try..catch
-		try {
-			if(success && dojo.lang.isFunction(_this.currentRequest["load"])){
-				_this.currentRequest.load("load", value, _this.currentRequest);
-			}
-		} catch(e) {
-			throw e;
-		} finally {
-			_this.currentRequest = null;
-			_this.fireNextRequest();
-		}
-	}
-
-	dojo.io.transports.addTransport("IframeTransport");
-}
-
-dojo.addOnLoad(function(){
-	dojo.io.IframeTransport.setUpIframe();
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/RepubsubIO.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/RepubsubIO.js
deleted file mode 100644
index 8b9bc6a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/RepubsubIO.js
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.event.Event");
-dojo.require("dojo.event.BrowserEvent");
-dojo.require("dojo.io.BrowserIO");
-
-dojo.provide("dojo.io.RepubsubIO");
-dojo.provide("dojo.io.repubsub");
-dojo.provide("dojo.io.repubsubTransport");
-
-dojo.io.repubsubTranport = new function(){
-	var rps = dojo.io.repubsub;
-	this.canHandle = function(kwArgs){
-		if((kwArgs["mimetype"] == "text/javascript")&&(kwArgs["method"] == "repubsub")){
-			return true;
-		}
-		return false;
-	}
-
-	this.bind = function(kwArgs){
-		if(!rps.isInitialized){
-			// open up our tunnel, queue up requests anyway
-			rps.init();
-		}
-		// FIXME: we need to turn this into a topic subscription
-		// var tgtURL = kwArgs.url+"?"+dojo.io.argsFromMap(kwArgs.content);
-		// sampleTransport.sendRequest(tgtURL, hdlrFunc);
-
-		// a normal "bind()" call in a request-response transport layer is
-		// something that (usually) encodes most of it's payload with the
-		// request. Multi-event systems like repubsub are a bit more complex,
-		// and repubsub in particular distinguishes the publish and subscribe
-		// portions of thep rocess with different method calls to handle each.
-		// Therefore, a "bind" in the sense of repubsub must first determine if
-		// we have an open subscription to a channel provided by the server,
-		// and then "publish" the request payload if there is any. We therefore
-		// must take care not to incorrectly or too agressively register or
-		// file event handlers which are provided with the kwArgs method.
-
-		// NOTE: we ONLY pay attention to those event handlers that are
-		// registered with the bind request that subscribes to the channel. If
-		// event handlers are provided with subsequent requests, we might in
-		// the future support some additive or replacement syntax, but for now
-		// they get dropped on the floor.
-
-		// NOTE: in this case, url MUST be the "topic" to which we
-		// subscribe/publish for this channel
-		if(!rps.topics[kwArgs.url]){
-			kwArgs.rpsLoad = function(evt){
-				kwArgs.load("load", evt);
-			}
-			rps.subscribe = function(kwArgs.url, kwArgs, "rpsLoad");
-		}
-
-		if(kwArgs["content"]){
-			// what we wanted to send
-			var cEvt = dojo.io.repubsubEvent.initFromProperties(kwArgs.content);
-			rps.publish(kwArgs.url, cEvt);
-		}
-	}
-
-	dojo.io.transports.addTransport("repubsubTranport");
-}
-
-dojo.io.repubsub = new function(){
-	this.initDoc = "init.html";
-	this.isInitialized = false;
-	this.subscriptionBacklog = [];
-	this.debug = true;
-	this.rcvNodeName = null;
-	this.sndNodeName = null;
-	this.rcvNode = null;
-	this.sndNode = null;
-	this.canRcv = false;
-	this.canSnd = false;
-	this.canLog = false;
-	this.sndTimer = null;
-	this.windowRef = window;
-	this.backlog = [];
-	this.tunnelInitCount = 0;
-	this.tunnelFrameKey = "tunnel_frame";
-	this.serverBaseURL = location.protocol+"//"+location.host+location.pathname;
-	this.logBacklog = [];
-	this.getRandStr = function(){
-		return Math.random().toString().substring(2, 10);
-	}
-	this.userid = "guest";
-	this.tunnelID = this.getRandStr();
-	this.attachPathList = [];
-	this.topics = []; // list of topics we have listeners to
-
-	// actually, now that I think about it a little bit more, it would sure be
-	// useful to parse out the <script> src attributes. We're looking for
-	// something with a "do_method=lib", since that's what would have included
-	// us in the first place (in the common case).
-	this.parseGetStr = function(){
-		var baseUrl = document.location.toString();
-		var params = baseUrl.split("?", 2);
-		if(params.length > 1){
-			var paramStr = params[1];
-			var pairs = paramStr.split("&");
-			var opts = [];
-			for(var x in pairs){
-				var sp = pairs[x].split("=");
-				// FIXME: is this eval dangerous?
-				try{
-					opts[sp[0]]=eval(sp[1]);
-				}catch(e){
-					opts[sp[0]]=sp[1];
-				}
-			}
-			return opts;
-		}else{
-			return [];
-		}
-	}
-
-	// parse URL params and use them as default vals
-	var getOpts = this.parseGetStr();
-	for(var x in getOpts){
-		// FIXME: should I be checking for undefined here before setting? Does
-		//        that buy me anything?
-		this[x] = getOpts[x];
-	}
-
-	if(!this["tunnelURI"]){
-		this.tunnelURI = [	"/who/", escape(this.userid), "/s/", 
-							this.getRandStr(), "/kn_journal"].join("");
-		// this.tunnelURI = this.absoluteTopicURI(this.tunnelURI);
-	}
-
-	/*
-	if (self.kn_tunnelID) kn.tunnelID = self.kn_tunnelID; // the server says
-	if (kn._argv.kn_tunnelID) kn.tunnelID = kn._argv.kn_tunnelID; // the url says
-	*/
-
-	// check the options object if it exists and use its properties as an
-	// over-ride
-	if(window["repubsubOpts"]||window["rpsOpts"]){
-		var optObj = window["repubsubOpts"]||window["rpsOpts"];
-		for(var x in optObj){
-			this[x] = optObj[x]; // copy the option object properties
-		}
-	}
-
-	// things that get called directly from our iframe to inform us of events
-	this.tunnelCloseCallback = function(){
-		// when we get this callback, we should immediately attempt to re-start
-		// our tunnel connection
-		dojo.io.setIFrameSrc(this.rcvNode, this.initDoc+"?callback=repubsub.rcvNodeReady&domain="+document.domain);
-	}
-
-	this.receiveEventFromTunnel = function(evt, srcWindow){
-		// we should never be getting events from windows we didn't create
-		// NOTE: events sourced from the local window are also supported for
-		// 		 debugging purposes
-
-		// any event object MUST have a an "elements" property
-		if(!evt["elements"]){
-			this.log("bailing! event received without elements!", "error");
-			return;
-		}
-
-		// if the event passes some minimal sanity tests, we need to attempt to
-		// dispatch it!
-
-		// first, it seems we have to munge the event object a bit
-		var e = {};
-		for(var i=0; i<evt.elements.length; i++){
-			var ee = evt.elements[i];
-			e[ee.name||ee.nameU] = (ee.value||ee.valueU);
-			// FIXME: need to enable this only in some extreme debugging mode!
-			this.log("[event]: "+(ee.name||ee.nameU)+": "+e[ee.name||ee.nameU]);
-		}
-
-		// NOTE: the previous version of this library put a bunch of code here
-		// to manage state that tried to make sure that we never, ever, lost
-		// any info about an event. If we unload RIGHT HERE, I don't think it's
-		// going to make a huge difference one way or another. Time will tell.
-
-		// and with THAT out of the way, dispatch it!
-		this.dispatch(e);
-
-		// TODO: remove the script block that created the event obj to save
-		// memory, etc.
-	}
-
-	this.widenDomain = function(domainStr){
-		// the purpose of this is to set the most liberal domain policy
-		// available
-		var cd = domainStr||document.domain;
-		if(cd.indexOf(".")==-1){ return; } // probably file:/// or localhost
-		var dps = cd.split(".");
-		if(dps.length<=2){ return; } // probably file:/// or an RFC 1918 address
-		dps = dps.slice(dps.length-2);
-		document.domain = dps.join(".");
-	}
-
-	// FIXME: parseCookie and setCookie should be methods that are more broadly
-	// available. Perhaps in htmlUtils?
-
-	this.parseCookie = function(){
-		var cs = document.cookie;
-		var keypairs = cs.split(";");
-		for(var x=0; x<keypairs.length; x++){
-			keypairs[x] = keypairs[x].split("=");
-			if(x!=keypairs.length-1){ cs+=";"; }
-		}
-		return keypairs;
-	}
-
-	this.setCookie = function(keypairs, clobber){
-		// NOTE: we want to only ever set session cookies, so never provide an
-		// 		 expires date
-		if((clobber)&&(clobber==true)){ document.cookie = ""; }
-		var cs = "";
-		for(var x=0; x<keypairs.length; x++){
-			cs += keypairs[x][0]+"="+keypairs[x][1];
-			if(x!=keypairs.length-1){ cs+=";"; }
-		}
-		document.cookie = cs;
-	}
-
-	// FIXME: need to replace w/ dojo.log.*
-	this.log = function(str, lvl){
-		if(!this.debug){ return; } // we of course only care if we're in debug mode
-		while(this.logBacklog.length>0){
-			if(!this.canLog){ break; }
-			var blo = this.logBacklog.shift();
-			this.writeLog("["+blo[0]+"]: "+blo[1], blo[2]);
-		}
-		this.writeLog(str, lvl);
-	}
-
-	this.writeLog = function(str, lvl){
-		dojo.debug(((new Date()).toLocaleTimeString())+": "+str);
-	}
-
-	this.init = function(){
-		this.widenDomain();
-		// this.findPeers();
-		this.openTunnel();
-		this.isInitialized = true;
-		// FIXME: this seems like entirely the wrong place to replay the backlog
-		while(this.subscriptionBacklog.length){
-			this.subscribe.apply(this, this.subscriptionBacklog.shift());
-		}
-	}
-
-	this.clobber = function(){
-		if(this.rcvNode){
-			this.setCookie( [
-					[this.tunnelFrameKey,"closed"],
-					["path","/"]
-				], false 
-			);
-		}
-	}
-
-	this.openTunnel = function(){
-		// We create two iframes here:
-
-		// one for getting data
-		this.rcvNodeName = "rcvIFrame_"+this.getRandStr();
-		// set cookie that can be used to find the receiving iframe
-		this.setCookie( [
-				[this.tunnelFrameKey,this.rcvNodeName],
-				["path","/"]
-			], false
-		);
-
-		this.rcvNode = dojo.io.createIFrame(this.rcvNodeName);
-		// FIXME: set the src attribute here to the initialization URL
-		dojo.io.setIFrameSrc(this.rcvNode, this.initDoc+"?callback=repubsub.rcvNodeReady&domain="+document.domain);
-
-		// the other for posting data in reply
-
-		this.sndNodeName = "sndIFrame_"+this.getRandStr();
-		this.sndNode = dojo.io.createIFrame(this.sndNodeName);
-		// FIXME: set the src attribute here to the initialization URL
-		dojo.io.setIFrameSrc(this.sndNode, this.initDoc+"?callback=repubsub.sndNodeReady&domain="+document.domain);
-
-	}
-
-	this.rcvNodeReady = function(){
-		// FIXME: why is this sequence number needed? Why isn't the UID gen
-		// 		  function enough?
-        var statusURI = [this.tunnelURI, '/kn_status/', this.getRandStr(), '_', 
-						 String(this.tunnelInitCount++)].join(""); 
-            // (kn._seqNum++); // FIXME: !!!!
-		// this.canRcv = true;
-		this.log("rcvNodeReady");
-		// FIXME: initialize receiver and request the base topic
-		// dojo.io.setIFrameSrc(this.rcvNode, this.serverBaseURL+"/kn?do_method=blank");
-		var initURIArr = [	this.serverBaseURL, "/kn?kn_from=", escape(this.tunnelURI),
-							"&kn_id=", escape(this.tunnelID), "&kn_status_from=", 
-							escape(statusURI)];
-		// FIXME: does the above really need a kn_response_flush? won't the
-		// 		  server already know? If not, what good is it anyway?
-		dojo.io.setIFrameSrc(this.rcvNode, initURIArr.join(""));
-
-		// setup a status path listener, but don't tell the server about it,
-		// since it already knows we're itnerested in our own tunnel status
-		this.subscribe(statusURI, this, "statusListener", true);
-
-		this.log(initURIArr.join(""));
-	}
-
-	this.sndNodeReady = function(){
-		this.canSnd = true;
-		this.log("sndNodeReady");
-		this.log(this.backlog.length);
-		// FIXME: handle any pent-up send commands
-		if(this.backlog.length > 0){
-			this.dequeueEvent();
-		}
-	}
-
-	this.statusListener = function(evt){
-		this.log("status listener called");
-		this.log(evt.status, "info");
-	}
-
-	// this handles local event propigation
-	this.dispatch = function(evt){
-		// figure out what topic it came from
-		if(evt["to"]||evt["kn_routed_from"]){
-			var rf = evt["to"]||evt["kn_routed_from"];
-			// split off the base server URL
-			var topic = rf.split(this.serverBaseURL, 2)[1];
-			if(!topic){
-				// FIXME: how do we recover when we don't get a sane "from"? Do
-				// we try to route to it anyway?
-				topic = rf;
-			}
-			this.log("[topic] "+topic);
-			if(topic.length>3){
-				if(topic.slice(0, 3)=="/kn"){
-					topic = topic.slice(3);
-				}
-			}
-			if(this.attachPathList[topic]){
-				this.attachPathList[topic](evt);
-			}
-		}
-	}
-
-	this.subscribe = function(	topic /* kn_from in the old terminilogy */, 
-								toObj, toFunc, dontTellServer){
-		if(!this.isInitialized){
-			this.subscriptionBacklog.push([topic, toObj, toFunc, dontTellServer]);
-			return;
-		}
-		if(!this.attachPathList[topic]){
-			this.attachPathList[topic] = function(){ return true; }
-			this.log("subscribing to: "+topic);
-			this.topics.push(topic);
-		}
-		var revt = new dojo.io.repubsubEvent(this.tunnelURI, topic, "route");
-		var rstr = [this.serverBaseURL+"/kn", revt.toGetString()].join("");
-		dojo.event.kwConnect({
-			once: true,
-			srcObj: this.attachPathList, 
-			srcFunc: topic, 
-			adviceObj: toObj, 
-			adviceFunc: toFunc
-		});
-		// NOTE: the above is a local mapping, if we're not the leader, we
-		// 		 should connect our mapping to the topic handler of the peer
-		// 		 leader, this ensures that not matter what happens to the
-		// 		 leader, we don't really loose our heads if/when the leader
-		// 		 goes away.
-		if(!this.rcvNode){ /* this should be an error! */ }
-		if(dontTellServer){
-			return;
-		}
-		this.log("sending subscription to: "+topic);
-		// create a subscription event object and give it all the props we need
-		// to updates on the specified topic
-
-		// FIXME: we should only enqueue if this is our first subscription!
-		this.sendTopicSubToServer(topic, rstr);
-	}
-
-	this.sendTopicSubToServer = function(topic, str){
-		if(!this.attachPathList[topic]["subscriptions"]){
-			this.enqueueEventStr(str);
-			this.attachPathList[topic].subscriptions = 0;
-		}
-		this.attachPathList[topic].subscriptions++;
-	}
-
-	this.unSubscribe = function(topic, toObj, toFunc){
-		// first, locally disconnect
-		dojo.event.kwDisconnect({
-			srcObj: this.attachPathList, 
-			srcFunc: topic, 
-			adviceObj: toObj, 
-			adviceFunc: toFunc
-		});
-		
-		// FIXME: figure out if there are any remaining listeners to the topic,
-		// 		  and if not, inform the server of our desire not to be
-		// 		  notified of updates to the topic
-	}
-
-	// the "publish" method is really a misnomer, since it really means "take
-	// this event and send it to the server". Note that the "dispatch" method
-	// handles local event promigulation, and therefore we emulate both sides
-	// of a real event router without having to swallow all of the complexity.
-	this.publish = function(topic, event){
-		var evt = dojo.io.repubsubEvent.initFromProperties(event);
-		// FIXME: need to make sure we have from and to set correctly
-		// 		  before we serialize and send off to the great blue
-		// 		  younder.
-		evt.to = topic;
-		// evt.from = this.tunnelURI;
-
-		var evtURLParts = [];
-		evtURLParts.push(this.serverBaseURL+"/kn");
-
-		// serialize the event to a string and then post it to the correct
-		// topic
-		evtURLParts.push(evt.toGetString());
-		this.enqueueEventStr(evtURLParts.join(""));
-	}
-
-	this.enqueueEventStr = function(evtStr){
-		this.log("enqueueEventStr");
-		this.backlog.push(evtStr);
-		this.dequeueEvent();
-	}
-
-	this.dequeueEvent = function(force){
-		this.log("dequeueEvent");
-		if(this.backlog.length <= 0){ return; }
-		if((this.canSnd)||(force)){
-			dojo.io.setIFrameSrc(this.sndNode, this.backlog.shift()+"&callback=repubsub.sndNodeReady");
-			this.canSnd = false;
-		}else{
-			this.log("sndNode not available yet!", "debug");
-		}
-	}
-}
-
-dojo.io.repubsubEvent = function(to, from, method, id, routeURI, payload, dispname, uid){
-	this.to = to;
-	this.from = from;
-	this.method = method||"route";
-	this.id = id||repubsub.getRandStr();
-	this.uri = routeURI;
-	this.displayname = dispname||repubsub.displayname;
-	this.userid = uid||repubsub.userid;
-	this.payload = payload||"";
-	this.flushChars = 4096;
-
-	this.initFromProperties = function(evt){
-		if(evt.constructor = dojo.io.repubsubEvent){ 
-			for(var x in evt){
-				this[x] = evt[x];
-			}
-		}else{
-			// we want to copy all the properties of the evt object, and transform
-			// those that are "stock" properties of dojo.io.repubsubEvent. All others should
-			// be copied as-is
-			for(var x in evt){
-				if(typeof this.forwardPropertiesMap[x] == "string"){
-					this[this.forwardPropertiesMap[x]] = evt[x];
-				}else{
-					this[x] = evt[x];
-				}
-			}
-		}
-	}
-
-	this.toGetString = function(noQmark){
-		var qs = [ ((noQmark) ? "" : "?") ];
-		for(var x=0; x<this.properties.length; x++){
-			var tp = this.properties[x];
-			if(this[tp[0]]){
-				qs.push(tp[1]+"="+encodeURIComponent(String(this[tp[0]])));
-			}
-			// FIXME: we need to be able to serialize non-stock properties!!!
-		}
-		return qs.join("&");
-	}
-
-}
-
-dojo.io.repubsubEvent.prototype.properties = [["from", "kn_from"], ["to", "kn_to"], 
-									["method", "do_method"], ["id", "kn_id"], 
-									["uri", "kn_uri"], 
-									["displayname", "kn_displayname"], 
-									["userid", "kn_userid"], 
-									["payload", "kn_payload"],
-									["flushChars", "kn_response_flush"],
-									["responseFormat", "kn_response_format"] ];
-
-// maps properties from their old names to their new names...
-dojo.io.repubsubEvent.prototype.forwardPropertiesMap = {};
-// ...and vice versa...
-dojo.io.repubsubEvent.prototype.reversePropertiesMap = {};
-
-// and we then populate them both from the properties list
-for(var x=0; x<dojo.io.repubsubEvent.prototype.properties.length; x++){
-	var tp = dojo.io.repubsubEvent.prototype.properties[x];
-	dojo.io.repubsubEvent.prototype.reversePropertiesMap[tp[0]] = tp[1];
-	dojo.io.repubsubEvent.prototype.forwardPropertiesMap[tp[1]] = tp[0];
-}
-// static version of initFromProperties, creates new event and object and
-// returns it after init
-dojo.io.repubsubEvent.initFromProperties = function(evt){
-	var eventObj = new dojo.io.repubsubEvent();
-	eventObj.initFromProperties(evt);
-	return eventObj;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/RhinoIO.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/RhinoIO.js
deleted file mode 100644
index 9f3cb7c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/RhinoIO.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.io.RhinoIO");
-
-// TODO: this doesn't execute
-/*dojo.io.SyncHTTPRequest = function(){
-	dojo.io.SyncRequest.call(this);
-
-	this.send = function(URI){
-	}
-}
-
-dojo.inherits(dojo.io.SyncHTTPRequest, dojo.io.SyncRequest);
-*/
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/__package__.js
deleted file mode 100644
index 3fb3369..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/__package__.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.io", false, false],
-	rhino: ["dojo.io.RhinoIO", false, false],
-	browser: [["dojo.io.BrowserIO", false, false], ["dojo.io.cookie", false, false]]
-});
-dojo.hostenv.moduleLoaded("dojo.io.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/cookie.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/cookie.js
deleted file mode 100644
index 6c0052b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/cookie.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.io.cookie");
-
-dojo.io.cookie.setCookie = function(name, value, days, path, domain, secure) {
-	var expires = -1;
-	if(typeof days == "number" && days >= 0) {
-		var d = new Date();
-		d.setTime(d.getTime()+(days*24*60*60*1000));
-		expires = d.toGMTString();
-	}
-	value = escape(value);
-	document.cookie = name + "=" + value + ";"
-		+ (expires != -1 ? " expires=" + expires + ";" : "")
-		+ (path ? "path=" + path : "")
-		+ (domain ? "; domain=" + domain : "")
-		+ (secure ? "; secure" : "");
-}
-
-dojo.io.cookie.set = dojo.io.cookie.setCookie;
-
-dojo.io.cookie.getCookie = function(name) {
-	var idx = document.cookie.indexOf(name+'=');
-	if(idx == -1) { return null; }
-	value = document.cookie.substring(idx+name.length+1);
-	var end = value.indexOf(';');
-	if(end == -1) { end = value.length; }
-	value = value.substring(0, end);
-	value = unescape(value);
-	return value;
-}
-
-dojo.io.cookie.get = dojo.io.cookie.getCookie;
-
-dojo.io.cookie.deleteCookie = function(name) {
-	dojo.io.cookie.setCookie(name, "-", 0);
-}
-
-dojo.io.cookie.setObjectCookie = function(name, obj, days, path, domain, secure, clearCurrent) {
-	if(arguments.length == 5) { // for backwards compat
-		clearCurrent = domain;
-		domain = null;
-		secure = null;
-	}
-	var pairs = [], cookie, value = "";
-	if(!clearCurrent) { cookie = dojo.io.cookie.getObjectCookie(name); }
-	if(days >= 0) {
-		if(!cookie) { cookie = {}; }
-		for(var prop in obj) {
-			if(prop == null) {
-				delete cookie[prop];
-			} else if(typeof obj[prop] == "string" || typeof obj[prop] == "number") {
-				cookie[prop] = obj[prop];
-			}
-		}
-		prop = null;
-		for(var prop in cookie) {
-			pairs.push(escape(prop) + "=" + escape(cookie[prop]));
-		}
-		value = pairs.join("&");
-	}
-	dojo.io.cookie.setCookie(name, value, days, path, domain, secure);
-}
-
-dojo.io.cookie.getObjectCookie = function(name) {
-	var values = null, cookie = dojo.io.cookie.getCookie(name);
-	if(cookie) {
-		values = {};
-		var pairs = cookie.split("&");
-		for(var i = 0; i < pairs.length; i++) {
-			var pair = pairs[i].split("=");
-			var value = pair[1];
-			if( isNaN(value) ) { value = unescape(pair[1]); }
-			values[ unescape(pair[0]) ] = value;
-		}
-	}
-	return values;
-}
-
-dojo.io.cookie.isSupported = function() {
-	if(typeof navigator.cookieEnabled != "boolean") {
-		dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__",
-			"CookiesAllowed", 90, null);
-		var cookieVal = dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-		navigator.cookieEnabled = (cookieVal == "CookiesAllowed");
-		if(navigator.cookieEnabled) {
-			// FIXME: should we leave this around?
-			this.deleteCookie("__TestingYourBrowserForCookieSupport__");
-		}
-	}
-	return navigator.cookieEnabled;
-}
-
-// need to leave this in for backwards-compat from 0.1 for when it gets pulled in by dojo.io.*
-if(!dojo.io.cookies) { dojo.io.cookies = dojo.io.cookie; }
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/cookies.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/cookies.js
deleted file mode 100644
index 6dda04a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/io/cookies.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dj_deprecated("dojo.io.cookies has been replaced by dojo.io.cookie");
-dojo.require("dojo.io.cookie");
-if(!dojo.io.cookies) { dojo.io.cookies = dojo.io.cookie; }
-dojo.provide("dojo.io.cookies");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/json.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/json.js
deleted file mode 100644
index 635b2af..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/json.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.json");
-dojo.require("dojo.lang");
-
-dojo.json = {
-	jsonRegistry: new dojo.AdapterRegistry(),
-
-	register: function(name, check, wrap, /*optional*/ override){
-		/***
-
-			Register a JSON serialization function.	 JSON serialization 
-			functions should take one argument and return an object
-			suitable for JSON serialization:
-
-			- string
-			- number
-			- boolean
-			- undefined
-			- object
-				- null
-				- Array-like (length property that is a number)
-				- Objects with a "json" method will have this method called
-				- Any other object will be used as {key:value, ...} pairs
-			
-			If override is given, it is used as the highest priority
-			JSON serialization, otherwise it will be used as the lowest.
-		***/
-
-		dojo.json.jsonRegistry.register(name, check, wrap, override);
-	},
-
-	evalJSON: function(){
-		// FIXME: should this accept mozilla's optional second arg?
-		return eval("(" + arguments[0] + ")");
-	},
-
-	serialize: function(o){
-		/***
-			Create a JSON serialization of an object, note that this doesn't
-			check for infinite recursion, so don't do that!
-		***/
-
-		var objtype = typeof(o);
-		if(objtype == "undefined"){
-			return "undefined";
-		}else if((objtype == "number")||(objtype == "boolean")){
-			return o + "";
-		}else if(o === null){
-			return "null";
-		}
-		var m = dojo.lang;
-		if(objtype == "string"){
-			return m.reprString(o);
-		}
-		// recurse
-		var me = arguments.callee;
-		// short-circuit for objects that support "json" serialization
-		// if they return "self" then just pass-through...
-		var newObj;
-		if(typeof(o.__json__) == "function"){
-			newObj = o.__json__();
-			if(o !== newObj){
-				return me(newObj);
-			}
-		}
-		if(typeof(o.json) == "function"){
-			newObj = o.json();
-			if (o !== newObj) {
-				return me(newObj);
-			}
-		}
-		// array
-		if(objtype != "function" && typeof(o.length) == "number"){
-			var res = [];
-			for(var i = 0; i < o.length; i++){
-				var val = me(o[i]);
-				if(typeof(val) != "string"){
-					val = "undefined";
-				}
-				res.push(val);
-			}
-			return "[" + res.join(",") + "]";
-		}
-		// look in the registry
-		try {
-			window.o = o;
-			newObj = dojo.json.jsonRegistry.match(o);
-			return me(newObj);
-		}catch(e){
-			// dojo.debug(e);
-		}
-		// it's a function with no adapter, bad
-		if(objtype == "function"){
-			return null;
-		}
-		// generic object code path
-		res = [];
-		for (var k in o){
-			var useKey;
-			if (typeof(k) == "number"){
-				useKey = '"' + k + '"';
-			}else if (typeof(k) == "string"){
-				useKey = m.reprString(k);
-			}else{
-				// skip non-string or number keys
-				continue;
-			}
-			val = me(o[k]);
-			if(typeof(val) != "string"){
-				// skip non-serializable values
-				continue;
-			}
-			res.push(useKey + ":" + val);
-		}
-		return "{" + res.join(",") + "}";
-	}
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/lang.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/lang.js
deleted file mode 100644
index c6e5314..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/lang.js
+++ /dev/null
@@ -1,687 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.lang");
-dojo.provide("dojo.AdapterRegistry");
-dojo.provide("dojo.lang.Lang");
-
-dojo.lang.mixin = function(obj, props){
-	var tobj = {};
-	for(var x in props){
-		if(typeof tobj[x] == "undefined" || tobj[x] != props[x]) {
-			obj[x] = props[x];
-		}
-	}
-	// IE doesn't recognize custom toStrings in for..in
-	if(dojo.render.html.ie && dojo.lang.isFunction(props["toString"]) && props["toString"] != obj["toString"]) {
-		obj.toString = props.toString;
-	}
-	return obj;
-}
-
-dojo.lang.extend = function(ctor, props){
-	this.mixin(ctor.prototype, props);
-}
-
-dojo.lang.extendPrototype = function(obj, props){
-	this.extend(obj.constructor, props);
-}
-
-dojo.lang.anonCtr = 0;
-dojo.lang.anon = {};
-dojo.lang.nameAnonFunc = function(anonFuncPtr, namespaceObj){
-	var nso = (namespaceObj || dojo.lang.anon);
-	if((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"] == true)){
-		for(var x in nso){
-			if(nso[x] === anonFuncPtr){
-				return x;
-			}
-		}
-	}
-	var ret = "__"+dojo.lang.anonCtr++;
-	while(typeof nso[ret] != "undefined"){
-		ret = "__"+dojo.lang.anonCtr++;
-	}
-	nso[ret] = anonFuncPtr;
-	return ret;
-}
-
-/**
- * Runs a function in a given scope (thisObject), can
- * also be used to preserve scope.
- *
- * hitch(foo, "bar"); // runs foo.bar() in the scope of foo
- * hitch(foo, myFunction); // runs myFunction in the scope of foo
- */
-dojo.lang.hitch = function(thisObject, method) {
-	if(dojo.lang.isString(method)) {
-		var fcn = thisObject[method];
-	} else {
-		var fcn = method;
-	}
-
-	return function() {
-		return fcn.apply(thisObject, arguments);
-	}
-}
-
-dojo.lang.forward = function(funcName){
-	// Returns a function that forwards a method call to this.func(...)
-	return function(){
-		return this[funcName].apply(this, arguments);
-	};
-}
-
-dojo.lang.curry = function(ns, func /* args ... */){
-	var outerArgs = [];
-	ns = ns||dj_global;
-	if(dojo.lang.isString(func)){
-		func = ns[func];
-	}
-	for(var x=2; x<arguments.length; x++){
-		outerArgs.push(arguments[x]);
-	}
-	var ecount = func.length - outerArgs.length;
-	// borrowed from svend tofte
-	function gather(nextArgs, innerArgs, expected){
-		var texpected = expected;
-		var totalArgs = innerArgs.slice(0); // copy
-		for(var x=0; x<nextArgs.length; x++){
-			totalArgs.push(nextArgs[x]);
-		}
-		// check the list of provided nextArgs to see if it, plus the
-		// number of innerArgs already supplied, meets the total
-		// expected.
-		expected = expected-nextArgs.length;
-		if(expected<=0){
-			var res = func.apply(ns, totalArgs);
-			expected = texpected;
-			return res;
-		}else{
-			return function(){
-				return gather(arguments,// check to see if we've been run
-										// with enough args
-							totalArgs,	// a copy
-							expected);	// how many more do we need to run?;
-			}
-		}
-	}
-	return gather([], outerArgs, ecount);
-}
-
-dojo.lang.curryArguments = function(ns, func, args, offset){
-	var targs = [];
-	var x = offset||0;
-	for(x=offset; x<args.length; x++){
-		targs.push(args[x]); // ensure that it's an arr
-	}
-	return dojo.lang.curry.apply(dojo.lang, [ns, func].concat(targs));
-}
-
-/**
- * Sets a timeout in milliseconds to execute a function in a given context
- * with optional arguments.
- *
- * setTimeout (Object context, function func, number delay[, arg1[, ...]]);
- * setTimeout (function func, number delay[, arg1[, ...]]);
- */
-dojo.lang.setTimeout = function(func, delay){
-	var context = window, argsStart = 2;
-	if(!dojo.lang.isFunction(func)){
-		context = func;
-		func = delay;
-		delay = arguments[2];
-		argsStart++;
-	}
-
-	if(dojo.lang.isString(func)){
-		func = context[func];
-	}
-	
-	var args = [];
-	for (var i = argsStart; i < arguments.length; i++) {
-		args.push(arguments[i]);
-	}
-	return setTimeout(function () { func.apply(context, args); }, delay);
-}
-
-/**
- * Partial implmentation of is* functions from
- * http://www.crockford.com/javascript/recommend.html
- * NOTE: some of these may not be the best thing to use in all situations
- * as they aren't part of core JS and therefore can't work in every case.
- * See WARNING messages inline for tips.
- *
- * The following is* functions are fairly "safe"
- */
-
-dojo.lang.isObject = function(wh) {
-	return typeof wh == "object" || dojo.lang.isArray(wh) || dojo.lang.isFunction(wh);
-}
-
-dojo.lang.isArray = function(wh) {
-	return (wh instanceof Array || typeof wh == "array");
-}
-
-dojo.lang.isArrayLike = function(wh) {
-	if(dojo.lang.isString(wh)){ return false; }
-	if(dojo.lang.isArray(wh)){ return true; }
-	if(typeof wh != "undefined" && wh
-        && dojo.lang.isNumber(wh.length) && isFinite(wh.length)){ return true; }
-	return false;
-}
-
-dojo.lang.isFunction = function(wh) {
-	return (wh instanceof Function || typeof wh == "function");
-}
-
-dojo.lang.isString = function(wh) {
-	return (wh instanceof String || typeof wh == "string");
-}
-
-dojo.lang.isAlien = function(wh) {
-	return !dojo.lang.isFunction() && /\{\s*\[native code\]\s*\}/.test(String(wh));
-}
-
-dojo.lang.isBoolean = function(wh) {
-	return (wh instanceof Boolean || typeof wh == "boolean");
-}
-
-/**
- * The following is***() functions are somewhat "unsafe". Fortunately,
- * there are workarounds the the language provides and are mentioned
- * in the WARNING messages.
- *
- * WARNING: In most cases, isNaN(wh) is sufficient to determine whether or not
- * something is a number or can be used as such. For example, a number or string
- * can be used interchangably when accessing array items (arr["1"] is the same as
- * arr[1]) and isNaN will return false for both values ("1" and 1). Should you
- * use isNumber("1"), that will return false, which is generally not too useful.
- * Also, isNumber(NaN) returns true, again, this isn't generally useful, but there
- * are corner cases (like when you want to make sure that two things are really
- * the same type of thing). That is really where isNumber "shines".
- *
- * RECOMMENDATION: Use isNaN(wh) when possible
- */
-dojo.lang.isNumber = function(wh) {
-	return (wh instanceof Number || typeof wh == "number");
-}
-
-/**
- * WARNING: In some cases, isUndefined will not behave as you
- * might expect. If you do isUndefined(foo) and there is no earlier
- * reference to foo, an error will be thrown before isUndefined is
- * called. It behaves correctly if you scope yor object first, i.e.
- * isUndefined(foo.bar) where foo is an object and bar isn't a
- * property of the object.
- *
- * RECOMMENDATION: Use `typeof foo == "undefined"` when possible
- *
- * FIXME: Should isUndefined go away since it is error prone?
- */
-dojo.lang.isUndefined = function(wh) {
-	return ((wh == undefined)&&(typeof wh == "undefined"));
-}
-
-// end Crockford functions
-
-dojo.lang.whatAmI = function(wh) {
-	try {
-		if(dojo.lang.isArray(wh)) { return "array"; }
-		if(dojo.lang.isFunction(wh)) { return "function"; }
-		if(dojo.lang.isString(wh)) { return "string"; }
-		if(dojo.lang.isNumber(wh)) { return "number"; }
-		if(dojo.lang.isBoolean(wh)) { return "boolean"; }
-		if(dojo.lang.isAlien(wh)) { return "alien"; }
-		if(dojo.lang.isUndefined(wh)) { return "undefined"; }
-		// FIXME: should this go first?
-		for(var name in dojo.lang.whatAmI.custom) {
-			if(dojo.lang.whatAmI.custom[name](wh)) {
-				return name;
-			}
-		}
-		if(dojo.lang.isObject(wh)) { return "object"; }
-	} catch(E) {}
-	return "unknown";
-}
-/*
- * dojo.lang.whatAmI.custom[typeName] = someFunction
- * will return typeName is someFunction(wh) returns true
- */
-dojo.lang.whatAmI.custom = {};
-
-/**
- * See if val is in arr. Call signatures:
- *  find(array, value, identity)
-*   find(value, array, identity)
-**/
-dojo.lang.find = function(arr, val, identity){
-	// support both (arr, val) and (val, arr)
-	if(!dojo.lang.isArrayLike(arr) && dojo.lang.isArrayLike(val)) {
-		var a = arr;
-		arr = val;
-		val = a;
-	}
-	var isString = dojo.lang.isString(arr);
-	if(isString) { arr = arr.split(""); }
-	if(identity){
-		for(var i=0;i<arr.length;++i){
-			if(arr[i] === val){ return i; }
-		}
-	}else{
-		for(var i=0;i<arr.length;++i){
-			if(arr[i] == val){ return i; }
-		}
-	}
-	return -1;
-}
-
-dojo.lang.indexOf = dojo.lang.find;
-
-dojo.lang.findLast = function(arr, val, identity) {
-	// support both (arr, val) and (val, arr)
-	if(!dojo.lang.isArrayLike(arr) && dojo.lang.isArrayLike(val)) {
-		var a = arr;
-		arr = val;
-		val = a;
-	}
-	var isString = dojo.lang.isString(arr);
-	if(isString) { arr = arr.split(""); }
-	if(identity){
-		for(var i = arr.length-1; i >= 0; i--) {
-			if(arr[i] === val){ return i; }
-		}
-	}else{
-		for(var i = arr.length-1; i >= 0; i--) {
-			if(arr[i] == val){ return i; }
-		}
-	}
-	return -1;
-}
-
-dojo.lang.lastIndexOf = dojo.lang.findLast;
-
-dojo.lang.inArray = function(arr, val){
-	return dojo.lang.find(arr, val) > -1;
-}
-
-dojo.lang.getNameInObj = function(ns, item){
-	if(!ns){ ns = dj_global; }
-
-	for(var x in ns){
-		if(ns[x] === item){
-			return new String(x);
-		}
-	}
-	return null;
-}
-
-// FIXME: Is this worthless since you can do: if(name in obj)
-// is this the right place for this?
-dojo.lang.has = function(obj, name){
-	return (typeof obj[name] !== 'undefined');
-}
-
-dojo.lang.isEmpty = function(obj) {
-	if(dojo.lang.isObject(obj)) {
-		var tmp = {};
-		var count = 0;
-		for(var x in obj){
-			if(obj[x] && (!tmp[x])){
-				count++;
-				break;
-			} 
-		}
-		return (count == 0);
-	} else if(dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)) {
-		return obj.length == 0;
-	}
-}
-
-dojo.lang.forEach = function(arr, unary_func, fix_length){
-	var isString = dojo.lang.isString(arr);
-	if(isString) { arr = arr.split(""); }
-	var il = arr.length;
-	for(var i=0; i< ((fix_length) ? il : arr.length); i++){
-		if(unary_func(arr[i], i, arr) == "break"){
-			break;
-		}
-	}
-}
-
-dojo.lang.map = function(arr, obj, unary_func){
-	var isString = dojo.lang.isString(arr);
-	if(isString){
-		arr = arr.split("");
-	}
-	if(dojo.lang.isFunction(obj)&&(!unary_func)){
-		unary_func = obj;
-		obj = dj_global;
-	}else if(dojo.lang.isFunction(obj) && unary_func){
-		// ff 1.5 compat
-		var tmpObj = obj;
-		obj = unary_func;
-		unary_func = tmpObj;
-	}
-
-	if(Array.map){
-	 	var outArr = Array.map(arr, unary_func, obj);
-	}else{
-		var outArr = [];
-		for(var i=0;i<arr.length;++i){
-			outArr.push(unary_func.call(obj, arr[i]));
-		}
-	}
-
-	if(isString) {
-		return outArr.join("");
-	} else {
-		return outArr;
-	}
-}
-
-dojo.lang.tryThese = function(){
-	for(var x=0; x<arguments.length; x++){
-		try{
-			if(typeof arguments[x] == "function"){
-				var ret = (arguments[x]());
-				if(ret){
-					return ret;
-				}
-			}
-		}catch(e){
-			dojo.debug(e);
-		}
-	}
-}
-
-dojo.lang.delayThese = function(farr, cb, delay, onend){
-	/**
-	 * alternate: (array funcArray, function callback, function onend)
-	 * alternate: (array funcArray, function callback)
-	 * alternate: (array funcArray)
-	 */
-	if(!farr.length){ 
-		if(typeof onend == "function"){
-			onend();
-		}
-		return;
-	}
-	if((typeof delay == "undefined")&&(typeof cb == "number")){
-		delay = cb;
-		cb = function(){};
-	}else if(!cb){
-		cb = function(){};
-		if(!delay){ delay = 0; }
-	}
-	setTimeout(function(){
-		(farr.shift())();
-		cb();
-		dojo.lang.delayThese(farr, cb, delay, onend);
-	}, delay);
-}
-
-dojo.lang.shallowCopy = function(obj) {
-	var ret = {}, key;
-	for(key in obj) {
-		if(dojo.lang.isUndefined(ret[key])) {
-			ret[key] = obj[key];
-		}
-	}
-	return ret;
-}
-
-dojo.lang.every = function(arr, callback, thisObject) {
-	var isString = dojo.lang.isString(arr);
-	if(isString) { arr = arr.split(""); }
-	if(Array.every) {
-		return Array.every(arr, callback, thisObject);
-	} else {
-		if(!thisObject) {
-			if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); }
-			thisObject = dj_global;
-		}
-
-		for(var i = 0; i < arr.length; i++) {
-			if(!callback.call(thisObject, arr[i], i, arr)) {
-				return false;
-			}
-		}
-		return true;
-	}
-}
-
-dojo.lang.some = function(arr, callback, thisObject) {
-	var isString = dojo.lang.isString(arr);
-	if(isString) { arr = arr.split(""); }
-	if(Array.some) {
-		return Array.some(arr, callback, thisObject);
-	} else {
-		if(!thisObject) {
-			if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); }
-			thisObject = dj_global;
-		}
-
-		for(var i = 0; i < arr.length; i++) {
-			if(callback.call(thisObject, arr[i], i, arr)) {
-				return true;
-			}
-		}
-		return false;
-	}
-}
-
-dojo.lang.filter = function(arr, callback, thisObject) {
-	var isString = dojo.lang.isString(arr);
-	if(isString) { arr = arr.split(""); }
-	if(Array.filter) {
-		var outArr = Array.filter(arr, callback, thisObject);
-	} else {
-		if(!thisObject) {
-			if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); }
-			thisObject = dj_global;
-		}
-
-		var outArr = [];
-		for(var i = 0; i < arr.length; i++) {
-			if(callback.call(thisObject, arr[i], i, arr)) {
-				outArr.push(arr[i]);
-			}
-		}
-	}
-	if(isString) {
-		return outArr.join("");
-	} else {
-		return outArr;
-	}
-}
-
-dojo.AdapterRegistry = function(){
-    /***
-        A registry to facilitate adaptation.
-
-        Pairs is an array of [name, check, wrap] triples
-        
-        All check/wrap functions in this registry should be of the same arity.
-    ***/
-    this.pairs = [];
-}
-
-dojo.lang.extend(dojo.AdapterRegistry, {
-    register: function (name, check, wrap, /* optional */ override){
-        /***
-			The check function should return true if the given arguments are
-			appropriate for the wrap function.
-
-			If override is given and true, the check function will be given
-			highest priority.  Otherwise, it will be the lowest priority
-			adapter.
-        ***/
-
-        if (override) {
-            this.pairs.unshift([name, check, wrap]);
-        } else {
-            this.pairs.push([name, check, wrap]);
-        }
-    },
-
-    match: function (/* ... */) {
-        /***
-			Find an adapter for the given arguments.
-
-			If no suitable adapter is found, throws NotFound.
-        ***/
-        for(var i = 0; i < this.pairs.length; i++){
-            var pair = this.pairs[i];
-            if(pair[1].apply(this, arguments)){
-                return pair[2].apply(this, arguments);
-            }
-        }
-		throw new Error("No match found");
-        // dojo.raise("No match found");
-    },
-
-    unregister: function (name) {
-        /***
-			Remove a named adapter from the registry
-        ***/
-        for(var i = 0; i < this.pairs.length; i++){
-            var pair = this.pairs[i];
-            if(pair[0] == name){
-                this.pairs.splice(i, 1);
-                return true;
-            }
-        }
-        return false;
-    }
-});
-
-dojo.lang.reprRegistry = new dojo.AdapterRegistry();
-dojo.lang.registerRepr = function(name, check, wrap, /*optional*/ override){
-        /***
-			Register a repr function.  repr functions should take
-			one argument and return a string representation of it
-			suitable for developers, primarily used when debugging.
-
-			If override is given, it is used as the highest priority
-			repr, otherwise it will be used as the lowest.
-        ***/
-        dojo.lang.reprRegistry.register(name, check, wrap, override);
-    };
-
-dojo.lang.repr = function(obj){
-	/***
-		Return a "programmer representation" for an object
-	***/
-	if(typeof(obj) == "undefined"){
-		return "undefined";
-	}else if(obj === null){
-		return "null";
-	}
-
-	try{
-		if(typeof(obj["__repr__"]) == 'function'){
-			return obj["__repr__"]();
-		}else if((typeof(obj["repr"]) == 'function')&&(obj.repr != arguments.callee)){
-			return obj["repr"]();
-		}
-		return dojo.lang.reprRegistry.match(obj);
-	}catch(e){
-		if(typeof(obj.NAME) == 'string' && (
-				obj.toString == Function.prototype.toString ||
-				obj.toString == Object.prototype.toString
-			)){
-			return o.NAME;
-		}
-	}
-
-	if(typeof(obj) == "function"){
-		obj = (obj + "").replace(/^\s+/, "");
-		var idx = obj.indexOf("{");
-		if(idx != -1){
-			obj = obj.substr(0, idx) + "{...}";
-		}
-	}
-	return obj + "";
-}
-
-dojo.lang.reprArrayLike = function(arr){
-	try{
-		var na = dojo.lang.map(arr, dojo.lang.repr);
-		return "[" + na.join(", ") + "]";
-	}catch(e){ }
-};
-
-dojo.lang.reprString = function(str){ 
-	return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'
-		).replace(/[\f]/g, "\\f"
-		).replace(/[\b]/g, "\\b"
-		).replace(/[\n]/g, "\\n"
-		).replace(/[\t]/g, "\\t"
-		).replace(/[\r]/g, "\\r");
-};
-
-dojo.lang.reprNumber = function(num){
-	return num + "";
-};
-
-(function(){
-	var m = dojo.lang;
-	m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike);
-	m.registerRepr("string", m.isString, m.reprString);
-	m.registerRepr("numbers", m.isNumber, m.reprNumber);
-	m.registerRepr("boolean", m.isBoolean, m.reprNumber);
-	// m.registerRepr("numbers", m.typeMatcher("number", "boolean"), m.reprNumber);
-})();
-
-/**
- * Creates a 1-D array out of all the arguments passed,
- * unravelling any array-like objects in the process
- *
- * Ex:
- * unnest(1, 2, 3) ==> [1, 2, 3]
- * unnest(1, [2, [3], [[[4]]]]) ==> [1, 2, 3, 4]
- */
-dojo.lang.unnest = function(/* ... */) {
-	var out = [];
-	for(var i = 0; i < arguments.length; i++) {
-		if(dojo.lang.isArrayLike(arguments[i])) {
-			var add = dojo.lang.unnest.apply(this, arguments[i]);
-			out = out.concat(add);
-		} else {
-			out.push(arguments[i]);
-		}
-	}
-	return out;
-}
-
-/**
- * Return the first argument that isn't undefined
- */
-dojo.lang.firstValued = function(/* ... */) {
-	for(var i = 0; i < arguments.length; i++) {
-		if(typeof arguments[i] != "undefined") {
-			return arguments[i];
-		}
-	}
-	return undefined;
-}
-
-/**
- * Converts an array-like object (i.e. arguments, DOMCollection)
- * to an array
-**/
-dojo.lang.toArray = function(arrayLike, startOffset) {
-	var array = [];
-	for(var i = startOffset||0; i < arrayLike.length; i++) {
-		array.push(arrayLike[i]);
-	}
-	return array;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/lang/Lang.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/lang/Lang.js
deleted file mode 100644
index 354f83a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/lang/Lang.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.lang");
-dj_deprecated("dojo.lang.Lang is deprecated, use dojo.lang instead");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/lang/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/lang/__package__.js
deleted file mode 100644
index 59d3e52..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/lang/__package__.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.lang"]
-});
-dojo.hostenv.moduleLoaded("dojo.lang.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/logging/Logger.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/logging/Logger.js
deleted file mode 100644
index 6ea231c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/logging/Logger.js
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*		This is the dojo logging facility, which is stolen from nWidgets, which
-		is patterned on the Python logging module, which in turn has been
-		heavily influenced by log4j (execpt with some more pythonic choices,
-		which we adopt as well).
-
-		While the dojo logging facilities do provide a set of familiar
-		interfaces, many of the details are changed to reflect the constraints
-		of the browser environment. Mainly, file and syslog-style logging
-		facilites are not provided, with HTTP POST and GET requests being the
-		only ways of getting data from the browser back to a server. Minimal
-		support for this (and XML serialization of logs) is provided, but may
-		not be of practical use in a deployment environment.
-
-		The Dojo logging classes are agnostic of any environment, and while
-		default loggers are provided for browser-based interpreter
-		environments, this file and the classes it define are explicitly
-		designed to be portable to command-line interpreters and other
-		ECMA-262v3 envrionments.
-
-	the logger needs to accomidate:
-		log "levels"
-		type identifiers
-		file?
-		message
-		tic/toc?
-
-	The logger should ALWAYS record:
-		time/date logged
-		message
-		type
-		level
-*/
-// TODO: conver documentation to javadoc style once we confirm that is our choice
-// TODO: define DTD for XML-formatted log messages
-// TODO: write XML Formatter class
-// TODO: write HTTP Handler which uses POST to send log lines/sections
-
-// Filename:	LogCore.js
-// Purpose:		a common logging infrastructure for dojo
-// Classes:		dojo.logging, dojo.logging.Logger, dojo.logging.Record, dojo.logging.LogFilter
-// Global Objects:	dojo.logging
-// Dependencies:	none
-
-dojo.provide("dojo.logging.Logger");
-dojo.provide("dojo.log");
-dojo.require("dojo.lang");
-
-/*
-	A simple data structure class that stores information for and about
-	a logged event. Objects of this type are created automatically when
-	an event is logged and are the internal format in which information
-	about log events is kept.
-*/
-
-dojo.logging.Record = function(lvl, msg){
-	this.level = lvl;
-	this.message = msg;
-	this.time = new Date();
-	// FIXME: what other information can we receive/discover here?
-}
-
-// an empty parent (abstract) class which concrete filters should inherit from.
-dojo.logging.LogFilter = function(loggerChain){
-	this.passChain = loggerChain || "";
-	this.filter = function(record){
-		// FIXME: need to figure out a way to enforce the loggerChain
-		// restriction
-		return true; // pass all records
-	}
-}
-
-dojo.logging.Logger = function(){
-	this.cutOffLevel = 0;
-	this.propagate = true;
-	this.parent = null;
-	// storage for dojo.logging.Record objects seen and accepted by this logger
-	this.data = [];
-	this.filters = [];
-	this.handlers = [];
-}
-
-dojo.lang.extend(dojo.logging.Logger, {
-	argsToArr: function(args){
-		// utility function, reproduced from __util__ here to remove dependency
-		var ret = [];
-		for(var x=0; x<args.length; x++){
-			ret.push(args[x]);
-		}
-		return ret;
-	},
-
-	setLevel: function(lvl){
-		this.cutOffLevel = parseInt(lvl);
-	},
-
-	isEnabledFor: function(lvl){
-		return parseInt(lvl) >= this.cutOffLevel;
-	},
-
-	getEffectiveLevel: function(){
-		if((this.cutOffLevel==0)&&(this.parent)){
-			return this.parent.getEffectiveLevel();
-		}
-		return this.cutOffLevel;
-	},
-
-	addFilter: function(flt){
-		this.filters.push(flt);
-		return this.filters.length-1;
-	},
-
-	removeFilterByIndex: function(fltIndex){
-		if(this.filters[fltIndex]){
-			delete this.filters[fltIndex];
-			return true;
-		}
-		return false;
-	},
-
-	removeFilter: function(fltRef){
-		for(var x=0; x<this.filters.length; x++){
-			if(this.filters[x]===fltRef){
-				delete this.filters[x];
-				return true;
-			}
-		}
-		return false;
-	},
-
-	removeAllFilters: function(){
-		this.filters = []; // clobber all of them
-	},
-
-	filter: function(rec){
-		for(var x=0; x<this.filters.length; x++){
-			if((this.filters[x]["filter"])&&
-			   (!this.filters[x].filter(rec))||
-			   (rec.level<this.cutOffLevel)){
-				return false;
-			}
-		}
-		return true;
-	},
-
-	addHandler: function(hdlr){
-		this.handlers.push(hdlr);
-		return this.handlers.length-1;
-	},
-
-	handle: function(rec){
-		if((!this.filter(rec))||(rec.level<this.cutOffLevel)){ return false; }
-		for(var x=0; x<this.handlers.length; x++){
-			if(this.handlers[x]["handle"]){
-			   this.handlers[x].handle(rec);
-			}
-		}
-		// FIXME: not sure what to do about records to be propagated that may have
-		// been modified by the handlers or the filters at this logger. Should
-		// parents always have pristine copies? or is passing the modified record
-		// OK?
-		// if((this.propagate)&&(this.parent)){ this.parent.handle(rec); }
-		return true;
-	},
-
-	// the heart and soul of the logging system
-	log: function(lvl, msg){
-		if(	(this.propagate)&&(this.parent)&&
-			(this.parent.rec.level>=this.cutOffLevel)){
-			this.parent.log(lvl, msg);
-			return false;
-		}
-		// FIXME: need to call logging providers here!
-		this.handle(new dojo.logging.Record(lvl, msg));
-		return true;
-	},
-
-	// logger helpers
-	debug:function(msg){
-		return this.logType("DEBUG", this.argsToArr(arguments));
-	},
-
-	info: function(msg){
-		return this.logType("INFO", this.argsToArr(arguments));
-	},
-
-	warning: function(msg){
-		return this.logType("WARNING", this.argsToArr(arguments));
-	},
-
-	error: function(msg){
-		return this.logType("ERROR", this.argsToArr(arguments));
-	},
-
-	critical: function(msg){
-		return this.logType("CRITICAL", this.argsToArr(arguments));
-	},
-
-	exception: function(msg, e, squelch){
-		// FIXME: this needs to be modified to put the exception in the msg
-		// if we're on Moz, we can get the following from the exception object:
-		//		lineNumber
-		//		message
-		//		fileName
-		//		stack
-		//		name
-		// on IE, we get:
-		//		name
-		//		message (from MDA?)
-		//		number
-		//		description (same as message!)
-		if(e){
-			var eparts = [e.name, (e.description||e.message)];
-			if(e.fileName){
-				eparts.push(e.fileName);
-				eparts.push("line "+e.lineNumber);
-				// eparts.push(e.stack);
-			}
-			msg += " "+eparts.join(" : ");
-		}
-
-		this.logType("ERROR", msg);
-		if(!squelch){
-			throw e;
-		}
-	},
-
-	logType: function(type, args){
-		var na = [dojo.logging.log.getLevel(type)];
-		if(typeof args == "array"){
-			na = na.concat(args);
-		}else if((typeof args == "object")&&(args["length"])){
-			na = na.concat(this.argsToArr(args));
-			/* for(var x=0; x<args.length; x++){
-				na.push(args[x]);
-			} */
-		}else{
-			na = na.concat(this.argsToArr(arguments).slice(1));
-			/* for(var x=1; x<arguments.length; x++){
-				na.push(arguments[x]);
-			} */
-		}
-		return this.log.apply(this, na);
-	}
-});
-
-void(function(){
-	var ptype = dojo.logging.Logger.prototype;
-	ptype.warn = ptype.warning;
-	ptype.err = ptype.error;
-	ptype.crit = ptype.critical;
-})();
-
-// the Handler class
-dojo.logging.LogHandler = function(level){
-	this.cutOffLevel = (level) ? level : 0;
-	this.formatter = null; // FIXME: default formatter?
-	this.data = [];
-	this.filters = [];
-}
-
-dojo.logging.LogHandler.prototype.setFormatter = function(fmtr){
-	// FIXME: need to vet that it is indeed a formatter object
-	dj_unimplemented("setFormatter");
-}
-
-dojo.logging.LogHandler.prototype.flush = function(){
-	dj_unimplemented("flush");
-}
-
-dojo.logging.LogHandler.prototype.close = function(){
-	dj_unimplemented("close");
-}
-
-dojo.logging.LogHandler.prototype.handleError = function(){
-	dj_unimplemented("handleError");
-}
-
-dojo.logging.LogHandler.prototype.handle = function(record){
-	// emits the passed record if it passes this object's filters
-	if((this.filter(record))&&(record.level>=this.cutOffLevel)){
-		this.emit(record);
-	}
-}
-
-dojo.logging.LogHandler.prototype.emit = function(record){
-	// do whatever is necessaray to actually log the record
-	dj_unimplemented("emit");
-}
-
-// set aliases since we don't want to inherit from dojo.logging.Logger
-void(function(){ // begin globals protection closure
-	var names = [
-		"setLevel", "addFilter", "removeFilterByIndex", "removeFilter",
-		"removeAllFilters", "filter"
-	];
-	var tgt = dojo.logging.LogHandler.prototype;
-	var src = dojo.logging.Logger.prototype;
-	for(var x=0; x<names.length; x++){
-		tgt[names[x]] = src[names[x]];
-	}
-})(); // end globals protection closure
-
-dojo.logging.log = new dojo.logging.Logger();
-
-// an associative array of logger objects. This object inherits from
-// a list of level names with their associated numeric levels
-dojo.logging.log.levels = [ {"name": "DEBUG", "level": 1},
-						   {"name": "INFO", "level": 2},
-						   {"name": "WARNING", "level": 3},
-						   {"name": "ERROR", "level": 4},
-						   {"name": "CRITICAL", "level": 5} ];
-
-dojo.logging.log.loggers = {};
-
-dojo.logging.log.getLogger = function(name){
-	if(!this.loggers[name]){
-		this.loggers[name] = new dojo.logging.Logger();
-		this.loggers[name].parent = this;
-	}
-	return this.loggers[name];
-}
-
-dojo.logging.log.getLevelName = function(lvl){
-	for(var x=0; x<this.levels.length; x++){
-		if(this.levels[x].level == lvl){
-			return this.levels[x].name;
-		}
-	}
-	return null;
-}
-
-dojo.logging.log.addLevelName = function(name, lvl){
-	if(this.getLevelName(name)){
-		this.err("could not add log level "+name+" because a level with that name already exists");
-		return false;
-	}
-	this.levels.append({"name": name, "level": parseInt(lvl)});
-	return true;
-}
-
-dojo.logging.log.getLevel = function(name){
-	for(var x=0; x<this.levels.length; x++){
-		if(this.levels[x].name.toUpperCase() == name.toUpperCase()){
-			return this.levels[x].level;
-		}
-	}
-	return null;
-}
-
-// a default handler class, it simply saves all of the handle()'d records in
-// memory. Useful for attaching to with dojo.event.connect()
-dojo.logging.MemoryLogHandler = function(level, recordsToKeep, postType, postInterval){
-	// mixin style inheritance
-	dojo.logging.LogHandler.call(this, level);
-	// default is unlimited
-	this.numRecords = (typeof djConfig['loggingNumRecords'] != 'undefined') ? djConfig['loggingNumRecords'] : ((recordsToKeep) ? recordsToKeep : -1);
-	// 0=count, 1=time, -1=don't post TODO: move this to a better location for prefs
-	this.postType = (typeof djConfig['loggingPostType'] != 'undefined') ? djConfig['loggingPostType'] : ( postType || -1);
-	// milliseconds for time, interger for number of records, -1 for non-posting,
-	this.postInterval = (typeof djConfig['loggingPostInterval'] != 'undefined') ? djConfig['loggingPostInterval'] : ( postType || -1);
-	
-}
-// prototype inheritance
-dojo.logging.MemoryLogHandler.prototype = new dojo.logging.LogHandler();
-
-// FIXME
-// dj_inherits(dojo.logging.MemoryLogHandler, 
-
-// over-ride base-class
-dojo.logging.MemoryLogHandler.prototype.emit = function(record){
-	this.data.push(record);
-	if(this.numRecords != -1){
-		while(this.data.length>this.numRecords){
-			this.data.shift();
-		}
-	}
-}
-
-dojo.logging.logQueueHandler = new dojo.logging.MemoryLogHandler(0,50,0,10000);
-// actual logging event handler
-dojo.logging.logQueueHandler.emit = function(record){
-	// we should probably abstract this in the future
-	var logStr = String(dojo.log.getLevelName(record.level)+": "+record.time.toLocaleTimeString())+": "+record.message;
-	if(!dj_undef("debug", dj_global)){
-		dojo.debug(logStr);
-	}else if((typeof dj_global["print"] == "function")&&(!dojo.render.html.capable)){
-		print(logStr);
-	}
-	this.data.push(record);
-	if(this.numRecords != -1){
-		while(this.data.length>this.numRecords){
-			this.data.shift();
-		}
-	}
-}
-
-dojo.logging.log.addHandler(dojo.logging.logQueueHandler);
-dojo.log = dojo.logging.log;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/logging/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/logging/__package__.js
deleted file mode 100644
index 324a806..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/logging/__package__.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.logging.Logger", false, false],
-	rhino: ["dojo.logging.RhinoLogger"]
-});
-dojo.hostenv.moduleLoaded("dojo.logging.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math.js
deleted file mode 100644
index 91cf3e9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math.js
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.math");
-
-dojo.math.degToRad = function (x) { return (x*Math.PI) / 180; }
-dojo.math.radToDeg = function (x) { return (x*180) / Math.PI; }
-
-dojo.math.factorial = function (n) {
-	if(n<1){ return 0; }
-	var retVal = 1;
-	for(var i=1;i<=n;i++){ retVal *= i; }
-	return retVal;
-}
-
-//The number of ways of obtaining an ordered subset of k elements from a set of n elements
-dojo.math.permutations = function (n,k) {
-	if(n==0 || k==0) return 1;
-	return (dojo.math.factorial(n) / dojo.math.factorial(n-k));
-}
-
-//The number of ways of picking n unordered outcomes from r possibilities
-dojo.math.combinations = function (n,r) {
-	if(n==0 || r==0) return 1;
-	return (dojo.math.factorial(n) / (dojo.math.factorial(n-r) * dojo.math.factorial(r)));
-}
-
-dojo.math.bernstein = function (t,n,i) {
-	return (dojo.math.combinations(n,i) * Math.pow(t,i) * Math.pow(1-t,n-i));
-}
-
-/**
- * Returns random numbers with a Gaussian distribution, with the mean set at
- * 0 and the variance set at 1.
- *
- * @return A random number from a Gaussian distribution
- */
-dojo.math.gaussianRandom = function () {
-	var k = 2;
-	do {
-		var i = 2 * Math.random() - 1;
-		var j = 2 * Math.random() - 1;
-		k = i * i + j * j;
-	} while (k >= 1);
-	k = Math.sqrt((-2 * Math.log(k)) / k);
-	return i * k;
-}
-
-/**
- * Calculates the mean of an Array of numbers.
- *
- * @return The mean of the numbers in the Array
- */
-dojo.math.mean = function () {
-	var array = dojo.lang.isArray(arguments[0]) ? arguments[0] : arguments;
-	var mean = 0;
-	for (var i = 0; i < array.length; i++) { mean += array[i]; }
-	return mean / array.length;
-}
-
-/**
- * Extends Math.round by adding a second argument specifying the number of
- * decimal places to round to.
- *
- * @param number The number to round
- * @param places The number of decimal places to round to
- * @return The rounded number
- */
-// TODO: add support for significant figures
-dojo.math.round = function (number, places) {
-	if (!places) { var shift = 1; }
-	else { var shift = Math.pow(10, places); }
-	return Math.round(number * shift) / shift;
-}
-
-/**
- * Calculates the standard deviation of an Array of numbers
- *
- * @return The standard deviation of the numbers
- */
-dojo.math.sd = function () {
-	var array = dojo.lang.isArray(arguments[0]) ? arguments[0] : arguments;
-	return Math.sqrt(dojo.math.variance(array));
-}
-
-/**
- * Calculates the variance of an Array of numbers
- *
- * @return The variance of the numbers
- */
-dojo.math.variance = function () {
-	var array = dojo.lang.isArray(arguments[0]) ? arguments[0] : arguments;
-	var mean = 0, squares = 0;
-	for (var i = 0; i < array.length; i++) {
-		mean += array[i];
-		squares += Math.pow(array[i], 2);
-	}
-	return (squares / array.length)
-		- Math.pow(mean / array.length, 2);
-}
-
-/**
- * Like range() in python
-**/
-dojo.math.range = function(a, b, step) {
-    if(arguments.length < 2) {
-        b = a;
-        a = 0;
-    }
-    if(arguments.length < 3) {
-        step = 1;
-    }
-
-    var range = [];
-    if(step > 0) {
-        for(var i = a; i < b; i += step) {
-            range.push(i);
-        }
-    } else if(step < 0) {
-        for(var i = a; i > b; i += step) {
-            range.push(i);
-        }
-    } else {
-        throw new Error("dojo.math.range: step must be non-zero");
-    }
-    return range;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/Math.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/Math.js
deleted file mode 100644
index 549dc92..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/Math.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dj_deprecated("dojo.math.Math does not exist, include dojo.math");
-dojo.require("dojo.math");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/__package__.js
deleted file mode 100644
index f0de33d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/__package__.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: [
-		["dojo.math", false, false],
-		["dojo.math.curves", false, false],
-		["dojo.math.points", false, false]
-	]
-});
-dojo.hostenv.moduleLoaded("dojo.math.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/curves.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/curves.js
deleted file mode 100644
index 561e631..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/curves.js
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.math.curves");
-
-dojo.require("dojo.math");
-
-/* Curves from Dan's 13th lib stuff.
- * See: http://pupius.co.uk/js/Toolkit.Drawing.js
- *      http://pupius.co.uk/dump/dojo/Dojo.Math.js
- */
-
-dojo.math.curves = {
-	//Creates a straight line object
-	Line: function(start, end) {
-		this.start = start;
-		this.end = end;
-		this.dimensions = start.length;
-
-		for(var i = 0; i < start.length; i++) {
-			start[i] = Number(start[i]);
-		}
-
-		for(var i = 0; i < end.length; i++) {
-			end[i] = Number(end[i]);
-		}
-
-		//simple function to find point on an n-dimensional, straight line
-		this.getValue = function(n) {
-			var retVal = new Array(this.dimensions);
-			for(var i=0;i<this.dimensions;i++)
-				retVal[i] = ((this.end[i] - this.start[i]) * n) + this.start[i];
-			return retVal;
-		}
-
-		return this;
-	},
-
-
-	//Takes an array of points, the first is the start point, the last is end point and the ones in
-	//between are the Bezier control points.
-	Bezier: function(pnts) {
-		this.getValue = function(step) {
-			if(step >= 1) return this.p[this.p.length-1];	// if step>=1 we must be at the end of the curve
-			if(step <= 0) return this.p[0];					// if step<=0 we must be at the start of the curve
-			var retVal = new Array(this.p[0].length);
-			for(var k=0;j<this.p[0].length;k++) { retVal[k]=0; }
-			for(var j=0;j<this.p[0].length;j++) {
-				var C=0; var D=0;
-				for(var i=0;i<this.p.length;i++) {
-					C += this.p[i][j] * this.p[this.p.length-1][0]
-						* dojo.math.bernstein(step,this.p.length,i);
-				}
-				for(var l=0;l<this.p.length;l++) {
-					D += this.p[this.p.length-1][0] * dojo.math.bernstein(step,this.p.length,l);
-				}
-				retVal[j] = C/D;
-			}
-			return retVal;
-		}
-		this.p = pnts;
-		return this;
-	},
-
-
-	//Catmull-Rom Spline - allows you to interpolate a smooth curve through a set of points in n-dimensional space
-	CatmullRom : function(pnts,c) {
-		this.getValue = function(step) {
-			var percent = step * (this.p.length-1);
-			var node = Math.floor(percent);
-			var progress = percent - node;
-
-			var i0 = node-1; if(i0 < 0) i0 = 0;
-			var i = node;
-			var i1 = node+1; if(i1 >= this.p.length) i1 = this.p.length-1;
-			var i2 = node+2; if(i2 >= this.p.length) i2 = this.p.length-1;
-
-			var u = progress;
-			var u2 = progress*progress;
-			var u3 = progress*progress*progress;
-
-			var retVal = new Array(this.p[0].length);
-			for(var k=0;k<this.p[0].length;k++) {
-				var x1 = ( -this.c * this.p[i0][k] ) + ( (2 - this.c) * this.p[i][k] ) + ( (this.c-2) * this.p[i1][k] ) + ( this.c * this.p[i2][k] );
-				var x2 = ( 2 * this.c * this.p[i0][k] ) + ( (this.c-3) * this.p[i][k] ) + ( (3 - 2 * this.c) * this.p[i1][k] ) + ( -this.c * this.p[i2][k] );
-				var x3 = ( -this.c * this.p[i0][k] ) + ( this.c * this.p[i1][k] );
-				var x4 = this.p[i][k];
-
-				retVal[k] = x1*u3 + x2*u2 + x3*u + x4;
-			}
-			return retVal;
-
-		}
-
-
-		if(!c) this.c = 0.7;
-		else this.c = c;
-		this.p = pnts;
-
-		return this;
-	},
-
-	// FIXME: This is the bad way to do a partial-arc with 2 points. We need to have the user
-	// supply the radius, otherwise we always get a half-circle between the two points.
-	Arc : function(start, end, ccw) {
-		var center = dojo.math.points.midpoint(start, end);
-		var sides = dojo.math.points.translate(dojo.math.points.invert(center), start);
-		var rad = Math.sqrt(Math.pow(sides[0], 2) + Math.pow(sides[1], 2));
-		var theta = dojo.math.radToDeg(Math.atan(sides[1]/sides[0]));
-		if( sides[0] < 0 ) {
-			theta -= 90;
-		} else {
-			theta += 90;
-		}
-		dojo.math.curves.CenteredArc.call(this, center, rad, theta, theta+(ccw?-180:180));
-	},
-
-	// Creates an arc object, with center and radius (Top of arc = 0 degrees, increments clockwise)
-	//  center => 2D point for center of arc
-	//  radius => scalar quantity for radius of arc
-	//  start  => to define an arc specify start angle (default: 0)
-	//  end    => to define an arc specify start angle
-	CenteredArc : function(center, radius, start, end) {
-		this.center = center;
-		this.radius = radius;
-		this.start = start || 0;
-		this.end = end;
-
-		this.getValue = function(n) {
-			var retVal = new Array(2);
-			var theta = dojo.math.degToRad(this.start+((this.end-this.start)*n));
-
-			retVal[0] = this.center[0] + this.radius*Math.sin(theta);
-			retVal[1] = this.center[1] - this.radius*Math.cos(theta);
-
-			return retVal;
-		}
-
-		return this;
-	},
-
-	// Special case of Arc (start = 0, end = 360)
-	Circle : function(center, radius) {
-		dojo.math.curves.CenteredArc.call(this, center, radius, 0, 360);
-		return this;
-	},
-
-	Path : function() {
-		var curves = [];
-		var weights = [];
-		var ranges = [];
-		var totalWeight = 0;
-
-		this.add = function(curve, weight) {
-			if( weight < 0 ) { dojo.raise("dojo.math.curves.Path.add: weight cannot be less than 0"); }
-			curves.push(curve);
-			weights.push(weight);
-			totalWeight += weight;
-			computeRanges();
-		}
-
-		this.remove = function(curve) {
-			for(var i = 0; i < curves.length; i++) {
-				if( curves[i] == curve ) {
-					curves.splice(i, 1);
-					totalWeight -= weights.splice(i, 1)[0];
-					break;
-				}
-			}
-			computeRanges();
-		}
-
-		this.removeAll = function() {
-			curves = [];
-			weights = [];
-			totalWeight = 0;
-		}
-
-		this.getValue = function(n) {
-			var found = false, value = 0;
-			for(var i = 0; i < ranges.length; i++) {
-				var r = ranges[i];
-				//w(r.join(" ... "));
-				if( n >= r[0] && n < r[1] ) {
-					var subN = (n - r[0]) / r[2];
-					value = curves[i].getValue(subN);
-					found = true;
-					break;
-				}
-			}
-
-			// FIXME: Do we want to assume we're at the end?
-			if( !found ) {
-				value = curves[curves.length-1].getValue(1);
-			}
-
-			for(j = 0; j < i; j++) {
-				value = dojo.math.points.translate(value, curves[j].getValue(1));
-			}
-			return value;
-		}
-
-		function computeRanges() {
-			var start = 0;
-			for(var i = 0; i < weights.length; i++) {
-				var end = start + weights[i] / totalWeight;
-				var len = end - start;
-				ranges[i] = [start, end, len];
-				start = end;
-			}
-		}
-
-		return this;
-	}
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/matrix.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/matrix.js
deleted file mode 100644
index db07be5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/matrix.js
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.math.matrix");
-
-//
-// some of this code is based on
-// http://www.mkaz.com/math/MatrixCalculator.java
-// (published under a BSD Open Source License)
-//
-// the rest is from my vague memory of matricies in school [cal]
-//
-// the copying of arguments is a little excessive, and could be trimmed back in
-// the case where a function doesn't modify them at all (but some do!)
-//
-
-dojo.math.matrix.iDF = 0;
-
-dojo.math.matrix.multiply = function(a, b){
-
-	a = dojo.math.matrix.copy(a);
-	b = dojo.math.matrix.copy(b);
-
-	var ax = a[0].length;
-	var ay = a.length;
-	var bx = b[0].length;
-	var by = b.length;
-
-	if (ax != by){
-		dojo.debug("Can't multiply matricies of sizes "+ax+','+ay+' and '+bx+','+by);
-		return [[0]];
-	}
-
-	var c = [];
-
-	for(var k=0; k<ay; k++){
-		c[k] = [];
-		for(var i=0; i<bx; i++){
-
-			c[k][i] = 0;
-
-			for(var m=0; m<ax; m++){
-
-				c[k][i] += a[k][m]*b[m][i];
-			}
-		}
-	}
-
-	return c;
-}
-
-dojo.math.matrix.inverse = function(a){
-
-	a = dojo.math.matrix.copy(a);
-
-	// Formula used to Calculate Inverse:
-	// inv(A) = 1/det(A) * adj(A)
-
-	var tms = a.length;
-
-	var m = dojo.math.matrix.create(tms, tms);
-	var mm = dojo.math.matrix.adjoint(a);
-
-	var det = dojo.math.matrix.determinant(a);
-	var dd = 0;
-
-	if (det == 0){
-		dojo.debug("Determinant Equals 0, Not Invertible.");
-		return [[0]];
-	}else{
-		dd = 1 / det;
-	}
-
-	for (var i = 0; i < tms; i++)
-		for (var j = 0; j < tms; j++) {
-			m[i][j] = dd * mm[i][j];
-		}
-
-	return m;
-}
-
-dojo.math.matrix.determinant = function(a){
-
-	a = dojo.math.matrix.copy(a);
-
-	if (a.length != a[0].length){
-		dojo.debug("Can't calculate the determiant of a non-squre matrix!");
-		return 0;
-	}
-
-	var tms = a.length;
-	var det = 1;
-
-	var b = dojo.math.matrix.upperTriangle(a);
-
-	for (var i=0; i < tms; i++){
-		det *= b[i][i];
-	}
-
-	det = det * dojo.math.matrix.iDF;
-
-	return det;
-}
-
-dojo.math.matrix.upperTriangle = function(m){
-
-	m = dojo.math.matrix.copy(m);
-
-	var f1 = 0;
-	var temp = 0;
-	var tms = m.length;
-	var v = 1;
-
-	dojo.math.matrix.iDF = 1;
-
-	for (var col = 0; col < tms - 1; col++) {
-		for (var row = col + 1; row < tms; row++) {
-			v = 1;
-
-			var stop_loop = 0;
-
-			// check if 0 in diagonal
- 			while ((m[col][col] == 0) && !stop_loop){
-
-				// if so switch until not
-				if (col + v >= tms){
-
-					// check if switched all rows
-					dojo.math.matrix.iDF = 0;
-					stop_loop = 1;
-				}else{
-					for (var c = 0; c < tms; c++) {
-						temp = m[col][c];
-						m[col][c] = m[col + v][c]; // switch rows
-						m[col + v][c] = temp;
-					}
-					v++; // count row switchs
-					dojo.math.matrix.iDF *= -1; // each switch changes determinant factor
-				}
-			}
-
-			if (m[col][col] != 0) {
-				f1 = (-1) * m[row][col] / m[col][col];
-				for (var i = col; i < tms; i++) {
-					m[row][i] = f1 * m[col][i] + m[row][i];
-				}
-			}
-		}
-	}
-
-	return m;
-}
-
-dojo.math.matrix.create = function(a, b){
-	var m = [];
-	for(var i=0; i<b; i++){
-		m[i] = [];
-		for(var j=0; j<a; j++){
-			m[i][j] = 0;
-		}
-	}
-	return m;
-}
-
-dojo.math.matrix.adjoint = function(a){
-
-	a = dojo.math.matrix.copy(a);
-
-	var tms = a.length;
-
-	if (a.length != a[0].length){
-		dojo.debug("Can't find the adjoint of a non-square matrix");
-		return [[0]];
-	}
-
-	if (tms == 1){
-		dojo.debug("Can't find the adjoint of a 1x1 matrix");
-		return [[0]];
-	}
-
-	var m = dojo.math.matrix.create(tms, tms);
-
-	var ii = 0;
-	var jj = 0;
-	var ia = 0;
-	var ja = 0;
-	var det = 0;
-
-	for (var i = 0; i < tms; i++){
-		for (var j = 0; j < tms; j++){
-
-			ia = 0;
-			ja = 0;
-
-			var ap = dojo.math.matrix.create(tms-1, tms-1);
-
-			for (ii = 0; ii < tms; ii++) {
-				for (jj = 0; jj < tms; jj++) {
-
-					if ((ii != i) && (jj != j)) {
-						ap[ia][ja] = a[ii][jj];
-						ja++;
-					}
-
-				}
-
-				if ((ii != i) && (jj != j)) {
-					ia++;
-				}
-				ja = 0;
-			}
-
-			det = dojo.math.matrix.determinant(ap);
-			m[i][j] = Math.pow(-1 , (i + j)) * det;
-		}
-	}
-
-	m = dojo.math.matrix.transpose(m);
-
-	return m;
-}
-
-dojo.math.matrix.transpose = function(a){
-
-	a = dojo.math.matrix.copy(a);
-
-	var m = dojo.math.matrix.create(a.length, a[0].length);
-
-	for (var i = 0; i < a.length; i++)
-		for (var j = 0; j < a[i].length; j++)
-			m[j][i] = a[i][j];
-	return m;
-}
-
-dojo.math.matrix.format = function(a){
-
-	function format_int(x){
-		var dp = 5;
-		var fac = Math.pow(10 , dp);
-		var a = Math.round(x*fac)/fac;
-		var b = a.toString();
-		if (b.charAt(0) != '-'){ b = ' ' + b;}
-		var has_dp = 0;
-		for(var i=1; i<b.length; i++){
-			if (b.charAt(i) == '.'){ has_dp = 1; }
-		}
-		if (!has_dp){ b += '.'; }
-		while(b.length < dp+3){ b += '0'; }
-		return b;
-	}
-
-	var ya = a.length;
-	var xa = a[0].length;
-
-	var buffer = '';
-
-	for (var y=0; y<ya; y++){
-		buffer += '| ';
-		for (var x=0; x<xa; x++){
-			buffer += format_int(a[y][x]) + ' ';
-		}
-		buffer += '|\n';
-	}
-
-	return buffer;
-}
-
-dojo.math.matrix.copy = function(a){
-
-	var ya = a.length;
-	var xa = a[0].length;
-
-	var m = dojo.math.matrix.create(xa, ya);
-
-	for (var y=0; y<ya; y++){
-		for (var x=0; x<xa; x++){
-			m[y][x] = a[y][x];
-		}
-	}
-
-	return m;
-}
-
-dojo.math.matrix.scale = function(k, a){
-
-	a = dojo.math.matrix.copy(a);
-
-	var ya = a.length;
-	var xa = a[0].length;
-
-	for (var y=0; y<ya; y++){
-		for (var x=0; x<xa; x++){
-			a[y][x] *= k;
-		}
-	}
-
-	return a;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/points.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/points.js
deleted file mode 100644
index e4f41b3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/math/points.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.math.points");
-dojo.require("dojo.math");
-
-// TODO: add a Point class?
-dojo.math.points = {
-	translate: function(a, b) {
-		if( a.length != b.length ) {
-			dojo.raise("dojo.math.translate: points not same size (a:[" + a + "], b:[" + b + "])");
-		}
-		var c = new Array(a.length);
-		for(var i = 0; i < a.length; i++) {
-			c[i] = a[i] + b[i];
-		}
-		return c;
-	},
-
-	midpoint: function(a, b) {
-		if( a.length != b.length ) {
-			dojo.raise("dojo.math.midpoint: points not same size (a:[" + a + "], b:[" + b + "])");
-		}
-		var c = new Array(a.length);
-		for(var i = 0; i < a.length; i++) {
-			c[i] = (a[i] + b[i]) / 2;
-		}
-		return c;
-	},
-
-	invert: function(a) {
-		var b = new Array(a.length);
-		for(var i = 0; i < a.length; i++) { b[i] = -a[i]; }
-		return b;
-	},
-
-	distance: function(a, b) {
-		return Math.sqrt(Math.pow(b[0]-a[0], 2) + Math.pow(b[1]-a[1], 2));
-	}
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/profile.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/profile.js
deleted file mode 100644
index fdc6007..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/profile.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.profile");
-
-dojo.profile = new function(){
-	var profiles = {};
-	var pns = [];
-
-	this.start = function(name){
-		if(!profiles[name]){
-			profiles[name] = {iters: 0, total: 0};
-			pns[pns.length] = name;
-		}else{
-			if(profiles[name]["start"]){
-				this.end(name);
-			}
-		}
-		profiles[name].end = null;
-		profiles[name].start = new Date();
-	}
-
-	this.end = function(name){
-		var ed = new Date();
-		if((profiles[name])&&(profiles[name]["start"])){
-			with(profiles[name]){
-				end = ed;
-				total += (end - start);
-				start = null;
-				iters++;
-			}
-		}else{
-			// oops! bad call to end(), what should we do here?
-			return true;
-		}
-	}
-
-	this.stop = this.end;
-
-	this.dump = function(appendToDoc){
-		var tbl = document.createElement("table");
-		with(tbl.style){
-			border = "1px solid black";
-			borderCollapse = "collapse";
-		}
-		var hdr = tbl.createTHead();
-		var hdrtr = hdr.insertRow(0);
-		// document.createElement("tr");
-		var cols = ["Identifier","Calls","Total","Avg"];
-		for(var x=0; x<cols.length; x++){
-			var ntd = hdrtr.insertCell(x);
-			with(ntd.style){
-				backgroundColor = "#225d94";
-				color = "white";
-				borderBottom = "1px solid black";
-				borderRight = "1px solid black";
-				fontFamily = "tahoma";
-				fontWeight = "bolder";
-				paddingLeft = paddingRight = "5px";
-			}
-			ntd.appendChild(document.createTextNode(cols[x]));
-		}
-
-		for(var x=0; x < pns.length; x++){
-			var prf = profiles[pns[x]];
-			this.end(pns[x]);
-			if(prf.iters>0){
-				var bdytr = tbl.insertRow(true);
-				var vals = [pns[x], prf.iters, prf.total, parseInt(prf.total/prf.iters)];
-				for(var y=0; y<vals.length; y++){
-					var cc = bdytr.insertCell(y);
-					cc.appendChild(document.createTextNode(vals[y]));
-					with(cc.style){
-						borderBottom = "1px solid gray";
-						paddingLeft = paddingRight = "5px";
-						if(x%2){
-							backgroundColor = "#e1f1ff";
-						}
-						if(y>0){
-							textAlign = "right";
-							borderRight = "1px solid gray";
-						}else{
-							borderRight = "1px solid black";
-						}
-					}
-				}
-			}
-		}
-
-		if(appendToDoc){
-			var ne = document.createElement("div");
-			ne.id = "profileOutputTable";
-			with(ne.style){
-				fontFamily = "Courier New, monospace";
-				fontSize = "12px";
-				lineHeight = "16px";
-				borderTop = "1px solid black";
-				padding = "10px";
-			}
-			if(document.getElementById("profileOutputTable")){
-				document.body.replaceChild(ne, document.getElementById("profileOutputTable"));
-			}else{
-				document.body.appendChild(ne);
-			}
-			ne.appendChild(tbl);
-		}
-
-		return tbl;
-	}
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/reflect/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/reflect/__package__.js
deleted file mode 100644
index 36619a8..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/reflect/__package__.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.reflect.reflection"]
-});
-dojo.hostenv.moduleLoaded("dojo.reflect.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/reflect/reflection.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/reflect/reflection.js
deleted file mode 100644
index 3725d8b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/reflect/reflection.js
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.reflect");
-
-/*****************************************************************
-	reflect.js
-	v.1.5.0
-	(c) 2003-2004 Thomas R. Trenka, Ph.D.
-
-	Derived from the reflection functions of f(m).
-	http://dojotoolkit.org
-	http://fm.dept-z.com
-
-	There is a dependency on the variable dJ_global, which
-	should always refer to the global object.
-******************************************************************/
-if(!dj_global){ var dj_global = this; }
-
-dojo.reflect = {} ;
-dojo.reflect.$unknownType = function(){ } ;
-dojo.reflect.ParameterInfo = function(name, type){ 
-	this.name = name ;
-	this.type = (type) ? type : dojo.reflect.$unknownType ;
-} ;
-dojo.reflect.PropertyInfo = function(name, type) { 
-	this.name = name ;
-	this.type = (type) ? type : dojo.reflect.$unknownType ;
-} ;
-dojo.reflect.MethodInfo = function(name, fn){
-	var parse = function(f) {
-		var o = {} ; 
-		var s = f.toString() ;
-		var param = ((s.substring(s.indexOf('(')+1, s.indexOf(')'))).replace(/\s+/g, "")).split(",") ;
-		o.parameters = [] ;
-		for (var i = 0; i < param.length; i++) {
-			o.parameters.push(new dojo.reflect.ParameterInfo(param[i])) ;
-		}
-		o.body = (s.substring(s.indexOf('{')+1, s.lastIndexOf('}'))).replace(/(^\s*)|(\s*$)/g, "") ;
-		return o ;
-	} ;
-
-	var tmp = parse(fn) ;
-	var p = tmp.parameters ;
-	var body = tmp.body ;
-	
-	this.name = (name) ? name : "anonymous" ;
-	this.getParameters = function(){ return p ; } ;
-	this.getNullArgumentsObject = function() {
-		var a = [] ;
-		for (var i = 0; i < p.length; i++){
-			a.push(null);
-		}
-		return a ;
-	} ;
-	this.getBody = function() { return body ; } ;
-	this.type = Function ;
-	this.invoke = function(src, args){ return fn.apply(src, args) ; } ;
-} ;
-
-//	Static object that can activate instances of the passed type.
-dojo.reflect.Activator = new (function(){
-	this.createInstance = function(type, args) {
-		switch (typeof(type)) {
-			case "function" : { 
-				var o = {} ;
-				type.apply(o, args) ;
-				return o ;
-			} ;
-			case "string" : {
-				var o = {} ;
-				(dojo.reflect.Reflector.getTypeFromString(type)).apply(o, args) ;
-				return o ;
-			} ;
-		}
-		throw new Error("dojo.reflect.Activator.createInstance(): no such type exists.");
-	}
-})() ;
-
-dojo.reflect.Reflector = new (function(){
-	this.getTypeFromString = function(s) {
-		var parts = s.split("."), i = 0, obj = dj_global ; 
-		do { obj = obj[parts[i++]] ; } while (i < parts.length && obj) ; 
-		return (obj != dj_global) ? obj : null ;
-	}; 
-
-	this.typeExists = function(s) {
-		var parts = s.split("."), i = 0, obj = dj_global ; 
-		do { obj = obj[parts[i++]] ; } while (i < parts.length && obj) ; 
-		return (obj && obj != dj_global) ;
-	}; 
-
-	this.getFieldsFromType = function(s) { 
-		var type = s ;
-		if (typeof(s) == "string") {
-			type = this.getTypeFromString(s) ;
-		}
-		var nullArgs = (new dojo.reflect.MethodInfo(type)).getNullArgumentsObject() ;
-		return this.getFields(dojo.reflect.Activator.createInstance(s, nullArgs)) ;
-	};
-
-	this.getPropertiesFromType = function(s) { 
-		var type = s ;
-		if (typeof(s) == "string") {
-			type = this.getTypeFromString(s);
-		}
-		var nullArgs = (new dojo.reflect.MethodInfo(type)).getNullArgumentsObject() ;
-		return this.getProperties(dojo.reflect.Activator.createInstance(s, nullArgs)) ;
-	};
-
-	this.getMethodsFromType = function(s) { 
-		var type = s ;
-		if (typeof(s) == "string") {
-			type = this.getTypeFromString(s) ;
-		}
-		var nullArgs = (new dojo.reflect.MethodInfo(type)).getNullArgumentsObject() ;
-		return this.getMethods(dojo.reflect.Activator.createInstance(s, nullArgs)) ;
-	};
-
-	this.getType = function(o) { return o.constructor ; } ;
-
-	this.getFields = function(obj) {
-		var arr = [] ;
-		for (var p in obj) { 
-			if(this.getType(obj[p]) != Function){
-				arr.push(new dojo.reflect.PropertyInfo(p, this.getType(obj[p]))) ;
-			}else{
-				arr.push(new dojo.reflect.MethodInfo(p, obj[p]));
-			}
-		}
-		return arr ;
-	};
-
-	this.getProperties = function(obj) {
-		var arr = [] ;
-		var fi = this.getFields(obj) ;
-		for (var i = 0; i < fi.length; i++){
-			if (this.isInstanceOf(fi[i], dojo.reflect.PropertyInfo)){
-				arr.push(fi[i]) ;
-			}
-		}
-		return arr ;
-	};
-
-	this.getMethods = function(obj) {
-		var arr = [] ;
-		var fi = this.getFields(obj) ;
-		for (var i = 0; i < fi.length; i++){
-			if (this.isInstanceOf(fi[i], dojo.reflect.MethodInfo)){
-				arr.push(fi[i]) ;
-			}
-		}
-		return arr ;
-	};
-
-	/*
-	this.implements = function(o, type) {
-		if (this.isSubTypeOf(o, type)) return false ;
-		var f = this.getFieldsFromType(type) ;
-		for (var i = 0; i < f.length; i++) {
-			if (typeof(o[(f[i].name)]) == "undefined"){
-				return false;
-			}
-		}
-		return true ;
-	};
-	*/
-
-	this.getBaseClass = function(o) {
-		if (o.getType().prototype.prototype.constructor){
-			return (o.getType()).prototype.prototype.constructor ;
-		}
-		return Object ;
-	} ;
-
-	this.isInstanceOf = function(o, type) { 
-		return (this.getType(o) == type) ; 
-	};
-
-	this.isSubTypeOf = function(o, type) { 
-		return (o instanceof type) ; 
-	};
-
-	this.isBaseTypeOf = function(o, type) { 
-		return (type instanceof o); 
-	};
-})();
-
-// back-compat
-dojo.provide("dojo.reflect.reflection");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/regexp.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/regexp.js
deleted file mode 100644
index fe4d1a0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/regexp.js
+++ /dev/null
@@ -1,566 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.regexp");
-dojo.provide("dojo.regexp.us");
-
-// *** Regular Expression Generators ***
-
-/**
-  Builds a RE that matches a top-level domain.
-
-  @param flags  An object.
-    flags.allowCC  Include 2 letter country code domains.  Default is true.
-    flags.allowGeneric  Include the generic domains.  Default is true.
-    flags.allowInfra  Include infrastructure domains.  Default is true.
-
-  @return  A string for a regular expression for a top-level domain.
-*/
-dojo.regexp.tld = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.allowCC != "boolean") { flags.allowCC = true; }
-	if (typeof flags.allowInfra != "boolean") { flags.allowInfra = true; }
-	if (typeof flags.allowGeneric != "boolean") { flags.allowGeneric = true; }
-
-	// Infrastructure top-level domain - only one at present
-	var infraRE = "arpa";
-
-	// Generic top-level domains RE.
-	var genericRE = 
-		"aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|xxx|jobs|mobi|post";
-	
-	// Country Code top-level domains RE
-	var ccRE = 
-		"ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|" +
-		"bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|" +
-		"ec|ee|eg|er|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|" +
-		"hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|la|" +
-		"lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|" +
-		"mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|" +
-		"ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sk|sl|sm|sn|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|" +
-		"to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw";
-
-	// Build top-level domain RE
-	var a = [];
-	if (flags.allowInfra) { a.push(infraRE); }
-	if (flags.allowGeneric) { a.push(genericRE); }
-	if (flags.allowCC) { a.push(ccRE); }
-
-	var tldRE = "";
-	if (a.length > 0) {
-		tldRE = "(" + a.join("|") + ")";
-	}
-
-	return tldRE;
-}
-
-/**
-  Builds a RE that matches an IP Address.
-  Supports 5 formats for IPv4: dotted decimal, dotted hex, dotted octal, decimal and hexadecimal.
-  Supports 2 formats for Ipv6.
-
-  @param flags  An object.  All flags are boolean with default = true.
-    flags.allowDottedDecimal  Example, 207.142.131.235.  No zero padding.
-    flags.allowDottedHex  Example, 0x18.0x11.0x9b.0x28.  Case insensitive.  Zero padding allowed.
-    flags.allowDottedOctal  Example, 0030.0021.0233.0050.  Zero padding allowed.
-    flags.allowDecimal  Example, 3482223595.  A decimal number between 0-4294967295.
-    flags.allowHex  Example, 0xCF8E83EB.  Hexadecimal number between 0x0-0xFFFFFFFF.
-      Case insensitive.  Zero padding allowed.
-    flags.allowIPv6   IPv6 address written as eight groups of four hexadecimal digits.
-    flags.allowHybrid   IPv6 address written as six groups of four hexadecimal digits
-      followed by the usual 4 dotted decimal digit notation of IPv4. x:x:x:x:x:x:d.d.d.d
-
-  @return  A string for a regular expression for an IP address.
-*/
-dojo.regexp.ipAddress = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.allowDottedDecimal != "boolean") { flags.allowDottedDecimal = true; }
-	if (typeof flags.allowDottedHex != "boolean") { flags.allowDottedHex = true; }
-	if (typeof flags.allowDottedOctal != "boolean") { flags.allowDottedOctal = true; }
-	if (typeof flags.allowDecimal != "boolean") { flags.allowDecimal = true; }
-	if (typeof flags.allowHex != "boolean") { flags.allowHex = true; }
-	if (typeof flags.allowIPv6 != "boolean") { flags.allowIPv6 = true; }
-	if (typeof flags.allowHybrid != "boolean") { flags.allowHybrid = true; }
-
-	// decimal-dotted IP address RE.
-	var dottedDecimalRE = 
-		// Each number is between 0-255.  Zero padding is not allowed.
-		"((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-
-	// dotted hex IP address RE.  Each number is between 0x0-0xff.  Zero padding is allowed, e.g. 0x00.
-	var dottedHexRE = "(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]";
-
-	// dotted octal IP address RE.  Each number is between 0000-0377.  
-	// Zero padding is allowed, but each number must have at least 4 characters.
-	var dottedOctalRE = "(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]";
-
-	// decimal IP address RE.  A decimal number between 0-4294967295.  
-	var decimalRE =  "(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|" +
-		"4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])";
-
-	// hexadecimal IP address RE. 
-	// A hexadecimal number between 0x0-0xFFFFFFFF. Case insensitive.  Zero padding is allowed.
-	var hexRE = "0[xX]0*[\\da-fA-F]{1,8}";
-
-	// IPv6 address RE. 
-	// The format is written as eight groups of four hexadecimal digits, x:x:x:x:x:x:x:x,
-	// where x is between 0000-ffff. Zero padding is optional. Case insensitive. 
-	var ipv6RE = "([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}";
-
-	// IPv6/IPv4 Hybrid address RE. 
-	// The format is written as six groups of four hexadecimal digits, 
-	// followed by the 4 dotted decimal IPv4 format. x:x:x:x:x:x:d.d.d.d
-	var hybridRE = "([\\da-fA-F]{1,4}\\:){6}" + 
-		"((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-
-	// Build IP Address RE
-	var a = [];
-	if (flags.allowDottedDecimal) { a.push(dottedDecimalRE); }
-	if (flags.allowDottedHex) { a.push(dottedHexRE); }
-	if (flags.allowDottedOctal) { a.push(dottedOctalRE); }
-	if (flags.allowDecimal) { a.push(decimalRE); }
-	if (flags.allowHex) { a.push(hexRE); }
-	if (flags.allowIPv6) { a.push(ipv6RE); }
-	if (flags.allowHybrid) { a.push(hybridRE); }
-
-	var ipAddressRE = "";
-	if (a.length > 0) {
-		ipAddressRE = "(" + a.join("|") + ")";
-	}
-
-	return ipAddressRE;
-}
-
-/**
-  Builds a RE that matches a host.
-	A host is a domain name or an IP address, possibly followed by a port number.
-
-  @param flags  An object.
-    flags.allowIP  Allow an IP address for hostname.  Default is true.
-    flags.allowLocal  Allow the host to be "localhost".  Default is false.
-    flags.allowPort  Allow a port number to be present.  Default is true.
-    flags in regexp.ipAddress can be applied.
-    flags in regexp.tld can be applied.
-
-  @return  A string for a regular expression for a host.
-*/
-dojo.regexp.host = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.allowIP != "boolean") { flags.allowIP = true; }
-	if (typeof flags.allowLocal != "boolean") { flags.allowLocal = false; }
-	if (typeof flags.allowPort != "boolean") { flags.allowPort = true; }
-
-	// Domain names can not end with a dash.
-	var domainNameRE = "([0-9a-zA-Z]([-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?\\.)+" + dojo.regexp.tld(flags);
-
-	// port number RE
-	portRE = ( flags.allowPort ) ? "(\\:" + dojo.regexp.integer({signed: false}) + ")?" : "";
-
-	// build host RE
-	var hostNameRE = domainNameRE;
-	if (flags.allowIP) { hostNameRE += "|" +  dojo.regexp.ipAddress(flags); }
-	if (flags.allowLocal) { hostNameRE += "|localhost"; }
-
-	return "(" + hostNameRE + ")" + portRE;
-}
-
-/**
-  Builds a regular expression that matches a URL.
-
-  @param flags  An object.
-    flags.scheme  Can be true, false, or [true, false]. 
-      This means: required, not allowed, or match either one.
-    flags in regexp.host can be applied.
-    flags in regexp.ipAddress can be applied.
-    flags in regexp.tld can be applied.
-
-  @return  A string for a regular expression for a URL.
-*/
-dojo.regexp.url = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.scheme == "undefined") { flags.scheme = [true, false]; }
-
-	// Scheme RE
-	var protocalRE = dojo.regexp.buildGroupRE(flags.scheme,
-		function(q) { if (q) { return "(https?|ftps?)\\://"; }  return ""; }
-	);
-
-	// Path and query and anchor RE
-	var pathRE = "(/([^?#\\s/]+/)*)?([^?#\\s/]+(\\?[^?#\\s/]*)?(#[A-Za-z][\\w.:-]*)?)?";
-
-	return (protocalRE + dojo.regexp.host(flags) + pathRE);
-}
-
-/**
-  Builds a regular expression that matches an email address.
-
-  @param flags  An object.
-    flags.allowCruft  Allow address like <mailto:foo@yahoo.com>.  Default is false.
-    flags in regexp.host can be applied.
-    flags in regexp.ipAddress can be applied.
-    flags in regexp.tld can be applied.
-
-  @return  A string for a regular expression for an email address.
-*/
-dojo.regexp.emailAddress = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.allowCruft != "boolean") { flags.allowCruft = false; }
-	flags.allowPort = false; // invalid in email addresses
-
-	// user name RE - apostrophes are valid if there's not 2 in a row
-	var usernameRE = "([\\da-z]+[-._+&'])*[\\da-z]+";
-
-	// build emailAddress RE
-	var emailAddressRE = usernameRE + "@" + dojo.regexp.host(flags);
-
-	// Allow email addresses with cruft
-	if ( flags.allowCruft ) {
-		emailAddressRE = "<?(mailto\\:)?" + emailAddressRE + ">?";
-	}
-
-	return emailAddressRE;
-}
-
-/**
-  Builds a regular expression that matches a list of email addresses.
-
-  @param flags  An object.
-    flags.listSeparator  The character used to separate email addresses.  Default is ";", ",", "\n" or " ".
-    flags in regexp.emailAddress can be applied.
-    flags in regexp.host can be applied.
-    flags in regexp.ipAddress can be applied.
-    flags in regexp.tld can be applied.
-
-  @return  A string for a regular expression for an email address list.
-*/
-dojo.regexp.emailAddressList = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.listSeparator != "string") { flags.listSeparator = "\\s;,"; }
-
-	// build a RE for an Email Address List
-	var emailAddressRE = dojo.regexp.emailAddress(flags);
-	var emailAddressListRE = "(" + emailAddressRE + "\\s*[" + flags.listSeparator + "]\\s*)*" + 
-		emailAddressRE + "\\s*[" + flags.listSeparator + "]?\\s*";
-
-	return emailAddressListRE;
-}
-
-/**
-  Builds a regular expression that matches an integer.
-
-  @param flags  An object.
-    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. will match if it is signed or unsigned).
-    flags.separator  The character used as the thousands separator.  Default is no separator.
-      For more than one symbol use an array, e.g. [",", ""], makes ',' optional.
-
-  @return  A string for a regular expression for an integer.
-*/
-dojo.regexp.integer = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.signed == "undefined") { flags.signed = [true, false]; }
-	if (typeof flags.separator == "undefined") { flags.separator = ""; }
-
-	// build sign RE
-	var signRE = dojo.regexp.buildGroupRE(flags.signed,
-		function(q) { if (q) { return "[-+]"; }  return ""; }
-	);
-
-	// number RE
-	var numberRE = dojo.regexp.buildGroupRE(flags.separator,
-		function(sep) { 
-			if ( sep == "" ) { 
-				return "(0|[1-9]\\d*)"; 
-			}
-			return "(0|[1-9]\\d{0,2}([" + sep + "]\\d{3})*)"; 
-		}
-	);
-	var numberRE;
-
-	// integer RE
-	return (signRE + numberRE);
-}
-
-/**
-  Builds a regular expression to match a real number in exponential notation.
-
-  @param flags  An object.
-    flags.places  The integer number of decimal places.
-      If not given, the decimal part is optional and the number of places is unlimited.
-    flags.decimal  A string for the character used as the decimal point.  Default is ".".
-    flags.exponent  Express in exponential notation.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. will match if the exponential part is present are not).
-    flags.eSigned  The leading plus-or-minus sign on the exponent.  Can be true, false, 
-      or [true, false].  Default is [true, false], (i.e. will match if it is signed or unsigned).
-    flags in regexp.integer can be applied.
-
-  @return  A string for a regular expression for a real number.
-*/
-dojo.regexp.realNumber = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.places != "number") { flags.places = Infinity; }
-	if (typeof flags.decimal != "string") { flags.decimal = "."; }
-	if (typeof flags.exponent == "undefined") { flags.exponent = [true, false]; }
-	if (typeof flags.eSigned == "undefined") { flags.eSigned = [true, false]; }
-
-	// integer RE
-	var integerRE = dojo.regexp.integer(flags);
-
-	// decimal RE
-	var decimalRE = "";
-	if ( flags.places == Infinity) { 
-		decimalRE = "(\\" + flags.decimal + "\\d+)?"; 
-	}
-	else if ( flags.places > 0) { 
-		decimalRE = "\\" + flags.decimal + "\\d{" + flags.places + "}"; 
-	}
-
-	// exponent RE
-	var exponentRE = dojo.regexp.buildGroupRE(flags.exponent,
-		function(q) { 
-			if (q) { return "([eE]" + dojo.regexp.integer({signed: flags.eSigned}) + ")"; }
-			return ""; 
-		}
-	);
-
-	// real number RE
-	return (integerRE + decimalRE + exponentRE);
-}
-
-/**
-  Builds a regular expression to match a monetary value.
-
-  @param flags  An object.
-    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. will match if it is signed or unsigned).
-    flags.symbol  A currency symbol such as Yen "�", Pound "�", or the Euro sign "�".  
-      Default is "$".  For more than one symbol use an array, e.g. ["$", ""], makes $ optional.
-    flags.placement  The symbol can come "before" the number or "after".  Default is "before".
-    flags.separator  The character used as the thousands separator. The default is ",".
-    flags.cents  The two decimal places for cents.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. will match if cents are present are not).
-    flags.decimal  A string for the character used as the decimal point.  Default is ".".
-
-  @return  A string for a regular expression for a monetary value.
-*/
-dojo.regexp.currency = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.signed == "undefined") { flags.signed = [true, false]; }
-	if (typeof flags.symbol == "undefined") { flags.symbol = "$"; }
-	if (typeof flags.placement != "string") { flags.placement = "before"; }
-	if (typeof flags.separator != "string") { flags.separator = ","; }
-	if (typeof flags.cents == "undefined") { flags.cents = [true, false]; }
-	if (typeof flags.decimal != "string") { flags.decimal = "."; }
-
-	// build sign RE
-	var signRE = dojo.regexp.buildGroupRE(flags.signed,
-		function(q) { if (q) { return "[-+]"; }  return ""; }
-	);
-
-	// build symbol RE
-	var symbolRE = dojo.regexp.buildGroupRE(flags.symbol,
-		function(symbol) { 
-			// escape all special characters
-			return "\\s?" + symbol.replace( /([.$?*!=:|\\\/^])/g, "\\$1") + "\\s?";
-		}
-	);
-
-	// number RE
-	var numberRE = dojo.regexp.integer( {signed: false, separator: flags.separator} );
-
-	// build cents RE
-	var centsRE = dojo.regexp.buildGroupRE(flags.cents,
-		function(q) { if (q) { return "(\\" + flags.decimal + "\\d\\d)"; }  return ""; }
-	);
-
-	// build currency RE
-	var currencyRE;
-	if (flags.placement == "before") {
-		currencyRE = signRE + symbolRE + numberRE + centsRE;
-	}
-	else {
-		currencyRE = signRE + numberRE + centsRE + symbolRE;
-	}
-
-	return currencyRE;
-}
-
-/**
-  A regular expression to match US state and territory abbreviations.
-
-  @param flags  An object.
-    flags.allowTerritories  Allow Guam, Puerto Rico, etc.  Default is true.
-    flags.allowMilitary  Allow military 'states', e.g. Armed Forces Europe (AE).  Default is true.
-
-  @return  A string for a regular expression for a US state.
-*/
-dojo.regexp.us.state = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.allowTerritories != "boolean") { flags.allowTerritories = true; }
-	if (typeof flags.allowMilitary != "boolean") { flags.allowMilitary = true; }
-
-	// state RE
-	var statesRE = 
-		"AL|AK|AZ|AR|CA|CO|CT|DE|DC|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|" + 
-		"NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY";
-
-	// territories RE
-	var territoriesRE = "AS|FM|GU|MH|MP|PW|PR|VI";
-
-	// military states RE
-	var militaryRE = "AA|AE|AP";
-
-	// Build states and territories RE
-	if (flags.allowTerritories) { statesRE += "|" + territoriesRE; }
-	if (flags.allowMilitary) { statesRE += "|" + militaryRE; }
-
-	return "(" + statesRE + ")";
-}
-
-/**
-  Builds a regular expression to match any International format for time.
-  The RE can match one format or one of multiple formats.
-
-  Format
-  h        12 hour, no zero padding.
-  hh       12 hour, has leading zero.
-  H        24 hour, no zero padding.
-  HH       24 hour, has leading zero.
-  m        minutes, no zero padding.
-  mm       minutes, has leading zero.
-  s        seconds, no zero padding.
-  ss       seconds, has leading zero.
-  t        am or pm, case insensitive.
-  All other characters must appear literally in the expression.
-
-  Example
-    "h:m:s t"  ->   2:5:33 PM
-    "HH:mm:ss" ->  14:05:33
-
-  @param flags  An object.
-    flags.format  A string or an array of strings.  Default is "h:mm:ss t".
-    flags.amSymbol  The symbol used for AM.  Default is "AM".
-    flags.pmSymbol  The symbol used for PM.  Default is "PM".
-
-  @return  A string for a regular expression for a time value.
-*/
-dojo.regexp.time = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.format == "undefined") { flags.format = "h:mm:ss t"; }
-	if (typeof flags.amSymbol != "string") { flags.amSymbol = "AM"; }
-	if (typeof flags.pmSymbol != "string") { flags.pmSymbol = "PM"; }
-
-	// Converts a time format to a RE
-	var timeRE = function(format) {
-		// escape all special characters
-		format = format.replace( /([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-		var amRE = flags.amSymbol.replace( /([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-		var pmRE = flags.pmSymbol.replace( /([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-
-		// replace tokens with Regular Expressions
-		format = format.replace("hh", "(0[1-9]|1[0-2])");
-		format = format.replace("h", "([1-9]|1[0-2])");
-		format = format.replace("HH", "([01][0-9]|2[0-3])");
-		format = format.replace("H", "([0-9]|1[0-9]|2[0-3])");
-		format = format.replace("mm", "([0-5][0-9])");
-		format = format.replace("m", "([1-5][0-9]|[0-9])");
-		format = format.replace("ss", "([0-5][0-9])");
-		format = format.replace("s", "([1-5][0-9]|[0-9])");
-		format = format.replace("t", "\\s?(" + amRE + "|" + pmRE + ")\\s?" );
-
-		return format;
-	};
-
-	// build RE for multiple time formats
-	return dojo.regexp.buildGroupRE(flags.format, timeRE);
-}
-
-/**
-  Builds a regular expression to match any sort of number based format.
-  Use it for phone numbers, social security numbers, zip-codes, etc.
-  The RE can match one format or one of multiple formats.
-
-  Format
-    #        Stands for a digit, 0-9.
-    ?        Stands for an optional digit, 0-9 or nothing.
-    All other characters must appear literally in the expression.
-
-  Example   
-    "(###) ###-####"       ->   (510) 542-9742
-    "(###) ###-#### x#???" ->   (510) 542-9742 x153
-    "###-##-####"          ->   506-82-1089       i.e. social security number
-    "#####-####"           ->   98225-1649        i.e. zip code
-
-  @param flags  An object.
-    flags.format  A string or an Array of strings for multiple formats.
-  @return  A string for a regular expression for the number format(s).
-*/
-dojo.regexp.numberFormat = function(flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.format == "undefined") { flags.format = "###-###-####"; }
-
-	// Converts a number format to RE.
-	var digitRE = function(format) {
-		// escape all special characters, except '?'
-		format = format.replace( /([.$*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-
-		// Now replace '?' with Regular Expression
-		format = format.replace(/\?/g, "\\d?");
-
-		// replace # with Regular Expression
-		format = format.replace(/#/g, "\\d");
-
-		return format;
-	};
-
-	// build RE for multiple number formats
-	return dojo.regexp.buildGroupRE(flags.format, digitRE);
-}
-
-
-/**
-  This is basically a utility function used by some of the RE generators.
-  Builds a regular expression that groups subexpressions.
-  The subexpressions are constructed by the function, re, in the second parameter.
-  re builds one subexpression for each elem in the array a, in the first parameter.
-
-  @param a  A single value or an array of values.
-  @param re  A function.  Takes one parameter and converts it to a regular expression. 
-  @return  A string for a regular expression that groups all the subexpressions.
-*/
-dojo.regexp.buildGroupRE = function(a, re) {
-
-	// case 1: a is a single value.
-	if ( !( a instanceof Array ) ) { 
-		return re(a);
-	}
-
-	// case 2: a is an array
-	var b = [];
-	for (var i = 0; i < a.length; i++) {
-		// convert each elem to a RE
-		b.push(re(a[i]));
-	}
-
-	 // join the REs as alternatives in a RE group.
-	return "(" + b.join("|") + ")";
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/Deferred.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/Deferred.js
deleted file mode 100644
index e15fc60..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/Deferred.js
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.rpc.Deferred");
-dojo.require("dojo.lang");
-
-dojo.rpc.Deferred = function(/* optional */ canceller){
-	/*
-	NOTE: this namespace and documentation are imported wholesale 
-		from MochiKit
-
-	Encapsulates a sequence of callbacks in response to a value that
-	may not yet be available.  This is modeled after the Deferred class
-	from Twisted <http://twistedmatrix.com>.
-
-	Why do we want this?  JavaScript has no threads, and even if it did,
-	threads are hard.  Deferreds are a way of abstracting non-blocking
-	events, such as the final response to an XMLHttpRequest.
-
-	The sequence of callbacks is internally represented as a list
-	of 2-tuples containing the callback/errback pair.  For example,
-	the following call sequence::
-
-		var d = new Deferred();
-		d.addCallback(myCallback);
-		d.addErrback(myErrback);
-		d.addBoth(myBoth);
-		d.addCallbacks(myCallback, myErrback);
-
-	is translated into a Deferred with the following internal
-	representation::
-
-		[
-			[myCallback, null],
-			[null, myErrback],
-			[myBoth, myBoth],
-			[myCallback, myErrback]
-		]
-
-	The Deferred also keeps track of its current status (fired).
-	Its status may be one of three things:
-
-		-1: no value yet (initial condition)
-		0: success
-		1: error
-
-	A Deferred will be in the error state if one of the following
-	three conditions are met:
-
-		1. The result given to callback or errback is "instanceof" Error
-		2. The previous callback or errback raised an exception while
-		   executing
-		3. The previous callback or errback returned a value "instanceof"
-			Error
-
-	Otherwise, the Deferred will be in the success state.  The state of
-	the Deferred determines the next element in the callback sequence to
-	run.
-
-	When a callback or errback occurs with the example deferred chain,
-	something equivalent to the following will happen (imagine that
-	exceptions are caught and returned)::
-
-		// d.callback(result) or d.errback(result)
-		if(!(result instanceof Error)){
-			result = myCallback(result);
-		}
-		if(result instanceof Error){
-			result = myErrback(result);
-		}
-		result = myBoth(result);
-		if(result instanceof Error){
-			result = myErrback(result);
-		}else{
-			result = myCallback(result);
-		}
-
-	The result is then stored away in case another step is added to the
-	callback sequence.	Since the Deferred already has a value available,
-	any new callbacks added will be called immediately.
-
-	There are two other "advanced" details about this implementation that
-	are useful:
-
-	Callbacks are allowed to return Deferred instances themselves, so you
-	can build complicated sequences of events with ease.
-
-	The creator of the Deferred may specify a canceller.  The canceller
-	is a function that will be called if Deferred.cancel is called before
-	the Deferred fires.	 You can use this to implement clean aborting of
-	an XMLHttpRequest, etc.	 Note that cancel will fire the deferred with
-	a CancelledError (unless your canceller returns another kind of
-	error), so the errbacks should be prepared to handle that error for
-	cancellable Deferreds.
-
-	*/
-	
-	this.chain = [];
-	this.id = this._nextId();
-	this.fired = -1;
-	this.paused = 0;
-	this.results = [null, null];
-	this.canceller = canceller;
-	this.silentlyCancelled = false;
-};
-
-dojo.lang.extend(dojo.rpc.Deferred, {
-	getFunctionFromArgs: function(){
-		var a = arguments;
-		if((a[0])&&(!a[1])){
-			if(dojo.lang.isFunction(a[0])){
-				return a[0];
-			}else if(dojo.lang.isString(a[0])){
-				return dj_global[a[0]];
-			}
-		}else if((a[0])&&(a[1])){
-			return dojo.lang.hitch(a[0], a[1]);
-		}
-		return null;
-	},
-
-	repr: function(){
-		var state;
-		if(this.fired == -1){
-			state = 'unfired';
-		}else if(this.fired == 0){
-			state = 'success';
-		} else {
-			state = 'error';
-		}
-		return 'Deferred(' + this.id + ', ' + state + ')';
-	},
-
-	toString: dojo.lang.forward("repr"),
-
-	_nextId: (function(){
-		var n = 1;
-		return function(){ return n++; };
-	})(),
-
-	cancel: function(){
-		/***
-		Cancels a Deferred that has not yet received a value, or is
-		waiting on another Deferred as its value.
-
-		If a canceller is defined, the canceller is called. If the
-		canceller did not return an error, or there was no canceller,
-		then the errback chain is started with CancelledError.
-		***/
-		if(this.fired == -1){
-			if (this.canceller){
-				this.canceller(this);
-			}else{
-				this.silentlyCancelled = true;
-			}
-			if(this.fired == -1){
-				this.errback(new Error(this.repr()));
-			}
-		}else if(	(this.fired == 0)&&
-					(this.results[0] instanceof dojo.rpc.Deferred)){
-			this.results[0].cancel();
-		}
-	},
-			
-
-	_pause: function(){
-		// Used internally to signal that it's waiting on another Deferred
-		this.paused++;
-	},
-
-	_unpause: function(){
-		// Used internally to signal that it's no longer waiting on
-		// another Deferred.
-		this.paused--;
-		if ((this.paused == 0) && (this.fired >= 0)) {
-			this._fire();
-		}
-	},
-
-	_continue: function(res){
-		// Used internally when a dependent deferred fires.
-		this._resback(res);
-		this._unpause();
-	},
-
-	_resback: function(res){
-		// The primitive that means either callback or errback
-		this.fired = ((res instanceof Error) ? 1 : 0);
-		this.results[this.fired] = res;
-		this._fire();
-	},
-
-	_check: function(){
-		if(this.fired != -1){
-			if(!this.silentlyCancelled){
-				dojo.raise("already called!");
-			}
-			this.silentlyCancelled = false;
-			return;
-		}
-	},
-
-	callback: function(res){
-		/*
-		Begin the callback sequence with a non-error value.
-		
-		callback or errback should only be called once on a given
-		Deferred.
-		*/
-		this._check();
-		this._resback(res);
-	},
-
-	errback: function(res){
-		// Begin the callback sequence with an error result.
-		this._check();
-		if(!(res instanceof Error)){
-			res = new Error(res);
-		}
-		this._resback(res);
-	},
-
-	addBoth: function(cb, cbfn){
-		/*
-		Add the same function as both a callback and an errback as the
-		next element on the callback sequence.	This is useful for code
-		that you want to guarantee to run, e.g. a finalizer.
-		*/
-		var enclosed = this.getFunctionFromArgs(cb, cbfn);
-		if(arguments.length > 2){
-			enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
-		}
-		return this.addCallbacks(enclosed, enclosed);
-	},
-
-	addCallback: function(cb, cbfn){
-		// Add a single callback to the end of the callback sequence.
-		var enclosed = this.getFunctionFromArgs(cb, cbfn);
-		if(arguments.length > 2){
-			enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
-		}
-		return this.addCallbacks(enclosed, null);
-	},
-
-	addErrback: function(cb, cbfn){
-		// Add a single callback to the end of the callback sequence.
-		var enclosed = this.getFunctionFromArgs(cb, cbfn);
-		if(arguments.length > 2){
-			enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
-		}
-		return this.addCallbacks(null, enclosed);
-		return this.addCallbacks(null, fn);
-	},
-
-	addCallbacks: function (cb, eb) {
-		// Add separate callback and errback to the end of the callback
-		// sequence.
-		this.chain.push([cb, eb])
-		if (this.fired >= 0) {
-			this._fire();
-		}
-		return this;
-	},
-
-	_fire: function(){
-		// Used internally to exhaust the callback sequence when a result
-		// is available.
-		var chain = this.chain;
-		var fired = this.fired;
-		var res = this.results[fired];
-		var self = this;
-		var cb = null;
-		while (chain.length > 0 && this.paused == 0) {
-			// Array
-			var pair = chain.shift();
-			var f = pair[fired];
-			if (f == null) {
-				continue;
-			}
-			try {
-				res = f(res);
-				fired = ((res instanceof Error) ? 1 : 0);
-				if(res instanceof dojo.rpc.Deferred) {
-					cb = function(res){
-						self._continue(res);
-					}
-					this._pause();
-				}
-			}catch(err){
-				fired = 1;
-				res = err;
-			}
-		}
-		this.fired = fired;
-		this.results[fired] = res;
-		if((cb)&&(this.paused)){
-			// this is for "tail recursion" in case the dependent
-			// deferred is already fired
-			res.addBoth(cb);
-		}
-	}
-});
-
-/*
-dojo.lang.extend(dojo.rpc.Deferred, {
-	
-	getFunctionFromArgs: function(){
-		var a = arguments;
-		if((a[0])&&(!a[1])){
-			if(dojo.lang.isFunction(a[0])){
-				return a[0];
-			}else if(dojo.lang.isString(a[0])){
-				return dj_global[a[0]];
-			}
-		}else if((a[0])&&(a[1])){
-			return dojo.lang.hitch(a[0], a[1]);
-		}
-		return null;
-	},
-
-	addCallback: function(cb, cbfn){
-		var enclosed = this.getFunctionFromArgs(cb, cbfn)
-		if(enclosed){
-			this._callbacks.push(enclosed);
-			if(this.results){
-				enclosed(this.results);
-			}
-		}else{
-			dojo.raise("Deferred: object supplied to addCallback is not a function");
-		}
-	},
-
-	addErrback: function(eb, ebfn){
-		var enclosed = this.getFunctionFromArgs(eb, ebfn)
-		if(enclosed){
-			this._errbacks.push(enclosed);
-			if(this.error){
-				enclosed(this.error);
-			}	
-		}else{
-			dojo.raise("Deferred: object supplied to addErrback is not a function");
-		}
-	},
-
-	addBoth: function(cb, eb){
-		this.addCallback(cb);
-		this.addErrback(eb);
-	},
-
-	callback: function(results){
-		this.results = results;
-		dojo.lang.forEach(this._callbacks, function(func){
-			func(results);
-		});
-	},
-
-	errback: function(error){
-		this.error = error;
-		dojo.lang.forEach(this._errbacks, function(func){
-			func(error);
-		});
-	}
-
-});
-*/
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/JotService.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/JotService.js
deleted file mode 100644
index 2b4d738..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/JotService.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.rpc.JotService");
-dojo.require("dojo.rpc.RpcService");
-dojo.require("dojo.rpc.JsonService");
-dojo.require("dojo.json");
-
-dojo.rpc.JotService = function(){
-	this.serviceUrl = "/_/jsonrpc";
-}
-
-dojo.inherits(dojo.rpc.JotService, dojo.rpc.JsonService);
-
-dojo.lang.extend(dojo.rpc.JotService, {
-	bind: function(method, parameters, deferredRequestHandler){
-		dojo.io.bind({
-			url: this.serviceUrl,
-			content: {
-				json: this.createRequest(method, parameters)
-			},
-			method: "POST",
-			mimetype: "text/json",
-			load: this.resultCallback(deferredRequestHandler),
-			preventCache: true
-		});
-	},
-
-	createRequest: function(method, params){
-		var req = { "params": params, "method": method, "id": this.lastSubmissionId++ };
-		return dojo.json.serialize(req);
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/JsonService.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/JsonService.js
deleted file mode 100644
index 98e6ba8..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/JsonService.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.rpc.JsonService");
-dojo.require("dojo.rpc.RpcService");
-dojo.require("dojo.io.*");
-dojo.require("dojo.json");
-dojo.require("dojo.lang");
-
-dojo.rpc.JsonService = function(args){
-	// passing just the URL isn't terribly useful. It's expected that at
-	// various times folks will want to specify:
-	//	- just the serviceUrl (for use w/ remoteCall())
-	//	- the text of the SMD to evaluate
-	// 	- a raw SMD object
-	//	- the SMD URL
-	if(args){
-		if(dojo.lang.isString(args)){
-			// we assume it's an SMD file to be processed, since this was the
-			// earlier function signature
-
-			// FIXME: also accept dojo.uri.Uri objects?
-			this.connect(args);
-		}else{
-			// otherwise we assume it's an arguments object with the following
-			// (optional) properties:
-			//	- serviceUrl
-			//	- strictArgChecks
-			//	- smdUrl
-			//	- smdStr
-			//	- smdObj
-			if(args["smdUrl"]){
-				this.connect(args.smdUrl);
-			}
-			if(args["smdStr"]){
-				this.processSmd(dj_eval("("+args.smdStr+")"));
-			}
-			if(args["smdObj"]){
-				this.processSmd(args.smdObj);
-			}
-			if(args["serviceUrl"]){
-				this.serviceUrl = args.serviceUrl;
-			}
-			if(args["strictArgChecks"]){
-				this.strictArgChecks = args.strictArgChecks;
-			}
-		}
-	}
-}
-
-dojo.inherits(dojo.rpc.JsonService, dojo.rpc.RpcService);
-
-dojo.lang.extend(dojo.rpc.JsonService, {
-
-	bustCache: false,
-
-	lastSubmissionId: 0,
-
-	callRemote: function(method, params){
-		var deferred = new dojo.rpc.Deferred();
-		this.bind(method, params, deferred);
-		return deferred;
-	},
-
-	bind: function(method, parameters, deferredRequestHandler){
-		dojo.io.bind({
-			url: this.serviceUrl,
-			postContent: this.createRequest(method, parameters),
-			method: "POST",
-			mimetype: "text/json",
-			load: this.resultCallback(deferredRequestHandler),
-			preventCache:this.bustCache 
-		});
-	},
-
-	createRequest: function(method, params){
-		var req = { "params": params, "method": method, "id": this.lastSubmissionId++ };
-		var data = dojo.json.serialize(req);
-		dojo.debug("JsonService: JSON-RPC Request: " + data);
-		return data;
-	},
-
-	parseResults: function(obj){
-		if(obj["result"]){
-			return obj["result"];
-		}else{
-			return obj;
-		}
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/RpcService.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/RpcService.js
deleted file mode 100644
index 9a81784..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/RpcService.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.rpc.RpcService");
-dojo.require("dojo.io.*");
-dojo.require("dojo.json");
-dojo.require("dojo.lang");
-dojo.require("dojo.rpc.Deferred");
-
-dojo.rpc.RpcService = function(url){
-	// summary
-	// constructor for rpc base class
-	if(url){
-		this.connect(url);
-	}
-}
-
-dojo.lang.extend(dojo.rpc.RpcService, {
-
-	strictArgChecks: true,
-	serviceUrl: "",
-
-	parseResults: function(obj){
-		// summary
-		// parse the results coming back from an rpc request.  
-   		// this base implementation, just returns the full object
-		// subclasses should parse and only return the actual results
-		return obj;
-	},
-
-	errorCallback: function(/* dojo.rpc.Deferred */ deferredRequestHandler){
-		// summary
-		// create callback that calls the Deferres errback method
-		return function(type, obj, e){
-			deferredRequestHandler.errback(e);
-		}
-	},
-
-	resultCallback: function(/* dojo.rpc.Deferred */ deferredRequestHandler){
-		// summary
-		// create callback that calls the Deferred's callback method
-		var tf = dojo.lang.hitch(this, 
-			function(type, obj, e){
-				var results = this.parseResults(obj);
-				deferredRequestHandler.callback(results); 
-			}
-		);
-		return tf;
-	},
-
-
-	generateMethod: function(/* string */ method, /* array */ parameters){
-		// summary
-		// generate the local bind methods for the remote object
-		var _this = this;
-		return function(){
-			var deferredRequestHandler = new dojo.rpc.Deferred();
-
-			// if params weren't specified, then we can assume it's varargs
-			if(
-				(!_this.strictArgChecks)||
-				(
-					(parameters != null)&&
-					(arguments.length != parameters.length)
-				)
-			){
-				dojo.raise("Invalid number of parameters for remote method.");
-				// put error stuff here, no enough params
-			} else {
-				_this.bind(method, arguments, deferredRequestHandler);
-			}
-
-			return deferredRequestHandler;
-		};
-	},
-
-	processSmd: function(/*json */object){
-
-		// summary
-		// callback method for reciept of a smd object.  Parse the smd and generate functions based on the description
-		dojo.debug("RpcService: Processing returned SMD.");
-		for(var n = 0; n < object.methods.length; n++){
-			dojo.debug("RpcService: Creating Method: this.", object.methods[n].name, "()");
-  			this[object.methods[n].name] = this.generateMethod(object.methods[n].name,object.methods[n].parameters);
-			if (dojo.lang.isFunction(this[object.methods[n].name])) {
-				dojo.debug("RpcService: Successfully created", object.methods[n].name, "()");
-			} else {
-				dojo.debug("RpcService: Failed to create", object.methods[n].name, "()");
-			}
-		}
-
-		this.serviceUrl = object.serviceUrl||object.serviceURL;
-		dojo.debug("RpcService: Dojo RpcService is ready for use.");
-	},
-
-	connect: function(/* string */smdUrl){
-		// summary
-		// connect to a remote url and retrieve a smd object
-		dojo.debug("RpcService: Attempting to load SMD document from:", smdUrl);
-		dojo.io.bind({
-			url: smdUrl,
-			mimetype: "text/json",
-			load: dojo.lang.hitch(this, function(type, object, e){ return this.processSmd(object); }),
-			sync: true
-		});		
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/__package__.js
deleted file mode 100644
index 9802172..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/rpc/__package__.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.rpc.JsonService", false, false]
-});
-dojo.hostenv.moduleLoaded("dojo.rpc.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/selection.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/selection.js
deleted file mode 100644
index 9d3f4fc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/selection.js
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.selection");
-dojo.require("dojo.lang");
-dojo.require("dojo.math");
-
-dojo.selection.Selection = function(items, isCollection) {
-	this.items = [];
-	this.selection = [];
-	this._pivotItems = [];
-	this.clearItems();
-
-	if(items) {
-		if(isCollection) {
-			this.setItemsCollection(items);
-		} else {
-			this.setItems(items);
-		}
-	}
-}
-dojo.lang.extend(dojo.selection.Selection, {
-	items: null, // items to select from, order matters
-
-	selection: null, // items selected, aren't stored in order (see sorted())
-	lastSelected: null, // last item selected
-
-	allowImplicit: true, // if true, grow selection will start from 0th item when nothing is selected
-	length: 0, // number of *selected* items
-
-	_pivotItems: null, // stack of pivot items
-	_pivotItem: null, // item we grow selections from, top of stack
-
-	// event handlers
-	onSelect: function(item) {},
-	onDeselect: function(item) {},
-	onSelectChange: function(item, selected) {},
-
-	_find: function(item, inSelection) {
-		if(inSelection) {
-			return dojo.lang.find(item, this.selection);
-		} else {
-			return dojo.lang.find(item, this.items);
-		}
-	},
-
-	isSelectable: function(item) {
-		// user-customizable, will filter items through this
-		return true;
-	},
-
-	setItems: function(/* ... */) {
-		this.clearItems();
-		this.addItems.call(this, arguments);
-	},
-
-	// this is in case you have an active collection array-like object
-	// (i.e. getElementsByTagName collection) that manages its own order
-	// and item list
-	setItemsCollection: function(collection) {
-		this.items = collection;
-	},
-
-	addItems: function(/* ... */) {
-		var args = dojo.lang.unnest(arguments);
-		for(var i = 0; i < args.length; i++) {
-			this.items.push(args[i]);
-		}
-	},
-
-	addItemsAt: function(item, before /* ... */) {
-		if(this.items.length == 0) { // work for empy case
-			return this.addItems(dojo.lang.toArray(arguments, 2));
-		}
-
-		if(!this.isItem(item)) {
-			item = this.items[item];
-		}
-		if(!item) { throw new Error("addItemsAt: item doesn't exist"); }
-		var idx = this._find(item);
-		if(idx > 0 && before) { idx--; }
-		for(var i = 2; i < arguments.length; i++) {
-			if(!this.isItem(arguments[i])) {
-				this.items.splice(idx++, 0, arguments[i]);
-			}
-		}
-	},
-
-	removeItem: function(item) {
-		// remove item
-		var idx = this._find(item);
-		if(idx > -1) {
-			this.items.splice(i, 1);
-		}
-		// remove from selection
-		// FIXME: do we call deselect? I don't think so because this isn't how
-		// you usually want to deselect an item. For example, if you deleted an
-		// item, you don't really want to deselect it -- you want it gone. -DS
-		id = this._find(item, true);
-		if(idx > -1) {
-			this.selection.splice(i, 1);
-		}
-	},
-
-	clearItems: function() {
-		this.items = [];
-		this.deselectAll();
-	},
-
-	isItem: function(item) {
-		return this._find(item) > -1;
-	},
-
-	isSelected: function(item) {
-		return this._find(item, true) > -1;
-	},
-
-	/**
-	 * allows you to filter item in or out of the selection
-	 * depending on the current selection and action to be taken
-	**/
-	selectFilter: function(item, selection, add, grow) {
-		return true;
-	},
-
-	/**
-	 * update -- manages selections, most selecting should be done here
-	 *  item => item which may be added/grown to/only selected/deselected
-	 *  add => behaves like ctrl in windows selection world
-	 *  grow => behaves like shift
-	 *  noToggle => if true, don't toggle selection on item
-	**/
-	update: function(item, add, grow, noToggle) {
-		if(!this.isItem(item)) { return false; }
-
-		if(grow) {
-			if(!this.isSelected(item)
-				&& this.selectFilter(item, this.selection, false, true)) {
-				this.grow(item);
-				this.lastSelected = item;
-			}
-		} else if(add) {
-			if(this.selectFilter(item, this.selection, true, false)) {
-				if(noToggle) {
-					if(this.select(item)) {
-						this.lastSelected = item;
-					}
-				} else if(this.toggleSelected(item)) {
-					this.lastSelected = item;
-				}
-			}
-		} else {
-			this.deselectAll();
-			this.select(item);
-		}
-
-		this.length = this.selection.length;
-	},
-
-	/**
-	 * Grow a selection.
-	 *  toItem => which item to grow selection to
-	 *  fromItem => which item to start the growth from (it won't be selected)
-	 *
-	 * Any items in (fromItem, lastSelected] that aren't part of
-	 * (fromItem, toItem] will be deselected
-	**/
-	grow: function(toItem, fromItem) {
-		if(arguments.length == 1) {
-			fromItem = this._pivotItem;
-			if(!fromItem && this.allowImplicit) {
-				fromItem = this.items[0];
-			}
-		}
-		if(!toItem || !fromItem) { return false; }
-
-		var fromIdx = this._find(fromItem);
-
-		// get items to deselect (fromItem, lastSelected]
-		var toDeselect = {};
-		var lastIdx = -1;
-		if(this.lastSelected) {
-			lastIdx = this._find(this.lastSelected);
-			var step = fromIdx < lastIdx ? -1 : 1;
-			var range = dojo.math.range(lastIdx, fromIdx, step);
-			for(var i = 0; i < range.length; i++) {
-				toDeselect[range[i]] = true;
-			}
-		}
-
-		// add selection (fromItem, toItem]
-		var toIdx = this._find(toItem);
-		var step = fromIdx < toIdx ? -1 : 1;
-		var shrink = lastIdx >= 0 && step == 1 ? lastIdx < toIdx : lastIdx > toIdx;
-		var range = dojo.math.range(toIdx, fromIdx, step);
-		if(range.length) {
-			for(var i = range.length-1; i >= 0; i--) {
-				var item = this.items[range[i]];
-				if(this.selectFilter(item, this.selection, false, true)) {
-					if(this.select(item, true) || shrink) {
-						this.lastSelected = item;
-					}
-					if(range[i] in toDeselect) {
-						delete toDeselect[range[i]];
-					}
-				}
-			}
-		} else {
-			this.lastSelected = fromItem;
-		}
-
-		// now deselect...
-		for(var i in toDeselect) {
-			if(this.items[i] == this.lastSelected) {
-				dbg("oops!");
-			}
-			this.deselect(this.items[i]);
-		}
-
-		// make sure everything is all kosher after selections+deselections
-		this._updatePivot();
-	},
-
-	/**
-	 * Grow selection upwards one item from lastSelected
-	**/
-	growUp: function() {
-		var idx = this._find(this.lastSelected) - 1;
-		while(idx >= 0) {
-			if(this.selectFilter(this.items[idx], this.selection, false, true)) {
-				this.grow(this.items[idx]);
-				break;
-			}
-			idx--;
-		}
-	},
-
-	/**
-	 * Grow selection downwards one item from lastSelected
-	**/
-	growDown: function() {
-		var idx = this._find(this.lastSelected);
-		if(idx < 0 && this.allowImplicit) {
-			this.select(this.items[0]);
-			idx = 0;
-		}
-		idx++;
-		while(idx > 0 && idx < this.items.length) {
-			if(this.selectFilter(this.items[idx], this.selection, false, true)) {
-				this.grow(this.items[idx]);
-				break;
-			}
-			idx++;
-		}
-	},
-
-	toggleSelected: function(item, noPivot) {
-		if(this.isItem(item)) {
-			if(this.select(item, noPivot)) { return 1; }
-			if(this.deselect(item)) { return -1; }
-		}
-		return 0;
-	},
-
-	select: function(item, noPivot) {
-		if(this.isItem(item) && !this.isSelected(item)
-			&& this.isSelectable(item)) {
-			this.selection.push(item);
-			this.lastSelected = item;
-			this.onSelect(item);
-			this.onSelectChange(item, true);
-			if(!noPivot) {
-				this._addPivot(item);
-			}
-			return true;
-		}
-		return false;
-	},
-
-	deselect: function(item) {
-		var idx = this._find(item, true);
-		if(idx > -1) {
-			this.selection.splice(idx, 1);
-			this.onDeselect(item);
-			this.onSelectChange(item, false);
-			if(item == this.lastSelected) {
-				this.lastSelected = null;
-			}
-
-			this._removePivot(item);
-
-			return true;
-		}
-		return false;
-	},
-
-	selectAll: function() {
-		for(var i = 0; i < this.items.length; i++) {
-			this.select(this.items[i]);
-		}
-	},
-
-	deselectAll: function() {
-		while(this.selection && this.selection.length) {
-			this.deselect(this.selection[0]);
-		}
-	},
-
-	selectNext: function() {
-		var idx = this._find(this.lastSelected);
-		while(idx > -1 && ++idx < this.items.length) {
-			if(this.isSelectable(this.items[idx])) {
-				this.deselectAll();
-				this.select(this.items[idx]);
-				return true;
-			}
-		}
-		return false;
-	},
-
-	selectPrevious: function() {
-		//debugger;
-		var idx = this._find(this.lastSelected);
-		while(idx-- > 0) {
-			if(this.isSelectable(this.items[idx])) {
-				this.deselectAll();
-				this.select(this.items[idx]);
-				return true;
-			}
-		}
-		return false;
-	},
-
-	selectFirst: function() {
-		return this.select(this.items[0]);
-	},
-
-	selectLast: function() {
-		return this.select(this.items[this.items.length-1]);
-	},
-
-	_addPivot: function(item, andClear) {
-		this._pivotItem = item;
-		if(andClear) {
-			this._pivotItems = [item];
-		} else {
-			this._pivotItems.push(item);
-		}
-	},
-
-	_removePivot: function(item) {
-		var i = dojo.lang.find(item, this._pivotItems);
-		if(i > -1) {
-			this._pivotItems.splice(i, 1);
-			this._pivotItem = this._pivotItems[this._pivotItems.length-1];
-		}
-
-		this._updatePivot();
-	},
-
-	_updatePivot: function() {
-		if(this._pivotItems.length == 0) {
-			if(this.lastSelected) {
-				this._addPivot(this.lastSelected);
-			}
-		} else {
-			this._pivotItem = null;
-		}
-	},
-
-	sorted: function() {
-		return dojo.lang.toArray(this.selection).sort(
-			dojo.lang.hitch(this, function(a, b) {
-				var A = this._find(a), B = this._find(b);
-				if(A > B) {
-					return 1;
-				} else if(A < B) {
-					return -1;
-				} else {
-					return 0;
-				}
-			})
-		);
-	},
-
-	// remove any items from the selection that are no longer in this.items
-	updateSelected: function() {
-		for(var i = 0; i < this.selection.length; i++) {
-			if(this._find(this.selection[i]) < 0) {
-				var removed = this.selection.splice(i, 1);
-
-				this._removePivot(removed[0]);
-			}
-		}
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage.js
deleted file mode 100644
index e6c17ca..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-// FIXME: should we require JSON here?
-dojo.require("dojo.lang.*");
-dojo.provide("dojo.storage");
-dojo.provide("dojo.storage.StorageProvider");
-
-dojo.storage = new function(){
-	this.provider = null;
-
-	// similar API as with dojo.io.addTransport()
-	this.setProvider = function(obj){
-		this.provider = obj;
-	}
-
-	this.set = function(key, value, namespace){
-		// FIXME: not very expressive, doesn't have a way of indicating queuing
-		if(!this.provider){
-			return false;
-		}
-		return this.provider.set(key, value, namespace);
-	}
-
-	this.get = function(key, namespace){
-		if(!this.provider){
-			return false;
-		}
-		return this.provider.get(key, namespace);
-	}
-
-	this.remove = function(key, namespace){
-		return this.provider.remove(key, namespace);
-	}
-}
-
-dojo.storage.StorageProvider = function(){
-}
-
-dojo.lang.extend(dojo.storage.StorageProvider, {
-	namespace: "*",
-	initialized: false,
-
-	free: function(){
-		dojo.unimplemented("dojo.storage.StorageProvider.free");
-		return 0;
-	},
-
-	freeK: function(){
-		return dojo.math.round(this.free()/1024, 0);
-	},
-
-	set: function(key, value, namespace){
-		dojo.unimplemented("dojo.storage.StorageProvider.set");
-	},
-
-	get: function(key, namespace){
-		dojo.unimplemented("dojo.storage.StorageProvider.get");
-	},
-
-	remove: function(key, value, namespace){
-		dojo.unimplemented("dojo.storage.StorageProvider.set");
-	}
-
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/Storage.as b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/Storage.as
deleted file mode 100644
index 175391b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/Storage.as
+++ /dev/null
@@ -1,51 +0,0 @@
-import flash.external.ExternalInterface;
-
-class Storage {
-	static var app : Storage;
-	var store: SharedObject;
-	static var started: Boolean = false;
-	
-	public function Storage(){
-		ExternalInterface.addCallback("set", null, set);
-		ExternalInterface.addCallback("get", null, get);
-		ExternalInterface.addCallback("free", null, free);
-	}
-
-	public function set(key, value, namespace){
-		var primeForReHide = false;
-		store = SharedObject.getLocal(namespace);
-		store.onStatus = function(status){
-			// ExternalInterface.call("alert", status.code == "SharedObject.Flush.Failed");
-			// ExternalInterface.call("alert", status.code == "SharedObject.Flush.Success");
-			if(primeForReHide){
-				primeForReHide = false;
-				ExternalInterface.call("dojo.storage.provider.hideStore");
-			}
-		}
-		store.data[key] = value;
-		var ret = store.flush();
-		if(typeof ret == "string"){
-			ExternalInterface.call("dojo.storage.provider.unHideStore");
-			primeForReHide = true;
-		}
-		return store.getSize(namespace);
-	}
-
-	public function get(key, namespace){
-		store = SharedObject.getLocal(namespace);
-		return store.data[key];
-	}
-
-	public function free(namespace){
-		return SharedObject.getDiskUsage(namespace);
-	}
-
-	static function main(mc){
-		app = new Storage();
-		if(!started){
-			ExternalInterface.call("dojo.storage.provider.storageOnLoad");
-			started = true;
-		}
-	}
-}
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/Storage.swf b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/Storage.swf
deleted file mode 100644
index a9856ca..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/Storage.swf
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/__package__.js
deleted file mode 100644
index 95120d5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/__package__.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.storage"],
-	browser: ["dojo.storage.browser"]
-});
-dojo.hostenv.moduleLoaded("dojo.storage.*");
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/browser.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/browser.js
deleted file mode 100644
index 5b09579..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/browser.js
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.storage.browser");
-dojo.require("dojo.storage");
-dojo.require("dojo.uri.*");
-
-dojo.storage.browser.StorageProvider = function(){
-	this.initialized = false;
-	this.flash = null;
-	this.backlog = [];
-}
-
-dojo.inherits(	dojo.storage.browser.StorageProvider, 
-				dojo.storage.StorageProvider);
-
-dojo.lang.extend(dojo.storage.browser.StorageProvider, {
-	storageOnLoad: function(){
-		this.initialized = true;
-		this.hideStore();
-		while(this.backlog.length){
-			this.set.apply(this, this.backlog.shift());
-		}
-	},
-
-	unHideStore: function(){
-		var container = dojo.byId("dojo-storeContainer");
-		with(container.style){
-			position = "absolute";
-			overflow = "visible";
-			width = "215px";
-			height = "138px";
-			// FIXME: make these positions dependent on screen size/scrolling!
-			left = "30px"; 
-			top = "30px";
-			visiblity = "visible";
-			zIndex = "20";
-			border = "1px solid black";
-		}
-	},
-
-	hideStore: function(status){
-		var container = dojo.byId("dojo-storeContainer");
-		with(container.style){
-			left = "-300px";
-			top = "-300px";
-		}
-	},
-
-	set: function(key, value, ns){
-		if(!this.initialized){
-			this.backlog.push([key, value, ns]);
-			return "pending";
-		}
-		return this.flash.set(key, value, ns||this.namespace);
-	},
-
-	get: function(key, ns){
-		return this.flash.get(key, ns||this.namespace);
-	},
-
-	writeStorage: function(){
-		var swfloc = dojo.uri.dojoUri("src/storage/Storage.swf").toString();
-		// alert(swfloc);
-		var storeParts = [
-			'<div id="dojo-storeContainer"',
-				'style="position: absolute; left: -300px; top: -300px;">'];
-		if(dojo.render.html.ie){
-			storeParts.push('<object');
-			storeParts.push('	style="border: 1px solid black;"');
-			storeParts.push('	classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"');
-			storeParts.push('	codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"');
-			storeParts.push('	width="215" height="138" id="dojoStorage">');
-			storeParts.push('	<param name="movie" value="'+swfloc+'">');
-			storeParts.push('	<param name="quality" value="high">');
-			storeParts.push('</object>');
-		}else{
-			storeParts.push('<embed src="'+swfloc+'" width="215" height="138" ');
-			storeParts.push('	quality="high" ');
-			storeParts.push('	pluginspage="http://www.macromedia.com/go/getflashplayer" ');
-			storeParts.push('	type="application/x-shockwave-flash" ');
-			storeParts.push('	name="dojoStorage">');
-			storeParts.push('</embed>');
-		}
-		storeParts.push('</div>');
-		document.write(storeParts.join(""));
-	}
-});
-
-dojo.storage.setProvider(new dojo.storage.browser.StorageProvider());
-dojo.storage.provider.writeStorage();
-
-dojo.addOnLoad(function(){
-	dojo.storage.provider.flash = (dojo.render.html.ie) ? window["dojoStorage"] : document["dojoStorage"];
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/storage.sh b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/storage.sh
deleted file mode 100644
index 81b844d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/storage/storage.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#! /bin/bash
-
-mtasc -version 8 -swf Storage.swf -main -header 215:138:10 Storage.as 
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/string.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/string.js
deleted file mode 100644
index 7d033c9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/string.js
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.string");
-dojo.require("dojo.lang");
-
-/**
- * Trim whitespace from 'str'. If 'wh' > 0,
- * only trim from start, if 'wh' < 0, only trim
- * from end, otherwise trim both ends
- */
-dojo.string.trim = function(str, wh){
-	if(!dojo.lang.isString(str)){ return str; }
-	if(!str.length){ return str; }
-	if(wh > 0) {
-		return str.replace(/^\s+/, "");
-	} else if(wh < 0) {
-		return str.replace(/\s+$/, "");
-	} else {
-		return str.replace(/^\s+|\s+$/g, "");
-	}
-}
-
-/**
- * Trim whitespace at the beginning of 'str'
- */
-dojo.string.trimStart = function(str) {
-	return dojo.string.trim(str, 1);
-}
-
-/**
- * Trim whitespace at the end of 'str'
- */
-dojo.string.trimEnd = function(str) {
-	return dojo.string.trim(str, -1);
-}
-
-/**
- * Parameterized string function
- * str - formatted string with %{values} to be replaces
- * pairs - object of name: "value" value pairs
- * killExtra - remove all remaining %{values} after pairs are inserted
- */
-dojo.string.paramString = function(str, pairs, killExtra) {
-	for(var name in pairs) {
-		var re = new RegExp("\\%\\{" + name + "\\}", "g");
-		str = str.replace(re, pairs[name]);
-	}
-
-	if(killExtra) { str = str.replace(/%\{([^\}\s]+)\}/g, ""); }
-	return str;
-}
-
-/** Uppercases the first letter of each word */
-dojo.string.capitalize = function (str) {
-	if (!dojo.lang.isString(str)) { return ""; }
-	if (arguments.length == 0) { str = this; }
-	var words = str.split(' ');
-	var retval = "";
-	var len = words.length;
-	for (var i=0; i<len; i++) {
-		var word = words[i];
-		word = word.charAt(0).toUpperCase() + word.substring(1, word.length);
-		retval += word;
-		if (i < len-1)
-			retval += " ";
-	}
-	
-	return new String(retval);
-}
-
-/**
- * Return true if the entire string is whitespace characters
- */
-dojo.string.isBlank = function (str) {
-	if(!dojo.lang.isString(str)) { return true; }
-	return (dojo.string.trim(str).length == 0);
-}
-
-dojo.string.encodeAscii = function(str) {
-	if(!dojo.lang.isString(str)) { return str; }
-	var ret = "";
-	var value = escape(str);
-	var match, re = /%u([0-9A-F]{4})/i;
-	while((match = value.match(re))) {
-		var num = Number("0x"+match[1]);
-		var newVal = escape("&#" + num + ";");
-		ret += value.substring(0, match.index) + newVal;
-		value = value.substring(match.index+match[0].length);
-	}
-	ret += value.replace(/\+/g, "%2B");
-	return ret;
-}
-
-// TODO: make an HTML version
-dojo.string.summary = function(str, len) {
-	if(!len || str.length <= len) {
-		return str;
-	} else {
-		return str.substring(0, len).replace(/\.+$/, "") + "...";
-	}
-}
-
-dojo.string.escape = function(type, str) {
-	var args = [];
-	for(var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
-	switch(type.toLowerCase()) {
-		case "xml":
-		case "html":
-		case "xhtml":
-			return dojo.string.escapeXml.apply(this, args);
-		case "sql":
-			return dojo.string.escapeSql.apply(this, args);
-		case "regexp":
-		case "regex":
-			return dojo.string.escapeRegExp.apply(this, args);
-		case "javascript":
-		case "jscript":
-		case "js":
-			return dojo.string.escapeJavaScript.apply(this, args);
-		case "ascii":
-			// so it's encode, but it seems useful
-			return dojo.string.encodeAscii.apply(this, args);
-		default:
-			return str;
-	}
-}
-
-dojo.string.escapeXml = function(str, noSingleQuotes) {
-	str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;")
-		.replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
-	if(!noSingleQuotes) { str = str.replace(/'/gm, "&#39;"); }
-	return str;
-}
-
-dojo.string.escapeSql = function(str) {
-	return str.replace(/'/gm, "''");
-}
-
-dojo.string.escapeRegExp = function(str) {
-	return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r])/gm, "\\$1");
-}
-
-dojo.string.escapeJavaScript = function(str) {
-	return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1");
-}
-
-/**
- * Return 'str' repeated 'count' times, optionally
- * placing 'separator' between each rep
- */
-dojo.string.repeat = function(str, count, separator) {
-	var out = "";
-	for(var i = 0; i < count; i++) {
-		out += str;
-		if(separator && i < count - 1) {
-			out += separator;
-		}
-	}
-	return out;
-}
-
-/**
- * Returns true if 'str' ends with 'end'
- */
-dojo.string.endsWith = function(str, end, ignoreCase) {
-	if(ignoreCase) {
-		str = str.toLowerCase();
-		end = end.toLowerCase();
-	}
-	return str.lastIndexOf(end) == str.length - end.length;
-}
-
-/**
- * Returns true if 'str' ends with any of the arguments[2 -> n]
- */
-dojo.string.endsWithAny = function(str /* , ... */) {
-	for(var i = 1; i < arguments.length; i++) {
-		if(dojo.string.endsWith(str, arguments[i])) {
-			return true;
-		}
-	}
-	return false;
-}
-
-/**
- * Returns true if 'str' starts with 'start'
- */
-dojo.string.startsWith = function(str, start, ignoreCase) {
-	if(ignoreCase) {
-		str = str.toLowerCase();
-		start = start.toLowerCase();
-	}
-	return str.indexOf(start) == 0;
-}
-
-/**
- * Returns true if 'str' starts with any of the arguments[2 -> n]
- */
-dojo.string.startsWithAny = function(str /* , ... */) {
-	for(var i = 1; i < arguments.length; i++) {
-		if(dojo.string.startsWith(str, arguments[i])) {
-			return true;
-		}
-	}
-	return false;
-}
-
-/**
- * Returns true if 'str' starts with any of the arguments 2 -> n
- */
-dojo.string.has = function(str /* , ... */) {
-	for(var i = 1; i < arguments.length; i++) {
-		if(str.indexOf(arguments[i] > -1)) {
-			return true;
-		}
-	}
-	return false;
-}
-
-/**
- * Pad 'str' to guarantee that it is at least 'len' length
- * with the character 'c' at either the start (dir=1) or
- * end (dir=-1) of the string
- */
-dojo.string.pad = function(str, len/*=2*/, c/*='0'*/, dir/*=1*/) {
-	var out = String(str);
-	if(!c) {
-		c = '0';
-	}
-	if(!dir) {
-		dir = 1;
-	}
-	while(out.length < len) {
-		if(dir > 0) {
-			out = c + out;
-		} else {
-			out += c;
-		}
-	}
-	return out;
-}
-
-/** same as dojo.string.pad(str, len, c, 1) */
-dojo.string.padLeft = function(str, len, c) {
-	return dojo.string.pad(str, len, c, 1);
-}
-
-/** same as dojo.string.pad(str, len, c, -1) */
-dojo.string.padRight = function(str, len, c) {
-	return dojo.string.pad(str, len, c, -1);
-}
-
-dojo.string.normalizeNewlines = function (text,newlineChar) {
-	if (newlineChar == "\n") {
-		text = text.replace(/\r\n/g, "\n");
-		text = text.replace(/\r/g, "\n");
-	} else if (newlineChar == "\r") {
-		text = text.replace(/\r\n/g, "\r");
-		text = text.replace(/\n/g, "\r");
-	} else {
-		text = text.replace(/([^\r])\n/g, "$1\r\n");
-		text = text.replace(/\r([^\n])/g, "\r\n$1");
-	}
-	return text;
-}
-
-dojo.string.splitEscaped = function (str,charac) {
-	var components = [];
-	for (var i = 0, prevcomma = 0; i < str.length; i++) {
-		if (str.charAt(i) == '\\') { i++; continue; }
-		if (str.charAt(i) == charac) {
-			components.push(str.substring(prevcomma, i));
-			prevcomma = i + 1;
-		}
-	}
-	components.push(str.substr(prevcomma));
-	return components;
-}
-
-
-// do we even want to offer this? is it worth it?
-dojo.string.addToPrototype = function() {
-	for(var method in dojo.string) {
-		if(dojo.lang.isFunction(dojo.string[method])) {
-			var func = (function() {
-				var meth = method;
-				switch(meth) {
-					case "addToPrototype":
-						return null;
-						break;
-					case "escape":
-						return function(type) {
-							return dojo.string.escape(type, this);
-						}
-						break;
-					default:
-						return function() {
-							var args = [this];
-							for(var i = 0; i < arguments.length; i++) {
-								args.push(arguments[i]);
-							}
-							dojo.debug(args);
-							return dojo.string[meth].apply(dojo.string, args);
-						}
-				}
-			})();
-			if(func) { String.prototype[method] = func; }
-		}
-	}
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/string/Builder.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/string/Builder.js
deleted file mode 100644
index f618bdb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/string/Builder.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.string.Builder");
-dojo.require("dojo.string");
-
-// NOTE: testing shows that direct "+=" concatenation is *much* faster on
-// Spidermoneky and Rhino, while arr.push()/arr.join() style concatenation is
-// significantly quicker on IE (Jscript/wsh/etc.).
-
-dojo.string.Builder = function(str){
-	this.arrConcat = (dojo.render.html.capable && dojo.render.html["ie"]);
-
-	var a = [];
-	var b = str || "";
-	var length = this.length = b.length;
-
-	if(this.arrConcat){
-		if(b.length > 0){
-			a.push(b);
-		}
-		b = "";
-	}
-
-	this.toString = this.valueOf = function(){ 
-		return (this.arrConcat) ? a.join("") : b;
-	};
-
-	this.append = function(s){
-		if(this.arrConcat){
-			a.push(s);
-		}else{
-			b+=s;
-		}
-		length += s.length;
-		this.length = length;
-		return this;
-	};
-
-	this.clear = function(){
-		a = [];
-		b = "";
-		length = this.length = 0;
-		return this;
-	};
-
-	this.remove = function(f,l){
-		var s = ""; 
-		if(this.arrConcat){
-			b = a.join(""); 
-		}
-		a=[];
-		if(f>0){
-			s = b.substring(0, (f-1));
-		}
-		b = s + b.substring(f + l); 
-		length = this.length = b.length; 
-		if(this.arrConcat){
-			a.push(b);
-			b="";
-		}
-		return this;
-	};
-
-	this.replace = function(o,n){
-		if(this.arrConcat){
-			b = a.join(""); 
-		}
-		a = []; 
-		b = b.replace(o,n); 
-		length = this.length = b.length; 
-		if(this.arrConcat){
-			a.push(b);
-			b="";
-		}
-		return this;
-	};
-
-	this.insert = function(idx,s){
-		if(this.arrConcat){
-			b = a.join(""); 
-		}
-		a=[];
-		if(idx == 0){
-			b = s + b;
-		}else{
-			var t = b.split("");
-			t.splice(idx,0,s);
-			b = t.join("")
-		}
-		length = this.length = b.length; 
-		if(this.arrConcat){
-			a.push(b); 
-			b="";
-		}
-		return this;
-	};
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/string/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/string/__package__.js
deleted file mode 100644
index 6800768..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/string/__package__.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: [
-		"dojo.string",
-		"dojo.string.Builder"
-	]
-});
-dojo.hostenv.moduleLoaded("dojo.string.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/style.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/style.js
deleted file mode 100644
index 9785ab3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/style.js
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.style");
-dojo.require("dojo.dom");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.graphics.color");
-
-// values: content-box, border-box
-dojo.style.boxSizing = {
-	marginBox: "margin-box",
-	borderBox: "border-box",
-	paddingBox: "padding-box",
-	contentBox: "content-box"
-};
-
-dojo.style.getBoxSizing = function(node) 
-{
-	if (dojo.render.html.ie || dojo.render.html.opera){ 
-		var cm = document["compatMode"];
-		if (cm == "BackCompat" || cm == "QuirksMode"){ 
-			return dojo.style.boxSizing.borderBox; 
-		}else{
-			return dojo.style.boxSizing.contentBox; 
-		}
-	}else{
-		if(arguments.length == 0){ node = document.documentElement; }
-		var sizing = dojo.style.getStyle(node, "-moz-box-sizing");
-		if(!sizing){ sizing = dojo.style.getStyle(node, "box-sizing"); }
-		return (sizing ? sizing : dojo.style.boxSizing.contentBox);
-	}
-}
-
-/*
-
-The following several function use the dimensions shown below
-
-    +-------------------------+
-    |  margin                 |
-    | +---------------------+ |
-    | |  border             | |
-    | | +-----------------+ | |
-    | | |  padding        | | |
-    | | | +-------------+ | | |
-    | | | |   content   | | | |
-    | | | +-------------+ | | |
-    | | +-|-------------|-+ | |
-    | +-|-|-------------|-|-+ |
-    +-|-|-|-------------|-|-|-+
-    | | | |             | | | |
-    | | | |<- content ->| | | |
-    | |<------ inner ------>| |
-    |<-------- outer -------->|
-    +-------------------------+
-
-    * content-box
-
-    |m|b|p|             |p|b|m|
-    | |<------ offset ----->| |
-    | | |<---- client --->| | |
-    | | | |<-- width -->| | | |
-
-    * border-box
-
-    |m|b|p|             |p|b|m|
-    | |<------ offset ----->| |
-    | | |<---- client --->| | |
-    | |<------ width ------>| |
-*/
-
-/*
-	Notes:
-
-	General:
-		- Uncomputable values are returned as NaN.
-		- setOuterWidth/Height return *false* if the outer size could not be computed, otherwise *true*.
-		- I (sjmiles) know no way to find the calculated values for auto-margins. 
-		- All returned values are floating point in 'px' units. If a non-zero computed style value is not specified in 'px', NaN is returned.
-
-	FF:
-		- styles specified as '0' (unitless 0) show computed as '0pt'.
-
-	IE:
-		- clientWidth/Height are unreliable (0 unless the object has 'layout').
-		- margins must be specified in px, or 0 (in any unit) for any sizing function to work. Otherwise margins detect as 'auto'.
-		- padding can be empty or, if specified, must be in px, or 0 (in any unit) for any sizing function to work.
-
-	Safari:
-		- Safari defaults padding values to 'auto'.
-
-	See the unit tests for examples of (un)computable values in a given browser.
-
-*/
-
-// FIXME: these work for most elements (e.g. DIV) but not all (e.g. TEXTAREA)
-
-dojo.style.isBorderBox = function(node)
-{
-	return (dojo.style.getBoxSizing(node) == dojo.style.boxSizing.borderBox);
-}
-
-dojo.style.getUnitValue = function (element, cssSelector, autoIsZero){
-	var result = { value: 0, units: 'px' };
-	var s = dojo.style.getComputedStyle(element, cssSelector);
-	if (s == '' || (s == 'auto' && autoIsZero)){ return result; }
-	if (dojo.lang.isUndefined(s)){ 
-		result.value = NaN;
-	}else{
-		// FIXME: is regex inefficient vs. parseInt or some manual test? 
-		var match = s.match(/([\d.]+)([a-z%]*)/i);
-		if (!match){
-			result.value = NaN;
-		}else{
-			result.value = Number(match[1]);
-			result.units = match[2].toLowerCase();
-		}
-	}
-	return result;		
-}
-
-dojo.style.getPixelValue = function (element, cssSelector, autoIsZero){
-	var result = dojo.style.getUnitValue(element, cssSelector, autoIsZero);
-	// FIXME: there is serious debate as to whether or not this is the right solution
-	if(isNaN(result.value)){ return 0; }
-	// FIXME: code exists for converting other units to px (see Dean Edward's IE7) 
-	// but there are cross-browser complexities
-	if((result.value)&&(result.units != 'px')){ return NaN; }
-	return result.value;
-}
-
-dojo.style.getNumericStyle = dojo.style.getPixelValue; // backward compat
-
-dojo.style.isPositionAbsolute = function(node){
-	return (dojo.style.getComputedStyle(node, 'position') == 'absolute');
-}
-
-dojo.style.getMarginWidth = function(node){
-	var autoIsZero = dojo.style.isPositionAbsolute(node);
-	var left = dojo.style.getPixelValue(node, "margin-left", autoIsZero);
-	var right = dojo.style.getPixelValue(node, "margin-right", autoIsZero);
-	return left + right;
-}
-
-dojo.style.getBorderWidth = function(node){
-	// the removed calculation incorrectly includes scrollbar
-	//if (node.clientWidth){
-	//	return node.offsetWidth - node.clientWidth;
-	//}else
-	{
-		var left = (dojo.style.getStyle(node, 'border-left-style') == 'none' ? 0 : dojo.style.getPixelValue(node, "border-left-width"));
-		var right = (dojo.style.getStyle(node, 'border-right-style') == 'none' ? 0 : dojo.style.getPixelValue(node, "border-right-width"));
-		return left + right;
-	}
-}
-
-dojo.style.getPaddingWidth = function(node){
-	var left = dojo.style.getPixelValue(node, "padding-left", true);
-	var right = dojo.style.getPixelValue(node, "padding-right", true);
-	return left + right;
-}
-
-dojo.style.getContentWidth = function (node){
-	return node.offsetWidth - dojo.style.getPaddingWidth(node) - dojo.style.getBorderWidth(node);
-}
-
-dojo.style.getInnerWidth = function (node){
-	return node.offsetWidth;
-}
-
-dojo.style.getOuterWidth = function (node){
-	return dojo.style.getInnerWidth(node) + dojo.style.getMarginWidth(node);
-}
-
-dojo.style.setOuterWidth = function (node, pxWidth){
-	if (!dojo.style.isBorderBox(node)){
-		pxWidth -= dojo.style.getPaddingWidth(node) + dojo.style.getBorderWidth(node);
-	}
-	pxWidth -= dojo.style.getMarginWidth(node);
-	if (!isNaN(pxWidth) && pxWidth > 0){
-		node.style.width = pxWidth + 'px';
-		return true;
-	}else return false;
-}
-
-// FIXME: these aliases are actually the preferred names
-dojo.style.getContentBoxWidth = dojo.style.getContentWidth;
-dojo.style.getBorderBoxWidth = dojo.style.getInnerWidth;
-dojo.style.getMarginBoxWidth = dojo.style.getOuterWidth;
-dojo.style.setMarginBoxWidth = dojo.style.setOuterWidth;
-
-dojo.style.getMarginHeight = function(node){
-	var autoIsZero = dojo.style.isPositionAbsolute(node);
-	var top = dojo.style.getPixelValue(node, "margin-top", autoIsZero);
-	var bottom = dojo.style.getPixelValue(node, "margin-bottom", autoIsZero);
-	return top + bottom;
-}
-
-dojo.style.getBorderHeight = function(node){
-	// this removed calculation incorrectly includes scrollbar
-//	if (node.clientHeight){
-//		return node.offsetHeight- node.clientHeight;
-//	}else
-	{		
-		var top = (dojo.style.getStyle(node, 'border-top-style') == 'none' ? 0 : dojo.style.getPixelValue(node, "border-top-width"));
-		var bottom = (dojo.style.getStyle(node, 'border-bottom-style') == 'none' ? 0 : dojo.style.getPixelValue(node, "border-bottom-width"));
-		return top + bottom;
-	}
-}
-
-dojo.style.getPaddingHeight = function(node){
-	var top = dojo.style.getPixelValue(node, "padding-top", true);
-	var bottom = dojo.style.getPixelValue(node, "padding-bottom", true);
-	return top + bottom;
-}
-
-dojo.style.getContentHeight = function (node){
-	return node.offsetHeight - dojo.style.getPaddingHeight(node) - dojo.style.getBorderHeight(node);
-}
-
-dojo.style.getInnerHeight = function (node){
-	return node.offsetHeight; // FIXME: does this work?
-}
-
-dojo.style.getOuterHeight = function (node){
-	return dojo.style.getInnerHeight(node) + dojo.style.getMarginHeight(node);
-}
-
-dojo.style.setOuterHeight = function (node, pxHeight){
-	if (!dojo.style.isBorderBox(node)){
-			pxHeight -= dojo.style.getPaddingHeight(node) + dojo.style.getBorderHeight(node);
-	}
-	pxHeight -= dojo.style.getMarginHeight(node);
-	if (!isNaN(pxHeight) && pxHeight > 0){
-		node.style.height = pxHeight + 'px';
-		return true;
-	}else return false;
-}
-
-dojo.style.setContentWidth = function(node, pxWidth){
-
-	if (dojo.style.isBorderBox(node)){
-		pxWidth += dojo.style.getPaddingWidth(node) + dojo.style.getBorderWidth(node);
-	}
-
-	if (!isNaN(pxWidth) && pxWidth > 0){
-		node.style.width = pxWidth + 'px';
-		return true;
-	}else return false;
-}
-
-dojo.style.setContentHeight = function(node, pxHeight){
-
-	if (dojo.style.isBorderBox(node)){
-		pxHeight += dojo.style.getPaddingHeight(node) + dojo.style.getBorderHeight(node);
-	}
-
-	if (!isNaN(pxHeight) && pxHeight > 0){
-		node.style.height = pxHeight + 'px';
-		return true;
-	}else return false;
-}
-
-// FIXME: these aliases are actually the preferred names
-dojo.style.getContentBoxHeight = dojo.style.getContentHeight;
-dojo.style.getBorderBoxHeight = dojo.style.getInnerHeight;
-dojo.style.getMarginBoxHeight = dojo.style.getOuterHeight;
-dojo.style.setMarginBoxHeight = dojo.style.setOuterHeight;
-
-dojo.style.getTotalOffset = function (node, type, includeScroll){
-	var typeStr = (type=="top") ? "offsetTop" : "offsetLeft";
-	var typeScroll = (type=="top") ? "scrollTop" : "scrollLeft";
-	
-	var coord = (type=="top") ? "y" : "x";
-	var offset = 0;
-	if(node["offsetParent"]){
-		
-		// in Safari, if the node is an absolutly positioned child of the body
-		// and the body has a margin the offset of the child and the body
-		// contain the body's margins, so we need to end at the body
-		if (dojo.render.html.safari
-			&& node.style.getPropertyValue("position") == "absolute"
-			&& node.parentNode == dojo.html.body())
-		{
-			var endNode = dojo.html.body();
-		} else {
-			var endNode = dojo.html.body().parentNode;
-		}
-		
-		if(includeScroll && node.parentNode != document.body) {
-			offset -= dojo.style.sumAncestorProperties(node, typeScroll);
-		}
-		// FIXME: this is known not to work sometimes on IE 5.x since nodes
-		// soemtimes need to be "tickled" before they will display their
-		// offset correctly
-		do {
-			offset += node[typeStr];
-			node = node.offsetParent;
-		} while (node != endNode && node != null);
-	}else if(node[coord]){
-		offset += node[coord];
-	}
-	return offset;
-}
-
-dojo.style.sumAncestorProperties = function (node, prop) {
-	if (!node) { return 0; } // FIXME: throw an error?
-	
-	var retVal = 0;
-	while (node) {
-		var val = node[prop];
-		if (val) {
-			retVal += val - 0;
-		}
-		node = node.parentNode;
-	}
-	return retVal;
-}
-
-dojo.style.totalOffsetLeft = function (node, includeScroll){
-	return dojo.style.getTotalOffset(node, "left", includeScroll);
-}
-
-dojo.style.getAbsoluteX = dojo.style.totalOffsetLeft;
-
-dojo.style.totalOffsetTop = function (node, includeScroll){
-	return dojo.style.getTotalOffset(node, "top", includeScroll);
-}
-
-dojo.style.getAbsoluteY = dojo.style.totalOffsetTop;
-
-dojo.style.getAbsolutePosition = function(node, includeScroll) {
-	var position = [
-		dojo.style.getAbsoluteX(node, includeScroll),
-		dojo.style.getAbsoluteY(node, includeScroll)
-	];
-	position.x = position[0];
-	position.y = position[1];
-	return position;
-}
-
-dojo.style.styleSheet = null;
-
-// FIXME: this is a really basic stub for adding and removing cssRules, but
-// it assumes that you know the index of the cssRule that you want to add 
-// or remove, making it less than useful.  So we need something that can 
-// search for the selector that you you want to remove.
-dojo.style.insertCssRule = function (selector, declaration, index) {
-	if (!dojo.style.styleSheet) {
-		if (document.createStyleSheet) { // IE
-			dojo.style.styleSheet = document.createStyleSheet();
-		} else if (document.styleSheets[0]) { // rest
-			// FIXME: should create a new style sheet here
-			// fall back on an exsiting style sheet
-			dojo.style.styleSheet = document.styleSheets[0];
-		} else { return null; } // fail
-	}
-
-	if (arguments.length < 3) { // index may == 0
-		if (dojo.style.styleSheet.cssRules) { // W3
-			index = dojo.style.styleSheet.cssRules.length;
-		} else if (dojo.style.styleSheet.rules) { // IE
-			index = dojo.style.styleSheet.rules.length;
-		} else { return null; } // fail
-	}
-
-	if (dojo.style.styleSheet.insertRule) { // W3
-		var rule = selector + " { " + declaration + " }";
-		return dojo.style.styleSheet.insertRule(rule, index);
-	} else if (dojo.style.styleSheet.addRule) { // IE
-		return dojo.style.styleSheet.addRule(selector, declaration, index);
-	} else { return null; } // fail
-}
-
-dojo.style.removeCssRule = function (index){
-	if(!dojo.style.styleSheet){
-		dojo.debug("no stylesheet defined for removing rules");
-		return false;
-	}
-	if(dojo.render.html.ie){
-		if(!index){
-			index = dojo.style.styleSheet.rules.length;
-			dojo.style.styleSheet.removeRule(index);
-		}
-	}else if(document.styleSheets[0]){
-		if(!index){
-			index = dojo.style.styleSheet.cssRules.length;
-		}
-		dojo.style.styleSheet.deleteRule(index);
-	}
-	return true;
-}
-
-dojo.style.insertCssFile = function (URI, doc, checkDuplicates){
-	if(!URI) { return; }
-	if(!doc){ doc = document; }
-	// Safari doesn't have this property, but it doesn't support
-	// styleSheets.href either so it beomces moot
-	if(doc.baseURI) { URI = new dojo.uri.Uri(doc.baseURI, URI); }
-	if(checkDuplicates && doc.styleSheets){
-		// get the host + port info from location
-		var loc = location.href.split("#")[0].substring(0, location.href.indexOf(location.pathname));
-		for(var i = 0; i < doc.styleSheets.length; i++){
-			if(doc.styleSheets[i].href && URI.toString() ==
-				new dojo.uri.Uri(doc.styleSheets[i].href.toString())) { return; }
-		}
-	}
-	var file = doc.createElement("link");
-	file.setAttribute("type", "text/css");
-	file.setAttribute("rel", "stylesheet");
-	file.setAttribute("href", URI);
-	var head = doc.getElementsByTagName("head")[0];
-	if(head){ // FIXME: why isn't this working on Opera 8?
-		head.appendChild(file);
-	}
-}
-
-dojo.style.getBackgroundColor = function (node) {
-	var color;
-	do{
-		color = dojo.style.getStyle(node, "background-color");
-		// Safari doesn't say "transparent"
-		if(color.toLowerCase() == "rgba(0, 0, 0, 0)") { color = "transparent"; }
-		if(node == document.getElementsByTagName("body")[0]) { node = null; break; }
-		node = node.parentNode;
-	}while(node && dojo.lang.inArray(color, ["transparent", ""]));
-
-	if( color == "transparent" ) {
-		color = [255, 255, 255, 0];
-	} else {
-		color = dojo.graphics.color.extractRGB(color);
-	}
-	return color;
-}
-
-dojo.style.getComputedStyle = function (element, cssSelector, inValue) {
-	var value = inValue;
-	if (element.style.getPropertyValue) { // W3
-		value = element.style.getPropertyValue(cssSelector);
-	}
-	if(!value) {
-		if (document.defaultView) { // gecko
-			var cs = document.defaultView.getComputedStyle(element, "");
-			if (cs) { 
-				value = cs.getPropertyValue(cssSelector);
-			} 
-		} else if (element.currentStyle) { // IE
-			value = element.currentStyle[dojo.style.toCamelCase(cssSelector)];
-		} 
-	}
-	
-	return value;
-}
-
-dojo.style.getStyle = function (element, cssSelector) {
-	var camelCased = dojo.style.toCamelCase(cssSelector);
-	var value = element.style[camelCased]; // dom-ish
-	return (value ? value : dojo.style.getComputedStyle(element, cssSelector, value));
-}
-
-dojo.style.toCamelCase = function (selector) {
-	var arr = selector.split('-'), cc = arr[0];
-	for(var i = 1; i < arr.length; i++) {
-		cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
-	}
-	return cc;		
-}
-
-dojo.style.toSelectorCase = function (selector) {
-	return selector.replace(/([A-Z])/g, "-$1" ).toLowerCase() ;
-}
-
-/* float between 0.0 (transparent) and 1.0 (opaque) */
-dojo.style.setOpacity = function setOpacity (node, opacity, dontFixOpacity) {
-	node = dojo.byId(node);
-	var h = dojo.render.html;
-	if(!dontFixOpacity){
-		if( opacity >= 1.0){
-			if(h.ie){
-				dojo.style.clearOpacity(node);
-				return;
-			}else{
-				opacity = 0.999999;
-			}
-		}else if( opacity < 0.0){ opacity = 0; }
-	}
-	if(h.ie){
-		if(node.nodeName.toLowerCase() == "tr"){
-			// FIXME: is this too naive? will we get more than we want?
-			var tds = node.getElementsByTagName("td");
-			for(var x=0; x<tds.length; x++){
-				tds[x].style.filter = "Alpha(Opacity="+opacity*100+")";
-			}
-		}
-		node.style.filter = "Alpha(Opacity="+opacity*100+")";
-	}else if(h.moz){
-		node.style.opacity = opacity; // ffox 1.0 directly supports "opacity"
-		node.style.MozOpacity = opacity;
-	}else if(h.safari){
-		node.style.opacity = opacity; // 1.3 directly supports "opacity"
-		node.style.KhtmlOpacity = opacity;
-	}else{
-		node.style.opacity = opacity;
-	}
-}
-	
-dojo.style.getOpacity = function getOpacity (node){
-	if(dojo.render.html.ie){
-		var opac = (node.filters && node.filters.alpha &&
-			typeof node.filters.alpha.opacity == "number"
-			? node.filters.alpha.opacity : 100) / 100;
-	}else{
-		var opac = node.style.opacity || node.style.MozOpacity ||
-			node.style.KhtmlOpacity || 1;
-	}
-	return opac >= 0.999999 ? 1.0 : Number(opac);
-}
-
-dojo.style.clearOpacity = function clearOpacity (node) {
-	var h = dojo.render.html;
-	if(h.ie){
-		if( node.filters && node.filters.alpha ) {
-			node.style.filter = ""; // FIXME: may get rid of other filter effects
-		}
-	}else if(h.moz){
-		node.style.opacity = 1;
-		node.style.MozOpacity = 1;
-	}else if(h.safari){
-		node.style.opacity = 1;
-		node.style.KhtmlOpacity = 1;
-	}else{
-		node.style.opacity = 1;
-	}
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/svg.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/svg.js
deleted file mode 100644
index a589c22..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/svg.js
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.svg");
-dojo.require("dojo.lang");
-dojo.require("dojo.dom");
-
-dojo.lang.mixin(dojo.svg, dojo.dom);
-
-/**
- *	The Graphics object.  Hopefully gives the user a way into
- *	XPlatform rendering functions supported correctly and incorrectly.
-**/
-dojo.svg.graphics = dojo.svg.g = new function(d){
-	this.suspend = function(){
-		try { d.documentElement.suspendRedraw(0); } catch(e){ }
-	};
-	this.resume = function(){
-		try { d.documentElement.unsuspendRedraw(0); } catch(e){ }
-	};
-	this.force = function(){
-		try { d.documentElement.forceRedraw(); } catch(e){ }
-	};
-}(document);
-
-/**
- *	The Animations control object.  Hopefully gives the user a way into
- *	XPlatform animation functions supported correctly and incorrectly.
-**/
-dojo.svg.animations = dojo.svg.anim = new function(d){
-	this.arePaused = function(){
-		try {
-			return d.documentElement.animationsPaused();
-		} catch(e){
-			return false;
-		}
-	} ;
-	this.pause = function(){
-		try { d.documentElement.pauseAnimations(); } catch(e){ }
-	};
-	this.resume = function(){
-		try { d.documentElement.unpauseAnimations(); } catch(e){ }
-	};
-}(document);
-
-/**
- *	signatures from dojo.style.
- */
-dojo.svg.toCamelCase = function(selector){
-	var arr = selector.split('-'), cc = arr[0];
-	for(var i = 1; i < arr.length; i++) {
-		cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
-	}
-	return cc;		
-};
-dojo.svg.toSelectorCase = function (selector) {
-	return selector.replace(/([A-Z])/g, "-$1" ).toLowerCase() ;
-};
-dojo.svg.getStyle = function(node, cssSelector){
-	return document.defaultView.getComputedStyle(node, cssSelector);
-};
-dojo.svg.getNumericStyle = function(node, cssSelector){
-	return parseFloat(dojo.svg.getStyle(node, cssSelector));
-};
-
-/**
- *	alpha channel operations
- */
-dojo.svg.getOpacity = function(node){
-	return Math.min(1.0, dojo.svg.getNumericStyle(node, "fill-opacity"));
-};
-dojo.svg.setOpacity = function(node, opacity){
-	node.setAttributeNS(this.xmlns.svg, "fill-opacity", opacity);
-	node.setAttributeNS(this.xmlns.svg, "stroke-opacity", opacity);
-};
-dojo.svg.clearOpacity = function(node){
-	node.setAttributeNS(this.xmlns.svg, "fill-opacity", "1.0");
-	node.setAttributeNS(this.xmlns.svg, "stroke-opacity", "1.0");
-};
-
-/**
- *	Coordinates and dimensions.
- */
-dojo.svg.getCoords = function(node){
-	if (node.getBBox) {
-		var box = node.getBBox();
-		return { x: box.x, y: box.y };
-	}
-	return null;
-};
-dojo.svg.setCoords = function(node, coords){
-	var p = dojo.svg.getCoords();
-	if (!p) return;
-	var dx = p.x - coords.x;
-	var dy = p.y - coords.y;
-	dojo.svg.translate(node, dx, dy);
-};
-dojo.svg.getDimensions = function(node){
-	if (node.getBBox){
-		var box = node.getBBox();
-		return { width: box.width, height : box.height };
-	}
-	return null;
-};
-dojo.svg.setDimensions = function(node, dim){
-	//	will only support shape-based and container elements; path-based elements are ignored.
-	if (node.width){
-		node.width.baseVal.value = dim.width;
-		node.height.baseVal.vaule = dim.height;
-	}
-	else if (node.r){
-		node.r.baseVal.value = Math.min(dim.width, dim.height)/2;
-	}
-	else if (node.rx){
-		node.rx.baseVal.value = dim.width/2;
-		node.ry.baseVal.value = dim.height/2;
-	}
-};
-
-/**
- *	Transformations.
- */
-dojo.svg.translate = function(node, dx, dy){
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t = node.ownerSVGElement.createSVGTransform();
-		t.setTranslate(dx, dy);
-		node.transform.baseVal.appendItem(t);
-	}
-};
-dojo.svg.scale = function(node, scaleX, scaleY){
-	if (!scaleY) var scaleY = scaleX;
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t = node.ownerSVGElement.createSVGTransform();
-		t.setScale(scaleX, scaleY);
-		node.transform.baseVal.appendItem(t);
-	}
-};
-dojo.svg.rotate = function(node, ang, cx, cy){
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t = node.ownerSVGElement.createSVGTransform();
-		if (!cx) t.setMatrix(t.matrix.rotate(ang));
-		else t.setRotate(ang, cx, cy);
-		node.transform.baseVal.appendItem(t);
-	}
-};
-dojo.svg.skew = function(node, ang, axis){
-	var dir = axis || "x";
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t = node.ownerSVGElement.createSVGTransform();
-		if (dir != "x") t.setSkewY(ang);
-		else t.setSkewX(ang);
-		node.transform.baseVal.appendItem(t);
-	}
-};
-dojo.svg.flip = function(node, axis){
-	var dir = axis || "x";
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t = node.ownerSVGElement.createSVGTransform();
-		t.setMatrix((dir != "x") ? t.matrix.flipY() : t.matrix.flipX());
-		node.transform.baseVal.appendItem(t);
-	}
-};
-dojo.svg.invert = function(node){
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t = node.ownerSVGElement.createSVGTransform();
-		t.setMatrix(t.matrix.inverse());
-		node.transform.baseVal.appendItem(t);
-	}
-};
-dojo.svg.applyMatrix = function(node, a, b, c, d, e, f){
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var m;
-		if (b){
-			var m = node.ownerSVGElement.createSVGMatrix();
-			m.a = a;
-			m.b = b;
-			m.c = c;
-			m.d = d;
-			m.e = e;
-			m.f = f;
-		} else m = a;
-		var t = node.ownerSVGElement.createSVGTransform();
-		t.setMatrix(m);
-		node.transform.baseVal.appendItem(t);
-	}
-};
-
-/**
- *	Grouping and z-index operations.
- */
-dojo.svg.group = function(nodes){
-	//	expect an array of nodes, attaches the group to the parent of the first node.
-	var p = nodes.item(0).parentNode;
-	var g = document.createElementNS(this.xmlns.svg, "g");
-	for (var i = 0; i < nodes.length; i++) g.appendChild(nodes.item(i));
-	p.appendChild(g);
-	return g;
-};
-dojo.svg.ungroup = function(g){
-	//	puts the children of the group on the same level as group was.
-	var p = g.parentNode;
-	while (g.childNodes.length > 0) p.appendChild(g.childNodes.item(0));
-	p.removeChild(g);
-};
-//	if the node is part of a group, return the group, else return null.
-dojo.svg.getGroup = function(node){
-	//	if the node is part of a group, return the group, else return null.
-	var a = this.getAncestors(node);
-	for (var i = 0; i < a.length; i++){
-		if (a[i].nodeType == this.ELEMENT_NODE && a[i].nodeName.toLowerCase() == "g")
-			return a[i];
-	}
-	return null;
-};
-dojo.svg.bringToFront = function(node){
-	var n = this.getGroup(node) || node;
-	n.ownerSVGElement.appendChild(n);
-};
-dojo.svg.sendToBack = function(node){
-	var n = this.getGroup(node) || node;
-	n.ownerSVGElement.insertBefore(n, n.ownerSVGElement.firstChild);
-};
-//	TODO: possibly push node up a level in the DOM if it's at the beginning or end of the childNodes list.
-dojo.svg.bringForward = function(node){
-	var n = this.getGroup(node) || node;
-	if (this.getLastChildElement(n.parentNode) != n){
-		this.insertAfter(n, this.getNextSiblingElement(n), true);
-	}
-};
-dojo.svg.sendBackward = function(node){
-	var n = this.getGroup(node) || node;
-	if (this.getFirstChildElement(n.parentNode) != n){
-		this.insertBefore(n, this.getPreviousSiblingElement(n), true);
-	}
-};
-//	modded to account for FF 1.5 mixed environment, will try ASVG first, then w3 standard.
-dojo.dom.createNodesFromText = function (txt, wrap){
-	var docFrag;
-	if (window.parseXML) docFrag = parseXML(txt, window.document);
-	else if (window.DOMParser) docFrag = (new DOMParser()).parseFromString(txt, "text/xml");
-	else dojo.raise("dojo.dom.createNodesFromText: environment does not support XML parsing");
-	docFrag.normalize();
-	if(wrap){ 
-		var ret = [docFrag.firstChild.cloneNode(true)];
-		return ret;
-	}
-	var nodes = [];
-	for(var x=0; x<docFrag.childNodes.length; x++){
-		nodes.push(docFrag.childNodes.item(x).cloneNode(true));
-	}
-	// tn.style.display = "none";
-	return nodes;
-}
-
-// FIXME: this should be removed after 0.2 release
-if(!dojo.evalObjPath("dojo.dom.createNodesFromText")) {
-	dojo.dom.createNodesFromText = function() {
-		dojo.deprecated("dojo.dom.createNodesFromText", "use dojo.svg.createNodesFromText instead");
-		dojo.svg.createNodesFromText.apply(dojo.html, arguments);
-	}
-}
-
-//	IE INLINE FIX
-/*
-if (dojo.render.html.ie && dojo.render.svg.adobe){
-	document.write("<object id=\"AdobeSVG\" classid=\"clsid:78156a80-c6a1-4bbf-8e6a-3cd390eeb4e2\"></object>");
-	document.write("<?import namespace=\"svg\" urn=\"http://www.w3.org/2000/svg\" implementation=\"#AdobeSVG\"?>");
-}
-*/
-// vim:ts=4:noet:tw=0:
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/Builder.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/Builder.js
deleted file mode 100644
index d2b5459..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/Builder.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.text.Builder");
-dojo.require("dojo.string.Builder");
-
-dj_deprecated("dojo.text.Builder is deprecated, use dojo.string.Builder instead");
-
-dojo.text.Builder = dojo.string.Builder;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/String.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/String.js
deleted file mode 100644
index 4e0708d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/String.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dj_deprecated("dojo.text.String is being replaced by dojo.string");
-dojo.require("dojo.string");
-
-dojo.text = dojo.string;
-dojo.provide("dojo.text.String");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/Text.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/Text.js
deleted file mode 100644
index 9073c09..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/Text.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dj_deprecated("dojo.text.Text is being replaced by dojo.string");
-dojo.require("dojo.string");
-
-dojo.text = dojo.string;
-dojo.provide("dojo.text.Text");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/__package__.js
deleted file mode 100644
index 2bd8279..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/__package__.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: [
-		"dojo.text.String",
-		"dojo.text.Builder"
-	]
-});
-dojo.hostenv.moduleLoaded("dojo.text.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/textDirectory.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/textDirectory.js
deleted file mode 100644
index 873c77d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/text/textDirectory.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.text.textDirectory");
-dojo.provide("dojo.text.textDirectory.Property");
-dojo.provide("dojo.text.textDirectory.tokenise");
-dojo.require("dojo.string");
-
-/* adapted from Paul Sowden's iCalendar work */
-
-dojo.textDirectoryTokeniser = function () {}
-
-/*
- * This class parses a single line from a text/directory file
- * and returns an object with four named values; name, group, params
- * and value. name, group and value are strings containing the original
- * tokens unaltered and values is an array containing name/value pairs
- * or a single name token packed into arrays.
- */
-dojo.textDirectoryTokeniser.Property = function (line) {
-	// split into name/value pair
-	var left = dojo.string.trim(line.substring(0, line.indexOf(':')));
-	var right = dojo.string.trim(line.substr(line.indexOf(':') + 1));
-
-	// seperate name and paramters	
-	var parameters = dojo.string.splitEscaped(left,';');
-	this.name = parameters[0]
-	parameters.splice(0, 1);
-
-	// parse paramters
-	this.params = [];
-	for (var i = 0; i < parameters.length; i++) {
-		var arr = parameters[i].split("=");
-		var key = dojo.string.trim(arr[0].toUpperCase());
-		
-		if (arr.length == 1) { this.params.push([key]); continue; }
-		
-		var values = dojo.string.splitEscaped(arr[1],',');
-		for (var j = 0; j < values.length; j++) {
-			if (dojo.string.trim(values[j]) != '') {
-				this.params.push([key, dojo.string.trim(values[j])]);
-			}
-		}
-	}
-
-	// seperate group
-	if (this.name.indexOf('.') > 0) {
-		var arr = this.name.split('.');
-		this.group = arr[0];
-		this.name = arr[1];
-	}
-	
-	// don't do any parsing, leave to implementation
-	this.value = right;
-}
-
-
-// tokeniser, parses into an array of properties.
-dojo.textDirectoryTokeniser.tokenise = function (text) {
-	// normlize to one propterty per line and parse
-	nText = dojo.string.normalizeNewlines(text,"\n");
-	nText = nText.replace(/\n[ \t]/g, '');
-	nText = nText.replace(/\x00/g, '');
-		
-	var lines = nText.split("\n");
-	var properties = []
-
-	for (var i = 0; i < lines.length; i++) {
-		if (dojo.string.trim(lines[i]) == '') { continue; }
-		var prop = new dojo.textDirectoryTokeniser.Property(lines[i]);
-		properties.push(prop);
-	}
-	return properties;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/undo/Manager.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/undo/Manager.js
deleted file mode 100644
index 1956e5a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/undo/Manager.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.undo.Manager");
-
-dojo.undo.Manager = function () {
-
-	this._undoStack = [];
-	this._redoStack = [];
-
-	this._undoRegistrationLevel = 0;
-}
-
-dojo.undo.Manager.prototype = {
-
-//Registering undo operations
-	//registerUndoWithTarget:selector:object:
-	prepareWithInvocationTarget: function () {},
-	forwardInvocation: function () {},
-
-//Checking undo ability
-	canUndo: false,
-	canRedo: false,
-
-//Performing undo and redo
-	undo: function () {},
-	undoNestedGroup: function () {},
-	redo: function () {},
-
-//Limiting the undo stack
-	setLevelsOfUndo: function (levels) {
-		this.levelsOfUndo = levels;
-		if (levels != 0 && this._undoStack.length > levels) {
-			this._undoStack.splice(levels, this._undoStack.length - levels);
-		}
-	},
-	levelsOfUndo: 0,
-
-//Creating undo groups
-	beginUndoGrouping: function () {},
-	endUndoGrouping: function () {},
-	enableUndoRegistration: function () {
-		if (++this._undoRegistrationLevel >= 0) {
-			this._undoRegistrationLevel = 0;
-			this.isUndoRegistrationEnabled = true;
-		}
-	},
-	groupsByEvent: true,
-	setGroupsByEvent: function (bool) { this.groupsByEvent = bool; },
-	groupingLevel: 0,
-
-//Disabling undo
-	disableUndoRegistration = function () {
-		this.isUndoRegistrationEnabled = false;
-		this._undoRegistrationLevel--;
-	},
-	isUndoRegistrationEnabled: true,
-
-//Checking whether undo or redo is being performed
-	isUndoing: false,
-	isRedoing: false,
-
-//Clearing undo operations
-	removeAllActions: function () {
-		this._undoStack = [];
-		this._redoStack = [];
-	},
-	removeAllActionsWithTarget: function (target) {},
-
-//Setting and getting the action name
-	setActionName: function () {},
-	redoActionName: null,
-	undoActionName: null,
-
-//Getting and localizing menu item title
-	redoMenuItemTitle: null,
-	undoMenuItemTitle: null,
-	redoMenuTitleForUndoActionName: function () {},
-	undoMenuTitleForUndoActionName: function () {},
-      
-//Working with run loops
-	runLoopModes: [],
-	setRunLoopModes: function () {}
-}
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/uri/Uri.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/uri/Uri.js
deleted file mode 100644
index 2984771..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/uri/Uri.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.uri.Uri");
-
-dojo.uri = new function() {
-	this.joinPath = function() {
-		// DEPRECATED: use the dojo.uri.Uri object instead
-		var arr = [];
-		for(var i = 0; i < arguments.length; i++) { arr.push(arguments[i]); }
-		return arr.join("/").replace(/\/{2,}/g, "/").replace(/((https*|ftps*):)/i, "$1/");
-	}
-	
-	this.dojoUri = function (uri) {
-		// returns a Uri object resolved relative to the dojo root
-		return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(), uri);
-	}
-		
-	this.Uri = function (/*uri1, uri2, [...]*/) {
-		// An object representing a Uri.
-		// Each argument is evaluated in order relative to the next until
-		// a conanical uri is producued. To get an absolute Uri relative
-		// to the current document use
-		//      new dojo.uri.Uri(document.baseURI, uri)
-
-		// TODO: support for IPv6, see RFC 2732
-
-		// resolve uri components relative to each other
-		var uri = arguments[0];
-		for (var i = 1; i < arguments.length; i++) {
-			if(!arguments[i]) { continue; }
-
-			// Safari doesn't support this.constructor so we have to be explicit
-			var relobj = new dojo.uri.Uri(arguments[i].toString());
-			var uriobj = new dojo.uri.Uri(uri.toString());
-
-			if (relobj.path == "" && relobj.scheme == null &&
-				relobj.authority == null && relobj.query == null) {
-				if (relobj.fragment != null) { uriobj.fragment = relobj.fragment; }
-				relobj = uriobj;
-			} else if (relobj.scheme == null) {
-				relobj.scheme = uriobj.scheme;
-			
-				if (relobj.authority == null) {
-					relobj.authority = uriobj.authority;
-					
-					if (relobj.path.charAt(0) != "/") {
-						var path = uriobj.path.substring(0,
-							uriobj.path.lastIndexOf("/") + 1) + relobj.path;
-
-						var segs = path.split("/");
-						for (var j = 0; j < segs.length; j++) {
-							if (segs[j] == ".") {
-								if (j == segs.length - 1) { segs[j] = ""; }
-								else { segs.splice(j, 1); j--; }
-							} else if (j > 0 && !(j == 1 && segs[0] == "") &&
-								segs[j] == ".." && segs[j-1] != "..") {
-
-								if (j == segs.length - 1) { segs.splice(j, 1); segs[j - 1] = ""; }
-								else { segs.splice(j - 1, 2); j -= 2; }
-							}
-						}
-						relobj.path = segs.join("/");
-					}
-				}
-			}
-
-			uri = "";
-			if (relobj.scheme != null) { uri += relobj.scheme + ":"; }
-			if (relobj.authority != null) { uri += "//" + relobj.authority; }
-			uri += relobj.path;
-			if (relobj.query != null) { uri += "?" + relobj.query; }
-			if (relobj.fragment != null) { uri += "#" + relobj.fragment; }
-		}
-
-		this.uri = uri.toString();
-
-		// break the uri into its main components
-		var regexp = "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-	    var r = this.uri.match(new RegExp(regexp));
-
-		this.scheme = r[2] || (r[1] ? "" : null);
-		this.authority = r[4] || (r[3] ? "" : null);
-		this.path = r[5]; // can never be undefined
-		this.query = r[7] || (r[6] ? "" : null);
-		this.fragment  = r[9] || (r[8] ? "" : null);
-		
-		if (this.authority != null) {
-			// server based naming authority
-			regexp = "^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-			r = this.authority.match(new RegExp(regexp));
-			
-			this.user = r[3] || null;
-			this.password = r[4] || null;
-			this.host = r[5];
-			this.port = r[7] || null;
-		}
-	
-		this.toString = function(){ return this.uri; }
-	}
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/uri/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/uri/__package__.js
deleted file mode 100644
index 48224e0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/uri/__package__.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.uri.Uri", false, false]
-});
-dojo.hostenv.moduleLoaded("dojo.uri.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/validate.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/validate.js
deleted file mode 100644
index 1613c44..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/validate.js
+++ /dev/null
@@ -1,781 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.validate");
-dojo.provide("dojo.validate.us");
-dojo.require("dojo.regexp");
-
-// *** Validation Functions ****
-
-/**
-  Checks if a string has non whitespace characters. 
-  Parameters allow you to constrain the length.
-
-  @param value  A string.
-  @param flags  An object.
-    flags.length  If set, checks if there are exactly flags.length number of characters.
-    flags.minlength  If set, checks if there are at least flags.minlength number of characters.
-    flags.maxlength  If set, checks if there are at most flags.maxlength number of characters.
-  @return  true or false.
-*/
-dojo.validate.isText = function(value, flags) {
-	flags = (typeof flags == "object") ? flags : {};
-
-	// test for text
-	if ( /^\s*$/.test(value) ) { return false; }
-
-	// length tests
-	if ( typeof flags.length == "number" && flags.length != value.length ) { return false; }
-	if ( typeof flags.minlength == "number" && flags.minlength > value.length ) { return false; }
-	if ( typeof flags.maxlength == "number" && flags.maxlength < value.length ) { return false; }
-
-	return true;
-}
-
-/**
-  Validates an IP address.
-  Supports 5 formats for IPv4: dotted decimal, dotted hex, dotted octal, decimal and hexadecimal.
-  Supports 2 formats for Ipv6.
-
-  @param value  A string.
-  @param flags  An object.  All flags are boolean with default = true.
-    flags.allowDottedDecimal  Example, 207.142.131.235.  No zero padding.
-    flags.allowDottedHex  Example, 0x18.0x11.0x9b.0x28.  Case insensitive.  Zero padding allowed.
-    flags.allowDottedOctal  Example, 0030.0021.0233.0050.  Zero padding allowed.
-    flags.allowDecimal  Example, 3482223595.  A decimal number between 0-4294967295.
-    flags.allowHex  Example, 0xCF8E83EB.  Hexadecimal number between 0x0-0xFFFFFFFF.
-      Case insensitive.  Zero padding allowed.
-    flags.allowIPv6   IPv6 address written as eight groups of four hexadecimal digits.
-    flags.allowHybrid   IPv6 address written as six groups of four hexadecimal digits
-      followed by the usual 4 dotted decimal digit notation of IPv4. x:x:x:x:x:x:d.d.d.d
-  @return  true or false
-*/
-dojo.validate.isIpAddress = function(value, flags) {
-	var re = new RegExp("^" + dojo.regexp.ipAddress(flags) + "$", "i");
-	return re.test(value);
-}
-
-/**
-  Checks if a string could be a valid URL.
-
-  @param value  A string.
-  @param flags  An object.
-    flags.scheme  Can be true, false, or [true, false]. 
-      This means: required, not allowed, or either.
-    flags in regexp.host can be applied.
-    flags in regexp.ipAddress can be applied.
-    flags in regexp.tld can be applied.
-  @return  true or false
-*/
-dojo.validate.isUrl = function(value, flags) {
-	var re = new RegExp("^" + dojo.regexp.url(flags) + "$", "i");
-	return re.test(value);
-}
-
-/**
-  Checks if a string could be a valid email address.
-
-  @param value  A string.
-  @param flags  An object.
-    flags.allowCruft  Allow address like <mailto:foo@yahoo.com>.  Default is false.
-    flags in regexp.host can be applied.
-    flags in regexp.ipAddress can be applied.
-    flags in regexp.tld can be applied.
-  @return  true or false.
-*/
-dojo.validate.isEmailAddress = function(value, flags) {
-	var re = new RegExp("^" + dojo.regexp.emailAddress(flags) + "$", "i");
-	return re.test(value);
-}
-
-/**
-  Checks if a string could be a valid email address list.
-
-  @param value  A string.
-  @param flags  An object.
-    flags.listSeparator  The character used to separate email addresses.  Default is ";", ",", "\n" or " ".
-    flags in regexp.emailAddress can be applied.
-    flags in regexp.host can be applied.
-    flags in regexp.ipAddress can be applied.
-    flags in regexp.tld can be applied.
-  @return  true or false.
-*/
-dojo.validate.isEmailAddressList = function(value, flags) {
-	var re = new RegExp("^" + dojo.regexp.emailAddressList(flags) + "$", "i");
-	return re.test(value);
-}
-
-/**
-  Check if value is an email address list. If an empty list
-  is returned, the value didn't pass the test or it was empty.
-
-  @param value	A string
-  @param flags	An object (same as isEmailAddressList)
-  @return array of emails
-*/
-dojo.validate.getEmailAddressList = function(value, flags) {
-	if(!flags) { flags = {}; }
-	if(!flags.listSeparator) { flags.listSeparator = "\\s;,"; }
-
-	if ( dojo.validate.isEmailAddressList(value, flags) ) {
-		return value.split(new RegExp("\\s*[" + flags.listSeparator + "]\\s*"));
-	}
-	return [];
-}
-
-/**
-  Validates whether a string is in an integer format. 
-
-  @param value  A string.
-  @param flags  An object.
-    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. sign is optional).
-    flags.separator  The character used as the thousands separator.  Default is no separator.
-      For more than one symbol use an array, e.g. [",", ""], makes ',' optional.
-  @return  true or false.
-*/
-dojo.validate.isInteger = function(value, flags) {
-	var re = new RegExp("^" + dojo.regexp.integer(flags) + "$");
-	return re.test(value);
-}
-
-/**
-  Validates whether a string is a real valued number. 
-  Format is the usual exponential notation.
-
-  @param value  A string.
-  @param flags  An object.
-    flags.places  The integer number of decimal places.
-      If not given, the decimal part is optional and the number of places is unlimited.
-    flags.decimal  The character used for the decimal point.  Default is ".".
-    flags.exponent  Express in exponential notation.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. the exponential part is optional).
-    flags.eSigned  The leading plus-or-minus sign on the exponent.  Can be true, false, 
-      or [true, false].  Default is [true, false], (i.e. sign is optional).
-    flags in regexp.integer can be applied.
-  @return  true or false.
-*/
-dojo.validate.isRealNumber = function(value, flags) {
-	var re = new RegExp("^" + dojo.regexp.realNumber(flags) + "$");
-	return re.test(value);
-}
-
-/**
-  Validates whether a string denotes a monetary value. 
-
-  @param value  A string.
-  @param flags  An object.
-    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. sign is optional).
-    flags.symbol  A currency symbol such as Yen "�", Pound "�", or the Euro sign "�".  
-      Default is "$".  For more than one symbol use an array, e.g. ["$", ""], makes $ optional.
-    flags.placement  The symbol can come "before" the number or "after".  Default is "before".
-    flags.separator  The character used as the thousands separator. The default is ",".
-    flags.cents  The two decimal places for cents.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. cents are optional).
-    flags.decimal  The character used for the decimal point.  Default is ".".
-  @return  true or false.
-*/
-dojo.validate.isCurrency = function(value, flags) {
-	var re = new RegExp("^" + dojo.regexp.currency(flags) + "$");
-	return re.test(value);
-}
-
-/**
-  Validates U.S. currency.
-
-  @param value  A string.
-  @param flags  An object.
-    flags in validate.isCurrency can be applied.
-  @return  true or false.
-*/
-dojo.validate.us.isCurrency = function(value, flags) {
-	return dojo.validate.isCurrency(value, flags);
-}
-
-/**
-  Validates German currency.
-
-  @param value  A string.
-  @return  true or false.
-*/
-dojo.validate.isGermanCurrency = function(value) {
-	flags = {
-		symbol: "�",
-		placement: "after",
-		decimal: ",",
-		separator: "."
-	};
-	return dojo.validate.isCurrency(value, flags);
-}
-
-/**
-  Validates Japanese currency.
-
-  @param value  A string.
-  @return  true or false.
-*/
-dojo.validate.isJapaneseCurrency = function(value) {
-	flags = {
-		symbol: "�",
-		cents: false
-	};
-	return dojo.validate.isCurrency(value, flags);
-}
-
-/**
-  Validates whether a string denoting an integer, 
-  real number, or monetary value is between a max and min. 
-
-  @param value  A string.
-  @param flags  An object.
-    flags.max  A number, which the value must be less than or equal to for the validation to be true.
-    flags.min  A number, which the value must be greater than or equal to for the validation to be true.
-    flags.decimal  The character used for the decimal point.  Default is ".".
-  @return  true or false.
-*/
-dojo.validate.isInRange = function(value, flags) {
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	var max = (typeof flags.max == "number") ? flags.max : Infinity;
-	var min = (typeof flags.min == "number") ? flags.min : -Infinity;
-	var dec = (typeof flags.decimal == "string") ? flags.decimal : ".";
-	
-	// splice out anything not part of a number
-	var pattern = "[^" + dec + "\\deE+-]";
-	value = value.replace(RegExp(pattern, "g"), "");
-
-	// trim ends of things like e, E, or the decimal character
-	value = value.replace(/^([+-]?)(\D*)/, "$1");
-	value = value.replace(/(\D*)$/, "");
-
-	// replace decimal with ".". The minus sign '-' could be the decimal!
-	pattern = "(\\d)[" + dec + "](\\d)";
-	value = value.replace(RegExp(pattern, "g"), "$1.$2");
-
-	value = Number(value);
-	if ( value < min || value > max ) { return false; }
-
-	return true;
-}
-
-/**
-  Validates a time value in any International format.
-  The value can be validated against one format or one of multiple formats.
-
-  Format
-  h        12 hour, no zero padding.
-  hh       12 hour, has leading zero.
-  H        24 hour, no zero padding.
-  HH       24 hour, has leading zero.
-  m        minutes, no zero padding.
-  mm       minutes, has leading zero.
-  s        seconds, no zero padding.
-  ss       seconds, has leading zero.
-  All other characters must appear literally in the expression.
-
-  Example
-    "h:m:s t"  ->   2:5:33 PM
-    "HH:mm:ss" ->  14:05:33
-
-  @param value  A string.
-  @param flags  An object.
-    flags.format  A string or an array of strings.  Default is "h:mm:ss t".
-    flags.amSymbol  The symbol used for AM.  Default is "AM".
-    flags.pmSymbol  The symbol used for PM.  Default is "PM".
-  @return  true or false
-*/
-dojo.validate.isValidTime = function(value, flags) {
-	var re = new RegExp("^" + dojo.regexp.time(flags) + "$", "i");
-	return re.test(value);
-}
-
-/**
-  Validates 12-hour time format.
-  Zero-padding is not allowed for hours, required for minutes and seconds.
-  Seconds are optional.
-
-  @param value  A string.
-  @return  true or false
-*/
-dojo.validate.is12HourTime = function(value) {
-	return dojo.validate.isValidTime(value, {format: ["h:mm:ss t", "h:mm t"]});
-}
-
-/**
-  Validates 24-hour military time format.
-  Zero-padding is required for hours, minutes, and seconds.
-  Seconds are optional.
-
-  @param value  A string.
-  @return  true or false
-*/
-dojo.validate.is24HourTime = function(value) {
-	return dojo.validate.isValidTime(value, {format: ["HH:mm:ss", "HH:mm"]} );
-}
-
-/**
-  Returns true if the date conforms to the format given and is a valid date. Otherwise returns false.
-
-  @param dateValue  A string for the date.
-  @param format  A string, default is  "MM/DD/YYYY".
-  @return  true or false
-
-  Accepts any type of format, including ISO8601.
-  All characters in the format string are treated literally except the following tokens:
-
-  YYYY - matches a 4 digit year
-  M - matches a non zero-padded month
-  MM - matches a zero-padded month
-  D -  matches a non zero-padded date
-  DD -  matches a zero-padded date
-  DDD -  matches an ordinal date, 001-365, and 366 on leapyear
-  ww - matches week of year, 01-53
-  d - matches day of week, 1-7
-
-  Examples: These are all today's date.
-
-  Date          Format
-  2005-W42-3    YYYY-Www-d
-  2005-292      YYYY-DDD
-  20051019      YYYYMMDD
-  10/19/2005    M/D/YYYY
-  19.10.2005    D.M.YYYY
-*/
-dojo.validate.isValidDate = function(dateValue, format) {
-	// Default is the American format
-	if (typeof format != "string") { format = "MM/DD/YYYY"; }
-
-	// Create a literal regular expression based on format
-	var reLiteral = format.replace(/([$^.*+?=!:|\/\\\(\)\[\]\{\}])/g, "\\$1");
-
-	// Convert all the tokens to RE elements
-	reLiteral = reLiteral.replace( "YYYY", "([0-9]{4})" );
-	reLiteral = reLiteral.replace( "MM", "(0[1-9]|10|11|12)" );
-	reLiteral = reLiteral.replace( "M", "([1-9]|10|11|12)" );
-	reLiteral = reLiteral.replace( "DDD", "(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])" );
-	reLiteral = reLiteral.replace( "DD", "(0[1-9]|[12][0-9]|30|31)" );
-	reLiteral = reLiteral.replace( "D", "([1-9]|[12][0-9]|30|31)" );
-	reLiteral = reLiteral.replace( "ww", "(0[1-9]|[1-4][0-9]|5[0-3])" );
-	reLiteral = reLiteral.replace( "d", "([1-7])" );
-
-	// Anchor pattern to begining and end of string
-	reLiteral = "^" + reLiteral + "$";
-
-	// Dynamic RE that parses the original format given
-	var re = new RegExp(reLiteral);
-	
-	// Test if date is in a valid format
-	if (!re.test(dateValue))  return false;
-
-	// Parse date to get elements and check if date is valid
-	// Assume valid values for date elements not given.
-	var year = 0, month = 1, date = 1, dayofyear = 1, week = 1, day = 1;
-
-	// Capture tokens
-	var tokens = format.match( /(YYYY|MM|M|DDD|DD|D|ww|d)/g );
-
-	// Capture date values
-	var values = re.exec(dateValue);
-
-	// Match up tokens with date values
-	for (var i = 0; i < tokens.length; i++) {
-		switch (tokens[i]) {
-		case "YYYY":
-			year = Number(values[i+1]); break;
-		case "M":
-		case "MM":
-			month = Number(values[i+1]); break;
-		case "D":
-		case "DD":
-			date = Number(values[i+1]); break;
-		case "DDD":
-			dayofyear = Number(values[i+1]); break;
-		case "ww":
-			week = Number(values[i+1]); break;
-		case "d":
-			day = Number(values[i+1]); break;
-		}
-	}
-
-	// Leap years are divisible by 4, but not by 100, unless by 400
-	var leapyear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
-
-	// 31st of a month with 30 days
-	if (date == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) return false; 
-
-	// February 30th or 31st
-	if (date >= 30 && month == 2) return false; 
-
-	// February 29th outside a leap year
-	if (date == 29 && month == 2 && !leapyear) return false; 
-	if (dayofyear == 366 && !leapyear)  return false;
-
-	return true;
-}
-
-/**
-  Validates US state and territory abbreviations.
-
-	@param value  A two character string.
-  @param flags  An object.
-    flags.allowTerritories  Allow Guam, Puerto Rico, etc.  Default is true.
-    flags.allowMilitary  Allow military 'states', e.g. Armed Forces Europe (AE).  Default is true.
-  @return  true or false
-*/
-dojo.validate.us.isState = function(value, flags) {
-	var re = new RegExp("^" + dojo.regexp.us.state(flags) + "$", "i");
-	return re.test(value);
-}
-
-/**
-  Validates any sort of number based format.
-  Use it for phone numbers, social security numbers, zip-codes, etc.
-  The value can be validated against one format or one of multiple formats.
-
-  Format
-    #        Stands for a digit, 0-9.
-    ?        Stands for an optional digit, 0-9 or nothing.
-    All other characters must appear literally in the expression.
-
-  Example   
-    "(###) ###-####"       ->   (510) 542-9742
-    "(###) ###-#### x#???" ->   (510) 542-9742 x153
-    "###-##-####"          ->   506-82-1089       i.e. social security number
-    "#####-####"           ->   98225-1649        i.e. zip code
-
-  @param value  A string.
-  @param flags  An object.
-    flags.format  A string or an Array of strings for multiple formats.
-  @return  true or false
-*/
-dojo.validate.isNumberFormat = function(value, flags) {
-	var re = new RegExp("^" + dojo.regexp.numberFormat(flags) + "$", "i");
-	return re.test(value);
-}
-
-/**
-  Validates 10 US digit phone number for several common formats:
-
-  @param value The telephone number string
-  @return true or false
-*/
-dojo.validate.us.isPhoneNumber = function(value) {
-	flags = {
-		format: [
-			"###-###-####",
-			"(###) ###-####",
-			"(###) ### ####",
-			"###.###.####",
-			"###/###-####",
-			"### ### ####",
-			"###-###-#### x#???",
-			"(###) ###-#### x#???",
-			"(###) ### #### x#???",
-			"###.###.#### x#???",
-			"###/###-#### x#???",
-			"### ### #### x#???"
-		]
-	};
-
-	return dojo.validate.isNumberFormat(value, flags);
-}
-
-// Validates social security number
-dojo.validate.us.isSocialSecurityNumber = function(value) {
-	flags = {
-		format: [
-			"###-##-####",
-			"### ## ####",
-			"#########"
-		]
-	};
-
-	return dojo.validate.isNumberFormat(value, flags);
-}
-
-// Validates U.S. zip-code
-dojo.validate.us.isZipCode = function(value) {
-	flags = {
-		format: [
-			"#####-####",
-			"##### ####",
-			"#########",
-			"#####"
-		]
-	};
-
-	return dojo.validate.isNumberFormat(value, flags);
-}
-
-
-/**
-	Procedural API Description
-
-		The main aim is to make input validation expressible in a simple format.
-		You define profiles which declare the required and optional fields and any constraints they might have.
-		The results are provided as an object that makes it easy to handle missing and invalid input.
-
-	Usage
-
-		var results = dojo.validate.check(form, profile);
-
-	Profile Object
-
-		var profile = {
-			// filters change the field value and are applied before validation.
-			trim: ["tx1", "tx2"],
-			uppercase: ["tx9"],
-			lowercase: ["tx5", "tx6", "tx7"],
-			ucfirst: ["tx10"],
-			digit: ["tx11"],
-
-			// required input fields that are blank will be reported missing.
-			// required radio button groups and drop-down lists with no selection will be reported missing.
-			// checkbox groups and selectboxes can be required to have more than one value selected.
-			// List required fields by name and use this notation to require more than one value: {checkboxgroup: 2}, {selectboxname: 3}.
-			required: ["tx7", "tx8", "pw1", "ta1", "rb1", "rb2", "cb3", "s1", {"doubledip":2}, {"tripledip":3}],
-
-			// dependant/conditional fields are required if the target field is present and not blank.
-			// At present only textbox, password, and textarea fields are supported.
-			dependancies:	{
-				cc_exp: "cc_no",	
-				cc_type: "cc_no",	
-			},
-
-			// Fields can be validated using any boolean valued function.  
-			// Use arrays to specify parameters in addition to the field value.
-			constraints: {
-				field_name1: myValidationFunction,
-				field_name2: dojo.validate.isInteger,
-				field_name3: [myValidationFunction, additional parameters],
-				field_name4: [dojo.validate.isValidDate, "YYYY.MM.DD"],
-				field_name5: [dojo.validate.isEmailAddress, false, true],
-			},
-
-			// Confirm is a sort of conditional validation.
-			// It associates each field in its property list with another field whose value should be equal.
-			// If the values are not equal, the field in the property list is reported as Invalid. Unless the target field is blank.
-			confirm: {
-				email_confirm: "email",	
-				pw2: "pw1",	
-			}
-		};
-
-	Results Object
-
-		isSuccessful(): Returns true if there were no invalid or missing fields, else it returns false.
-		hasMissing():  Returns true if the results contain any missing fields.
-		getMissing():  Returns a list of required fields that have values missing.
-		isMissing(field):  Returns true if the field is required and the value is missing.
-		hasInvalid():  Returns true if the results contain fields with invalid data.
-		getInvalid():  Returns a list of fields that have invalid values.
-		isInvalid(field):  Returns true if the field has an invalid value.
-
-*/
-
-/**
-  Validates user input of an HTML form based on input profile.
-
-	@param form  The form object to be validated.
-	@param profile  The input profile that specifies how the form fields are to be validated.
-	@return results  An object that contains several methods summarizing the results of the validation.
-*/
-dojo.validate.check = function(form, profile) {
-	// Essentially private properties of results object
-	var missing = [];
-	var invalid = [];
-
-	// results object summarizes the validation
-	var results = {
-		isSuccessful: function() {return ( !this.hasInvalid() && !this.hasMissing() );},
-		hasMissing: function() {return ( missing.length > 0 );},
-		getMissing: function() {return missing;},
-		isMissing: function(elemname) {
-			for (var i = 0; i < missing.length; i++) {
-				if ( elemname == missing[i] ) { return true; }
-			}
-			return false;
-		},
-		hasInvalid: function() {return ( invalid.length > 0 );},
-		getInvalid: function() {return invalid;},
-		isInvalid: function(elemname) {
-			for (var i = 0; i < invalid.length; i++) {
-				if ( elemname == invalid[i] ) { return true; }
-			}
-			return false;
-		}
-	};
-
-	// Filters are applied before fields are validated.
-	// Trim removes white space at the front and end of the fields.
-	if ( profile.trim instanceof Array ) {
-		for (var i = 0; i < profile.trim.length; i++) {
-			var elem = form[profile.trim[i]];
-			if ( elem.type != "text" && elem.type != "textarea" && elem.type != "password" ) { continue; }
-			elem.value = elem.value.replace(/(^\s*|\s*$)/g, "");
-		}
-	}
-	// Convert to uppercase
-	if ( profile.uppercase instanceof Array ) {
-		for (var i = 0; i < profile.uppercase.length; i++) {
-			var elem = form[profile.uppercase[i]];
-			if ( elem.type != "text" && elem.type != "textarea" && elem.type != "password" ) { continue; }
-			elem.value = elem.value.toUpperCase();
-		}
-	}
-	// Convert to lowercase
-	if ( profile.lowercase instanceof Array ) {
-		for (var i = 0; i < profile.lowercase.length; i++) {
-			var elem = form[profile.lowercase[i]];
-			if ( elem.type != "text" && elem.type != "textarea" && elem.type != "password" ) { continue; }
-			elem.value = elem.value.toLowerCase();
-		}
-	}
-	// Uppercase first letter
-	if ( profile.ucfirst instanceof Array ) {
-		for (var i = 0; i < profile.ucfirst.length; i++) {
-			var elem = form[profile.ucfirst[i]];
-			if ( elem.type != "text" && elem.type != "textarea" && elem.type != "password" ) { continue; }
-			elem.value = elem.value.replace(/\b\w+\b/g, function(word) { return word.substring(0,1).toUpperCase() + word.substring(1).toLowerCase(); });
-		}
-	}
-	// Remove non digits characters from the input.
-	if ( profile.digit instanceof Array ) {
-		for (var i = 0; i < profile.digit.length; i++) {
-			var elem = form[profile.digit[i]];
-			if ( elem.type != "text" && elem.type != "textarea" && elem.type != "password" ) { continue; }
-			elem.value = elem.value.replace(/\D/g, "");
-		}
-	}
-
-	// See if required input fields have values missing.
-	if ( profile.required instanceof Array ) {
-		for (var i = 0; i < profile.required.length; i++) { 
-			if ( typeof profile.required[i] != "string" ) { continue; }
-			var elem = form[profile.required[i]];
-			// Are textbox, textarea, or password fields blank.
-			if ( (elem.type == "text" || elem.type == "textarea" || elem.type == "password") && /^\s*$/.test(elem.value) ) {	
-				missing[missing.length] = elem.name;
-			}
-			// Does drop-down box have option selected.
-			else if ( (elem.type == "select-one" || elem.type == "select-multiple") && elem.selectedIndex == -1 ) {
-				missing[missing.length] = elem.name;
-			}
-			// Does radio button group (or check box group) have option checked.
-			else if ( elem instanceof Array )  {
-				var checked = false;
-				for (var j = 0; j < elem.length; j++) {
-					if (elem[j].checked) { checked = true; }
-				}
-				if ( !checked ) {	
-					missing[missing.length] = elem[0].name;
-				}
-			}
-		}
-	}
-
-	// See if checkbox groups and select boxes have x number of required values.
-	if ( profile.required instanceof Array ) {
-		for (var i = 0; i < profile.required.length; i++) { 
-			if ( typeof profile.required[i] != "object" ) { continue; }
-			var elem, numRequired;
-			for (var name in profile.required[i]) { 
-				elem = form[name]; 
-				numRequired = profile.required[i][name];
-			}
-			// case 1: elem is a check box group
-			if ( elem instanceof Array )  {
-				var checked = 0;
-				for (var j = 0; j < elem.length; j++) {
-					if (elem[j].checked) { checked++; }
-				}
-				if ( checked < numRequired ) {	
-					missing[missing.length] = elem[0].name;
-				}
-			}
-			// case 2: elem is a select box
-			else if ( elem.type == "select-multiple" ) {
-				var selected = 0;
-				for (var j = 0; j < elem.options.length; j++) {
-					if (elem.options[j].selected) { selected++; }
-				}
-				if ( selected < numRequired ) {	
-					missing[missing.length] = elem.name;
-				}
-			}
-		}
-	}
-
-	// Dependant fields are required when the target field is present (not blank).
-	// Todo: Support dependant and target fields that are radio button groups, or select drop-down lists.
-	// Todo: Make the dependancy based on a specific value of the target field.
-	// Todo: allow dependant fields to have several required values, like {checkboxgroup: 3}.
-	if ( typeof profile.dependancies == "object" ) {
-		// properties of dependancies object are the names of dependant fields to be checked
-		for (name in profile.dependancies) {
-			var elem = form[name];	// the dependant element
-			if ( elem.type != "text" && elem.type != "textarea" && elem.type != "password" ) { continue; } // limited support
-			if ( /\S+/.test(elem.value) ) { continue; }	// has a value already
-			if ( results.isMissing(elem.name) ) { continue; }	// already listed as missing
-			var target = form[profile.dependancies[name]];
-			if ( target.type != "text" && target.type != "textarea" && target.type != "password" ) { continue; }	// limited support
-			if ( /^\s*$/.test(target.value) ) { continue; }	// skip if blank
-			missing[missing.length] = elem.name;	// ok the dependant field is missing
-		}
-	}
-
-	// Find invalid input fields.
-	if ( typeof profile.constraints == "object" ) {
-		// constraint properties are the names of fields to be validated
-		for (name in profile.constraints) {
-			var elem = form[name];
-			if ( elem.type != "text" && elem.type != "textarea" && elem.type != "password" ) { continue; }
-			// skip if blank - its optional unless required, in which case it is already listed as missing.
-			if ( /^\s*$/.test(elem.value) ) { continue; }
-
-			var isValid = true;
-			// case 1: constraint value is validation function
-			if ( typeof profile.constraints[name] == "function" ) {
-				isValid = profile.constraints[name](elem.value);
-			}
-			// case 2: constraint value is array, first elem is function, tail is parameters
-			else if ( profile.constraints[name] instanceof Array ) {
-				var isValidSomething = profile.constraints[name][0];
-				var params = profile.constraints[name].slice(1);
-				params.unshift(elem.value);
-				isValid = isValidSomething.apply(null, params);
-			}
-
-			if ( !isValid ) {	
-				invalid[invalid.length] = elem.name;
-			}
-		}
-	}
-
-	// Find unequal confirm fields and report them as Invalid.
-	if ( typeof profile.confirm == "object" ) {
-		for (name in profile.confirm) {
-			var elem = form[name];	// the confirm element
-			var target = form[profile.confirm[name]];
-			if ( (elem.type != "text" && elem.type != "textarea" && elem.type != "password") 
-				|| target.type != elem.type 
-				|| target.value == elem.value		// it's valid
-				|| results.isInvalid(elem.name)	// already listed as invalid
-				|| /^\s*$/.test(target.value)	)	// skip if blank - only confirm if target has a value
-			{
-				continue; 
-			}	
-			invalid[invalid.length] = elem.name;
-		}
-	}
-
-	return results;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/DomWidget.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/DomWidget.js
deleted file mode 100644
index 6dc2827..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/DomWidget.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.DomWidget");
-dojo.require("dojo.widget.DomWidget");
-
-dj_deprecated("dojo.webui.DomWidget is deprecated, use dojo.widget.DomWidget");
-
-dojo.webui.DomWidget = dojo.widget.DomWidget;
-dojo.webui._cssFiles = dojo.widget._cssFiles;
-
-dojo.webui.buildFromTemplate = dojo.widget.buildFromTemplate;
-
-dojo.webui.attachProperty = dojo.widget.attachProperty;
-dojo.webui.eventAttachProperty = dojo.widget.eventAttachProperty;
-dojo.webui.subTemplateProperty = dojo.widget.subTemplateProperty;
-dojo.webui.onBuildProperty = dojo.widget.onBuildProperty;
-
-dojo.webui.attachTemplateNodes = dojo.widget.attachTemplateNodes;
-dojo.webui.getDojoEventsFromStr = dojo.widget.getDojoEventsFromStr;
-dojo.webui.buildAndAttachTemplate = dojo.widget.buildAndAttachTemplate;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/HtmlWidget.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/HtmlWidget.js
deleted file mode 100644
index 94e9f50..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/HtmlWidget.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.HtmlWidget");
-dojo.provide("dojo.webui.HTMLWidget");
-
-dojo.require("dojo.widget.HtmlWidget");
-
-dj_deprecated("dojo.webui.HtmlWidget is deprecated, use dojo.widget.HtmlWidget");
-
-dojo.webui.HtmlWidget = dojo.widget.HtmlWidget;
-dojo.webui.HTMLWidget = dojo.widget.HtmlWidget;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/SvgWidget.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/SvgWidget.js
deleted file mode 100644
index 4f019a7..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/SvgWidget.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.SvgWidget");
-dojo.provide("dojo.webui.SVGWidget");
-
-dojo.require("dojo.widget.SvgWidget");
-
-dj_deprecated("dojo.webui.SvgWidget is deprecated, use dojo.widget.SvgWidget");
-
-dojo.webui.SvgWidget = dojo.widget.SvgWidget;
-dojo.webui.SVGWidget = dojo.widget.SvgWidget;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/Widget.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/Widget.js
deleted file mode 100644
index 36db82c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/Widget.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.Widget");
-dojo.provide("dojo.webui.widgets.tags");
-
-dojo.require("dojo.widget.Widget");
-
-dj_deprecated("dojo.webui.Widget is deprecated, use dojo.widget.Widget");
-
-dojo.webui.Widget = dojo.widget.Widget;
-dojo.webui.widgets.tags = dojo.widget.tags;
-
-dojo.webui.widgets.buildWidgetFromParseTree = dojo.widget.buildWidgetFromParseTree;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/WidgetManager.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/WidgetManager.js
deleted file mode 100644
index 82e9715..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/WidgetManager.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgetManager");
-dojo.provide("dojo.webui.WidgetManager");
-
-dojo.require("dojo.widget.Manager");
-
-dj_deprecated("dojo.webui.WidgetManager is deprecated, use dojo.widget.WidgetManager");
-
-dojo.webui.widgetManager = dojo.widget.manager;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/__package__.js
deleted file mode 100644
index 9421bfa..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/__package__.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.xml.Parse", 
-			 "dojo.webui.Widget", 
-			 "dojo.webui.widgets.Parse", 
-			 // "dojo.webui.DragAndDrop", 
-			 "dojo.webui.WidgetManager"],
-	browser: ["dojo.webui.DomWidget",
-			  "dojo.webui.HtmlWidget"],
-	svg: 	 ["dojo.webui.SvgWidget"]
-});
-dojo.hostenv.moduleLoaded("dojo.webui.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Button.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Button.js
deleted file mode 100644
index 55bbe77..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Button.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.Button");
-
-dojo.require("dojo.widget.Button");
-
-dj_deprecated("dojo.webui.widgets.Button is deprecated, use dojo.widget.Button");
-
-dojo.webui.widgets.Button = dojo.widget.Button;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/ComboBox.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/ComboBox.js
deleted file mode 100644
index ee2fa48..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/ComboBox.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.ComboBox");
-
-dojo.require("dojo.widget.ComboBox");
-
-dj_deprecated("dojo.webui.widgets.ComboBox is deprecated, use dojo.widget.ComboBox");
-
-dojo.webui.widgets.ComboBoxDataProvider = dojo.widget.ComboBoxDataProvider;
-dojo.webui.widgets.ComboBox = dojo.widget.ComboBox;
-dojo.webui.widgets.DomComboBox = dojo.widget.DomComboBox;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/ContextMenu.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/ContextMenu.js
deleted file mode 100644
index 8bec7a9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/ContextMenu.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.ContextMenu");
-
-dojo.require("dojo.widget.ContextMenu");
-
-dj_deprecated("dojo.webui.widgets.ContextMenu is deprecated, use dojo.widget.ContextMenu");
-
-dojo.webui.widgets.ContextMenu = dojo.widget.ContextMenu;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/DropdownButtons.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/DropdownButtons.js
deleted file mode 100644
index dc04598..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/DropdownButtons.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.DropdownButtons");
-dojo.provide("dojo.webui.widgets.HTMLDropdownButtons");
-
-dojo.require("dojo.widget.DropdownButtons");
-
-dj_deprecated("dojo.webui.widgets.DropdownButtons is deprecated, use dojo.widget.DropdownButtons");
-
-dojo.webui.widgets.DropdownButtons = dojo.widget.DropdownButtons;
-dojo.webui.widgets.HTMLDropdownButtons = dojo.widget.HtmlDropdownButtons;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLButton.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLButton.js
deleted file mode 100644
index 964eb29..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLButton.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.HTMLButton");
-
-dojo.require("dojo.widget.HtmlButton");
-
-dj_deprecated("dojo.webui.widgets.HTMLButton is deprecated, use dojo.widget.HtmlButton");
-
-dojo.webui.widgets.HTMLButton = dojo.widget.HtmlButton;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLComboBox.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLComboBox.js
deleted file mode 100644
index 212119d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLComboBox.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.HTMLComboBox");
-
-dojo.require("dojo.widget.HtmlComboBox");
-
-dj_deprecated("dojo.webui.widgets.HTMLComboBox is deprecated, use dojo.widget.HtmlComboBox");
-
-dojo.webui.widgets.HTMLComboBox = dojo.widget.HtmlComboBox;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLContextMenu.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLContextMenu.js
deleted file mode 100644
index 3e96a37..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLContextMenu.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.HTMLContextMenu");
-
-dojo.require("dojo.widget.HtmlContextMenu");
-
-dj_deprecated("dojo.webui.widgets.HTMLContextMenu is deprecated, use dojo.widget.HtmlContextMenu");
-
-dojo.webui.widgets.HTMLContextMenu = dojo.widget.HtmlContextMenu;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLMenu.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLMenu.js
deleted file mode 100644
index a549a5e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLMenu.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.HTMLMenu");
-
-dojo.require("dojo.widget.HtmlMenu");
-
-dj_deprecated("dojo.webui.widgets.HTMLMenu is deprecated, use dojo.widget.HtmlMenu");
-
-dojo.webui.widgets.HTMLMenu = dojo.widget.HtmlMenu;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLMenuItem.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLMenuItem.js
deleted file mode 100644
index 8e750e1..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLMenuItem.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.HTMLMenuItem");
-
-dojo.require("dojo.widget.HtmlMenuItem");
-
-dj_deprecated("dojo.webui.widgets.HTMLMenuItem is deprecated, use dojo.widget.HtmlMenuItem");
-
-dojo.webui.widgets.HTMLMenuItem = dojo.widget.HtmlMenuItem;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLResizableTextarea.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLResizableTextarea.js
deleted file mode 100644
index 660cb32..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/HTMLResizableTextarea.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.HTMLResizableTextarea");
-
-dojo.require("dojo.widget.HtmlResizeableTextarea");
-
-dj_deprecated("dojo.webui.widgets.HTMLResizeableTextarea is deprecated, use dojo.widget.HtmlResizeableTextarea");
-
-dojo.webui.widgets.HTMLResizeableTextarea = dojo.widget.HtmlResizeableTextarea;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/InlineEditBox.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/InlineEditBox.js
deleted file mode 100644
index 18b9c2e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/InlineEditBox.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.InlineEditBox");
-dojo.provide("dojo.webui.widgets.HTMLInlineEditBox");
-
-dojo.require("dojo.widget.HtmlInlineEditBox");
-
-dj_deprecated("dojo.webui.widgets.InlineEditBox is deprecated, use dojo.widget.HtmlInlineEditBox");
-
-dojo.webui.widgets.HTMLInlineEditBox = dojo.widget.HtmlInlineEditBox;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Menu.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Menu.js
deleted file mode 100644
index a693489..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Menu.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.Menu");
-
-dojo.require("dojo.widget.Menu");
-
-dj_deprecated("dojo.webui.widgets.Menu is deprecated, use dojo.widget.Menu");
-
-dojo.webui.widgets.Menu = dojo.widget.Menu;
-dojo.webui.widgets.DomMenu = dojo.widget.DomMenu;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/MenuItem.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/MenuItem.js
deleted file mode 100644
index 8fbf279..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/MenuItem.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.MenuItem");
-
-dojo.require("dojo.widget.MenuItem");
-
-dj_deprecated("dojo.webui.widgets.MenuItem is deprecated, use dojo.widget.MenuItem");
-
-dojo.webui.widgets.MenuItem = dojo.widget.MenuItem;
-dojo.webui.widgets.DomMenuItem = dojo.widget.DomMenuItem;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Parse.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Parse.js
deleted file mode 100644
index 77d75e2..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Parse.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.Parse");
-
-dojo.require("dojo.widget.Parse");
-
-dj_deprecated("dojo.webui.widgets.Parse is deprecated; use dojo.widget.Parse");
-
-dojo.webui.widgets.Parse = dojo.widget.Parse;
-dojo.webui.widgets._parser_collection = dojo.widget._parser_collection
-dojo.webui.widgets.getParser = dojo.widget.getParser
-dojo.webui.widgets.fromScript = dojo.widget.fromScript;
-dojo.webui.widgets.oldFromScript = dojo.widget._oldFromScript;
-dojo.webui.fromScript = dojo.widget.fromScript;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/SVGButton.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/SVGButton.js
deleted file mode 100644
index 5abc44f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/SVGButton.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.SVGButton");
-
-dojo.require("dojo.widget.SvgButton");
-
-dj_deprecated("dojo.webui.widgets.SVGButton is deprecated, use dojo.widget.SvgButton");
-
-dojo.webui.widgets.SVGButton = dojo.widget.SvgButton;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/SlideShow.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/SlideShow.js
deleted file mode 100644
index d1309d3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/SlideShow.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.SlideShow");
-dojo.provide("dojo.webui.widgets.HTMLSlideShow");
-
-dojo.require("dojo.widget.HtmlSlideShow");
-
-dj_deprecated("dojo.webui.widgets.HTMLSlideShow is deprecated, use dojo.widget.HtmlSlideShow");
-
-dojo.webui.widgets.HTMLSlideShow = dojo.widget.HtmlSlideShow;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Tabs.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Tabs.js
deleted file mode 100644
index 26ae435..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/Tabs.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.webui.widgets.Tabs");
-dojo.provide("dojo.webui.widgets.HTMLTabs");
-
-dojo.require("dojo.widget.HtmlTabs");
-
-dj_deprecated("dojo.webui.widgets.Tabs is deprecated, use dojo.widget.HtmlTabs");
-
-dojo.webui.widgets.HTMLTabs = dojo.widget.HtmlTabs;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/__package__.js
deleted file mode 100644
index 36ba811..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/webui/widgets/__package__.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.webui.widgets.parse"]
-});
-dojo.hostenv.moduleLoaded("dojo.widgets.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Accordion.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Accordion.js
deleted file mode 100644
index b45d9ee..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Accordion.js
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Accordion");
-
-//
-// TODO
-// make it prettier
-// active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case)
-//
-
-// pull in widget infrastructure
-dojo.require("dojo.widget.*");
-// pull in our superclass
-dojo.require("dojo.widget.SplitPane");
-// pull in animation libraries
-dojo.require("dojo.animation.Animation");
-
-dojo.widget.Accordion = function(){
-
-	dojo.widget.html.SplitPane.call(this);
-	this.widgetType = "Accordion";
-	this._super = dojo.widget.AccordionPanel.superclass;
-	dojo.event.connect(this, "postCreate", this, "myPostCreate");
-	
-}
-dojo.inherits(dojo.widget.Accordion, dojo.widget.html.SplitPane);
-dojo.lang.extend(dojo.widget.Accordion, {
-	sizerWidth: 1,
-	activeSizing: 1,
-	animationInterval: 250,
-	openPanel: null,
-	myPostCreate: function(args, frag){
-		for(var i=0; i<this.sizers.length; i++){
-			var sn = this.sizers[i];
-			if(sn){
-				sn.style.border = "0px";
-			}
-		}
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].setMinHeight();
-			if(this.children[i].open){
-				this.openPanel = this.children[i];
-			}
-		}
-		this.onResized();
-	},
-
-	setOpenPanel: function(panel){
-		if(!panel){ return; }
-		if(!this.openPanel){
-			this.openPanel = panel; 
-			panel.open = true;
-		}else if(panel === this.openPanel){
-			// no-op
-		}else{
-			var closingPanel = this.openPanel;
-			var openingPanel = panel;
-			this.openPanel.sizeShare = 0;
-			this.openPanel.open = false;
-			this.openPanel.setMinHeight(true);
-			this.openPanel = panel;
-			this.openPanel.sizeShare = 100;
-			this.openPanel.open = true;
-			this.onResized();
-			// Don't animate if there is no interval
-			if (this.animationInterval == 0){
-				openingPanel.sizeShare = 100;
-				closingPanel.sizeShare = 0;
-				e.animation.accordion.onResized();
-			}else{
-				var line = new dojo.math.curves.Line([0,0], [0,100]);
-				var anim = new dojo.animation.Animation(
-					line,
-					this.animationInterval,
-					new dojo.math.curves.Bezier([[0],[0.05],[0.1],[0.9],[0.95],[1]])
-				);
-				
-				var accordion = this;
-	
-				anim.handler = function(e) {
-					switch(e.type) {
-						case "animate":
-							openingPanel.sizeShare = parseInt(e.y);
-							closingPanel.sizeShare = parseInt(100 - e.y);
-							accordion.onResized();
-							break;
-						case "end":
-						break;
-					}
-				}
-				anim.play();
-			}
-		}
-	}
-});
-dojo.widget.tags.addParseTreeHandler("dojo:Accordion");
-
-dojo.widget.AccordionPanel = function(){
-	dojo.widget.html.SplitPanePanel.call(this);
-	this.widgetType = "AccordionPanel";
-	dojo.event.connect(this, "fillInTemplate", this, "myFillInTemplate");
-	dojo.event.connect(this, "postCreate", this, "myPostCreate");
-}
-
-dojo.inherits(dojo.widget.AccordionPanel, dojo.widget.html.SplitPanePanel);
-
-dojo.lang.extend(dojo.widget.AccordionPanel, {
-	sizeMin:0,
-	initialSizeMin: null,
-	sizeShare: 0,
-	open: false,
-	label: "",
-	initialContent: "",
-	labelNode: null,
-	scrollContent: true,
-	initalContentNode: null,
-	contentNode: null,
-	templatePath: dojo.uri.dojoUri("src/widget/templates/AccordionPanel.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/AccordionPanel.css"),
-
-	setMinHeight: function(ignoreIC){
-		// now handle our setup
-		var lh = dojo.style.getContentHeight(this.labelNode);
-		if(!ignoreIC){
-			lh += dojo.style.getContentHeight(this.initialContentNode);
-			this.initialSizeMin = lh;
-		}
-		this.sizeMin = lh;
-	},
-
-	myFillInTemplate: function(args, frag){
-		var sn;
-		if(this.label.length > 0){
-			this.labelNode.innerHTML = this.label;
-		}else{
-			try{
-				sn = frag["dojo:label"][0]["dojo:label"].nodeRef;
-				while(sn.firstChild){
-					this.labelNode.firstChild.appendChild(sn.firstChild);
-				}
-			}catch(e){ }
-		}
-		if(this.initialContent.length > 0){
-			this.initialContentNode.innerHTML = this.initialContent;
-		}else{
-			try{
-				sn = frag["dojo:initialcontent"][0]["dojo:initialcontent"].nodeRef;
-				while(sn.firstChild){
-					this.initialContentNode.firstChild.appendChild(sn.firstChild);
-				}
-			}catch(e){ }
-		}
-		sn = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-		while(sn.firstChild){
-			this.contentNode.appendChild(sn.firstChild);
-		}
-		if(this.open){
-			this.sizeShare = 100;
-		}
-	},
-
-	myPostCreate: function(){
-		// this.domNode.style.overflow = "auto";
-		// this.domNode.style.position = "relative";
-	},
-
-	sizeSet: function(size){
-		if(!this.scrollContent){
-			return;
-		}
-		if(size <= this.sizeMin){
-			this.contentNode.style.display = "none";
-		}else{
-			// this.domNode.style.overflow = "hidden";
-			this.contentNode.style.display = "block";
-			this.contentNode.style.overflow = "auto";
-			var scrollSize = (size-((this.initialSizeMin) ? this.initialSizeMin : this.sizeMin));
-			if(dojo.render.html.ie){
-				this.contentNode.style.height =  scrollSize+"px";
-			}else{
-				dojo.style.setOuterHeight(this.contentNode, scrollSize);
-			}
-		}
-	},
-
-	toggleOpen: function(evt){
-		this.parent.setOpenPanel(this);
-	}
-});
-dojo.widget.tags.addParseTreeHandler("dojo:AccordionPanel");
-
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Button.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Button.js
deleted file mode 100644
index 73550c3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Button.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Button");
-dojo.require("dojo.widget.Widget");
-
-dojo.widget.tags.addParseTreeHandler("dojo:button");
-
-dojo.widget.Button = function(){
-	dojo.widget.Widget.call(this);
-
-	this.widgetType = "Button";
-	this.isContainer = true;
-}
-dojo.inherits(dojo.widget.Button, dojo.widget.Widget);
-dojo.requireAfterIf("html", "dojo.widget.html.Button");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Button2.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Button2.js
deleted file mode 100644
index 6ac721c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Button2.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Button2");

-dojo.provide("dojo.widget.DropDownButton2");

-dojo.provide("dojo.widget.ComboButton2");

-dojo.require("dojo.widget.Widget");

-

-dojo.widget.tags.addParseTreeHandler("dojo:button2");

-dojo.widget.tags.addParseTreeHandler("dojo:dropdownbutton2");

-dojo.widget.tags.addParseTreeHandler("dojo:combobutton2");

-

-dojo.widget.Button2 = function(){

-}

-dojo.lang.extend(dojo.widget.Button2, {

-	widgetType: "Button2",

-	isContainer: true,

-

-	// Constructor arguments

-	caption: "",

-	disabled: false,

-	onClick: function(){ }

-});

-

-dojo.widget.DropDownButton2 = function(){

-}

-dojo.inherits(dojo.widget.DropDownButton2, dojo.widget.Button2);

-dojo.lang.extend(dojo.widget.DropDownButton2, {

-	widgetType: "DropDownButton2",

-	isContainer: true,

-

-	// constructor arguments

-	menuId: ''

-});

-

-dojo.widget.ComboButton2 = function(){

-}

-dojo.inherits(dojo.widget.ComboButton2, dojo.widget.Button2);

-dojo.lang.extend(dojo.widget.ComboButton2, {

-	widgetType: "ComboButton2",

-	isContainer: true,

-

-	// constructor arguments

-	menuId: ''

-});

-

-dojo.requireAfterIf("html", "dojo.widget.html.Button2");

-

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Chart.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Chart.js
deleted file mode 100644
index 9b3225c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Chart.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Chart");
-dojo.provide("dojo.widget.Chart.DataSeries");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.Widget");
-dojo.require("dojo.graphics.color");
-dojo.widget.tags.addParseTreeHandler("dojo:chart");
-
-dojo.requireAfterIf(dojo.render.svg.support.builtin, "dojo.widget.svg.Chart");
-
-dojo.widget.Chart=function(){
-	dojo.widget.Widget.call(this);
-	this.widgetType="Chart";
-	this.isContainer=false;
-	this.series=[];
-	this.assignColors=function(){
-		var hue=30, sat=120, lum=120;
-		var steps = Math.round(330/this.series.length);
-		for (var i=0; i<this.series.length; i++){
-			var c=dojo.graphics.color.hsl2rgb(hue,sat,lum);
-			if (!this.series[i].color) 
-				this.series[i].color=dojo.graphics.color.rgb2hex(c[0],c[1],c[2]);
-			hue+=steps;
-		}
-	};
-}
-dojo.inherits(dojo.widget.Chart, dojo.widget.Widget);
-
-/*  Every chart has a set of data series; this is the series.
-	Note that each member of value is an object and in the
-	minimum has 2 properties: .x and .value.
- */
-dojo.widget.Chart.DataSeries=function(key, label, plotType, color){
-	this.id="DataSeries"+dojo.widget.Chart.DataSeries.count++;
-	this.key=key;
-	this.label=label||this.id;
-	this.plotType=plotType||0;
-	this.color=color;
-	this.values=[];
-};
-dojo.widget.Chart.DataSeries.prototype={
-	add:function(v){
-		if(v.x==null||v.value==null){
-			dojo.raise("dojo.widget.Chart.DataSeries.add: v must have both an 'x' and 'value' property.");
-		}
-		this.values.push(v);
-	},
-	clear:function(){
-		this.values=[];
-	},
-	createRange:function(len){
-		var idx=this.values.length-1;
-		var length=len||this.values.length;
-		return {index:idx, length:length, start:Math.max(idx-length,0)};
-	},
-	//	trend values
-	getMean:function(len){
-		var range=this.createRange(len);
-		if (range.index<0) return 0;
-		var t=0, c=0;
-		for (var i=range.index; i>=range.start; i--){
-			var n=parseFloat(this.values[i].value);
-			if (!isNaN(n)){
-				t+=n; c++;
-			}
-		}
-		t/=Math.max(c,1);
-		return t;
-	},
-	getMovingAverage:function(len){
-		var range=this.createRange(len);
-		if (range.index<0) return 0;
-		var t=0, c=0;
-		for (var i=range.index; i>=range.start; i--){
-			var n=parseFloat(this.values[i].value);
-			if (!isNaN(n)){
-				t+=n; c++;
-			}
-		}
-		t/=Math.max(c,1);
-		return t;
-	},
-	getVariance:function(len){
-		var range=this.createRange(len);
-		if (range.index < 0) return 0;
-		var t=0, s=0, c=0;
-		for (var i=range.index; i>=range.start; i--){
-			var n=parseFloat(this.values[i].value);
-			if (!isNaN(n)){
-				t+=n;
-				s+=Math.pow(n,2);
-				c++;
-			}
-		}
-		return (s/c)-Math.pow(t/c,2);
-	},
-	getStandardDeviation:function(len){
-		return Math.sqrt(this.getVariance(len));
-	},
-	getMax:function(len){
-		var range=this.createRange(len);
-		if (range.index < 0) return 0;
-		var t=0;
-		for (var i=range.index; i>=range.start; i--){
-			var n=parseFloat(this.values[i].value);
-			if (!isNaN(n)){
-				t=Math.max(n,t);
-			}
-		}
-		return t;
-	},
-	getMin:function(len){
-		var range=this.createRange(len);
-		if (range.index < 0) return 0;
-		var t=0;
-		for (var i=range.index; i>=range.start; i--){
-			var n=parseFloat(this.values[i].value);
-			if (!isNaN(n)){
-				t=Math.min(n,t);
-			}
-		}
-		return t;
-	},
-	getMedian:function(len){
-		var range=this.createRange(len);
-		if (range.index<0) return 0;
-		var a=[];
-		for (var i=range.index; i>=range.start; i--){
-			var n=parseFloat(this.values[i].value);
-			if (!isNaN(n)){
-				var b=false;
-				for(var j=0; j<a.length&&!b; j++){
-					if (n==a[j]) b=true; 
-				}
-				if(!b) a.push(n);
-			}
-		}
-		a.sort();
-		if(a.length>0) return a[Math.ceil(a.length/2)];
-		return 0;
-	},
-	getMode:function(len){
-		var range=this.createRange(len);
-		if (range.index<0) return 0;
-		var o={}, ret=0, m=0;
-		for (var i=range.index; i>=range.start; i--){
-			var n=parseFloat(this.values[i].value);
-			if (!isNaN(n)){
-				if (!o[this.values[i].value]) o[this.values[i].value] = 1;
-				else o[this.values[i].value]++;
-			}
-		}
-		for (var p in o){
-			if(m<o[p]){
-				m=o[p]; ret=p;
-			}
-		}
-		return parseFloat(ret);
-	}
-};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Checkbox.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Checkbox.js
deleted file mode 100644
index d11ce22..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Checkbox.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Checkbox");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event");
-dojo.require("dojo.html");
-
-dojo.widget.tags.addParseTreeHandler("dojo:Checkbox");
-
-dojo.widget.Checkbox = function(){
-	dojo.widget.Widget.call(this);
-};
-dojo.inherits(dojo.widget.Checkbox, dojo.widget.Widget);
-
-dojo.lang.extend(dojo.widget.Checkbox, {
-	widgetType: "Checkbox"
-});
-
-dojo.requireAfterIf("html", "dojo.widget.html.Checkbox");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/CiviCrmDatePicker.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/CiviCrmDatePicker.js
deleted file mode 100644
index 756ffe6..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/CiviCrmDatePicker.js
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.CiviCrmDatePicker");
-dojo.provide("dojo.widget.HtmlCiviCrmDatePicker");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.DatePicker");
-dojo.require("dojo.widget.html.DatePicker");
-dojo.require("dojo.widget.html.TimePicker");
-dojo.require("dojo.html");
-
-dojo.widget.HtmlCiviCrmDatePicker = function(){
-	this.widgetType = "CiviCrmDatePicker";
-	this.idPrefix = "scheduled_date_time";
-	this.mode = "datetime"; // can also be date or time
-
-	this.datePicker = null;
-	this.timePicker = null;
-
-	// html nodes
-	this.dateHolderTd = null;
-	this.timeHolderTd = null;
-	this.formItemsTd = null;
-	this.formItemsTr = null;
-
-	this.monthSelect = null;
-	this.daySelect = null;
-	this.yearSelect = null;
-	this.hourSelect = null;
-	this.minSelect = null;
-	this.apSelect = null;
-
-	this.templatePath = dojo.uri.dojoUri("src/widget/templates/HtmlCiviCrmDatePicker.html");
-
-	this.modeFormats = {
-		date: "MdY",
-		time: "hiA"
-	};
-
-	this.formatMappings = {
-		"M": "monthSelect",
-		"d": "daySelect",
-		"Y": "yearSelect",
-		"h": "hourSelect",
-		"i": "minSelect",
-		"A": "apSelect"
-	};
-
-	this.setDateSelects = function(){
-		var dateObj = this.datePicker.date;
-		this.monthSelect.value = new String(dateObj.getMonth()+1);
-		this.daySelect.value = new String(dateObj.getDate());
-		this.yearSelect.value = new String(dateObj.getFullYear());
-	}
-
-	this.setTimeSelects = function(){
-		var st = this.timePicker.selectedTime;
-		this.hourSelect.value = new String(st.hour);
-		this.minSelect.value = new String(st.minute);
-		this.apSelect.value = st.amPm.toUpperCase();
-	}
-
-	this.fillInTemplate = function(args, frag){
-		var nr = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-		var sref = {};
-		while(nr.firstChild){
-			if(nr.firstChild.name){
-				sref[nr.firstChild.name] = nr.firstChild;
-			}
-			this.formItemsTd.appendChild(nr.firstChild);
-		}
-
-		if(this.mode.indexOf("date") != -1){
-			this.datePicker = dojo.widget.createWidget("DatePicker", {}, this.dateHolderTd);
-			dojo.event.connect(	this.datePicker, "onSetDate", 
-								this, "setDateSelects");
-
-			var mfd = this.modeFormats.date;
-			for(var x=0; x<mfd.length; x++){
-				this[this.formatMappings[mfd[x]]] = sref[this.idPrefix+"["+mfd[x]+"]"];
-				fr = this[this.formatMappings[mfd[x]]].form;
-			}
-		}
-		if(this.mode.indexOf("time") != -1){
-			this.timePicker = dojo.widget.createWidget("TimePicker", {}, this.timeHolderTd);
-			dojo.event.connect(	this.timePicker, "onSetTime", 
-								this, "setTimeSelects");
-			var mfd = this.modeFormats.time;
-			for(var x=0; x<mfd.length; x++){
-				this[this.formatMappings[mfd[x]]] = sref[this.idPrefix+"["+mfd[x]+"]"];
-			}
-		}
-	}
-
-	this.unhide = function(){
-		this.formItemsTr.style.display = "";
-	}
-
-	this.postCreate = function(){
-		dojo.event.kwConnect({
-			type: "before", 
-			srcObj: dojo.html.getParentByType(this.domNode, "form"),
-			srcFunc: "onsubmit", 
-			targetObj: this,
-			targetFunc: "unhide"
-		});
-	}
-}
-dojo.inherits(dojo.widget.HtmlCiviCrmDatePicker, dojo.widget.HtmlWidget);
-dojo.widget.tags.addParseTreeHandler("dojo:civicrmdatepicker");
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ColorPalette.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ColorPalette.js
deleted file mode 100644
index a43554a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ColorPalette.js
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.ColorPalette");
-dojo.provide("dojo.widget.html.ColorPalette");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.Toolbar");
-dojo.require("dojo.html");
-
-dojo.widget.tags.addParseTreeHandler("dojo:ToolbarColorDialog");
-
-dojo.widget.html.ToolbarColorDialog = function () {
-	dojo.widget.html.ToolbarDialog.call(this);
-	
-	for (var method in this.constructor.prototype) {
-		this[method] = this.constructor.prototype[method];
-	}
-}
-
-dojo.inherits(dojo.widget.html.ToolbarColorDialog, dojo.widget.html.ToolbarDialog);
-
-dojo.lang.extend(dojo.widget.html.ToolbarColorDialog, {
-
-	widgetType: "ToolbarColorDialog",
-
-	palette: "7x10",
-
-	fillInTemplate: function (args, frag) {
-		dojo.widget.html.ToolbarColorDialog.superclass.fillInTemplate.call(this, args, frag);
-		this.dialog = dojo.widget.createWidget("ColorPalette", {palette: this.palette});
-		this.dialog.domNode.style.position = "absolute";
-
-		dojo.event.connect(this.dialog, "onColorSelect", this, "_setValue");
-	},
-
-	_setValue: function(color) {
-		this._value = color;
-		this._fireEvent("onSetValue", color);
-	},
-	
-	showDialog: function (e) {
-		dojo.widget.html.ToolbarColorDialog.superclass.showDialog.call(this, e);
-		var x = dojo.html.getAbsoluteX(this.domNode);
-		var y = dojo.html.getAbsoluteY(this.domNode) + dojo.html.getInnerHeight(this.domNode);
-		this.dialog.showAt(x, y);
-	},
-	
-	hideDialog: function (e) {
-		dojo.widget.html.ToolbarColorDialog.superclass.hideDialog.call(this, e);
-		this.dialog.hide();
-	}
-});
-
-
-
-dojo.widget.tags.addParseTreeHandler("dojo:colorpalette");
-
-dojo.widget.html.ColorPalette = function () {
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.html.ColorPalette, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.html.ColorPalette, {
-
-	widgetType: "colorpalette",
-	
-	palette: "7x10",
-
-	bgIframe: null,
-	
-	palettes: {
-		"7x10": [["fff", "fcc", "fc9", "ff9", "ffc", "9f9", "9ff", "cff", "ccf", "fcf"],
-			["ccc", "f66", "f96", "ff6", "ff3", "6f9", "3ff", "6ff", "99f", "f9f"],
-			["c0c0c0", "f00", "f90", "fc6", "ff0", "3f3", "6cc", "3cf", "66c", "c6c"],
-			["999", "c00", "f60", "fc3", "fc0", "3c0", "0cc", "36f", "63f", "c3c"],
-			["666", "900", "c60", "c93", "990", "090", "399", "33f", "60c", "939"],
-			["333", "600", "930", "963", "660", "060", "366", "009", "339", "636"],
-			["000", "300", "630", "633", "330", "030", "033", "006", "309", "303"]],
-	
-		"3x4": [["ffffff"/*white*/, "00ff00"/*lime*/, "008000"/*green*/, "0000ff"/*blue*/],
-			["c0c0c0"/*silver*/, "ffff00"/*yellow*/, "ff00ff"/*fuchsia*/, "000080"/*navy*/],
-			["808080"/*gray*/, "ff0000"/*red*/, "800080"/*purple*/, "000000"/*black*/]]
-			//["00ffff"/*aqua*/, "808000"/*olive*/, "800000"/*maroon*/, "008080"/*teal*/]];
-	},
-
-	buildRendering: function () {
-		
-		this.domNode = document.createElement("table");
-		dojo.html.disableSelection(this.domNode);
-		dojo.event.connect(this.domNode, "onmousedown", function (e) {
-			e.preventDefault();
-		});
-		with (this.domNode) { // set the table's properties
-			cellPadding = "0"; cellSpacing = "1"; border = "1";
-			style.backgroundColor = "white"; //style.position = "absolute";
-		}
-		var tbody = document.createElement("tbody");
-		this.domNode.appendChild(tbody);
-		var colors = this.palettes[this.palette];
-		for (var i = 0; i < colors.length; i++) {
-			var tr = document.createElement("tr");
-			for (var j = 0; j < colors[i].length; j++) {
-				if (colors[i][j].length == 3) {
-					colors[i][j] = colors[i][j].replace(/(.)(.)(.)/, "$1$1$2$2$3$3");
-				}
-	
-				var td = document.createElement("td");
-				with (td.style) {
-					backgroundColor = "#" + colors[i][j];
-					border = "1px solid gray";
-					width = height = "15px";
-					fontSize = "1px";
-				}
-	
-				td.color = "#" + colors[i][j];
-	
-				td.onmouseover = function (e) { this.style.borderColor = "white"; }
-				td.onmouseout = function (e) { this.style.borderColor = "gray"; }
-				dojo.event.connect(td, "onmousedown", this, "click");
-	
-				td.innerHTML = "&nbsp;";
-				tr.appendChild(td);
-			}
-			tbody.appendChild(tr);
-		}
-
-		if(dojo.render.html.ie){
-			this.bgIframe = document.createElement("<iframe frameborder='0' src='about:blank'>");
-			with(this.bgIframe.style){
-				position = "absolute";
-				left = top = "0px";
-				display = "none";
-			}
-			dojo.html.body().appendChild(this.bgIframe);
-			dojo.style.setOpacity(this.bgIframe, 0);
-		}
-	},
-
-	click: function (e) {
-		this.onColorSelect(e.currentTarget.color);
-		e.currentTarget.style.borderColor = "gray";
-	},
-
-	onColorSelect: function (color) { },
-
-	hide: function (){
-		this.domNode.parentNode.removeChild(this.domNode);
-		if(this.bgIframe){
-			this.bgIframe.style.display = "none";
-		}
-	},
-	
-	showAt: function (x, y) {
-		with(this.domNode.style){
-			top = y + "px";
-			left = x + "px";
-			zIndex = 999;
-		}
-		dojo.html.body().appendChild(this.domNode);
-		if(this.bgIframe){
-			with(this.bgIframe.style){
-				display = "block";
-				top = y + "px";
-				left = x + "px";
-				zIndex = 998;
-				width = dojo.html.getOuterWidth(this.domNode) + "px";
-				height = dojo.html.getOuterHeight(this.domNode) + "px";
-			}
-
-		}
-	}
-
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ComboBox.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ComboBox.js
deleted file mode 100644
index de92e89..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ComboBox.js
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.ComboBox");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-
-dojo.widget.incrementalComboBoxDataProvider = function(url, limit, timeout){
-	this.searchUrl = url;
-	this.inFlight = false;
-	this.activeRequest = null;
-	this.allowCache = false;
-
-	this.cache = {};
-	this.addToCache = function(keyword, data){
-		if(this.allowCache){
-			this.cache[keyword] = data;
-		}
-	}
-
-	this.startSearch = function(searchStr, type, ignoreLimit){
-		if(this.inFlight){
-			// FIXME: implement backoff!
-		}
-		var tss = encodeURIComponent(searchStr);
-		var realUrl = dojo.string.paramString(this.searchUrl, {"searchString": tss});
-		var _this = this;
-		var request = dojo.io.bind({
-			url: realUrl,
-			method: "get",
-			mimetype: "text/javascript",
-			load: function(type, data, evt){
-				_this.inFlight = false;
-				_this.addToCache(searchStr, data);
-				_this.provideSearchResults(data);
-			}
-		});
-		this.inFlight = true;
-	}
-}
-
-dojo.widget.ComboBoxDataProvider = function(dataPairs, limit, timeout){
-	// NOTE: this data provider is designed as a naive reference
-	// implementation, and as such it is written more for readability than
-	// speed. A deployable data provider would implement lookups, search
-	// caching (and invalidation), and a significantly less naive data
-	// structure for storage of items.
-
-	this.data = [];
-	this.searchTimeout = 500;
-	this.searchLimit = 30;
-	this.searchType = "STARTSTRING"; // may also be "STARTWORD" or "SUBSTRING"
-	this.caseSensitive = false;
-	// for caching optimizations
-	this._lastSearch = "";
-	this._lastSearchResults = null;
-
-	this.startSearch = function(searchStr, type, ignoreLimit){
-		// FIXME: need to add timeout handling here!!
-		this._preformSearch(searchStr, type, ignoreLimit);
-	}
-
-	this._preformSearch = function(searchStr, type, ignoreLimit){
-		//
-		//	NOTE: this search is LINEAR, which means that it exhibits perhaps
-		//	the worst possible speed charachteristics of any search type. It's
-		//	written this way to outline the responsibilities and interfaces for
-		//	a search.
-		//
-		var st = type||this.searchType;
-		// FIXME: this is just an example search, which means that we implement
-		// only a linear search without any of the attendant (useful!) optimizations
-		var ret = [];
-		if(!this.caseSensitive){
-			searchStr = searchStr.toLowerCase();
-		}
-		for(var x=0; x<this.data.length; x++){
-			if((!ignoreLimit)&&(ret.length >= this.searchLimit)){
-				break;
-			}
-			// FIXME: we should avoid copies if possible!
-			var dataLabel = new String((!this.caseSensitive) ? this.data[x][0].toLowerCase() : this.data[x][0]);
-			if(dataLabel.length < searchStr.length){
-				// this won't ever be a good search, will it? What if we start
-				// to support regex search?
-				continue;
-			}
-
-			if(st == "STARTSTRING"){
-				// jum.debug(dataLabel.substr(0, searchStr.length))
-				// jum.debug(searchStr);
-				if(searchStr == dataLabel.substr(0, searchStr.length)){
-					ret.push(this.data[x]);
-				}
-			}else if(st == "SUBSTRING"){
-				// this one is a gimmie
-				if(dataLabel.indexOf(searchStr) >= 0){
-					ret.push(this.data[x]);
-				}
-			}else if(st == "STARTWORD"){
-				// do a substring search and then attempt to determine if the
-				// preceeding char was the beginning of the string or a
-				// whitespace char.
-				var idx = dataLabel.indexOf(searchStr);
-				if(idx == 0){
-					// implicit match
-					ret.push(this.data[x]);
-				}
-				if(idx <= 0){
-					// if we didn't match or implicily matched, march onward
-					continue;
-				}
-				// otherwise, we have to go figure out if the match was at the
-				// start of a word...
-				// this code is taken almost directy from nWidgets
-				var matches = false;
-				while(idx!=-1){
-					// make sure the match either starts whole string, or
-					// follows a space, or follows some punctuation
-					if(" ,/(".indexOf(dataLabel.charAt(idx-1)) != -1){
-						// FIXME: what about tab chars?
-						matches = true; break;
-					}
-					idx = dataLabel.indexOf(searchStr, tti+1);
-				}
-				if(!matches){
-					continue;
-				}else{
-					ret.push(this.data[x]);
-				}
-			}
-		}
-		this.provideSearchResults(ret);
-	}
-
-	this.provideSearchResults = function(resultsDataPairs){
-	}
-
-	this.addData = function(pairs){
-		// FIXME: incredibly naive and slow!
-		this.data = this.data.concat(pairs);
-	}
-
-	this.setData = function(pdata){
-		// populate this.data and initialize lookup structures
-		this.data = pdata;
-	}
-	
-	if(dataPairs){
-		this.setData(dataPairs);
-	}
-}
-
-dojo.widget.ComboBox = function(){
-	dojo.widget.Widget.call(this);
-}
-
-dojo.inherits(dojo.widget.ComboBox, dojo.widget.Widget);
-
-dojo.widget.ComboBox.defaults = {
-	widgetType: "ComboBox",
-	isContainer: false,
-
-	forceValidOption: false,
-	searchType: "stringstart",
-	dataProvider: null,
-
-	startSearch: function(searchString){},
-	openResultList: function(results){},
-	clearResultList: function(){},
-	hideResultList: function(){},
-	selectNextResult: function(){},
-	selectPrevResult: function(){},
-	setSelectedResult: function(){}
-};
-
-dojo.lang.extend(dojo.widget.ComboBox, dojo.widget.ComboBox.defaults);
-
-dojo.widget.DomComboBox = function(){
-	dojo.widget.ComboBox.call(this);
-	dojo.widget.DomWidget.call(this, true);
-}
-
-dojo.inherits(dojo.widget.DomComboBox, dojo.widget.DomWidget);
-dojo.widget.tags.addParseTreeHandler("dojo:combobox");
-
-// render-specific includes
-dojo.requireAfterIf("html", "dojo.widget.html.ComboBox");
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Container.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Container.js
deleted file mode 100644
index 5dac945..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Container.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Container");
-dojo.requireAfterIf("html", "dojo.widget.html.Container");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ContentPane.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ContentPane.js
deleted file mode 100644
index 0df08a6..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ContentPane.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-// This widget doesn't do anything; is basically the same as <div>.
-// It's useful as a child of LayoutPane, SplitPane, or TabPane.
-// But note that those classes can contain any widget as a child.
-
-dojo.provide("dojo.widget.ContentPane");
-dojo.requireAfterIf("html", "dojo.widget.html.ContentPane");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ContextMenu.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ContextMenu.js
deleted file mode 100644
index fdba38e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ContextMenu.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.ContextMenu");
-
-dojo.deprecated("dojo.widget.ContextMenu",  "use dojo.widget.Menu2", "0.4");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.DomWidget");
-
-dojo.widget.ContextMenu = function(){
-	dojo.widget.Widget.call(this);
-	this.widgetType = "ContextMenu";
-	this.isContainer = true;
-	this.isOpened = false;
-	
-	// copy children widgets output directly to parent (this node), to avoid
-	// errors trying to insert an <li> under a <div>
-	this.snarfChildDomOutput = true;
-
-}
-
-dojo.inherits(dojo.widget.ContextMenu, dojo.widget.Widget);
-dojo.widget.tags.addParseTreeHandler("dojo:contextmenu");
-
-dojo.requireAfterIf("html", "dojo.widget.html.ContextMenu");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DatePicker.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DatePicker.js
deleted file mode 100644
index ce5072f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DatePicker.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.DatePicker");
-dojo.provide("dojo.widget.DatePicker.util");
-dojo.require("dojo.widget.DomWidget");
-dojo.require("dojo.date");
-
-dojo.widget.DatePicker = function(){
-	dojo.widget.Widget.call(this);
-	this.widgetType = "DatePicker";
-	this.isContainer = false;
-	// the following aliases prevent breaking people using 0.2.x
-	this.months = dojo.date.months;
-	this.weekdays = dojo.date.days;
-	this.toRfcDate = dojo.widget.DatePicker.util.toRfcDate;
-	this.fromRfcDate = dojo.widget.DatePicker.util.fromRfcDate;
-	this.initFirstSaturday = dojo.widget.DatePicker.util.initFirstSaturday;
-}
-
-dojo.inherits(dojo.widget.DatePicker, dojo.widget.Widget);
-dojo.widget.tags.addParseTreeHandler("dojo:datepicker");
-
-dojo.requireAfterIf("html", "dojo.widget.html.DatePicker");
-
-dojo.widget.DatePicker.util = new function() {
-	this.months = dojo.date.months;
-	this.weekdays = dojo.date.days;
-	
-	this.toRfcDate = function(jsDate) {
-		if(!jsDate) {
-			jsDate = this.today;
-		}
-		var year = jsDate.getFullYear();
-		var month = jsDate.getMonth() + 1;
-		if (month < 10) {
-			month = "0" + month.toString();
-		}
-		var date = jsDate.getDate();
-		if (date < 10) {
-			date = "0" + date.toString();
-		}
-		// because this is a date picker and not a time picker, we treat time 
-		// as zero
-		return year + "-" + month + "-" + date + "T00:00:00+00:00";
-	}
-	
-	this.fromRfcDate = function(rfcDate) {
-		var tempDate = rfcDate.split("-");
-		if(tempDate.length < 3) {
-			return new Date();
-		}
-		// fullYear, month, date
-		return new Date(parseInt(tempDate[0]), (parseInt(tempDate[1], 10) - 1), parseInt(tempDate[2].substr(0,2), 10));
-	}
-	
-	this.initFirstSaturday = function(month, year) {
-		if(!month) {
-			month = this.date.getMonth();
-		}
-		if(!year) {
-			year = this.date.getFullYear();
-		}
-		var firstOfMonth = new Date(year, month, 1);
-		return {year: year, month: month, date: 7 - firstOfMonth.getDay()};
-	}
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DebugConsole.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DebugConsole.js
deleted file mode 100644
index 96aa6cd..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DebugConsole.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.DebugConsole");

-dojo.require("dojo.widget.Widget");

-

-dojo.widget.DebugConsole= function(){

-	dojo.widget.Widget.call(this);

-

-	this.widgetType = "DebugConsole";

-	this.isContainer = true;

-}

-dojo.inherits(dojo.widget.DebugConsole, dojo.widget.Widget);

-dojo.widget.tags.addParseTreeHandler("dojo:debugconsole");

-dojo.requireAfterIf("html", "dojo.widget.html.DebugConsole");

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Dialog.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Dialog.js
deleted file mode 100644
index 9833fca..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Dialog.js
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Dialog");
-dojo.provide("dojo.widget.HtmlDialog");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.graphics.color");
-dojo.require("dojo.fx.*");
-dojo.require("dojo.html");
-
-dojo.widget.tags.addParseTreeHandler("dojo:dialog");
-
-dojo.widget.HtmlDialog = function(){
-	dojo.widget.HtmlWidget.call(this);
-
-	this.resizeConnectArgs = {
-		srcObj: window,
-		srcFunc: "onresize",
-		adviceObj: this,
-		adviceFunc: "onResize",
-		rate: 500
-	}
-}
-
-dojo.inherits(dojo.widget.HtmlDialog, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.HtmlDialog, {
-	templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlDialog.html"),
-	widgetType: "Dialog",
-	isContainer: true,
-
-	_scrollConnected: false,
-	_resizeConnected: false,
-	
-	// provide a focusable element or element id if you need to
-	// work around FF's tendency to send focus into outer space on hide
-	focusElement: "",
-
-	// Only supports fade right now
-	effect: "fade",
-	effectDuration: 250,
-
-	bg: null,
-	bgIframe: null,
-	bgColor: "black",
-	bgOpacity: 0.4,
-	followScroll: 1,
-	_fromTrap: false,
-	anim: null,
-
-	trapTabs: function(e){
-		if(e.target == this.tabStart) {
-			if(this._fromTrap) {
-				this._fromTrap = false;
-			} else {
-				this._fromTrap = true;
-				this.tabEnd.focus();
-			}
-		} else if(e.target == this.tabEnd) {
-			if(this._fromTrap) {
-				this._fromTrap = false;
-			} else {
-				this._fromTrap = true;
-				this.tabStart.focus();
-			}
-		}
-	},
-
-	clearTrap: function(e) {
-		var _this = this;
-		setTimeout(function() {
-			_this._fromTrap = false;
-		}, 100);
-	},
-
-	postCreate: function(args, frag, parentComp) {
-		with(this.domNode.style) {
-			position = "absolute";
-			zIndex = 999;
-			display = "none";
-		}
-		var b = dojo.html.body();
-		b.appendChild(this.domNode);
-		this.nodeRef = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-		if(this.nodeRef) {
-			this.setContent(this.nodeRef);
-		}
-
-		this.bgIframe = new dojo.html.BackgroundIframe();
-
-		this.bg = document.createElement("div");
-		this.bg.className = "dialogUnderlay";
-		with(this.bg.style) {
-			position = "absolute";
-			left = top = "0px";
-			zIndex = 998;
-			display = "none";
-		}
-		this.setBackgroundColor(this.bgColor);
-		b.appendChild(this.bg);
-		this.bgIframe.setZIndex(this.bg);
-	},
-
-	setContent: function(content) {
-		if(typeof content == "string") {
-			this.containerNode.innerHTML = content;
-		} else if(content.nodeType != undefined) {
-			// dojo.dom.removeChildren(this.containerNode);
-			this.containerNode.appendChild(content);
-		} else {
-			dojo.raise("Tried to setContent with unknown content (" + content + ")");
-		}
-	},
-
-	setBackgroundColor: function(color) {
-		if(arguments.length >= 3) {
-			color = new dojo.graphics.color.Color(arguments[0], arguments[1], arguments[2]);
-		} else {
-			color = new dojo.graphics.color.Color(color);
-		}
-		this.bg.style.backgroundColor = color.toString();
-		return this.bgColor = color;
-	},
-	
-	setBackgroundOpacity: function(op) {
-		if(arguments.length == 0) { op = this.bgOpacity; }
-		dojo.style.setOpacity(this.bg, op);
-		try {
-			this.bgOpacity = dojo.style.getOpacity(this.bg);
-		} catch (e) {
-			this.bgOpacity = op;
-		}
-		return this.bgOpacity;
-	},
-
-	sizeBackground: function() {
-		if(this.bgOpacity > 0) {
-			var h = document.documentElement.scrollHeight || dojo.html.body().scrollHeight;
-			var w = dojo.html.getViewportWidth();
-			this.bg.style.width = w + "px";
-			this.bg.style.height = h + "px";
-			this.bgIframe.size([0, 0, w, h]);
-		} else {
-			this.bgIframe.size(this.domNode);
-		}
-	},
-
-	showBackground: function() {
-		this.sizeBackground();
-		this.bgIframe.show();
-		if(this.bgOpacity > 0) {
-			this.bg.style.display = "block";
-		}
-	},
-
-	placeDialog: function() {
-		var scroll_offset = dojo.html.getScrollOffset();
-		var viewport_size = dojo.html.getViewportSize();
-
-		// find the size of the dialog
-		// we should really be using dojo.style but i'm not sure
-		// which (inner, outer, box, content, client) --cal
-		this.domNode.style.display = "block";
-		var w = this.domNode.offsetWidth;
-		var h = this.domNode.offsetHeight;
-		this.domNode.style.display = "none";
-
-		var x = scroll_offset[0] + (viewport_size[0] - w)/2;
-		var y = scroll_offset[1] + (viewport_size[1] - h)/2;
-
-		with(this.domNode.style) {
-			left = x + "px";
-			top = y + "px";
-		}
-
-		// tied to domNode, so we need to update the position
-		if(this.bgOpacity == 0) {
-			this.bgIframe.size([x, y, w, h]);
-		}
-	},
-
-	show: function() {
-		this.setBackgroundOpacity();
-		this.placeDialog();
-		this.showBackground();
-		switch((this.effect||"").toLowerCase()){
-			case "fade":
-				this.domNode.style.display = "block";
-				var _this = this;
-				if(this.anim){ this.anim.stop(); }
-				// FIXME: we should be supporting other effect types here!
-				this.anim = dojo.fx.fade(this.domNode, 
-					this.effectDuration, 
-					0, 
-					1,
-					dojo.lang.hitch(this, 
-						function(node){
-							if(dojo.lang.isFunction(_this.onShow)) {
-								_this.onShow(node);
-							}
-						}
-					)
-				);
-				break;
-			default:
-				this.domNode.style.display = "block";
-				if(dojo.lang.isFunction(this.onShow)){
-					this.onShow(this.domNode);
-				}
-				break;
-		}
-
-		// FIXME: moz doesn't generate onscroll events for mouse or key scrolling (wtf)
-		// we should create a fake event by polling the scrolltop/scrollleft every X ms.
-		// this smells like it should be a dojo feature rather than just for this widget.
-
-		if (this.followScroll && !this._scrollConnected){
-			this._scrollConnected = true;
-			dojo.event.connect(window, "onscroll", this, "onScroll");
-		}
-
-		if(!this._resizeConnected) {
-			this._resizeConnected = true;
-			dojo.event.kwConnect(this.resizeConnectArgs);
-		}
-	},
-
-	hide: function(){
-		// workaround for FF focus going into outer space
-		if (this.focusElement) { 
-			dojo.byId(this.focusElement).focus(); 
-			dojo.byId(this.focusElement).blur();
-		}
-		switch((this.effect||"").toLowerCase()) {
-			case "fade":
-				this.bg.style.display = "none";
-				this.bgIframe.hide();
-				var _this = this;
-				if(this.anim){ this.anim.stop(); }
-				this.anim = dojo.fx.fadeOut(this.domNode, this.effectDuration, function(node) {
-					node.style.display = "none";
-					if(dojo.lang.isFunction(_this.onHide)) {
-						_this.onHide(node);
-					}
-					_this.anim = null;
-				});
-				break;
-			default:
-				this.bg.style.display = "none";
-				this.bgIframe.hide();
-				this.domNode.style.display = "none";
-				if(dojo.lang.isFunction(this.onHide)) {
-					this.onHide(node);
-				}
-				break;
-		}
-
-		this.bg.style.width = this.bg.style.height = "1px";
-
-		if (this._scrollConnected){
-			this._scrollConnected = false;
-			dojo.event.disconnect(window, "onscroll", this, "onScroll");
-		}
-
-		if(this._resizeConnected) {
-			this._resizeConnected = false;
-			dojo.event.kwDisconnect(this.resizeConnectArgs);
-		}
-	},
-
-	setCloseControl: function(node) {
-		dojo.event.connect(node, "onclick", this, "hide");
-	},
-
-	setShowControl: function(node) {
-		dojo.event.connect(node, "onclick", this, "show");
-	},
-
-	onScroll: function(){
-		this.placeDialog();
-		this.domNode.style.display = "block";
-	},
-
-	onResize: function(e) {
-		this.sizeBackground();
-	}
-});
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DomWidget.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DomWidget.js
deleted file mode 100644
index b972add..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DomWidget.js
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.DomWidget");
-
-dojo.require("dojo.event.*");
-dojo.require("dojo.string");
-dojo.require("dojo.widget.Widget");
-dojo.require("dojo.dom");
-dojo.require("dojo.xml.Parse");
-dojo.require("dojo.uri.*");
-
-dojo.widget._cssFiles = {};
-
-dojo.widget.defaultStrings = {
-	dojoRoot: dojo.hostenv.getBaseScriptUri(),
-	baseScriptUri: dojo.hostenv.getBaseScriptUri()
-};
-
-
-// static method to build from a template w/ or w/o a real widget in place
-dojo.widget.buildFromTemplate = function(obj, templatePath, templateCssPath, templateString) {
-	var tpath = templatePath || obj.templatePath;
-	var cpath = templateCssPath || obj.templateCssPath;
-
-	if (!cpath && obj.templateCSSPath) {
-		obj.templateCssPath = cpath = obj.templateCSSPath;
-		obj.templateCSSPath = null;
-		dj_deprecated("templateCSSPath is deprecated, use templateCssPath");
-	}
-
-	// DEPRECATED: use Uri objects, not strings
-	if (tpath && !(tpath instanceof dojo.uri.Uri)) {
-		tpath = dojo.uri.dojoUri(tpath);
-		dj_deprecated("templatePath should be of type dojo.uri.Uri");
-	}
-	if (cpath && !(cpath instanceof dojo.uri.Uri)) {
-		cpath = dojo.uri.dojoUri(cpath);
-		dj_deprecated("templateCssPath should be of type dojo.uri.Uri");
-	}
-	
-	var tmplts = dojo.widget.DomWidget.templates;
-	if(!obj["widgetType"]) { // don't have a real template here
-		do {
-			var dummyName = "__dummyTemplate__" + dojo.widget.buildFromTemplate.dummyCount++;
-		} while(tmplts[dummyName]);
-		obj.widgetType = dummyName;
-	}
-
-	if((cpath)&&(!dojo.widget._cssFiles[cpath])){
-		dojo.html.insertCssFile(cpath);
-		obj.templateCssPath = null;
-		dojo.widget._cssFiles[cpath] = true;
-	}
-
-	var ts = tmplts[obj.widgetType];
-	if(!ts){
-		tmplts[obj.widgetType] = {};
-		ts = tmplts[obj.widgetType];
-	}
-	if(!obj.templateString){
-		obj.templateString = templateString || ts["string"];
-	}
-	if(!obj.templateNode){
-		obj.templateNode = ts["node"];
-	}
-	if((!obj.templateNode)&&(!obj.templateString)&&(tpath)){
-		// fetch a text fragment and assign it to templateString
-		// NOTE: we rely on blocking IO here!
-		var tstring = dojo.hostenv.getText(tpath);
-		if(tstring){
-			var matches = tstring.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-			if(matches){
-				tstring = matches[1];
-			}
-		}else{
-			tstring = "";
-		}
-		obj.templateString = tstring;
-		ts.string = tstring;
-	}
-	if(!ts["string"]) {
-		ts.string = obj.templateString;
-	}
-}
-dojo.widget.buildFromTemplate.dummyCount = 0;
-
-dojo.widget.attachProperties = ["dojoAttachPoint", "id"];
-dojo.widget.eventAttachProperty = "dojoAttachEvent";
-dojo.widget.onBuildProperty = "dojoOnBuild";
-
-dojo.widget.attachTemplateNodes = function(rootNode, targetObj, events){
-	// FIXME: this method is still taking WAAAY too long. We need ways of optimizing:
-	//	a.) what we are looking for on each node
-	//	b.) the nodes that are subject to interrogation (use xpath instead?)
-	//	c.) how expensive event assignment is (less eval(), more connect())
-	// var start = new Date();
-	var elementNodeType = dojo.dom.ELEMENT_NODE;
-
-	if(!rootNode){ 
-		rootNode = targetObj.domNode;
-	}
-
-	if(rootNode.nodeType != elementNodeType){
-		return;
-	}
-	// alert(events.length);
-
-	var nodes = rootNode.getElementsByTagName("*");
-	var _this = targetObj;
-	for(var x=-1; x<nodes.length; x++){
-		var baseNode = (x == -1) ? rootNode : nodes[x];
-		// FIXME: is this going to have capitalization problems?
-		var attachPoint = [];
-		for(var y=0; y<this.attachProperties.length; y++){
-			var tmpAttachPoint = baseNode.getAttribute(this.attachProperties[y]);
-			if(tmpAttachPoint){
-				attachPoint = tmpAttachPoint.split(";");
-				for(var z=0; z<this.attachProperties.length; z++){
-					if((targetObj[attachPoint[z]])&&(dojo.lang.isArray(targetObj[attachPoint[z]]))){
-						targetObj[attachPoint[z]].push(baseNode);
-					}else{
-						targetObj[attachPoint[z]]=baseNode;
-					}
-				}
-				break;
-			}
-		}
-		// continue;
-
-		// FIXME: we need to put this into some kind of lookup structure
-		// instead of direct assignment
-		var tmpltPoint = baseNode.getAttribute(this.templateProperty);
-		if(tmpltPoint){
-			targetObj[tmpltPoint]=baseNode;
-		}
-
-		var attachEvent = baseNode.getAttribute(this.eventAttachProperty);
-		if(attachEvent){
-			// NOTE: we want to support attributes that have the form
-			// "domEvent: nativeEvent; ..."
-			var evts = attachEvent.split(";");
-			for(var y=0; y<evts.length; y++){
-				if((!evts[y])||(!evts[y].length)){ continue; }
-				var thisFunc = null;
-				// var tevt = dojo.string.trim(evts[y]);
-				var tevt = dojo.string.trim(evts[y]);
-				if(evts[y].indexOf(":") >= 0){
-					// oh, if only JS had tuple assignment
-					var funcNameArr = tevt.split(":");
-					tevt = dojo.string.trim(funcNameArr[0]);
-					thisFunc = dojo.string.trim(funcNameArr[1]);
-				}
-				if(!thisFunc){
-					thisFunc = tevt;
-				}
-
-				var tf = function(){ 
-					var ntf = new String(thisFunc);
-					return function(evt){
-						if(_this[ntf]){
-							_this[ntf](dojo.event.browser.fixEvent(evt));
-						}
-					};
-				}();
-				dojo.event.browser.addListener(baseNode, tevt, tf, false, true);
-			}
-		}
-
-		for(var y=0; y<events.length; y++){
-			//alert(events[x]);
-			var evtVal = baseNode.getAttribute(events[y]);
-			if((evtVal)&&(evtVal.length)){
-				var thisFunc = null;
-				var domEvt = events[y].substr(4); // clober the "dojo" prefix
-				thisFunc = dojo.string.trim(evtVal);
-				var tf = function(){ 
-					var ntf = new String(thisFunc);
-					return function(evt){
-						if(_this[ntf]){
-							_this[ntf](dojo.event.browser.fixEvent(evt));
-						}
-					}
-				}();
-				dojo.event.browser.addListener(baseNode, domEvt, tf, false, true);
-			}
-		}
-
-		var onBuild = baseNode.getAttribute(this.onBuildProperty);
-		if(onBuild){
-			eval("var node = baseNode; var widget = targetObj; "+onBuild);
-		}
-
-		// strip IDs to prevent dupes
-		baseNode.id = "";
-	}
-
-}
-
-dojo.widget.getDojoEventsFromStr = function(str){
-	// var lstr = str.toLowerCase();
-	var re = /(dojoOn([a-z]+)(\s?))=/gi;
-	var evts = str ? str.match(re)||[] : [];
-	var ret = [];
-	var lem = {};
-	for(var x=0; x<evts.length; x++){
-		if(evts[x].legth < 1){ continue; }
-		var cm = evts[x].replace(/\s/, "");
-		cm = (cm.slice(0, cm.length-1));
-		if(!lem[cm]){
-			lem[cm] = true;
-			ret.push(cm);
-		}
-	}
-	return ret;
-}
-
-
-dojo.widget.buildAndAttachTemplate = function(obj, templatePath, templateCssPath, templateString, targetObj) {
-	this.buildFromTemplate(obj, templatePath, templateCssPath, templateString);
-	var node = dojo.dom.createNodesFromText(obj.templateString, true)[0];
-	this.attachTemplateNodes(node, targetObj||obj, dojo.widget.getDojoEventsFromStr(templateString));
-	return node;
-}
-
-dojo.widget.DomWidget = function(){
-	dojo.widget.Widget.call(this);
-	if((arguments.length>0)&&(typeof arguments[0] == "object")){
-		this.create(arguments[0]);
-	}
-}
-dojo.inherits(dojo.widget.DomWidget, dojo.widget.Widget);
-
-dojo.lang.extend(dojo.widget.DomWidget, {
-	templateNode: null,
-	templateString: null,
-	preventClobber: false,
-	domNode: null, // this is our visible representation of the widget!
-	containerNode: null, // holds child elements
-
-	// Process the given child widget, inserting it's dom node as a child of our dom node
-	// FIXME: should we support addition at an index in the children arr and
-	// order the display accordingly? Right now we always append.
-	addChild: function(widget, overrideContainerNode, pos, ref, insertIndex){
-		if(!this.isContainer){ // we aren't allowed to contain other widgets, it seems
-			dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
-			return null;
-		}else{
-			this.addWidgetAsDirectChild(widget, overrideContainerNode, pos, ref, insertIndex);
-			this.registerChild(widget, insertIndex);
-		}
-		return widget;
-	},
-	
-	addWidgetAsDirectChild: function(widget, overrideContainerNode, pos, ref, insertIndex){
-		if((!this.containerNode)&&(!overrideContainerNode)){
-			this.containerNode = this.domNode;
-		}
-		var cn = (overrideContainerNode) ? overrideContainerNode : this.containerNode;
-		if(!pos){ pos = "after"; }
-		if(!ref){ ref = cn.lastChild; }
-		if(!insertIndex) { insertIndex = 0; }
-		widget.domNode.setAttribute("dojoinsertionindex", insertIndex);
-
-		// insert the child widget domNode directly underneath my domNode, in the
-		// specified position (by default, append to end)
-		if(!ref){
-			cn.appendChild(widget.domNode);
-		}else{
-			// FIXME: was this meant to be the (ugly hack) way to support insert @ index?
-			//dojo.dom[pos](widget.domNode, ref, insertIndex);
-
-			// CAL: this appears to be the intended way to insert a node at a given position...
-			if (pos == 'insertAtIndex'){
-				// dojo.debug("idx:", insertIndex, "isLast:", ref === cn.lastChild);
-				dojo.dom.insertAtIndex(widget.domNode, ref.parentNode, insertIndex);
-			}else{
-				// dojo.debug("pos:", pos, "isLast:", ref === cn.lastChild);
-				if((pos == "after")&&(ref === cn.lastChild)){
-					cn.appendChild(widget.domNode);
-				}else{
-					dojo.dom.insertAtPosition(widget.domNode, cn, pos);
-				}
-			}
-		}
-	},
-
-	// Record that given widget descends from me
-	registerChild: function(widget, insertionIndex){
-
-		// we need to insert the child at the right point in the parent's 
-		// 'children' array, based on the insertionIndex
-
-		widget.dojoInsertionIndex = insertionIndex;
-
-		var idx = -1;
-		for(var i=0; i<this.children.length; i++){
-			if (this.children[i].dojoInsertionIndex < insertionIndex){
-				idx = i;
-			}
-		}
-
-		this.children.splice(idx+1, 0, widget);
-
-		widget.parent = this;
-		widget.addedTo(this);
-		
-		// If this widget was created programatically, then it was erroneously added
-		// to dojo.widget.manager.topWidgets.  Fix that here.
-		delete dojo.widget.manager.topWidgets[widget.widgetId];
-	},
-
-	// FIXME: we really need to normalize how we do things WRT "destroy" vs. "remove"
-	removeChild: function(widget){
-		for(var x=0; x<this.children.length; x++){
-			if(this.children[x] === widget){
-				this.children.splice(x, 1);
-				break;
-			}
-		}
-		return widget;
-	},
-
-	getFragNodeRef: function(frag){
-		if( !frag["dojo:"+this.widgetType.toLowerCase()] ){
-			dojo.raise("Error: no frag for widget type " + this.widgetType +
-				", id " + this.widgetId + " (maybe a widget has set it's type incorrectly)");
-		}
-		return (frag ? frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"] : null);
-	},
-	
-	// Replace source domNode with generated dom structure, and register
-	// widget with parent.
-	postInitialize: function(args, frag, parentComp){
-		var sourceNodeRef = this.getFragNodeRef(frag);
-		// Stick my generated dom into the output tree
-		//alert(this.widgetId + ": replacing " + sourceNodeRef + " with " + this.domNode.innerHTML);
-		if (parentComp && (parentComp.snarfChildDomOutput || !sourceNodeRef)){
-			// Add my generated dom as a direct child of my parent widget
-			// This is important for generated widgets, and also cases where I am generating an
-			// <li> node that can't be inserted back into the original DOM tree
-			parentComp.addWidgetAsDirectChild(this, "", "insertAtIndex", "",  args["dojoinsertionindex"], sourceNodeRef);
-		} else if (sourceNodeRef){
-			// Do in-place replacement of the my source node with my generated dom
-			if(this.domNode && (this.domNode !== sourceNodeRef)){
-				var oldNode = sourceNodeRef.parentNode.replaceChild(this.domNode, sourceNodeRef);
-			}
-		}
-
-		// Register myself with my parent, or with the widget manager if
-		// I have no parent
-		// TODO: the code below erroneously adds all programatically generated widgets
-		// to topWidgets (since we don't know who the parent is until after creation finishes)
-		if ( parentComp ) {
-			parentComp.registerChild(this, args.dojoinsertionindex);
-		} else {
-			dojo.widget.manager.topWidgets[this.widgetId]=this;
-		}
-
-		// Expand my children widgets
-		if(this.isContainer){
-			//alert("recurse from " + this.widgetId);
-			// build any sub-components with us as the parent
-			var fragParser = dojo.widget.getParser();
-			fragParser.createComponents(frag, this);
-		}
-	},
-
-	startResize: function(coords){
-		dj_unimplemented("dojo.widget.DomWidget.startResize");
-	},
-
-	updateResize: function(coords){
-		dj_unimplemented("dojo.widget.DomWidget.updateResize");
-	},
-
-	endResize: function(coords){
-		dj_unimplemented("dojo.widget.DomWidget.endResize");
-	},
-
-	// method over-ride
-	buildRendering: function(args, frag){
-		// DOM widgets construct themselves from a template
-		var ts = dojo.widget.DomWidget.templates[this.widgetType];
-		if(	
-			(!this.preventClobber)&&(
-				(this.templatePath)||
-				(this.templateNode)||
-				(
-					(this["templateString"])&&(this.templateString.length) 
-				)||
-				(
-					(typeof ts != "undefined")&&( (ts["string"])||(ts["node"]) )
-				)
-			)
-		){
-			// if it looks like we can build the thing from a template, do it!
-			this.buildFromTemplate(args, frag);
-		}else{
-			// otherwise, assign the DOM node that was the source of the widget
-			// parsing to be the root node
-			this.domNode = this.getFragNodeRef(frag);
-		}
-		this.fillInTemplate(args, frag); 	// this is where individual widgets
-											// will handle population of data
-											// from properties, remote data
-											// sets, etc.
-	},
-
-	buildFromTemplate: function(args, frag){
-		// var start = new Date();
-		// copy template properties if they're already set in the templates object
-		var ts = dojo.widget.DomWidget.templates[this.widgetType];
-		if(ts){
-			if(!this.templateString.length){
-				this.templateString = ts["string"];
-			}
-			if(!this.templateNode){
-				this.templateNode = ts["node"];
-			}
-		}
-		var matches = false;
-		var node = null;
-		var tstr = new String(this.templateString); 
-		// attempt to clone a template node, if there is one
-		if((!this.templateNode)&&(this.templateString)){
-			matches = this.templateString.match(/\$\{([^\}]+)\}/g);
-			if(matches) {
-				// if we do property replacement, don't create a templateNode
-				// to clone from.
-				var hash = this.strings || {};
-				// FIXME: should this hash of default replacements be cached in
-				// templateString?
-				for(var key in dojo.widget.defaultStrings) {
-					if(dojo.lang.isUndefined(hash[key])) {
-						hash[key] = dojo.widget.defaultStrings[key];
-					}
-				}
-				// FIXME: this is a lot of string munging. Can we make it faster?
-				for(var i = 0; i < matches.length; i++) {
-					var key = matches[i];
-					key = key.substring(2, key.length-1);
-					var kval = (key.substring(0, 5) == "this.") ? this[key.substring(5)] : hash[key];
-					var value;
-					if((kval)||(dojo.lang.isString(kval))){
-						value = (dojo.lang.isFunction(kval)) ? kval.call(this, key, this.templateString) : kval;
-						tstr = tstr.replace(matches[i], value);
-					}
-				}
-			}else{
-				// otherwise, we are required to instantiate a copy of the template
-				// string if one is provided.
-				
-				// FIXME: need to be able to distinguish here what should be done
-				// or provide a generic interface across all DOM implementations
-				// FIMXE: this breaks if the template has whitespace as its first 
-				// characters
-				// node = this.createNodesFromText(this.templateString, true);
-				// this.templateNode = node[0].cloneNode(true); // we're optimistic here
-				this.templateNode = this.createNodesFromText(this.templateString, true)[0];
-				ts.node = this.templateNode;
-			}
-		}
-		if((!this.templateNode)&&(!matches)){ 
-			dojo.debug("weren't able to create template!");
-			return false;
-		}else if(!matches){
-			node = this.templateNode.cloneNode(true);
-			if(!node){ return false; }
-		}else{
-			node = this.createNodesFromText(tstr, true)[0];
-		}
-
-		// recurse through the node, looking for, and attaching to, our
-		// attachment points which should be defined on the template node.
-
-		this.domNode = node;
-		// dojo.profile.start("attachTemplateNodes");
-		this.attachTemplateNodes(this.domNode, this);
-		// dojo.profile.end("attachTemplateNodes");
-		
-		// relocate source contents to templated container node
-		// this.containerNode must be able to receive children, or exceptions will be thrown
-		if (this.isContainer && this.containerNode){
-			var src = this.getFragNodeRef(frag);
-			if (src){
-				dojo.dom.moveChildren(src, this.containerNode);
-			}
-		}
-	},
-
-	attachTemplateNodes: function(baseNode, targetObj){
-		if(!targetObj){ targetObj = this; }
-		return dojo.widget.attachTemplateNodes(baseNode, targetObj, 
-					dojo.widget.getDojoEventsFromStr(this.templateString));
-	},
-
-	fillInTemplate: function(){
-		// dj_unimplemented("dojo.widget.DomWidget.fillInTemplate");
-	},
-	
-	// method over-ride
-	destroyRendering: function(){
-		try{
-			var tempNode = this.domNode.parentNode.removeChild(this.domNode);
-			delete tempNode;
-		}catch(e){ /* squelch! */ }
-	},
-
-	// FIXME: method over-ride
-	cleanUp: function(){},
-	
-	getContainerHeight: function(){
-		// FIXME: the generic DOM widget shouldn't be using HTML utils!
-		return dojo.html.getInnerHeight(this.domNode.parentNode);
-	},
-
-	getContainerWidth: function(){
-		// FIXME: the generic DOM widget shouldn't be using HTML utils!
-		return dojo.html.getInnerWidth(this.domNode.parentNode);
-	},
-
-	createNodesFromText: function(){
-		dj_unimplemented("dojo.widget.DomWidget.createNodesFromText");
-	}
-});
-dojo.widget.DomWidget.templates = {};
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DropdownButton.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DropdownButton.js
deleted file mode 100644
index a3c4776..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/DropdownButton.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.DropdownButton");
-
-dojo.deprecated("dojo.widget.DropdownButton",  "use dojo.widget.ComboButton2", "0.4");
-
-// Draws a button with a down arrow;
-// when you press the down arrow something appears (usually a menu)
-
-dojo.require("dojo.widget.*");
-
-dojo.widget.tags.addParseTreeHandler("dojo:dropdownbutton");
-
-dojo.widget.DropdownButton = function(){
-	dojo.widget.Widget.call(this);
-
-	this.widgetType = "DropdownButton";
-}
-dojo.inherits(dojo.widget.DropdownButton, dojo.widget.Widget);
-
-dojo.requireAfterIf("html", "dojo.widget.html.DropdownButton");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Editor.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Editor.js
deleted file mode 100644
index 187f296..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Editor.js
+++ /dev/null
@@ -1,619 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/* TODO:
- * - font selector
- * - test, bug fix, more features :)
-*/
-dojo.provide("dojo.widget.Editor");
-dojo.provide("dojo.widget.html.Editor");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.Toolbar");
-dojo.require("dojo.widget.RichText");
-dojo.require("dojo.widget.ColorPalette");
-
-dojo.widget.tags.addParseTreeHandler("dojo:Editor");
-
-dojo.widget.html.Editor = function() {
-	dojo.widget.HtmlWidget.call(this);
-	this.contentFilters = [];
-}
-dojo.inherits(dojo.widget.html.Editor, dojo.widget.HtmlWidget);
-
-dojo.widget.html.Editor.itemGroups = {
-	textGroup: ["bold", "italic", "underline", "strikethrough"],
-	blockGroup: ["formatBlock", "fontName"],
-	justifyGroup: ["justifyleft", "justifycenter", "justifyright"],
-	commandGroup: ["save", "cancel"],
-	colorGroup: ["forecolor", "hilitecolor"],
-	listGroup: ["insertorderedlist", "insertunorderedlist"],
-	indentGroup: ["outdent", "indent"],
-	linkGroup: ["createlink", "insertimage"]
-};
-
-dojo.widget.html.Editor.formatBlockValues = {
-	"Normal": "p",
-	"Main heading": "h2",
-	"Sub heading": "h3",
-	"Sub sub headering": "h4",
-	"Preformatted": "pre"
-};
-
-dojo.widget.html.Editor.fontNameValues = {
-	"Arial": "Arial, Helvetica, sans-serif",
-	"Verdana": "Verdana, sans-serif",
-	"Times New Roman": "Times New Roman, serif",
-	"Courier": "Courier New, monospace"
-};
-
-dojo.widget.html.Editor.defaultItems = [
-	"commandGroup", "|", "linkGroup", "|", "textGroup", "|", "justifyGroup", "|", "listGroup", "indentGroup", "|", "colorGroup"
-];
-
-// ones we support by default without asking the RichText component
-// NOTE: you shouldn't put buttons like bold, italic, etc in here
-dojo.widget.html.Editor.supportedCommands = ["save", "cancel", "|", "-", "/", " "];
-
-dojo.lang.extend(dojo.widget.html.Editor, {
-	widgetType: "Editor",
-
-	items: dojo.widget.html.Editor.defaultItems,
-	formatBlockItems: dojo.lang.shallowCopy(dojo.widget.html.Editor.formatBlockValues),
-	fontNameItems: dojo.lang.shallowCopy(dojo.widget.html.Editor.fontNameValues),
-
-	// used to get the properties of an item if it is given as a string
-	getItemProperties: function(name) {
-		var props = {};
-		switch(name.toLowerCase()) {
-			case "bold":
-			case "italic":
-			case "underline":
-			case "strikethrough":
-				props.toggleItem = true;
-				break;
-
-			case "justifygroup":
-				props.defaultButton = "justifyleft";
-				props.preventDeselect = true;
-				props.buttonGroup = true;
-				break;
-
-			case "listgroup":
-				props.buttonGroup = true;
-				break;
-
-			case "save":
-			case "cancel":
-				props.label = dojo.string.capitalize(name);
-				break;
-
-			case "forecolor":
-			case "hilitecolor":
-				props.name = name;
-				props.toggleItem = true; // FIXME: they aren't exactly toggle items
-				props.icon = this.getCommandImage(name);
-				break;
-
-			case "formatblock":
-				props.name = "formatBlock";
-				props.values = this.formatBlockItems;
-				break;
-
-			case "fontname":
-				props.name = "fontName";
-				props.values = this.fontNameItems;
-		}
-		return props;
-	},
-
-	validateItems: true, // set to false to add items, regardless of support
-	focusOnLoad: true,
-	minHeight: "1em",
-
-	_richText: null, // RichText widget
-	_richTextType: "RichText",
-
-	_toolbarContainer: null, // ToolbarContainer widget
-	_toolbarContainerType: "ToolbarContainer",
-
-	_toolbars: [],
-	_toolbarType: "Toolbar",
-
-	_toolbarItemType: "ToolbarItem",
-
-	buildRendering: function(args, frag) {
-		// get the node from args/frag
-		var node = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-		var trt = dojo.widget.createWidget(this._richTextType, {
-			focusOnLoad: this.focusOnLoad,
-			minHeight: this.minHeight
-		}, node)
-		var _this = this;
-		// this appears to fix a weird timing bug on Safari
-		setTimeout(function(){
-			_this.setRichText(trt);
-
-			_this.initToolbar();
-
-			_this.fillInTemplate(args, frag);
-		}, 0);
-	},
-
-	setRichText: function(richText) {
-		if(this._richText && this._richText == richText) {
-			dojo.debug("Already set the richText to this richText!");
-			return;
-		}
-
-		if(this._richText && !this._richText.isClosed) {
-			dojo.debug("You are switching richTexts yet you haven't closed the current one. Losing reference!");
-		}
-		this._richText = richText;
-		dojo.event.connect(this._richText, "close", this, "onClose");
-		dojo.event.connect(this._richText, "onLoad", this, "onLoad");
-		dojo.event.connect(this._richText, "onDisplayChanged", this, "updateToolbar");
-		if(this._toolbarContainer) {
-			this._toolbarContainer.enable();
-			this.updateToolbar(true);
-		}
-	},
-
-	initToolbar: function() {
-		// var tic = new Date();
-		if(this._toolbarContainer) { return; } // only create it once
-		this._toolbarContainer = dojo.widget.createWidget(this._toolbarContainerType);
-		var tb = this.addToolbar();
-		var last = true;
-		for(var i = 0; i < this.items.length; i++) {
-			if(this.items[i] == "\n") { // new row
-				tb = this.addToolbar();
-			} else {
-				if((this.items[i] == "|")&&(!last)){
-					last = true;
-				}else{
-					last = this.addItem(this.items[i], tb);
-				}
-			}
-		}
-		this.insertToolbar(this._toolbarContainer.domNode, this._richText.domNode);
-		// alert(new Date - tic);
-	},
-
-	// allow people to override this so they can make their own placement logic
-	insertToolbar: function(tbNode, richTextNode) {
-		dojo.html.insertBefore(tbNode, richTextNode);
-		//dojo.html.insertBefore(this._toolbarContainer.domNode, this._richText.domNode);
-	},
-
-	addToolbar: function(toolbar) {
-		this.initToolbar();
-		if(!(toolbar instanceof dojo.widget.html.Toolbar)) {
-			toolbar = dojo.widget.createWidget(this._toolbarType);
-		}
-		this._toolbarContainer.addChild(toolbar);
-		this._toolbars.push(toolbar);
-		return toolbar;
-	},
-
-	addItem: function(item, tb, dontValidate) {
-		if(!tb) { tb = this._toolbars[0]; }
-		var cmd = ((item)&&(!dojo.lang.isUndefined(item["getValue"]))) ?  cmd = item["getValue"](): item;
-
-		var groups = dojo.widget.html.Editor.itemGroups;
-		if(item instanceof dojo.widget.ToolbarItem) {
-			tb.addChild(item);
-		} else if(groups[cmd]) {
-			var group = groups[cmd];
-			var worked = true;
-			if(cmd == "justifyGroup" || cmd == "listGroup") {
-				var btnGroup = [cmd];
-				for(var i = 0 ; i < group.length; i++) {
-					if(dontValidate || this.isSupportedCommand(group[i])) {
-						btnGroup.push(this.getCommandImage(group[i]));
-					}else{
-						worked = false;
-					}
-				}
-				if(btnGroup.length) {
-					var btn = tb.addChild(btnGroup, null, this.getItemProperties(cmd));
-					dojo.event.connect(btn, "onClick", this, "_action");
-					dojo.event.connect(btn, "onChangeSelect", this, "_action");
-				}
-				return worked;
-			} else {
-				for(var i = 0; i < group.length; i++) {
-					if(!this.addItem(group[i], tb)){
-						worked = false;
-					}
-				}
-				return worked;
-			}
-		} else {
-			if((!dontValidate)&&(!this.isSupportedCommand(cmd))){
-				return false;
-			}
-			if(dontValidate || this.isSupportedCommand(cmd)) {
-				cmd = cmd.toLowerCase();
-				if(cmd == "formatblock") {
-					var select = dojo.widget.createWidget("ToolbarSelect", {
-						name: "formatBlock",
-						values: this.formatBlockItems
-					});
-					tb.addChild(select);
-					var _this = this;
-					dojo.event.connect(select, "onSetValue", function(item, value) {
-						_this.onAction("formatBlock", value);
-					});
-				} else if(cmd == "fontname") {
-					var select = dojo.widget.createWidget("ToolbarSelect", {
-						name: "fontName",
-						values: this.fontNameItems
-					});
-					tb.addChild(select);
-					dojo.event.connect(select, "onSetValue", dojo.lang.hitch(this, function(item, value) {
-						this.onAction("fontName", value);
-					}));
-				} else if(dojo.lang.inArray(cmd, ["forecolor", "hilitecolor"])) {
-					var btn = tb.addChild(dojo.widget.createWidget("ToolbarColorDialog", this.getItemProperties(cmd)));
-					dojo.event.connect(btn, "onSetValue", this, "_setValue");
-				} else {
-					var btn = tb.addChild(this.getCommandImage(cmd), null, this.getItemProperties(cmd));
-					if(dojo.lang.inArray(cmd, ["save", "cancel"])) {
-						dojo.event.connect(btn, "onClick", this, "_close");
-					} else {
-						dojo.event.connect(btn, "onClick", this, "_action");
-						dojo.event.connect(btn, "onChangeSelect", this, "_action");
-					}
-				}
-			}
-		}
-		return true;
-	},
-
-	enableToolbar: function() {
-		if(this._toolbarContainer) {
-			this._toolbarContainer.domNode.style.display = "";
-			this._toolbarContainer.enable();
-		}
-	},
-
-	disableToolbar: function(hide){
-		if(hide){
-			if(this._toolbarContainer){
-				this._toolbarContainer.domNode.style.display = "none";
-			}
-		}else{
-			if(this._toolbarContainer){
-				this._toolbarContainer.disable();
-			}
-		}
-	},
-
-	_updateToolbarLastRan: null,
-	_updateToolbarTimer: null,
-	_updateToolbarFrequency: 500,
-
-	updateToolbar: function(force) {
-		if(!this._toolbarContainer) { return; }
-
-		// keeps the toolbar from updating too frequently
-		// TODO: generalize this functionality?
-		var diff = new Date() - this._updateToolbarLastRan;
-		if(!force && this._updateToolbarLastRan && (diff < this._updateToolbarFrequency)) {
-			clearTimeout(this._updateToolbarTimer);
-			var _this = this;
-			this._updateToolbarTimer = setTimeout(function() {
-				_this.updateToolbar();
-			}, this._updateToolbarFrequency/2);
-			return;
-		} else {
-			this._updateToolbarLastRan = new Date();
-		}
-		// end frequency checker
-
-		var items = this._toolbarContainer.getItems();
-		for(var i = 0; i < items.length; i++) {
-			var item = items[i];
-			if(item instanceof dojo.widget.html.ToolbarSeparator) { continue; }
-			var cmd = item._name;
-			if (cmd == "save" || cmd == "cancel") { continue; }
-			else if(cmd == "justifyGroup") {
-				try {
-					if(!this._richText.queryCommandEnabled("justifyleft")) {
-						item.disable(false, true);
-					} else {
-						item.enable(false, true);
-						var jitems = item.getItems();
-						for(var j = 0; j < jitems.length; j++) {
-							var name = jitems[j]._name;
-							var value = this._richText.queryCommandValue(name);
-							if(typeof value == "boolean" && value) {
-								value = name;
-								break;
-							} else if(typeof value == "string") {
-								value = "justify"+value;
-							} else {
-								value = null;
-							}
-						}
-						if(!value) { value = "justifyleft"; } // TODO: query actual style
-						item.setValue(value, false, true);
-					}
-				} catch(err) {}
-			} else if(cmd == "listGroup") {
-				var litems = item.getItems();
-				for(var j = 0; j < litems.length; j++) {
-					this.updateItem(litems[j]);
-				}
-			} else {
-				this.updateItem(item);
-			}
-		}
-	},
-
-	updateItem: function(item) {
-		try {
-			var cmd = item._name;
-			var enabled = this._richText.queryCommandEnabled(cmd);
-			item.setEnabled(enabled, false, true);
-
-			var active = this._richText.queryCommandState(cmd);
-			if(active && cmd == "underline") {
-				// don't activate underlining if we are on a link
-				active = !this._richText.queryCommandEnabled("unlink");
-			}
-			item.setSelected(active, false, true);
-			return true;
-		} catch(err) {
-			return false;
-		}
-	},
-
-	supportedCommands: dojo.widget.html.Editor.supportedCommands.concat(),
-
-	isSupportedCommand: function(cmd) {
-		// FIXME: how do we check for ActiveX?
-		var yes = dojo.lang.inArray(cmd, this.supportedCommands);
-		if(!yes) {
-			try {
-				var richText = this._richText || dojo.widget.html.RichText.prototype;
-				yes = richText.queryCommandAvailable(cmd);
-			} catch(E) {}
-		}
-		return yes;
-	},
-
-	getCommandImage: function(cmd) {
-		if(cmd == "|") {
-			return cmd;
-		} else {
-			return dojo.uri.dojoUri("src/widget/templates/buttons/" + cmd + ".gif");
-		}
-	},
-
-	_action: function(e) {
-		// djConfig.isDebug = true;
-		// dojo.debug(e);
-		// dojo.debug(e.getValue());
-		this._fire("onAction", e.getValue());
-	},
-
-	_setValue: function(a, b) {
-		this._fire("onAction", a.getValue(), b);
-	},
-
-	_close: function(e) {
-		if(!this._richText.isClosed) {
-			this._richText.close(e.getName().toLowerCase() == "save");
-		}
-	},
-
-	onAction: function(cmd, value) {
-		switch(cmd) {
-			case "createlink":
-				if(!(value = prompt("Please enter the URL of the link:", "http://"))) {
-					return;
-				}
-				break;
-			case "insertimage":
-				if(!(value = prompt("Please enter the URL of the image:", "http://"))) {
-					return;
-				}
-				break;
-		}
-		this._richText.execCommand(cmd, value);
-	},
-
-	fillInTemplate: function(args, frag) {
-		// dojo.event.connect(this, "onResized", this._richText, "onResized");
-	},
-
-	_fire: function(eventName) {
-		if(dojo.lang.isFunction(this[eventName])) {
-			var args = [];
-			if(arguments.length == 1) {
-				args.push(this);
-			} else {
-				for(var i = 1; i < arguments.length; i++) {
-					args.push(arguments[i]);
-				}
-			}
-			this[eventName].apply(this, args);
-		}
-	},
-
-	getHtml: function(){
-		this._richText.contentFilters = this.contentFilters;
-		return this._richText.getEditorContent();
-	},
-
-	getEditorContent: function(){
-		return this.getHtml();
-	},
-
-	onClose: function(save, hide){
-		this.disableToolbar(hide);
-		if(save) {
-			this._fire("onSave");
-		} else {
-			this._fire("onCancel");
-		}
-	},
-
-	// events baby!
-	onLoad: function(){},
-	onSave: function(){},
-	onCancel: function(){}
-});
-
-/*
-function dontRunMe() {
-function createToolbar() {
-	tick("createToolbar");
-	tick("ct-init");
-	tbCont = dojo.widget.createWidget("toolbarContainer");
-	tb = dojo.widget.createWidget("toolbar");
-	tbCont.addChild(tb);
-
-	var saveBtn = tb.addChild("Save");
-	dojo.event.connect(saveBtn, "onClick", function() { editor.close(true); });
-	var cancelBtn = tb.addChild("Cancel");
-	dojo.event.connect(cancelBtn, "onClick", function() { editor.close(false); });
-	tb.addChild("|");
-
-	var headings = dojo.widget.createWidget("ToolbarSelect", {
-		name: "formatBlock",
-		values: {
-			"Normal": "p",
-			"Main heading": "h2",
-			"Sub heading": "h3",
-			"Sub sub heading": "h4",
-			"Preformatted": "pre"
-		}
-	});
-	dojo.event.connect(headings, "onSetValue", function(item, val) {
-		editor.execCommand("formatBlock", val);
-	});
-	tb.addChild(headings);
-	tb.addChild("|");
-	tock("ct-init");
-
-	// toolbar layout (2 rows):
-	// Save Cancel | WikiWord | Link Img | Table
-	// Heading FontFace | B I U | Alignment | OL UL < > | FG BG
-	var rows = [
-		["save", "cancel", "|", "wikiword", "|", "createlink", "insertimage", "|", "table"],
-		["formatBlock", "font", "|", "bold", "italic", "underline", "|", "justification", "|", "ol", "ul", "forecolor", "hilitecolor"]
-	];
-
-	tick("command array");
-	var commands = [
-		{ values: ["bold", "italic", "underline", "strikethrough"], toggleItem: true },
-		{ values: [
-				dojo.widget.createWidget("ToolbarColorDialog", {toggleItem: true, name: "forecolor", icon: cmdImg("forecolor")}),
-				dojo.widget.createWidget("ToolbarColorDialog", {toggleItem: true, name: "hilitecolor", icon: cmdImg("hilitecolor")})
-		]},
-		{ values: ["justifyleft", "justifycenter", "justifyright"], name: "justify", defaultButton: "justifyleft", buttonGroup: true, preventDeselect: true },
-		{ values: ["createlink", "insertimage"] },
-		{ values: ["outdent", "indent"] },
-		{ values: ["insertorderedlist", "insertunorderedlist"], name: "list", buttonGroup: true },
-		{ values: ["undo", "redo"] },
-		{ values: ["wikiword"], title: "WikiWord" }
-	];
-	tock("command array");
-
-	tick("processCommands");
-	for(var i = 0; i < commands.length; i++) {
-		var set = commands[i];
-		var values = set.values;
-		var btnGroup = [set.name];
-		for(var j = 0; j < values.length; j++) {
-			if(typeof values[j] == "string") {
-				var cmd = values[j];
-				if(cmd == "wikiword") {
-					var btn = tb.addChild(cmdImg(cmd), null, {name:cmd, label:"WikiWord"});
-					//dojo.event.connect(bt, "onClick", listenWikiWord);
-					//dojo.event.connect(bt, "onChangeSelect", listenWikiWord);
-				} else if(dojo.widget.html.RichText.prototype.queryCommandAvailable(cmd)) {
-					if(set.buttonGroup) {
-						btnGroup.push(cmdImg(cmd));
-					} else {
-						var btn = tb.addChild(cmdImg(cmd), null, {name:cmd, toggleItem:set.toggleItem});
-						dojo.event.connect(btn, "onClick", listen);
-						dojo.event.connect(btn, "onChangeSelect", listen);
-					}
-				}
-			} else {
-				if(dojo.widget.html.RichText.prototype.queryCommandAvailable(values[j].getName())) {
-					var btn = tb.addChild(values[j]);
-					dojo.event.connect(btn, "onSetValue", colorListen, values[j].getName());
-				}
-			}
-		}
-		if(set.buttonGroup && btnGroup.length > 1) {
-			var btn = tb.addChild(btnGroup, null, {defaultButton:set.defaultButton});
-			dojo.event.connect(btn, "onClick", listen);
-			dojo.event.connect(btn, "onChangeSelect", listen);
-		}
-
-		if(i + 1 != commands.length
-			&& !(tb.children[tb.children.length-1] instanceof dojo.widget.html.ToolbarSeparator)) {
-			tb.addChild("|");
-		}
-	}
-	tock("processCommands");
-	tock("createToolbar");
-	return tbCont;
-}
-function cmdImg(cmd) {
-	return dojo.uri.dojoUri("src/widget/templates/buttons/" + cmd + ".gif");
-}
-function createWysiwyg(node) {
-	tick("createWysiwyg");
-	tick("editor");
-	editor = dojo.widget.createWidget("RichText", {}, node);
-	tock("editor");
-	dojo.event.connect(editor, "close", function(changed) {
-		if(changed) { setTimeout(save, 5); }
-		setTimeout(function() {
-			dojo.io.bind({
-				url: location,
-				content: {
-					edit: "0",
-					cancel: "Cancel"
-				},
-				handler: function() {
-					hideLoad();
-				}
-			});
-		}, 15);
-		finishEdit();
-	});
-	autolinkWikiWords(editor);
-	cleanupWord(editor);
-	//createToolbar();
-	dojo.event.connect(editor, "onDisplayChanged", updateToolbar);
-
-	if(editor && tbCont && tb) {
-		var top = document.getElementById("jot-topbar");
-		dojo.html.addClass(top, "hidden");
-		//placeToolbar(tbCont.domNode);
-		//top.appendChild(tbCont.domNode);
-		//document.getElementById("jot-bottombar").innerHTML = "&nbsp;";
-	} else {
-		alert("Something went wrong trying to create the toolbar + editor.");
-	}
-	tock("createWysiwyg");
-	
-	return editor;
-}
-
-}
-*/
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTree.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTree.js
deleted file mode 100644
index 9068c9d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTree.js
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/**
- * Tree model does all the drawing, visual node management etc.
- * Throws events about clicks on it, so someone may catch them and process
- * Tree knows nothing about DnD stuff, covered in TreeDragAndDrop and (if enabled) attached by controller
-*/
-dojo.provide("dojo.widget.EditorTree");
-
-dojo.require("dojo.event.*");
-dojo.require("dojo.dnd.*");
-dojo.require("dojo.fx.html");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.Container");
-dojo.require("dojo.widget.Tree");
-dojo.require("dojo.widget.EditorTreeNode");
-
-// make it a tag
-dojo.widget.tags.addParseTreeHandler("dojo:EditorTree");
-
-
-dojo.widget.EditorTree = function() {
-	dojo.widget.html.Container.call(this);
-	this.acceptDropSources = [];
-
-	this.eventNames = {
-		// new node built.. Well, just built
-		nodeCreate: "",
-		// expand icon clicked
-		treeClick: "",
-		// node icon clicked
-		iconClick: "",
-		// node title clicked
-		titleClick: ""
-	};
-}
-dojo.inherits(dojo.widget.EditorTree, dojo.widget.html.Container);
-
-/* extend DOES NOT copy recursively */
-dojo.lang.extend(dojo.widget.EditorTree, {
-	widgetType: "EditorTree",
-
-	domNode: null,
-
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/EditorTree.css"),
-
-	templateString: '<div class="dojoTree"></div>',
-
-	/* Model events */
-	eventNames: null,
-
-	toggler: null,
-
-	//
-	// these icons control the grid and expando buttons for the whole tree
-	//
-
-	blankIconSrc: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_blank.gif").toString(),
-
-	gridIconSrcT: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_grid_t.gif").toString(), // for non-last child grid
-	gridIconSrcL: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_grid_l.gif").toString(), // for last child grid
-	gridIconSrcV: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_grid_v.gif").toString(), // vertical line
-	gridIconSrcP: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_grid_p.gif").toString(), // for under parent item child icons
-	gridIconSrcC: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_grid_c.gif").toString(), // for under child item child icons
-	gridIconSrcX: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_grid_x.gif").toString(), // grid for sole root item
-	gridIconSrcY: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_grid_y.gif").toString(), // grid for last rrot item
-	gridIconSrcZ: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_grid_z.gif").toString(), // for under root parent item child icon
-
-	expandIconSrcPlus: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_expand_plus.gif").toString(),
-	expandIconSrcMinus: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_expand_minus.gif").toString(),
-	expandIconSrcLoading: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/treenode_loading.gif").toString(),
-
-
-	iconWidth: 18,
-	iconHeight: 18,
-
-
-	//
-	// tree options
-	//
-
-	showGrid: true,
-	showRootGrid: true,
-
-	toggle: "default",
-	toggleDuration: 150,
-	title: "My Tree", // used for debug only
-	selector: null,
-
-	initialize: function(args, frag){
-
-		var sources;
-		if ( (sources = args['acceptDropSources']) || (sources = args['acceptDropSources']) ) {
-			this.acceptDropSources = sources.split(',');
-		}
-
-		switch (this.toggle) {
-
-			case "fade": this.toggler = new dojo.widget.Tree.FadeToggle(); break;
-			// buggy - try to open many nodes in FF (IE is ok)
-			case "wipe": this.toggler = new dojo.widget.Tree.WipeToggle(); break;
-			default    : this.toggler = new dojo.widget.Tree.DefaultToggle();
-		}
-
-
-		if (args['eventNaming'] == "default" || args['eventnaming'] == "default" ) { // IE || FF
-
-			for (eventName in this.eventNames) {
-				this.eventNames[eventName] = this.widgetId+"/"+eventName;
-			}
-			/*
-			this.eventNames.watch("nodeCreate",
-   				function (id,oldval,newval) {
-      				alert("o." + id + " changed from " + oldval + " to " + newval);
-      				return newval;
-			   }
-			  );
-			 */
-
-		//	alert(dojo.widget.manager.getWidgetById('firstTree').widgetId)
-		//	alert(dojo.widget.manager.getWidgetById('firstTree').eventNames.nodeCreate);
-
-		}
-
-
-		if (args['controller']) {
-			var controller = dojo.widget.manager.getWidgetById(args['controller']);
-
-			controller.subscribeTree(this); // controller listens to my events
-		}
-
-		if (args['selector']) {
-			this.selector = dojo.widget.manager.getWidgetById(args['selector']);
-		}
-		else {
-			this.selector = new dojo.widget.createWidget("dojo.widget.EditorTreeSelector");
-		}
-
-	},
-
-
-
-	postCreate: function() {
-		this.buildTree();
-	},
-
-	buildTree: function() {
-
-		dojo.html.disableSelection(this.domNode);
-
-		for(var i=0; i<this.children.length; i++){
-
-			this.children[i].isFirstNode = (i == 0) ? true : false;
-			this.children[i].isLastNode = (i == this.children.length-1) ? true : false;
-			this.children[i].parentNode = this; // root nodes have tree as parent
-
-			var node = this.children[i].buildNode(this, 0);
-
-
-			this.domNode.appendChild(node);
-		}
-
-
-		//
-		// when we don't show root toggles, we need to auto-expand root nodes
-		//
-
-		if (!this.showRootGrid){
-			for(var i=0; i<this.children.length; i++){
-				this.children[i].expand();
-			}
-		}
-
-
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].startMe();
-		}
-	},
-
-
-
-	/**
-	 * Move child to newParent as last child
-	 * redraw tree and update icons
-	*/
-	changeParent: function(child, newParent) {
-		//dojo.debug("Move "+child.title+" to "+newParent.title)
-
-		/* do actual parent change here. Write remove child first */
-		child.parentNode.removeChild(child);
-
-		newParent.addChild(child, 0);
-
-	},
-
-	removeChild: function(child) {
-
-		var parentNode = child.parentNode;
-
-		var children = parentNode.children;
-
-		for(var i=0; i<children.length; i++){
-			if(children[i] === child){
-				if (children.length>1) {
-					if (i==0) {
-						children[i+1].isFirstNode = true;
-					}
-					if (i==children.length-1) {
-						children[i-1].isLastNode = true;
-					}
-				}
-				children.splice(i, 1);
-				break;
-			}
-		}
-
-		child.domNode.parentNode.removeChild(child.domNode);
-
-
-		//dojo.debug("removeChild: "+child.title+" from "+parentNode.title);
-
-		if (children.length == 0) {
-			// toggle empty container off
-			if (parentNode.widgetType == 'EditorTreeNode') { // if has container
-				parentNode.containerNode.style.display = 'none';
-			}
-
-		}
-
-		parentNode.updateIconTree();
-
-		return child;
-
-	},
-
-
-
-	// not called for initial tree building. See buildNode instead.
-	// builds child html node if needed
-	// index is "last node" by default
-	addChild: function(child, index){
-		//dojo.debug("This "+this.title+" Child "+child.title+" index "+index);
-
-		if (dojo.lang.isUndefined(index)) {
-			index = this.children.length;
-		}
-
-		//
-		// this function gets called to add nodes to both trees and nodes, so it's a little confusing :)
-		//
-
-		if (child.widgetType != 'EditorTreeNode'){
-			dojo.raise("You can only add EditorTreeNode widgets to a "+this.widgetType+" widget!");
-			return;
-		}
-
-		// set/clean isFirstNode and isLastNode
-		if (this.children.length){
-			if (index == 0) {
-				this.children[0].isFirstNode = false;
-				child.isFirstNode = true;
-			}
-			else {
-				child.isFirstNode = false;
-			}
-			if (index == this.children.length) {
-				this.children[index-1].isLastNode = false;
-				child.isLastNode = true;
-			}
-			else {
-				child.isLastNode = false;
-			}
-		}
-		else {
-			child.isLastNode = true;
-			child.isFirstNode = true;
-		}
-
-
-
-		// usually it is impossible to change "isFolder" state, but if anyone wants to add a child to leaf,
-		// it is possible program-way.
-		if (this.widgetType == 'EditorTreeNode'){
-			this.isFolder = true;
-			//this.isExpanded = false;
-		}
-
-		// adjust tree
-		var tree = this.widgetType == 'EditorTreeNode' ? this.tree : this;
-		dojo.lang.forEach(child.getDescendants(), function(elem) { elem.tree = tree; });
-
-		/*
-		var stack = [child];
-		var elem;
-		// change tree for all subnodes
-		while (elem = stack.pop()) {
-			//dojo.debug("Tree for "+elem.title);
-			elem.tree = tree;
-			dojo.lang.forEach(elem.children, function(elem) { stack.push(elem); });
-		}
-		*/
-
-		// fix parent
-		child.parentNode = this;
-
-
-		// no dynamic loading for those who are parents already
-		if (this.widgetType == 'EditorTreeNode') {
-			this.loaded = this.loadStates.LOADED;
-		}
-
-		// if node exists - adjust its depth, otherwise build it
-		if (child.domNodeInitialized) {
-			//dojo.debug(this.widgetType)
-			var d = (this.widgetType == 'EditorTreeNode') ? this.depth : 0;
-			//dojo.debug('Depth is '+this.depth);
-			child.adjustDepth(d-child.depth+1);
-		}
-		else {
-			child.depth = this.widgetType == 'EditorTreeNode' ? this.depth+1 : 0;
-			child.buildNode(child.tree, child.depth);
-		}
-
-
-
-		//dojo.debug(child.domNode.outerHTML)
-
-		if (index < this.children.length) {
-
-			//dojo.debug('insert '+index)
-			//dojo.debugShallow(child);
-
-			// insert
-			this.children[index].domNode.parentNode.insertBefore(child.domNode, this.children[index].domNode);
-		}
-		else {
-			if (this.widgetType == 'EditorTree') {
-				this.domNode.appendChild(node);
-			}
-			else {
-
-				//dojo.debug('append '+index)
-
-			// enable container, cause I add first child into it
-				this.containerNode.style.display = 'block';
-
-				//this.domNode.insertBefore(child.domNode, this.containerNode);
-
-				//dojo.debugShallow(this.containerNode);
-				this.containerNode.appendChild(child.domNode);
-				//dojo.debugShallow(this.containerNode);
-			}
-		}
-
-		this.children.splice(index, 0, child);
-
-		//dojo.lang.forEach(this.children, function(child) { dojo.debug("Child "+child.title); } );
-
-		//dojo.debugShallow(child);
-
-		this.updateIconTree();
-
-		child.startMe();
-
-
-	},
-
-	makeBlankImg: function() {
-		var img = document.createElement('img');
-
-		img.style.width = this.iconWidth + 'px';
-		img.style.height = this.iconHeight + 'px';
-		img.src = this.blankIconSrc;
-		img.style.verticalAlign = 'middle';
-
-		return img;
-	},
-
-
-	/* Swap nodes with SAME parent */
-	swapNodes: function(node1, node2) {
-		if (node1 === node2) return;
-
-		if (node1.parentNode !== node2.parentNode) {
-			dojo.raise("You may only swap nodes with same parent")
-		}
-
-		var parentNode = node1.parentNode;
-
-		var nodeIndex1 = node1.getParentIndex();
-		var nodeIndex2 = node2.getParentIndex();
-
-		/* Fix children order */
-		parentNode.children[nodeIndex1] = node2;
-		parentNode.children[nodeIndex2] = node1;
-
-		/* swap isFirst/isLast flags */
-		var a = node1.isLastNode;
-		var b = node1.isFirstNode;
-		node1.isLastNode = node2.isLastNode;
-		node1.isFirstNode = node2.isFirstNode;
-		node2.isLastNode = a;
-		node2.isFirstNode = b;
-
-		//dojo.debug(node1.title+" : "+node2.title)
-
-		this.swapDomNodes(node1.domNode, node2.domNode);
-		//parentNode.containerNode.insertBefore(node2.domNode, node1.domNode);
-		//parentNode.containerNode.insertBefore(node1.domNode, node2.domNode);
-
-		//parentNode.containerNode.removeChild(this.domNode);
-
-		parentNode.updateIconTree();
-
-
-	},
-
-
-	/* Should go dojo.dom */
-	swapDomNodes: function(node1, node2) {
-		// replace node1 with node2
-		//dojo.debug(node1.parentNode)
-
-		// may have siblings only in n1 -> n2 order
-		if (node2.nextSibling === node1) return this.swapDomNodes(node2, node1);
-
-		var parentNode1 = node1.parentNode;
-		var parentNode2 = node2.parentNode;
-
-		var inserter1;
-		var inserter2;
-		var removed1;
-		var removed2;
-
-		if (node1.nextSibling === node2) {			// node1->node2
-			if (node2.nextSibling) {
-				var a2n = node2.nextSibling;
-				inserter1 = function(newNode) { parentNode1.insertBefore(newNode, a2n); }
-				inserter2 = function(newNode) { parentNode1.insertBefore(newNode, a2n); }
-			}
-			else {
-				inserter1 = function(newNode) { parentNode1.appendChild(newNode); }
-				inserter2 = function(newNode) { parentNode1.appendChild(newNode); }
-			}
-		}
-		else {
-			if (node1.nextSibling) {
-				inserter1 = function(newNode) { parentNode1.insertBefore(newNode, node1.nextSibling); }
-			}
-			else {
-				inserter1 = function(newNode) { parentNode1.appendChild(newNode); }
-			}
-
-			if (node2.nextSibling) {
-				inserter2 = function(newNode) { parentNode2.insertBefore(newNode, node2.nextSibling); }
-			}
-			else {
-				inserter2 = function(newNode) { parentNode2.appendChild(newNode); }
-			}
-		}
-
-
-		removed1 = parentNode1.removeChild(node1);
-		removed2 = parentNode2.removeChild(node2);
-
-		// order is important cause of n1->n2 case
-		inserter1.apply(this, [removed2]);
-		inserter2.apply(this, [removed1]);
-
-
-	},
-
-
-	updateIconTree: function(){
-
-		if (this.widgetType=='EditorTreeNode') {
-			this.updateIcons();
-		}
-
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].updateIconTree();
-		}
-
-	}
-
-
-
-
-
-});
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeContextMenu.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeContextMenu.js
deleted file mode 100644
index 98c1bdf..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeContextMenu.js
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.EditorTreeContextMenu");
-dojo.provide("dojo.widget.EditorTreeMenuItem");
-
-dojo.require("dojo.event.*");
-dojo.require("dojo.dnd.*");
-dojo.require("dojo.fx.html");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.Container");
-dojo.require("dojo.widget.Menu2");
-
-
-dojo.widget.tags.addParseTreeHandler("dojo:EditorTreeContextMenu");
-dojo.widget.tags.addParseTreeHandler("dojo:EditorTreeMenuItem");
-
-
-
-dojo.widget.EditorTreeContextMenu = function() {
-	dojo.widget.PopupMenu2.call(this);
-	this.widgetType = "EditorTreeContextMenu";
-
-	this.eventNames =  {
-		open: ""
-	};
-
-
-}
-
-
-dojo.inherits(dojo.widget.EditorTreeContextMenu, dojo.widget.PopupMenu2);
-
-dojo.lang.extend(dojo.widget.EditorTreeContextMenu, {
-
-	initialize: function(args, frag) {
-
-		var result = dojo.widget.PopupMenu2.prototype.initialize.apply(this, arguments);
-
-		if (args['eventNaming'] == "default" || args['eventnaming'] == "default" ) { // IE || FF
-			for (eventName in this.eventNames) {
-				this.eventNames[eventName] = this.widgetId+"/"+eventName;
-			}
-		}
-
-		return result;
-
-	},
-
-	postCreate: function(){
-		var result = dojo.widget.PopupMenu2.prototype.postCreate.apply(this, arguments);
-
-		var subItems = this.getChildrenOfType('EditorTreeMenuItem')
-
-		for(var i=0; i<subItems.length; i++) {
-			dojo.event.topic.subscribe(this.eventNames.open, subItems[i], "menuOpen")
-		}
-
-
-		return result;
-	},
-
-	open: function(x, y, parentMenu, explodeSrc){
-
-		var result = dojo.widget.PopupMenu2.prototype.open.apply(this, arguments);
-
-		/* publish many events here about structural changes */
-		dojo.event.topic.publish(this.eventNames.open, { menu:this });
-
-		return result;
-	}
-
-
-
-});
-
-
-
-
-
-
-dojo.widget.EditorTreeMenuItem = function() {
-	dojo.widget.MenuItem2.call(this);
-	this.widgetType = "EditorTreeMenuItem";
-
-}
-
-
-dojo.inherits(dojo.widget.EditorTreeMenuItem, dojo.widget.MenuItem2);
-
-dojo.lang.extend(dojo.widget.EditorTreeMenuItem, {
-	for_folders: true,
-
-
-	getTreeNode: function() {
-		var menu = this;
-
-		while (menu.widgetType != 'EditorTreeContextMenu') {
-			menu = menu.parent;
-		}
-
-		var source = menu.getTopOpenEvent().target;
-
-		while (!source.treeNode && source.tagName != 'body') {
-			source = source.parentNode;
-		}
-		if (source.tagName == 'body') {
-			dojo.raise("treeNode not detected");
-		}
-		var treeNode = dojo.widget.manager.getWidgetById(source.treeNode);
-
-		return treeNode;
-	},
-
-	menuOpen: function(message) {
-		var treeNode = this.getTreeNode();
-
-		/* manage for folders status */
-		if (!treeNode.isFolder && this.for_folders==false) {
-			this.setDisabled(true);
-		}
-		else {
-			this.setDisabled(false);
-		}
-	}
-
-
-
-});
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeController.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeController.js
deleted file mode 100644
index d723683..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeController.js
+++ /dev/null
@@ -1,742 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-
-dojo.provide("dojo.widget.EditorTreeController");
-
-dojo.require("dojo.event.*");
-dojo.require("dojo.dnd.*");
-dojo.require("dojo.dnd.TreeDragAndDrop");
-dojo.require("dojo.fx.html");
-dojo.require("dojo.json")
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.Container");
-dojo.require("dojo.widget.Tree");
-
-
-dojo.widget.tags.addParseTreeHandler("dojo:EditorTreeController");
-
-
-dojo.widget.EditorTreeController = function() {
-	dojo.widget.HtmlWidget.call(this);
-
-	this.eventNames = {
-		select : "",
-		collapse: "",
-		expand: "",
-		dblselect: "", // select already selected node.. Edit or whatever
-
-		swap: "", // nodes of same parent were swapped
-		move: "", // a child was moved from one place to another with parent change
-		remove: ""
-	};
-
-
-	this.dragSources = {};
-	this.dropTargets = {};
-}
-
-dojo.inherits(dojo.widget.EditorTreeController, dojo.widget.HtmlWidget);
-
-
-dojo.lang.extend(dojo.widget.EditorTreeController, {
-	widgetType: "EditorTreeController",
-
-	//RPCUrl: "http://test.country-info.ru/json_tree.php",
-	//RPCUrl: "http://tmp.x/jstree/www/json_tree.php",
-	RPCUrl: "local",
-
-	initialize: function(args, frag){
-
-		if (args['eventNaming'] == "default" || args['eventnaming'] == "default" ) { // IE || FF
-			for (eventName in this.eventNames) {
-				this.eventNames[eventName] = this.widgetId+"/"+eventName;
-			}
-		}
-
-	},
-
-
-	enabledDND: true,
-
-	/**
-	 * Binds controller to tree events
-	*/
-	subscribeTree: function(tree) {
-
-		if (!tree.eventNames.nodeCreate) dojo.raise("Can't subscribe controller to empty nodeCreate")
-		if (!tree.eventNames.treeClick) dojo.raise("Can't subscribe controller to empty treeClick")
-		if (!tree.eventNames.iconClick) dojo.raise("Can't subscribe controller to empty iconClick")
-		if (!tree.eventNames.titleClick) dojo.raise("Can't subscribe controller to empty titleClick")
-
-		dojo.event.topic.subscribe(tree.eventNames.nodeCreate, this, "onNodeCreate");
-		dojo.event.topic.subscribe(tree.eventNames.treeClick, this, "onTreeClick");
-		dojo.event.topic.subscribe(tree.eventNames.iconClick, this, "onIconClick");
-		dojo.event.topic.subscribe(tree.eventNames.titleClick, this, "onTitleClick");
-	},
-
-
-	/**
-	 * Checks whether it is ok to change parent of child to newParent
-	 * May incur type checks etc
-	 */
-	canChangeParent: function(child, newParent){
-
-//		dojo.debug('check for '+child+' '+newParent)
-
-		// Can't move parent under child. check whether new parent is child of "child".
-		var node = newParent;
-		while(node.widgetType !== 'EditorTree') {
-			//dojo.debugShallow(node.title)
-
-
-			if (node === child) {
-				// parent of newParent is child
-				return false;
-			}
-			node = node.parentNode;
-		}
-
-		// check for newParent being a folder
-		if (!newParent.isFolder) {
-			return false;
-		}
-
-		// check if newParent is parent for child already
-		for(var i=0;i<newParent.children.length; i++) {
-			if (newParent.children[i] == child) return false;
-		}
-
-		return true;
-	},
-
-
-	getRPCUrl: function(action) {
-
-		if (this.RPCUrl == "local") { // for demo and tests. May lead to widgetId collisions
-			var dir = document.location.href.substr(0, document.location.href.lastIndexOf('/'));
-			var localUrl = dir+"/"+action;
-			//dojo.debug(localUrl);
-			return localUrl;
-		}
-
-
-		if (!this.RPCUrl) {
-			dojo.raise("Empty RPCUrl: can't load");
-		}
-
-		return this.RPCUrl + ( this.RPCUrl.indexOf("?") > -1 ? "&" : "?") + "action="+action;
-	},
-
-	/**
-	 * Make request to server about moving children.
-	 *
-	 * Request returns "true" if move succeeded,
-	 * object with error field if failed
-	 *
-	 * I can't leave DragObject floating until async request returns, need to return false/true
-	 * so making it sync way...
-	 *
-	 * Also, "loading" icon is not shown until function finishes execution, so no indication for remote request.
-	*/
-	changeParentRemote: function(child, newParent){
-
-			newParent.markLoading();
-
-			var params = {
-				// where from
-				childId: child.widgetId,
-				childTreeId: child.tree.widgetId,
-				childOldParentId: child.parentNode.widgetId,
-				// where to
-				newParentId: newParent.widgetId,
-				newParentTreeId: newParent.tree.widgetId
-			}
-
-			var query = dojo.io.argsFromMap(params);
-			var requestUrl = this.getRPCUrl('changeParent');
-			if(query != "") {
-				requestUrl += (requestUrl.indexOf("?") > -1 ? "&" : "?") + query;
-			}
-
-			var response;
-			var result;
-
-			try{
-				response = dojo.hostenv.getText(requestUrl);
-				result = dj_eval("("+response+")");
-			}catch(e){
-				dojo.debug(e);
-				dojo.debug(response);
-				dojo.raise("Failed to load node");
-			}
-
-
-			//dojo.debugShallow(result)
-
-			if (result == true) {
-				/* change parent succeeded */
-				child.tree.changeParent(child, newParent)
-				this.updateDND(child);
-				return true;
-			}
-			else if (dojo.lang.isObject(result)) {
-				dojo.raise(result.error);
-			}
-			else {
-				dojo.raise("Invalid response "+response)
-			}
-
-
-	},
-
-
-	/**
-	 * return true on success, false on failure
-	*/
-	changeParent: function(child, newParent) {
-		// dojo.debug("Drop registered")
-		/* move sourceTreeNode to new parent */
-		if (!this.canChangeParent(child, newParent)) {
-			return false;
-		}
-
-		/* load nodes into newParent in sync mode, if needed, first */
-		if (newParent.state == newParent.loadStates.UNCHECKED) {
-			this.loadRemote(newParent, true);
-		}
-
-		var oldParent = child.parentNode;
-
-		var result = this.changeParentRemote(child, newParent);
-
-		if (!result) return result;
-
-
-		/* publish many events here about structural changes */
-		dojo.event.topic.publish(this.eventNames.move,
-			{ oldParent: oldParent, newParent: child.parentNode, child: child }
-		);
-
-		this.expand(newParent);
-
-		return result;
-	},
-
-
-
-	/**
-	 * Common RPC error handler (dies)
-	*/
-	RPCErrorHandler: function(type, obj) {
-		dojo.raise("RPC error occured! Application restart/tree refresh recommended.");
-	},
-
-
-
-	/**
-	 * Add all loaded nodes from array obj as node children and expand it
-	*/
-	loadProcessResponse: function(node, newChildren) {
-		if (!dojo.lang.isArray(newChildren)) {
-			dojo.raise('Not array loaded: '+newChildren);
-		}
-		for(var i=0; i<newChildren.length; i++) {
-			// looks like dojo.widget.manager needs no special "add" command
-			var newChild = dojo.widget.createWidget(node.widgetType, newChildren[i]);
-			node.addChild(newChild);
-
-			//dojo.debug(dojo.widget.manager.getWidgetById(newChild.widgetId))
-		}
-		node.state = node.loadStates.LOADED;
-		this.expand(node);
-	},
-
-
-	/**
-	 * Load children of the node from server
-	 * Synchroneous loading doesn't break control flow
-	 * I need sync mode for DnD
-	*/
-	loadRemote: function(node, sync){
-			node.markLoading();
-
-
-			var params = {
-				treeId: node.tree.widgetId,
-				nodeId: node.widgetId
-			};
-
-			var requestUrl = this.getRPCUrl('getChildren');
-			//dojo.debug(requestUrl)
-
-			if (!sync) {
-				dojo.io.bind({
-					url: requestUrl,
-					/* I hitch to get this.loadOkHandler */
-					load: dojo.lang.hitch(this, function(type, obj) { this.loadProcessResponse(node, obj) } ),
-					error: dojo.lang.hitch(this, this.RPCErrorHandler),
-					mimetype: "text/json",
-					preventCache: true,
-					sync: sync,
-					content: params
-				});
-
-				return;
-			}
-			else {
-				var query = dojo.io.argsFromMap(params);
-				if(query != "") {
-					requestUrl += (requestUrl.indexOf("?") > -1 ? "&" : "?") + query;
-				}
-
-				var newChildren;
-
-				try{
-					var response = dojo.hostenv.getText(requestUrl);
-					newChildren = dj_eval("("+response+")");
-				}catch(e){
-					dojo.debug(e);
-					dojo.debug(response);
-					dojo.raise("Failed to load node");
-				}
-
-				this.loadProcessResponse(node, newChildren);
-
-			}
-	},
-
-	onTreeClick: function(message){
-
-		//dojo.debug("EXPAND")
-
-		var node = message.source;
-
-		if (node.state == node.loadStates.UNCHECKED) {
-			this.loadRemote(node);
-		}
-		else if (node.isExpanded){
-			this.collapse(node);
-		}
-		else {
-			this.expand(node);
-		}
-	},
-
-
-	onIconClick: function(message){
-		this.onTitleClick(message);
-	},
-
-	onTitleClick: function(message){
-		var node = message.source;
-		var e = message.event;
-
-		if (node.tree.selector.selectedNode === node){
-			dojo.event.topic.publish(this.eventNames.dblselect, { source: node });
-			return;
-		}
-
-		/* deselect old node */
-		if (node.tree.selector.selectedNode) {
-			this.deselect(node.tree.selector.selectedNode);
-		}
-
-		node.tree.selector.selectedNode = node;
-		this.select(node);
-	},
-
-
-	/**
-	 * Process drag'n'drop -> drop
-	 * NOT event-driven, because its result is important (success/false)
-	 * in event system subscriber can't return a result into _current function control-flow_
-	 * @return true on success, false on failure
-	*/
-	processDrop: function(sourceNode, targetNode){
-		//dojo.debug('drop')
-		return this.changeParent(sourceNode, targetNode)
-	},
-
-
-	onNodeCreate: function(message) {
-		this.registerDNDNode(message.source);
-	},
-
-	select: function(node){
-		node.markSelected();
-
-		dojo.event.topic.publish(this.eventNames.select, {source: node} );
-	},
-
-	deselect: function(node){
-		node.unMarkSelected();
-
-		node.tree.selector.selectedNode = null;
-	},
-
-	expand: function(node) {
-		if (node.isExpanded) return;
-		node.expand();
-		dojo.event.topic.publish(this.eventNames.expand, {source: node} );
-	},
-
-	collapse: function(node) {
-		if (!node.isExpanded) return;
-
-		node.collapse();
-		dojo.event.topic.publish(this.eventNames.collapse, {source: node} );
-	},
-
-
-	/**
-	 * Controller(node model) creates DNDNodes because it passes itself to node for synchroneous drops processing
-	 * I can't process DnD with events cause an event can't return result success/false
-	*/
-	registerDNDNode: function(node) {
-
-
-		//dojo.debug("registerDNDNode node "+node.title+" tree "+node.tree+" accepted sources "+node.tree.acceptDropSources);
-
-		/* I drag label, not domNode, because large domNodes are very slow to copy and large to drag */
-
-		var source = null;
-		var target = null;
-
-		var source = new dojo.dnd.TreeDragSource(node.labelNode, this, node.tree.widgetId, node);
-		this.dragSources[node.widgetId] = source;
-
-		//dojo.debugShallow(node.tree.widgetId)
-		var target = new dojo.dnd.TreeDropTarget(node.labelNode, this, node.tree.acceptDropSources, node);
-		this.dropTargets[node.widgetId] = target;
-
-
-		if (!this.enabledDND) {
-			if (source) dojo.dnd.dragManager.unregisterDragSource(source);
-			if (target) dojo.dnd.dragManager.unregisterDropTarget(target);
-		}
-
-		//dojo.debug("registerDNDNode "+this.dragSources[node.widgetId].treeNode.title)
-
-
-	},
-
-	unregisterDNDNode: function(node) {
-
-		//dojo.debug("unregisterDNDNode "+node.title)
-		//dojo.debug("unregisterDNDNode "+this.dragSources[node.widgetId].treeNode.title)
-
-		if (this.dragSources[node]) {
-			dojo.dnd.dragManager.unregisterDragSource(this.dragSources[node.widgetId]);
-			delete this.dragSources[node.widgetId];
-		}
-
-		if (this.dropTargets[node]) {
-			dojo.dnd.dragManager.unregisterDropTarget(this.dropTargets[node.widgetId]);
-			delete this.dropTargets[node.widgetId];
-		}
-	},
-
-	// update types for DND right accept
-	// E.g when move from one tree to another tree
-	updateDND: function(node) {
-
-		this.unregisterDNDNode(node);
-
-		this.registerDNDNode(node);
-
-
-		//dojo.debug("!!!"+this.dropTargets[node].acceptedTypes)
-
-		for(var i=0; i<node.children.length; i++) {
-			// dojo.debug(node.children[i].title);
-			this.updateDND(node.children[i]);
-		}
-
-	},
-
-
-
-
-	// -----------------------------------------------------------------------------
-	//                             Swap & move nodes stuff
-	// -----------------------------------------------------------------------------
-
-
-	/* after all local checks I run remote call for swap */
-	swapNodesRemote: function(node1, node2, callback) {
-
-			var params = {
-				treeId: this.widgetId,
-				node1Id: node1.widgetId,
-				node1Idx: node1.getParentIndex(),
-				node2Id: node2.widgetId,
-				node2Idx: node2.getParentIndex()
-			}
-
-			dojo.io.bind({
-					url: this.getRPCUrl('swapNodes'),
-					/* I hitch to get this.loadOkHandler */
-					load: dojo.lang.hitch(this, function(type, obj) {
-						this.swapNodesProcessResponse(node1, node2, callback, obj) }
-					),
-					error: dojo.lang.hitch(this, this.RPCErrorHandler),
-					mimetype: "text/json",
-					preventCache: true,
-					content: params
-			});
-
-	},
-
-	swapNodesProcessResponse: function(node1, node2, callback, result) {
-		if (result == true) {
-			/* change parent succeeded */
-			this.doSwapNodes(node1, node2);
-			if (callback) {
-				// provide context manually e.g with dojo.lang.hitch.
-				callback.apply(this, [node1, node2]);
-			}
-
-			return true;
-		}
-		else if (dojo.lang.isObject(result)) {
-			dojo.raise(result.error);
-		}
-		else {
-			dojo.raise("Invalid response "+obj)
-		}
-
-
-	},
-
-	/* node swapping requires remote checks. This function does the real job only w/o any checks */
-	doSwapNodes: function(node1, node2) {
-		/* publish many events here about structural changes */
-
-		node1.tree.swapNodes(node1, node2);
-
-		// nodes AFTER swap
-		dojo.event.topic.publish(this.eventNames.swap,
-			{ node1: node1, node2: node2 }
-		);
-
-	},
-
-	canSwapNodes: function(node1, node2) {
-		return true;
-	},
-
-	/* main command for node swaps, with remote call */
-	swapNodes: function(node1, node2, callback) {
-		if (!this.canSwapNodes(node1, node2)) {
-			return false;
-		}
-
-		return this.swapNodesRemote(node1, node2, callback);
-
-	},
-
-	// return false if local check failed
-	moveUp: function(node, callback) {
-
-		var prevNode = node.getLeftSibling();
-
-		if (!prevNode) return false;
-
-		return this.swapNodes(prevNode, node, callback);
-	},
-
-
-	// return false if local check failed
-	moveDown: function(node, callback) {
-
-		var nextNode = node.getRightSibling();
-
-		if (!nextNode) return false;
-
-		return this.swapNodes(nextNode, node, callback);
-	},
-
-
-	// -----------------------------------------------------------------------------
-	//                             Remove nodes stuff
-	// -----------------------------------------------------------------------------
-
-
-
-	canRemoveNode: function(node) {
-		return true;
-	},
-
-	removeNode: function(node, callback) {
-		if (!this.canRemoveNode(node)) {
-			return false;
-		}
-
-		return this.removeNodeRemote(node, callback);
-
-	},
-
-
-	removeNodeRemote: function(node, callback) {
-
-			var params = {
-				treeId: node.tree.widgetId,
-				nodeId: node.widgetId
-			}
-
-			dojo.io.bind({
-					url: this.getRPCUrl('removeNode'),
-					/* I hitch to get this.loadOkHandler */
-					load: dojo.lang.hitch(this, function(type, obj) {
-						this.removeNodeProcessResponse(node, callback, obj) }
-					),
-					error: dojo.lang.hitch(this, this.RPCErrorHandler),
-					mimetype: "text/json",
-					preventCache: true,
-					content: params
-			});
-
-	},
-
-	removeNodeProcessResponse: function(node, callback, result) {
-		if (result == true) {
-			/* change parent succeeded */
-			this.doRemoveNode(node, node);
-			if (callback) {
-				// provide context manually e.g with dojo.lang.hitch.
-				callback.apply(this, [node]);
-			}
-
-			return true;
-		}
-		else if (dojo.lang.isObject(result)) {
-			dojo.raise(result.error);
-		}
-		else {
-			dojo.raise("Invalid response "+obj)
-		}
-
-
-	},
-
-
-	/* node swapping requires remote checks. This function does the real job only w/o any checks */
-	doRemoveNode: function(node) {
-		/* publish many events here about structural changes */
-
-		if (node.tree.selector.selectedNode === node) {
-			this.deselect(node);
-		}
-
-		this.unregisterDNDNode(node);
-
-		removed_node = node.tree.removeChild(node);
-
-		// nodes AFTER swap
-		dojo.event.topic.publish(this.eventNames.remove,
-			{ node: removed_node }
-		);
-
-	},
-
-
-	// -----------------------------------------------------------------------------
-	//                             Create node stuff
-	// -----------------------------------------------------------------------------
-
-
-
-
-	canCreateNode: function(parent, index, data) {
-		if (!parent.isFolder) return false;
-
-		return true;
-	},
-
-
-	/* send data to server and add child from server */
-	/* data may contain an almost ready child, or anything else, suggested to server */
-	/* server responds with child data to be inserted */
-	createNode: function(parent, index, data, callback) {
-		if (!this.canCreateNode(parent, index, data)) {
-			return false;
-		}
-
-
-		/* load nodes into newParent in sync mode, if needed, first */
-		if (parent.state == parent.loadStates.UNCHECKED) {
-			this.loadRemote(parent, true);
-		}
-
-
-		return this.createNodeRemote(parent, index, data, callback);
-
-	},
-
-
-	createNodeRemote: function(parent, index, data, callback) {
-
-			var params = {
-				treeId: parent.tree.widgetId,
-				parentId: parent.widgetId,
-				index: index,
-				data: dojo.json.serialize(data)
-			}
-
-			dojo.io.bind({
-					url: this.getRPCUrl('createNode'),
-					/* I hitch to get this.loadOkHandler */
-					load: dojo.lang.hitch(this, function(type, obj) {
-						this.createNodeProcessResponse(parent, index, data, callback, obj) }
-					),
-					error: dojo.lang.hitch(this, this.RPCErrorHandler),
-					mimetype: "text/json",
-					preventCache: true,
-					content: params
-			});
-
-	},
-
-	createNodeProcessResponse: function(parent, index, data, callback, response) {
-
-		if (parent.widgetType != 'EditorTreeNode') {
-			dojo.raise("Can only add children to EditorTreeNode")
-		}
-
-		if (!dojo.lang.isObject(response)) {
-			dojo.raise("Invalid response "+response)
-		}
-		if (!dojo.lang.isUndefined(response.error)) {
-			dojo.raise(response.error);
-		}
-
-
-		this.doCreateNode(parent, index, response);
-
-		if (callback) {
-			// provide context manually e.g with dojo.lang.hitch.
-			callback.apply(this, [parent, index, response]);
-		}
-
-	},
-
-
-	doCreateNode: function(parent, index, child) {
-
-		var newChild = dojo.widget.createWidget("EditorTreeNode", child);
-
-		parent.addChild(newChild, index);
-
-		this.expand(parent);
-	}
-
-
-});
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeNode.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeNode.js
deleted file mode 100644
index 93fc63d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeNode.js
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.EditorTreeNode");
-
-dojo.require("dojo.event.*");
-dojo.require("dojo.dnd.*");
-dojo.require("dojo.fx.html");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.Container");
-dojo.require("dojo.widget.Tree");
-
-// make it a tag
-dojo.widget.tags.addParseTreeHandler("dojo:EditorTreeNode");
-
-
-dojo.widget.EditorTreeNode = function() {
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.EditorTreeNode, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.EditorTreeNode, {
-	widgetType: "EditorTreeNode",
-
-	loadStates: {
-		UNCHECKED: 1,
-    	LOADING: 2,
-    	LOADED: 3
-	},
-
-
-	isContainer: true,
-
-	domNode: null,
-	continerNode: null,
-
-	templateString: '<div class="dojoTreeNode"><div dojoAttachPoint="containerNode"></div></div>',
-
-	//childIconSrc: null,
-	childIconSrc: null,
-	childIconFolderSrc: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/closed.gif").toString(), // for under root parent item child icon,
-	childIconDocumentSrc: dojo.uri.dojoUri("src/widget/templates/images/EditorTree/document.gif").toString(), // for under root parent item child icon,
-
-	childIcon: null,
-
-	// an icon left from childIcon: imgs[-2].
-	// if +/- for folders, blank for leaves
-	expandIcon: null,
-
-	title: "",
-	isFolder: "",
-
-	labelNode: null, // the item label
-	titleNode: null, // the item title
-	imgs: null, // an array of icons imgs
-	rowNode: null, // the tr
-
-	tree: null,
-	parentNode: null,
-	depth: 0,
-
-	isFirstNode: false,
-	isLastNode: false,
-	isExpanded: false,
-	booted: false,
-	state: null,  // after creation will change to loadStates: "loaded/loading/unchecked"
-	domNodeInitialized: false,  // domnode is initialized with icons etc
-
-
-	initialize: function(args, frag){
-		this.state = this.loadStates.UNCHECKED
-		//this.domNode.treeNode = this; // domNode knows about its treeNode owner. E.g for DnD
-	},
-
-	/**
-	 * Change visible node depth by appending/prepending with blankImgs
-	 * @param depthDiff Integer positive => move right, negative => move left
-	*/
-	adjustDepth: function(depthDiff) {
-
-		for(var i=0; i<this.children.length; i++) {
-			this.children[i].adjustDepth(depthDiff);
-		}
-
-		this.depth += depthDiff;
-
-		if (depthDiff>0) {
-			for(var i=0; i<depthDiff; i++) {
-				var img = this.tree.makeBlankImg();
-				this.imgs.unshift(img);
-				//dojo.debugShallow(this.domNode);
-				this.domNode.insertBefore(this.imgs[0], this.domNode.firstChild);
-
-			}
-		}
-		if (depthDiff<0) {
-			for(var i=0; i<-depthDiff;i++) {
-				this.imgs.shift();
-				this.domNode.removeChild(this.domNode.firstChild);
-			}
-		}
-
-	},
-
-
-	markLoading: function() {
-		this.expandIcon.src = this.tree.expandIconSrcLoading;
-//		this.expandIcon.src = this.tree.expandIconSrcMinus;
-
-	},
-
-
-
-
-	buildNode: function(tree, depth){
-
-		this.tree = tree;
-		this.depth = depth;
-
-		// node with children(from source html) becomes folder on build stage.
-		if (this.children.length) {
-			this.isFolder = true;
-		}
-		//
-		// add the tree icons
-		//
-
-		this.imgs = [];
-
-		for(var i=0; i<this.depth+1; i++){
-
-			var img = this.tree.makeBlankImg();
-
-			this.domNode.insertBefore(img, this.containerNode);
-
-			this.imgs.push(img);
-		}
-
-
-		this.expandIcon = this.imgs[this.imgs.length-1];
-
-
-		//
-		// add the cell label
-		//
-
-
-		this.labelNode = document.createElement('span');
-		this.labelNode.treeNode = this.widgetId; // link label node w/ real treeNode object(w/ self)
-		dojo.html.addClass(this.labelNode, 'dojoTreeNodeLabel');
-
-		// add child icon to label
-		this.childIcon = this.tree.makeBlankImg();
-		//this.childIcon.treeNode = this.widgetId;
-
-		// add to images before the title
-		this.imgs.push(this.childIcon);
-
-		this.labelNode.appendChild(this.childIcon);
-
-		// add title to label
-		this.titleNode = document.createElement('span');
-		//this.titleNode.treeNode = this.widgetId;
-
-		var textNode = document.createTextNode(this.title);
-		this.titleNode.appendChild(textNode);
-
-
-		this.labelNode.appendChild(this.titleNode);
-
-		this.domNode.insertBefore(this.labelNode, this.containerNode);
-
-		dojo.html.addClass(this.titleNode, 'dojoTreeNodeLabelTitle');
-
-
-		if (this.isFolder) {
-			dojo.event.connect(this.expandIcon, 'onclick', this, 'onTreeClick');
-		}
-		dojo.event.connect(this.childIcon, 'onclick', this, 'onIconClick');
-		dojo.event.connect(this.titleNode, 'onclick', this, 'onTitleClick');
-
-
-		//
-		// create the child rows
-		//
-
-
-		for(var i=0; i<this.children.length; i++){
-
-			this.children[i].isFirstNode = (i == 0) ? true : false;
-			this.children[i].isLastNode = (i == this.children.length-1) ? true : false;
-			this.children[i].parentNode = this;
-
-			var node = this.children[i].buildNode(this.tree, this.depth+1);
-
-			this.containerNode.appendChild(node);
-		}
-
-
-		if (this.children.length) {
-			this.state = this.loadStates.LOADED;
-		}
-
-		this.collapse();
-
-		this.domNodeInitialized = true;
-
-		dojo.event.topic.publish(this.tree.eventNames.nodeCreate, { source: this } );
-
-		return this.domNode;
-	},
-
-	onTreeClick: function(e){
-		dojo.event.topic.publish(this.tree.eventNames.treeClick, { source: this, event: e });
-	},
-
-	onIconClick: function(e){
-		dojo.event.topic.publish(this.tree.eventNames.iconClick, { source: this, event: e });
-	},
-
-	onTitleClick: function(e){
-		dojo.event.topic.publish(this.tree.eventNames.titleClick, { source: this, event: e });
-	},
-
-	markSelected: function() {
-		dojo.html.addClass(this.titleNode, 'dojoTreeNodeLabelSelected');
-	},
-
-
-	unMarkSelected: function() {
-		//dojo.debug('unmark')
-		dojo.html.removeClass(this.titleNode, 'dojoTreeNodeLabelSelected');
-	},
-
-	updateIcons: function(){
-
-		//dojo.debug("Update icons for "+this.title)
-		//dojo.debug(this.isFolder)
-
-		this.imgs[0].style.display = this.tree.showRootGrid ? 'inline' : 'none';
-
-
-		//
-		// set the expand icon
-		//
-
-		if (this.isFolder){
-			this.expandIcon.src = this.isExpanded ? this.tree.expandIconSrcMinus : this.tree.expandIconSrcPlus;
-		}else{
-			this.expandIcon.src = this.tree.blankIconSrc;
-		}
-
-		//
-		// set the child icon
-		//
-		this.buildChildIcon();
-
-
-		//
-		// set the grid under the expand icon
-		//
-
-		if (this.tree.showGrid){
-			if (this.depth){
-				this.setGridImage(-2, this.isLastNode ? this.tree.gridIconSrcL : this.tree.gridIconSrcT);
-			}else{
-				if (this.isFirstNode){
-					this.setGridImage(-2, this.isLastNode ? this.tree.gridIconSrcX : this.tree.gridIconSrcY);
-				}else{
-					this.setGridImage(-2, this.isLastNode ? this.tree.gridIconSrcL : this.tree.gridIconSrcT);
-				}
-			}
-		}else{
-			this.setGridImage(-2, this.tree.blankIconSrc);
-		}
-
-
-
-		//
-		// set the grid under the child icon
-		//
-
-		if ((this.depth || this.tree.showRootGrid) && this.tree.showGrid){
-			this.setGridImage(-1, (this.children.length && this.isExpanded) ? this.tree.gridIconSrcP : this.tree.gridIconSrcC);
-		}else{
-			if (this.tree.showGrid && !this.tree.showRootGrid){
-				this.setGridImage(-1, (this.children.length && this.isExpanded) ? this.tree.gridIconSrcZ : this.tree.blankIconSrc);
-			}else{
-				this.setGridImage(-1, this.tree.blankIconSrc);
-			}
-		}
-
-
-		//
-		// set the vertical grid icons
-		//
-
-		var parent = this.parentNode;
-
-		for(var i=0; i<this.depth; i++){
-
-			var idx = this.imgs.length-(3+i);
-
-			this.setGridImage(
-				idx,
-				(this.tree.showGrid && !parent.isLastNode) ? this.tree.gridIconSrcV : this.tree.blankIconSrc
-			);
-
-			parent = parent.parentNode;
-		}
-	},
-
-	buildChildIcon: function() {
-		/* no child icon */
-		if (this.childIconSrc == "none") {
-			this.childIcon.style.display = 'none';
-			return;
-		}
-
-		/* assign default icon if not set */
-		if (!this.childIconSrc) {
-			if (this.isFolder){
-				this.childIconSrc = this.childIconFolderSrc;
-			}
-			else {
-				this.childIconSrc = this.childIconDocumentSrc;
-			}
-		}
-
-		this.childIcon.style.display = 'inline';
-		this.childIcon.src = this.childIconSrc;
-	},
-
-	setGridImage: function(idx, src){
-
-		if (idx < 0){
-			idx = this.imgs.length + idx;
-		}
-
-		//if (idx >= this.imgs.length-2) return;
-		this.imgs[idx].style.backgroundImage = 'url(' + src + ')';
-	},
-
-
-	updateIconTree: function(){
-		this.tree.updateIconTree.call(this);
-	},
-
-
-
-	expand: function(){
-
-		if (this.children.length) this.showChildren();
-		this.isExpanded = true;
-
-		this.updateIcons();
-	},
-
-	collapse: function(){
-		this.hideChildren();
-		this.isExpanded = false;
-		this.updateIcons();
-	},
-
-	hideChildren: function(){
-
-		if (this.booted){
-			this.tree.toggler.hide(this.containerNode);
-		}else{
-			this.containerNode.style.display = 'none';
-		}
-	},
-
-	showChildren: function(){
-		if (this.booted){
-			this.tree.toggler.show(this.containerNode);
-		}
-		else {
-			this.containerNode.style.display = 'block';
-
-		}
-	},
-
-	startMe: function(){
-
-		this.booted = true;
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].startMe();
-		}
-	},
-
-	addChild: function(){
-		return this.tree.addChild.apply(this, arguments);
-	},
-
-	removeChild: function(){
-		return this.tree.removeChild.apply(this, arguments);
-	},
-
-
-	getLeftSibling: function() {
-		var idx = this.getParentIndex();
-
-		 // first node is idx=0 not found is idx<0
-		if (idx<=0) return null;
-
-		return this.getSiblings()[idx-1];
-	},
-
-	getSiblings: function() {
-		return this.parentNode.children;
-	},
-
-	getParentIndex: function() {
-		return dojo.lang.indexOf( this.getSiblings(), this, true);
-	},
-
-	getRightSibling: function() {
-
-		var idx = this.getParentIndex();
-
-		if (idx == this.getSiblings().length-1) return null; // last node
-		if (idx < 0) return null; // not found
-
-		return this.getSiblings()[idx+1];
-
-	},
-
-	/* Edit current node : change properties and update contents */
-	edit: function(props) {
-		dojo.lang.mixin(this, props);
-		if (props.title) {
-			var textNode = document.createTextNode(this.title);
-			this.titleNode.replaceChild(textNode, this.titleNode.firstChild)
-		}
-
-		if (props.childIconSrc) {
-			this.childIcon.src = this.childIconSrc;
-		}
-	}
-
-});
-
-
-
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeSelector.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeSelector.js
deleted file mode 100644
index d271201..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/EditorTreeSelector.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-
-dojo.provide("dojo.widget.EditorTreeSelector");
-
-dojo.require("dojo.widget.Container");
-dojo.require("dojo.widget.Tree");
-
-dojo.widget.tags.addParseTreeHandler("dojo:EditorTreeSelector");
-
-
-dojo.widget.EditorTreeSelector = function() {
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.EditorTreeSelector, dojo.widget.HtmlWidget);
-
-
-dojo.lang.extend(dojo.widget.EditorTreeSelector, {
-	widgetType: "EditorTreeSelector",
-	selectedNode: null
-
-});
-
-
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/FisheyeList.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/FisheyeList.js
deleted file mode 100644
index 9528f52..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/FisheyeList.js
+++ /dev/null
@@ -1,742 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.FisheyeList");
-dojo.provide("dojo.widget.html.FisheyeList");
-dojo.provide("dojo.widget.html.FisheyeListItem");
-
-//
-// TODO
-// fix SVG support, and turn it on only if the browser supports it
-// fix really long labels in vertical mode
-//
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.Container");
-dojo.require("dojo.dom");
-dojo.require("dojo.html");
-dojo.require("dojo.style");
-dojo.require("dojo.event");
-
-dojo.widget.tags.addParseTreeHandler("dojo:FisheyeList");
-dojo.widget.tags.addParseTreeHandler("dojo:FisheyeListItem");
-
-dojo.widget.html.FisheyeList = function(){
-	dojo.widget.html.Container.call(this);
-}
-dojo.inherits(dojo.widget.html.FisheyeList, dojo.widget.html.Container);
-
-dojo.lang.extend(dojo.widget.html.FisheyeList, {
-
-	templateString: '<div class="dojoHtmlFisheyeListBar"></div>',
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlFisheyeList.css"),
-	widgetType: "FisheyeList",
-
-	EDGE: {
-		CENTER: 0,
-		LEFT: 1,
-		RIGHT: 2,
-		TOP: 3,
-		BOTTOM: 4
-	},
-
-	snarfChildDomOutput: true,
-	
-	pos: {x: -1, y: -1},		// current cursor position, relative to the grid
-	
-	// for conservative trigger mode, when triggered, timerScale is gradually increased from 0 to 1
-	timerScale: 1.0,
-
-	/////////////////////////////////////////////////////////////////
-	//
-	// i spy OPTIONS!!!!
-	//
-
-	itemWidth: 40,
-	itemHeight: 40,
-
-	itemMaxWidth: 150,
-	itemMaxHeight: 150,
-
-	orientation: 'horizontal',
-	
-	conservativeTrigger: false,		// don't active menu until mouse is over an image (macintosh style)
-
-	effectUnits: 2,
-	itemPadding: 10,
-
-	attachEdge: 'center',
-	labelEdge: 'bottom',
-
-	enableCrappySvgSupport: false,
-
-
-	//
-	//
-	//
-	/////////////////////////////////////////////////////////////////
-
-	fillInTemplate: function(args, frag) {
-		//dojo.debug(this.orientation);
-
-		dojo.html.disableSelection(this.domNode);
-
-		this.isHorizontal = (this.orientation == 'horizontal') ? 1 : 0;
-		this.selectedNode = -1;
-
-		this.isOver = false;
-		this.hitX1 = -1;
-		this.hitY1 = -1;
-		this.hitX2 = -1;
-		this.hitY2 = -1;
-
-		//
-		// only some edges make sense...
-		//
-
-		this.anchorEdge = this.toEdge(this.attachEdge, this.EDGE.CENTER);
-		this.labelEdge  = this.toEdge(this.labelEdge,  this.EDGE.TOP);
-
-		if ( this.isHorizontal && (this.anchorEdge == this.EDGE.LEFT  )){ this.anchorEdge = this.EDGE.CENTER; }
-		if ( this.isHorizontal && (this.anchorEdge == this.EDGE.RIGHT )){ this.anchorEdge = this.EDGE.CENTER; }
-		if (!this.isHorizontal && (this.anchorEdge == this.EDGE.TOP   )){ this.anchorEdge = this.EDGE.CENTER; }
-		if (!this.isHorizontal && (this.anchorEdge == this.EDGE.BOTTOM)){ this.anchorEdge = this.EDGE.CENTER; }
-
-		if (this.labelEdge == this.EDGE.CENTER){ this.labelEdge = this.EDGE.TOP; }
-		if ( this.isHorizontal && (this.labelEdge == this.EDGE.LEFT  )){ this.labelEdge = this.EDGE.TOP; }
-		if ( this.isHorizontal && (this.labelEdge == this.EDGE.RIGHT )){ this.labelEdge = this.EDGE.TOP; }
-		if (!this.isHorizontal && (this.labelEdge == this.EDGE.TOP   )){ this.labelEdge = this.EDGE.LEFT; }
-		if (!this.isHorizontal && (this.labelEdge == this.EDGE.BOTTOM)){ this.labelEdge = this.EDGE.LEFT; }
-
-
-		//
-		// figure out the proximity size
-		//
-
-		this.proximityLeft   = this.itemWidth  * (this.effectUnits - 0.5);
-		this.proximityRight  = this.itemWidth  * (this.effectUnits - 0.5);
-		this.proximityTop    = this.itemHeight * (this.effectUnits - 0.5);
-		this.proximityBottom = this.itemHeight * (this.effectUnits - 0.5);
-
-		if (this.anchorEdge == this.EDGE.LEFT){
-			this.proximityLeft = 0;
-		}
-		if (this.anchorEdge == this.EDGE.RIGHT){
-			this.proximityRight = 0;
-		}
-		if (this.anchorEdge == this.EDGE.TOP){
-			this.proximityTop = 0;
-		}
-		if (this.anchorEdge == this.EDGE.BOTTOM){
-			this.proximityBottom = 0;
-		}
-		if (this.anchorEdge == this.EDGE.CENTER){
-			this.proximityLeft   /= 2;
-			this.proximityRight  /= 2;
-			this.proximityTop    /= 2;
-			this.proximityBottom /= 2;
-		}
-	},
-	
-	postCreate: function(args, frag) {
-
-		this.itemCount = this.children.length;
-
-		this.barWidth  = (this.isHorizontal ? this.itemCount : 1) * this.itemWidth;
-		this.barHeight = (this.isHorizontal ? 1 : this.itemCount) * this.itemHeight;
-
-		this.totalWidth  = this.proximityLeft + this.proximityRight  + this.barWidth;
-		this.totalHeight = this.proximityTop  + this.proximityBottom + this.barHeight;
-
-		//
-		// calculate effect ranges for each item
-		//
-
-		for (var i=0; i<this.children.length; i++){
-
-			this.children[i].posX = this.itemWidth  * (this.isHorizontal ? i : 0);
-			this.children[i].posY = this.itemHeight * (this.isHorizontal ? 0 : i);
-
-			this.children[i].cenX = this.children[i].posX + (this.itemWidth  / 2);
-			this.children[i].cenY = this.children[i].posY + (this.itemHeight / 2);
-
-			var isz = this.isHorizontal ? this.itemWidth : this.itemHeight;
-			var r = this.effectUnits * isz;
-			var c = this.isHorizontal ? this.children[i].cenX : this.children[i].cenY;
-			var lhs = this.isHorizontal ? this.proximityLeft : this.proximityTop;
-			var rhs = this.isHorizontal ? this.proximityRight : this.proximityBottom;
-			var siz = this.isHorizontal ? this.barWidth : this.barHeight;
-
-			var range_lhs = r;
-			var range_rhs = r;
-
-			if (range_lhs > c+lhs){ range_lhs = c+lhs; }
-			if (range_rhs > (siz-c+rhs)){ range_rhs = siz-c+rhs; }
-
-			this.children[i].effectRangeLeft = range_lhs / isz;
-			this.children[i].effectRangeRght = range_rhs / isz;
-
-			//dojo.debug('effect range for '+i+' is '+range_lhs+'/'+range_rhs);
-		}
-
-
-		//
-		// create the bar
-		//
-
-		this.domNode.style.width = this.barWidth + 'px';
-		this.domNode.style.height = this.barHeight + 'px';
-
-
-		//
-		// position the items
-		//
-		for (var i=0; i<this.children.length; i++){
-			var itm = this.children[i];
-			var elm = itm.domNode;
-			elm.style.left   = itm.posX + 'px';
-			elm.style.top    = itm.posY + 'px';
-			elm.style.width  = this.itemWidth + 'px';
-			elm.style.height = this.itemHeight + 'px';
-			
-			if ( itm.svgNode ) {
-				itm.svgNode.style.position = 'absolute';
-				itm.svgNode.style.left = this.itemPadding+'%';
-				itm.svgNode.style.top = this.itemPadding+'%';
-				itm.svgNode.style.width = (100 - 2 * this.itemPadding) + '%';
-				itm.svgNode.style.height = (100 - 2 * this.itemPadding) + '%';
-				itm.svgNode.style.zIndex = 1;
-	
-				itm.svgNode.setSize(this.itemWidth, this.itemHeight);
-			} else {
-				itm.imgNode.style.left = this.itemPadding+'%';
-				itm.imgNode.style.top = this.itemPadding+'%';
-				itm.imgNode.style.width = (100 - 2 * this.itemPadding) + '%';
-				itm.imgNode.style.height = (100 - 2 * this.itemPadding) + '%';
-			}
-		}
-
-		//
-		// calc the grid
-		//
-
-		this.calcHitGrid();
-
-		//
-		// in liberal trigger mode, activate menu whenever mouse is close
-		//
-		if( !this.conservativeTrigger ){
-			dojo.event.connect(document.documentElement, "onmousemove", this, "mouseHandler");
-		}
-		
-		// Deactivate the menu if mouse is moved off screen (doesn't work for FF?)
-		dojo.event.connect(document.documentElement, "onmouseout", this, "onBodyOut");
-	},
-
-	onBodyOut: function(e){
-		// clicking over an object inside of body causes this event to fire; ignore that case
-		if( dojo.html.overElement(dojo.html.body(), e) ){
-			return;
-		}
-		this.setDormant(e);
-	},
-
-	// when mouse moves out of menu's range
-	setDormant: function(e){
-		if( !this.isOver ){ return; }	// already dormant?
-		this.isOver = false;
-
-		if ( this.conservativeTrigger ) {
-			// user can't re-trigger the menu expansion
-			// until he mouses over a icon again
-			dojo.event.disconnect(document.documentElement, "onmousemove", this, "mouseHandler");
-		}
-		this.onGridMouseMove(-1, -1);
-	},
-
-	// when mouse is moved into menu's range
-	setActive: function(e){
-		if( this.isOver ){ return; }	// already activated?
-		this.isOver = true;
-
-		if ( this.conservativeTrigger ) {
-			// switch event handlers so that we handle mouse events from anywhere near
-			// the menu
-			dojo.event.connect(document.documentElement, "onmousemove", this, "mouseHandler");
-
-			this.timerScale=0.0;
-
-			// call mouse handler to do some initial necessary calculations/positioning
-			this.mouseHandler(e);
-
-			// slowly expand the icon size so it isn't jumpy
-			this.expandSlowly();
-		}
-	},
-
-	// when mouse is moved
-	mouseHandler: function(e) {
-		var p = this.getCursorPos(e);
-
-		if ((p.x >= this.hitX1) && (p.x <= this.hitX2) &&
-			(p.y >= this.hitY1) && (p.y <= this.hitY2)){
-			if( !this.isOver ){
-				this.setActive(e);
-			}
-			this.onGridMouseMove(p.x-this.hitX1, p.y-this.hitY1);
-		}else{
-			if (this.isOver){
-				this.setDormant(e);
-			}
-		}
-	},
-
-	onResized: function() {
-		this.calcHitGrid();
-	},
-
-	onGridMouseMove: function(x, y){
-		this.pos = {x:x, y:y};
-		this.paint();
-	},
-	
-	paint: function(){
-		var x=this.pos.x;
-		var y=this.pos.y;
-
-		if( this.itemCount <= 0 ){ return; }
-
-		//
-		// figure out our main index
-		//
-
-		var pos = this.isHorizontal ? x : y;
-		var prx = this.isHorizontal ? this.proximityLeft : this.proximityTop;
-		var siz = this.isHorizontal ? this.itemWidth : this.itemHeight;
-		var sim = this.isHorizontal ? 
-			(1.0-this.timerScale)*this.itemWidth + this.timerScale*this.itemMaxWidth :
-			(1.0-this.timerScale)*this.itemHeight + this.timerScale*this.itemMaxHeight ;
-
-		var cen = ((pos - prx) / siz) - 0.5;
-		var max_off_cen = (sim / siz) - 0.5;
-
-		if (max_off_cen > this.effectUnits){ max_off_cen = this.effectUnits; }
-
-
-		//
-		// figure out our off-axis weighting
-		//
-
-		var off_weight = 0;
-
-		if (this.anchorEdge == this.EDGE.BOTTOM){
-			var cen2 = (y - this.proximityTop) / this.itemHeight;
-			off_weight = (cen2 > 0.5) ? 1 : y / (this.proximityTop + (this.itemHeight / 2));
-		}
-		if (this.anchorEdge == this.EDGE.TOP){
-			var cen2 = (y - this.proximityTop) / this.itemHeight;
-			off_weight = (cen2 < 0.5) ? 1 : (this.totalHeight - y) / (this.proximityBottom + (this.itemHeight / 2));
-		}
-		if (this.anchorEdge == this.EDGE.RIGHT){
-			var cen2 = (x - this.proximityLeft) / this.itemWidth;
-			off_weight = (cen2 > 0.5) ? 1 : x / (this.proximityLeft + (this.itemWidth / 2));
-		}
-		if (this.anchorEdge == this.EDGE.LEFT){
-			var cen2 = (x - this.proximityLeft) / this.itemWidth;
-			off_weight = (cen2 < 0.5) ? 1 : (this.totalWidth - x) / (this.proximityRight + (this.itemWidth / 2));
-		}
-		if (this.anchorEdge == this.EDGE.CENTER){
-
-			if (this.isHorizontal){
-				off_weight = y / (this.totalHeight);
-			}else{
-				off_weight = x / (this.totalWidth);
-			}
-
-			if (off_weight > 0.5){
-				off_weight = 1 - off_weight;
-			}
-
-			off_weight *= 2;
-		}
-
-
-		//
-		// set the sizes
-		//
-
-		for(var i=0; i<this.itemCount; i++){
-
-			var weight = this.weightAt(cen, i);
-
-			if (weight < 0){weight = 0;}
-
-			this.setitemsize(i, weight * off_weight);
-		}
-
-		//
-		// set the positions
-		//
-
-		var main_p = Math.round(cen);
-		var offset = 0;
-
-		if (cen < 0){
-			main_p = 0;
-
-		}else if (cen > this.itemCount - 1){
-
-			main_p = this.itemCount -1;
-
-		}else{
-
-			offset = (cen - main_p) * ((this.isHorizontal ? this.itemWidth : this.itemHeight) - this.children[main_p].sizeMain);
-		}
-
-		this.positionElementsFrom(main_p, offset);
-	},
-
-	weightAt: function(cen, i){
-
-		var dist = Math.abs(cen - i);
-
-		var limit = ((cen - i) > 0) ? this.children[i].effectRangeRght : this.children[i].effectRangeLeft;
-
-		return (dist > limit) ? 0 : (1 - dist / limit);
-	},
-
-	positionFromNode: function(p, w){
-
-		//
-		// we need to grow all the nodes growing out from node 'i'
-		//
-
-		this.setitemsize(p, w);
-
-		var wx = w;
-		for(var i=p; i<this.itemCount; i++){
-			wx = 0.8 * wx;
-			this.setitemsize(i, wx);
-		}
-
-		var wx = w;
-		for(var i=p; i>=0; i--){
-			wx = 0.8 * wx;
-			this.setitemsize(i, wx);
-		}
-	},
-
-	setitemsize: function(p, scale){
-		scale *= this.timerScale;
-		var w = Math.round(this.itemWidth  + ((this.itemMaxWidth  - this.itemWidth ) * scale));
-		var h = Math.round(this.itemHeight + ((this.itemMaxHeight - this.itemHeight) * scale));
-
-		if (this.isHorizontal){
-
-			this.children[p].sizeW = w;
-			this.children[p].sizeH = h;
-
-			this.children[p].sizeMain = w;
-			this.children[p].sizeOff  = h;
-
-			var y = 0;
-
-			if (this.anchorEdge == this.EDGE.TOP){
-
-				y = (this.children[p].cenY - (this.itemHeight / 2));
-
-			}else if (this.anchorEdge == this.EDGE.BOTTOM){
-
-				y = (this.children[p].cenY - (h - (this.itemHeight / 2)));
-
-			}else{
-
-				y = (this.children[p].cenY - (h / 2));
-			}
-
-			this.children[p].usualX = Math.round(this.children[p].cenX - (w / 2));
-			
-			this.children[p].domNode.style.top  = y + 'px';
-
-			this.children[p].domNode.style.left  = this.children[p].usualX + 'px';
-
-		}else{
-
-			this.children[p].sizeW = w;
-			this.children[p].sizeH = h;
-
-			this.children[p].sizeOff  = w;
-			this.children[p].sizeMain = h;
-
-			var x = 0;
-
-			if (this.anchorEdge == this.EDGE.LEFT){
-
-				x = this.children[p].cenX - (this.itemWidth / 2);
-
-			}else if (this.anchorEdge == this.EDGE.RIGHT){
-
-				x = this.children[p].cenX - (w - (this.itemWidth / 2));
-			}else{
-
-				x = this.children[p].cenX - (w / 2);
-			}
-
-			this.children[p].domNode.style.left = x + 'px';
-			this.children[p].usualY = Math.round(this.children[p].cenY - (h / 2));
-
-			this.children[p].domNode.style.top  = this.children[p].usualY + 'px';
-		}
-
-		this.children[p].domNode.style.width  = w + 'px';
-		this.children[p].domNode.style.height = h + 'px';
-
-		if (this.children[p].svgNode){
-			this.children[p].svgNode.setSize(w, h);
-		}
-	},
-
-	positionElementsFrom: function(p, offset){
-
-		var pos = 0;
-
-		if (this.isHorizontal){
-			pos = Math.round(this.children[p].usualX + offset);
-			this.children[p].domNode.style.left = pos + 'px';
-		}else{
-			pos = Math.round(this.children[p].usualY + offset);
-			this.children[p].domNode.style.top = pos + 'px';
-		}
-		this.positionLabel(this.children[p]);
-
-
-		//
-		// position before
-		//
-
-		var bpos = pos;
-
-		for(var i=p-1; i>=0; i--){
-
-			bpos -= this.children[i].sizeMain;
-
-			if (this.isHorizontal){
-				this.children[i].domNode.style.left = bpos + 'px';
-			}else{
-				this.children[i].domNode.style.top = bpos + 'px';
-			}
-			this.positionLabel(this.children[i]);
-		}
-
-		//
-		// position after
-		//
-
-		var apos = pos;
-
-		for(var i=p+1; i<this.itemCount; i++){
-
-			apos += this.children[i-1].sizeMain;
-
-			if (this.isHorizontal){
-				this.children[i].domNode.style.left = apos + 'px';
-			}else{
-				this.children[i].domNode.style.top = apos + 'px';
-			}
-			this.positionLabel(this.children[i]);
-		}
-
-	},
-
-	positionLabel: function(itm){
-
-		var x = 0;
-		var y = 0;
-		
-		var labelW = dojo.style.getOuterWidth(itm.lblNode);
-		var labelH = dojo.style.getOuterHeight(itm.lblNode);
-
-		if (this.labelEdge == this.EDGE.TOP){
-			x = Math.round((itm.sizeW / 2) - (labelW / 2));
-			y = -labelH;
-		}
-
-		if (this.labelEdge == this.EDGE.BOTTOM){
-			x = Math.round((itm.sizeW / 2) - (labelW / 2));
-			y = itm.sizeH;
-		}
-
-		if (this.labelEdge == this.EDGE.LEFT){
-			x = -labelW;
-			y = Math.round((itm.sizeH / 2) - (labelH / 2));
-		}
-
-		if (this.labelEdge == this.EDGE.RIGHT){
-			x = itm.sizeW;
-			y = Math.round((itm.sizeH / 2) - (labelH / 2));
-		}
-
-		itm.lblNode.style.left = x + 'px';
-		itm.lblNode.style.top  = y + 'px';
-	},
-
-	getCursorPos: function(e){
-		return {
-			'x': e.pageX || e.clientX + dojo.html.body().scrollLeft,
-			'y': e.pageY || e.clientY + dojo.html.body().scrollTop
-			};
-	},
-
-	calcHitGrid: function(){
-
-		var pos = dojo.style.getAbsolutePosition(this.domNode);
-
-		this.hitX1 = pos.x - this.proximityLeft;
-		this.hitY1 = pos.y - this.proximityTop;
-		this.hitX2 = this.hitX1 + this.totalWidth;
-		this.hitY2 = this.hitY1 + this.totalHeight;
-
-		//dojo.debug(this.hitX1+','+this.hitY1+' // '+this.hitX2+','+this.hitY2);
-	},
-
-	toEdge: function(inp, def){
-		return this.EDGE[inp.toUpperCase()] || def;
-	},
-	
-	// slowly expand the image to user specified max size
-	expandSlowly: function(){
-		if( !this.isOver ){ return; }
-		this.timerScale += 0.2;
-		this.paint();
-		if ( this.timerScale<1.0 ) {
-			dojo.lang.setTimeout(this, "expandSlowly", 10);
-		}
-	}
-
-});
-
-dojo.widget.html.FisheyeListItem = function(){
-	dojo.widget.HtmlWidget.call(this);
-}
-dojo.inherits(dojo.widget.html.FisheyeListItem, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.html.FisheyeListItem, {
-	widgetType: "FisheyeListItem",
-	
-	// Constructor arguments
-	iconSrc: "",
-	svgSrc: "",
-	caption: "",
-
-	blankImgPath: dojo.uri.dojoUri("src/widget/templates/images/blank.gif"),
-
-	templateString:
-		'<div class="dojoHtmlFisheyeListItem">' +
-		'  <img class="dojoHtmlFisheyeListItemImage" dojoAttachPoint="imgNode" dojoAttachEvent="onMouseOver;onMouseOut;onClick">' +
-		'  <div class="dojoHtmlFisheyeListItemLabel" dojoAttachPoint="lblNode"></div>' +
-		'</div>',
-	
-	imgNode: null,
-
-	fillInTemplate: function() {
-		//
-		// set image
-		// TODO: turn on/off SVG support based on browser version.
-		// this.parent.enableCrappySvgSupport is not available to this function
-		//
-		if (this.svgSrc != ""){
-			this.svgNode = this.createSvgNode(this.svgSrc);
-			this.domNode.appendChild(this.svgNode);
-			this.imgNode.style.display = 'none';
-		} else if((this.iconSrc.toLowerCase().substring(this.iconSrc.length-4)==".png")&&(dojo.render.html.ie)){
-			this.imgNode.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.iconSrc+"', sizingMethod='scale')";
-			this.imgNode.src = this.blankImgPath.toString();
-		} else {
-			this.imgNode.src = this.iconSrc;
-		}
-
-		//
-		// Label
-		//
-		if ( this.lblNode ) {
-			this.lblNode.appendChild(document.createTextNode(this.caption));
-		}
-		dojo.html.disableSelection(this.domNode);
-	},
-	
-	createSvgNode: function(src){
-
-		var elm = document.createElement('embed');
-		elm.src = src;
-		elm.type = 'image/svg+xml';
-		//elm.style.border = '1px solid black';
-		elm.style.width = '1px';
-		elm.style.height = '1px';
-		elm.loaded = 0;
-		elm.setSizeOnLoad = false;
-
-		elm.onload = function(){
-			this.svgRoot = this.getSVGDocument().rootElement;
-			this.svgDoc = this.getSVGDocument().documentElement;
-			this.zeroWidth = this.svgRoot.width.baseVal.value;
-			this.zeroHeight = this.svgRoot.height.baseVal.value;
-			this.loaded = true;
-
-			if (this.setSizeOnLoad){
-				this.setSize(this.setWidth, this.setHeight);
-			}
-		}
-
-		elm.setSize = function(w, h){
-			if (!this.loaded){
-				this.setWidth = w;
-				this.setHeight = h;
-				this.setSizeOnLoad = true;
-				return;
-			}
-
-			this.style.width = w+'px';
-			this.style.height = h+'px';
-			this.svgRoot.width.baseVal.value = w;
-			this.svgRoot.height.baseVal.value = h;
-
-			var scale_x = w / this.zeroWidth;
-			var scale_y = h / this.zeroHeight;
-
-			for(var i=0; i<this.svgDoc.childNodes.length; i++){
-				if (this.svgDoc.childNodes[i].setAttribute){
-					this.svgDoc.childNodes[i].setAttribute( "transform", "scale("+scale_x+","+scale_y+")" );
-				}
-			}
-		}
-
-		return elm;
-	},
-
-	onMouseOver: function(e) {
-		// in conservative mode, don't activate the menu until user mouses over an icon
-		if( !this.parent.isOver ){
-			this.parent.setActive(e);
-		}
-		if ( this.caption != "" ) {
-			dojo.html.addClass(this.lblNode, "selected");
-			this.parent.positionLabel(this);
-		}
-	},
-	
-	onMouseOut: function() {
-		dojo.html.removeClass(this.lblNode, "selected");
-	},
-
-	onClick: function() {
-	}
-});
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/FloatingPane.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/FloatingPane.js
deleted file mode 100644
index 2a165be..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/FloatingPane.js
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.FloatingPane");

-dojo.provide("dojo.widget.html.FloatingPane");

-

-//

-// this widget provides a window-like floating pane

-//

-

-dojo.require("dojo.widget.*");

-dojo.require("dojo.widget.Manager");

-dojo.require("dojo.html");

-dojo.require("dojo.style");

-dojo.require("dojo.dom");

-dojo.require("dojo.widget.ContentPane");

-dojo.require("dojo.widget.LayoutPane");

-dojo.require("dojo.dnd.HtmlDragMove");

-dojo.require("dojo.dnd.HtmlDragMoveSource");

-dojo.require("dojo.dnd.HtmlDragMoveObject");

-

-dojo.widget.html.FloatingPane = function(){

-	dojo.widget.html.LayoutPane.call(this);

-}

-

-dojo.inherits(dojo.widget.html.FloatingPane, dojo.widget.html.LayoutPane);

-

-dojo.lang.extend(dojo.widget.html.FloatingPane, {

-	widgetType: "FloatingPane",

-

-	// Constructor arguments

-	title: '',

-	iconSrc: '',

-	hasShadow: false,

-	constrainToContainer: false,

-	taskBarId: "",

-	resizable: true,	// note: if specified, user must include ResizeHandle

-	overflow: "",

-

-	resizable: false,

-	titleBarDisplay: "fancy",

-	titleHeight: 22,	// workaround to CSS loading race condition bug

-

-	href: "",

-	extractContent: true,

-	parseContent: true,

-	cacheContent: true,

-

-	// FloatingPane supports 3 modes for the client area (the part below the title bar)

-	//  default - client area  is a ContentPane, that can hold

-	//      either inlined data and/or data downloaded from a URL

-	//  layout - the client area is a layout pane

-	//  none - the user specifies a single widget which becomes the content pane

-	contentWrapper: "default",

-

-	containerNode: null,

-	domNode: null,

-	clientPane: null,

-	dragBar: null,

-

-	windowState: "normal",

-	displayCloseAction: false,

-

-	maxTaskBarConnectAttempts: 5,

-	taskBarConnectAttempts: 0,

-

-	minimizeIcon: dojo.uri.dojoUri("src/widget/templates/images/floatingPaneMinimize.gif"),

-	maximizeIcon: dojo.uri.dojoUri("src/widget/templates/images/floatingPaneMaximize.gif"),

-	restoreIcon: dojo.uri.dojoUri("src/widget/templates/images/floatingPaneRestore.gif"),

-	closeIcon: dojo.uri.dojoUri("src/widget/templates/images/floatingPaneClose.gif"),

-	titleBarBackground: dojo.uri.dojoUri("src/widget/templates/images/titlebar-bg.jpg"),

-

-	shadowPng: dojo.uri.dojoUri("src/widget/templates/images/shadow"),

-	shadowThickness: 8,

-	shadowOffset: 15,

-

-	templateString: '<div></div>',

-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlFloatingPane.css"),

-

-	initialized: false,

-

-	addChild: function(child, overrideContainerNode, pos, ref, insertIndex) {

-		this.clientPane.addChild(child, overrideContainerNode, pos, ref, insertIndex);

-	},

-

-	// make a widget container to hold all the contents of the floating pane (other than the

-	// title and the resize bar at the bottom)

-	_makeClientPane: function(clientDiv){

-		var args = {

-			layoutAlign: "client", 

-			id:this.widgetId+"_client",

-			href: this.href, 

-			cacheContent: this.cacheContent, 

-			extractContent: this.extractContent,

-			parseContent: this.parseContent

-		};

-		var pane = this._createPane(this.contentWrapper=="layout"?"LayoutPane":"ContentPane", clientDiv, args);

-		return pane;

-	},

-

-	fillInTemplate: function(args, frag){

-		var source = this.getFragNodeRef(frag);

-

-		// Copy style info and id from input node to output node

-		this.domNode.style.cssText = source.style.cssText;

-		dojo.html.addClass(this.domNode, dojo.html.getClass(source));

-		dojo.html.addClass(this.domNode, "dojoFloatingPane");

-		this.domNode.style.position="absolute";

-		this.domNode.id = source.id;

-		if(dojo.render.html.safari){

-			dojo.html.body().appendChild(this.domNode);

-		}

-

-		// make client pane wrapper to hold the contents of this floating pane

-		if(this.contentWrapper!="none"){

-			var clientDiv = document.createElement('div');

-			dojo.dom.moveChildren(source, clientDiv, 0);

-			this.clientPane = this._makeClientPane(clientDiv);

-		}

-		

-		if (this.titleBarDisplay != "none") {

-			// this is our chrome

-			var chromeDiv = document.createElement('div');

-			dojo.html.addClass(chromeDiv, 'dojoFloatingPaneDragbar');

-			chromeDiv.style.height=this.titleHeight+"px";	// workaround CSS loading race condition bug

-			

-			this.dragBar = this._createPane("LayoutPane", chromeDiv, {layoutAlign: 'top', id:this.widgetId+"_chrome"});

-			dojo.html.disableSelection(this.dragBar.domNode);

-

-			if( this.titleBarDisplay == "fancy"){

-				// image background to get gradient

-				var img = document.createElement('img');

-				img.src = this.titleBarBackground;

-				dojo.html.addClass(img, 'dojoFloatingPaneDragbarBackground');

-				var backgroundPane = dojo.widget.createWidget("ContentPane", {layoutAlign:"flood", id:this.widgetId+"_titleBackground"}, img);

-				this.dragBar.addChild(backgroundPane);

-			}

-

-			//Title Bar

-			var titleBar = document.createElement('div');

-			dojo.html.addClass(titleBar, "dojoFloatingPaneTitleBar");

-			dojo.html.disableSelection(titleBar);

-

-			//TitleBarActions

-			var titleBarActions = document.createElement('div');

-			dojo.html.addClass(titleBarActions, "dojoFloatingPaneActions");

-

-			//Title Icon

-			if(this.iconSrc!=""){

-				var titleIcon = document.createElement('img');

-				dojo.html.addClass(titleIcon,"dojoTitleBarIcon");

-				titleIcon.src = this.iconSrc;						

-				titleBar.appendChild(titleIcon);

-			}

-

-			//Title text  

-			var titleText = document.createTextNode(this.title)

-			titleBar.appendChild(titleText);

-

-			if (this.resizable) {

-

-				//FloatingPane Action Minimize

-				this.minimizeAction = document.createElement("img");

-				dojo.html.addClass(this.minimizeAction, "dojoFloatingPaneActionItem");

-				this.minimizeAction.src = this.minimizeIcon;	

-				titleBarActions.appendChild(this.minimizeAction);

-				dojo.event.connect(this.minimizeAction, 'onclick', this, 'minimizeWindow');

-

-				//FloatingPane Action Restore

-				this.restoreAction = document.createElement("img");

-				dojo.html.addClass(this.restoreAction, "dojoFloatingPaneActionItem");

-				this.restoreAction.src = this.restoreIcon;	

-				titleBarActions.appendChild(this.restoreAction);

-				dojo.event.connect(this.restoreAction, 'onclick', this, 'restoreWindow');

-

-				if (this.windowState != "normal") {

-					this.restoreAction.style.display="inline";

-				} else {

-					this.restoreAction.style.display="none";

-				}

-

-				//FloatingPane Action Maximize

-				this.maximizeAction = document.createElement("img");

-				dojo.html.addClass(this.maximizeAction, "dojoFloatingPaneActionItem");

-				this.maximizeAction.src = this.maximizeIcon;	

-				titleBarActions.appendChild(this.maximizeAction);

-				dojo.event.connect(this.maximizeAction, 'onclick', this, 'maximizeWindow');

-

-				if (this.windowState != "maximized") {

-					this.maximizeAction.style.display="inline";	

-				} else {

-					this.maximizeAction.style.display="none";	

-				}	

-

-			}

-

-			if (this.displayCloseAction) {

-				//FloatingPane Action Close

-				var closeAction= document.createElement("img");

-				dojo.html.addClass(closeAction, "dojoFloatingPaneActionItem");

-				closeAction.src = this.closeIcon;	

-				titleBarActions.appendChild(closeAction);

-				dojo.event.connect(closeAction, 'onclick', this, 'closeWindow');

-			}

-

-

-			chromeDiv.appendChild(titleBar);

-			chromeDiv.appendChild(titleBarActions);

-		}

-

-		if ( this.resizable ) {

-			// add the resize handle

-			var resizeDiv = document.createElement('div');

-			dojo.html.addClass(resizeDiv, "dojoFloatingPaneResizebar");

-			dojo.html.disableSelection(resizeDiv);

-			var rh = dojo.widget.createWidget("ResizeHandle", {targetElmId: this.widgetId, id:this.widgetId+"_resize"});

-			this.resizePane = this._createPane("ContentPane", resizeDiv, {layoutAlign: "bottom"});

-			this.resizePane.addChild(rh);

-		}

-

-		// add a drop shadow

-		this._makeShadow();

-

-		dojo.event.connect(this.domNode, 'onmousedown', this, 'onMouseDown');

-

-		// Prevent IE bleed-through problem

-		this.bgIframe = new dojo.html.BackgroundIframe();

-		if( this.bgIframe.iframe ){

-			this.domNode.appendChild(this.bgIframe.iframe);

-		}

-		if ( this.isVisible() ) {

-			this.bgIframe.show();

-		};

-

-		if( this.taskBarId ){

-			this.taskBarSetup();

-		}

-

-		if (dojo.hostenv.post_load_) {

-			this.setInitialWindowState();

-		} else {

-			dojo.addOnLoad(this, "setInitialWindowState");

-		}

-		if(dojo.render.html.safari){

-			dojo.html.body().removeChild(this.domNode);

-		}

-

-		dojo.widget.html.FloatingPane.superclass.postCreate.call(this, args, frag);

-	},

-

-	postCreate: function(args, frag){

-		// Make the client pane.  It will either be the widget specified by the user,

-		// or a wrapper widget

-		if(this.contentWrapper=="none"){

-			// the user has specified a single widget which will become our content

-			this.clientPane = this.children[0];

-			this.domNode.appendChild(this.clientPane.domNode);

-		}else{

-			// move our 'children' into the client pane

-			// we already moved the domnodes, but now we need to move the 'children'

-			var kids = this.children.concat();

-			this.children = [];

-	

-			for(var i=0; i<kids.length; i++){

-				if (kids[i].ownerPane == this){

-					this.children.push(kids[i]);

-				}else{

-					if(this.contentWrapper=="layout"){

-						this.clientPane.addChild(kids[i]);

-					}else{

-						this.clientPane.children.push(kids[i]);

-					}

-				}

-			}

-		}

-		dojo.html.addClass(this.clientPane.domNode, 'dojoFloatingPaneClient');

-		this.clientPane.layoutAlign="client";

-		this.clientPane.ownerPane=this;

-		if (this.overflow != "") {

-			this.clientPane.domNode.style.overflow=this.overflow;

-		}

-

-		if (this.titleBarDisplay != "none") {

-			var drag = new dojo.dnd.HtmlDragMoveSource(this.domNode);

-	

-			if (this.constrainToContainer) {

-				drag.constrainTo();

-			}

-	

-			drag.setDragHandle(this.dragBar.domNode);

-		}

-

-		this.initialized=true;

-	},

-

-	_makeShadow: function(){

-		if ( this.hasShadow ) {

-			// make all the pieces of the shadow, and position/size them as much

-			// as possible (but a lot of the coordinates are set in sizeShadow

-			this.shadow={};

-			var x1 = -1 * this.shadowThickness;

-			var y0 = this.shadowOffset;

-			var y1 = this.shadowOffset + this.shadowThickness;

-			this._makeShadowPiece("ul", "top", y0, "left", x1);

-			this._makeShadowPiece("l", "top", y1, "left", x1, "scale");

-			this._makeShadowPiece("ur", "top", y0, "left", 0);

-			this._makeShadowPiece("r", "top", y1, "left", 0, "scale");

-			this._makeShadowPiece("bl", "top", 0, "left", x1);

-			this._makeShadowPiece("b", "top", 0, "left", 0, "crop");

-			this._makeShadowPiece("br", "top", 0, "left", 0);

-		}

-	},

-

-	_makeShadowPiece: function(name, vertAttach, vertCoord, horzAttach, horzCoord, sizing){

-		var img;

-		var url = this.shadowPng + name.toUpperCase() + ".png";

-		if(dojo.render.html.ie){

-			img=document.createElement("div");

-			img.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"'"+

-			(sizing?", sizingMethod='"+sizing+"'":"") + ")";

-		}else{

-			img=document.createElement("img");

-			img.src=url;

-		}

-		img.style.position="absolute";

-		img.style[vertAttach]=vertCoord+"px";

-		img.style[horzAttach]=horzCoord+"px";

-		img.style.width=this.shadowThickness+"px";

-		img.style.height=this.shadowThickness+"px";

-		this.shadow[name]=img;

-		this.domNode.appendChild(img);

-	},

-

-	_sizeShadow: function(width, height){

-		if ( this.shadow ) {

-			var sideHeight = height - (this.shadowOffset+this.shadowThickness+1);

-			this.shadow.l.style.height = sideHeight+"px";

-			this.shadow.r.style.height = sideHeight+"px";

-			this.shadow.b.style.width = (width-1)+"px";

-			this.shadow.bl.style.top = (height-1)+"px";

-			this.shadow.b.style.top = (height-1)+"px";

-			this.shadow.br.style.top = (height-1)+"px";

-			this.shadow.ur.style.left = (width-1)+"px";

-			this.shadow.r.style.left = (width-1)+"px";

-			this.shadow.br.style.left = (width-1)+"px";

-		}

-	},

-

-	maximizeWindow: function(evt) {

-		this.previousWidth= this.domNode.style.width;

-		this.previousHeight= this.domNode.style.height;

-		this.previousLeft = this.domNode.style.left;

-		this.previousTop = this.domNode.style.top;

-

-		this.domNode.style.left =

-			dojo.style.getPixelValue(this.domNode.parentNode, "padding-left", true) + "px";

-		this.domNode.style.top =

-			dojo.style.getPixelValue(this.domNode.parentNode, "padding-top", true) + "px";

-

-		if ((this.domNode.parentNode.nodeName.toLowerCase() == 'body')) {

-			dojo.style.setOuterWidth(this.domNode, dojo.html.getViewportWidth()-dojo.style.getPaddingWidth(dojo.html.body()));

-			dojo.style.setOuterHeight(this.domNode, dojo.html.getViewportHeight()-dojo.style.getPaddingHeight(dojo.html.body()));

-		} else {

-			dojo.style.setOuterWidth(this.domNode, dojo.style.getContentWidth(this.domNode.parentNode));

-			dojo.style.setOuterHeight(this.domNode, dojo.style.getContentHeight(this.domNode.parentNode));

-		}	

-		this.maximizeAction.style.display="none";	

-		this.restoreAction.style.display="inline";	

-		this.windowState="maximized";

-		this.onResized();

-	},

-

-	minimizeWindow: function(evt) {

-		this.hide();

-		if (this.resizable) {

-			this.maximizeAction.style.display="inline";	

-			this.restoreAction.style.display="inline";	

-		}

-

-		this.windowState = "minimized";

-	},

-

-	restoreWindow: function(evt) {

-		if (this.previousWidth && this.previousHeight && this.previousLeft && this.previousTop) {

-			this.domNode.style.width = this.previousWidth;

-			this.domNode.style.height = this.previousHeight;

-			this.domNode.style.left = this.previousLeft;

-			this.domNode.style.top = this.previousTop;

-			dojo.widget.html.FloatingPane.superclass.onResized.call(this);

-		}

-

-		if (this.widgetState != "maximized") {

-			this.show();

-		}

-

-		if (this.resizable) {

-			this.maximizeAction.style.display="inline";	

-			this.restoreAction.style.display="none";	

-		}

-

-		this.bringToTop();

-		this.windowState="normal";

-	},

-

-	closeWindow: function(evt) {

-		this.destroy();

-	},

-

-	onMouseDown: function(evt) {

-		this.bringToTop();

-	},

-

-	bringToTop: function() {

-		var floatingPaneStartingZ = 100;

-		var floatingPanes= dojo.widget.manager.getWidgetsByType("FloatingPane");

-		var windows = []

-		var y=0;

-		for (var x=0; x<floatingPanes.length; x++) {

-			if (this.widgetId != floatingPanes[x].widgetId) {

-					windows.push(floatingPanes[x]);

-			}

-		}

-

-		windows.sort(function(a,b) {

-			return a.domNode.style.zIndex - b.domNode.style.zIndex;

-		});

-		

-		windows.push(this);

-

-		for (x=0; x<windows.length;x++) {

-			windows[x].domNode.style.zIndex = floatingPaneStartingZ + x;

-		}

-	},

-

-	setInitialWindowState: function() {

-		if (this.windowState == "maximized") {

-			this.maximizeWindow();

-			this.show();

-			this.bringToTop();

-			return;

-		}

-

-		if (this.windowState=="normal") {

-			dojo.lang.setTimeout(this, this.onResized, 50);

-			this.show();

-			this.bringToTop();

-			return;

-		}

-

-		if (this.windowState=="minimized") {

-			this.hide();

-			return;

-		}

-

-		this.windowState="minimized";

-	},

-

-	// add icon to task bar, connected to me

-	taskBarSetup: function() {

-		var taskbar = dojo.widget.getWidgetById(this.taskBarId);

-		if (!taskbar){

-			if (this.taskBarConnectAttempts <  this.maxTaskBarConnectAttempts) {

-				dojo.lang.setTimeout(this, this.taskBarSetup, 50);

-				this.taskBarConnectAttempts++;

-			} else {

-				dojo.debug("Unable to connect to the taskBar");

-			}

-			return;

-		}

-		taskbar.addChild(this);

-	},

-

-	onResized: function(){

-		if( !this.isVisible() ){ return; }

-		var newHeight = dojo.style.getInnerHeight(this.domNode);

-		var newWidth = dojo.style.getInnerWidth(this.domNode);

-	

-		//if ( newWidth != this.width || newHeight != this.height ) {

-			this.width = newWidth;

-			this.height = newHeight;

-			this._sizeShadow(newWidth, newHeight);

-			dojo.widget.html.FloatingPane.superclass.onResized.call(this);

-		//}

-

-		// bgIframe is a child of this.domNode, so position should be relative to [0,0]

-		if(this.bgIframe){

-			this.bgIframe.size([0, 0, newWidth, newHeight]);

-		}

-	},

-

-	hide: function(){

-		dojo.widget.html.FloatingPane.superclass.hide.call(this);

-		if(this.bgIframe){

-			this.bgIframe.hide();

-		}

-	},

-

-	show: function(){

-		dojo.widget.html.FloatingPane.superclass.show.call(this);

-		if(this.bgIframe){

-			this.bgIframe.show();

-		}

-	},

-

-	_createPane: function(type, node, args){

-		var pane = dojo.widget.createWidget(type, args, node);

-		dojo.widget.html.FloatingPane.superclass.addChild.call(this,pane);

-		pane.ownerPane=this;

-		return pane;

-	},

-	

-	setUrl: function(url){

-		this.clientPane.setUrl(url);

-	},

-	

-	setContent: function(str){

-		this.clientPane.setContent(str);

-	}

-});

-

-dojo.widget.tags.addParseTreeHandler("dojo:FloatingPane");

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/HslColorPicker.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/HslColorPicker.js
deleted file mode 100644
index 0b9beec..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/HslColorPicker.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.HslColorPicker");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.Widget");
-dojo.require("dojo.graphics.color");
-dojo.widget.tags.addParseTreeHandler("dojo:hslcolorpicker");
-
-dojo.requireAfterIf(dojo.render.svg.support.builtin, "dojo.widget.svg.HslColorPicker");
-
-dojo.widget.HslColorPicker=function(){
-	dojo.widget.Widget.call(this);
-	this.widgetType = "HslColorPicker";
-	this.isContainer = false;
-}
-dojo.inherits(dojo.widget.HslColorPicker, dojo.widget.Widget);
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/HtmlWidget.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/HtmlWidget.js
deleted file mode 100644
index 0295e79..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/HtmlWidget.js
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.DomWidget");
-dojo.require("dojo.html");
-dojo.require("dojo.string");
-
-dojo.widget.HtmlWidget = function(args){
-	// mixin inheritance
-	dojo.widget.DomWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.HtmlWidget, dojo.widget.DomWidget);
-
-dojo.lang.extend(dojo.widget.HtmlWidget, {
-	widgetType: "HtmlWidget",
-
-	templateCssPath: null,
-	templatePath: null,
-	allowResizeX: true,
-	allowResizeY: true,
-
-	resizeGhost: null,
-	initialResizeCoords: null,
-
-	// for displaying/hiding widget
-	toggle: "plain",
-	toggleDuration: 150,
-
-	animationInProgress: false,
-
-	initialize: function(args, frag){
-	},
-
-	postMixInProperties: function(args, frag){
-		// now that we know the setting for toggle, define show()&hide()
-		dojo.lang.mixin(this,
-			dojo.widget.HtmlWidget.Toggle[dojo.string.capitalize(this.toggle)] ||
-			dojo.widget.HtmlWidget.Toggle.Plain);
-	},
-
-	getContainerHeight: function(){
-		// NOTE: container height must be returned as the INNER height
-		dj_unimplemented("dojo.widget.HtmlWidget.getContainerHeight");
-	},
-
-	getContainerWidth: function(){
-		return this.parent.domNode.offsetWidth;
-	},
-
-	setNativeHeight: function(height){
-		var ch = this.getContainerHeight();
-	},
-
-	startResize: function(coords){
-		// get the left and top offset of our dom node
-		coords.offsetLeft = dojo.html.totalOffsetLeft(this.domNode);
-		coords.offsetTop = dojo.html.totalOffsetTop(this.domNode);
-		coords.innerWidth = dojo.html.getInnerWidth(this.domNode);
-		coords.innerHeight = dojo.html.getInnerHeight(this.domNode);
-		if(!this.resizeGhost){
-			this.resizeGhost = document.createElement("div");
-			var rg = this.resizeGhost;
-			rg.style.position = "absolute";
-			rg.style.backgroundColor = "white";
-			rg.style.border = "1px solid black";
-			dojo.html.setOpacity(rg, 0.3);
-			dojo.html.body().appendChild(rg);
-		}
-		with(this.resizeGhost.style){
-			left = coords.offsetLeft + "px";
-			top = coords.offsetTop + "px";
-		}
-		this.initialResizeCoords = coords;
-		this.resizeGhost.style.display = "";
-		this.updateResize(coords, true);
-	},
-
-	updateResize: function(coords, override){
-		var dx = coords.x-this.initialResizeCoords.x;
-		var dy = coords.y-this.initialResizeCoords.y;
-		with(this.resizeGhost.style){
-			if((this.allowResizeX)||(override)){
-				width = this.initialResizeCoords.innerWidth + dx + "px";
-			}
-			if((this.allowResizeY)||(override)){
-				height = this.initialResizeCoords.innerHeight + dy + "px";
-			}
-		}
-	},
-
-	endResize: function(coords){
-		// FIXME: need to actually change the size of the widget!
-		var dx = coords.x-this.initialResizeCoords.x;
-		var dy = coords.y-this.initialResizeCoords.y;
-		with(this.domNode.style){
-			if(this.allowResizeX){
-				width = this.initialResizeCoords.innerWidth + dx + "px";
-			}
-			if(this.allowResizeY){
-				height = this.initialResizeCoords.innerHeight + dy + "px";
-			}
-		}
-		this.resizeGhost.style.display = "none";
-	},
-
-	resizeSoon: function(){
-		if ( this.isVisible() ) {
-			dojo.lang.setTimeout(this, this.onResized, 0);
-		}
-	},
-
-	createNodesFromText: function(txt, wrap){
-		return dojo.html.createNodesFromText(txt, wrap);
-	},
-
-	_old_buildFromTemplate: dojo.widget.DomWidget.prototype.buildFromTemplate,
-
-	buildFromTemplate: function(args, frag){
-		if(dojo.widget.DomWidget.templates[this.widgetType]){
-			var ot = dojo.widget.DomWidget.templates[this.widgetType];
-			dojo.widget.DomWidget.templates[this.widgetType] = {};
-		}
-		if(args["templatecsspath"]){
-			args["templateCssPath"] = args["templatecsspath"];
-		}
-		if(args["templatepath"]){
-			args["templatePath"] = args["templatepath"];
-		}
-		dojo.widget.buildFromTemplate(this, args["templatePath"], args["templateCssPath"]);
-		this._old_buildFromTemplate(args, frag);
-		dojo.widget.DomWidget.templates[this.widgetType] = ot;
-	},
-
-	destroyRendering: function(finalize){
-		try{
-			var tempNode = this.domNode.parentNode.removeChild(this.domNode);
-			if(!finalize){
-				dojo.event.browser.clean(tempNode);
-			}
-			delete tempNode;
-		}catch(e){ /* squelch! */ }
-	},
-
-	// Displaying/hiding the widget
-
-	isVisible: function(){
-		return dojo.html.isVisible(this.domNode);
-	},
-	doToggle: function(){
-		this.isVisible() ? this.hide() : this.show();
-	},
-	show: function(){
-		this.animationInProgress=true;
-		this.showMe();
-	},
-	onShow: function(){
-		this.animationInProgress=false;
-	},
-	hide: function(){
-		this.animationInProgress=true;
-		this.hideMe();
-	},
-	onHide: function(){
-		this.animationInProgress=false;
-	}
-});
-
-
-/**** 
-	Strategies for displaying/hiding widget
-*****/
-
-dojo.widget.HtmlWidget.Toggle={}
-
-dojo.widget.HtmlWidget.Toggle.Plain = {
-	showMe: function(){
-		dojo.html.show(this.domNode);
-		if(dojo.lang.isFunction(this.onShow)){ this.onShow(); }
-	},
-
-	hideMe: function(){
-		dojo.html.hide(this.domNode);
-		if(dojo.lang.isFunction(this.onHide)){ this.onHide(); }
-	}
-}
-
-dojo.widget.HtmlWidget.Toggle.Fade = {
-	showMe: function(){
-		dojo.fx.html.fadeShow(this.domNode, this.toggleDuration, dojo.lang.hitch(this, this.onShow));
-	},
-
-	hideMe: function(){
-		dojo.fx.html.fadeHide(this.domNode, this.toggleDuration, dojo.lang.hitch(this, this.onHide));
-	}
-}
-
-dojo.widget.HtmlWidget.Toggle.Wipe = {
-	showMe: function(){
-		dojo.fx.html.wipeIn(this.domNode, this.toggleDuration, dojo.lang.hitch(this, this.onShow));
-	},
-
-	hideMe: function(){
-		dojo.fx.html.wipeOut(this.domNode, this.toggleDuration, dojo.lang.hitch(this, this.onHide));
-	}
-}
-
-dojo.widget.HtmlWidget.Toggle.Explode = {
-	showMe: function(){
-		dojo.fx.html.explode(this.explodeSrc, this.domNode, this.toggleDuration,
-			dojo.lang.hitch(this, this.onShow));
-	},
-
-	hideMe: function(){
-		dojo.fx.html.implode(this.domNode, this.explodeSrc, this.toggleDuration,
-			dojo.lang.hitch(this, this.onHide));
-	}
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/InlineEditBox.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/InlineEditBox.js
deleted file mode 100644
index b7a841d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/InlineEditBox.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.InlineEditBox");
-dojo.provide("dojo.widget.html.InlineEditBox");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.fx.*");
-dojo.require("dojo.graphics.color");
-dojo.require("dojo.string");
-dojo.require("dojo.style");
-dojo.require("dojo.html");
-
-dojo.widget.tags.addParseTreeHandler("dojo:inlineeditbox");
-
-dojo.widget.html.InlineEditBox = function(){
-	dojo.widget.HtmlWidget.call(this);
-	// mutable objects need to be in constructor to give each instance its own copy
-	this.history = [];
-	this.storage = document.createElement("span");
-}
-
-dojo.inherits(dojo.widget.html.InlineEditBox, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.html.InlineEditBox, {
-	templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlInlineEditBox.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlInlineEditBox.css"),
-	widgetType: "InlineEditBox",
-
-	form: null,
-	editBox: null,
-	edit: null,
-	text: null,
-	textarea: null,
-	submitButton: null,
-	cancelButton: null,
-	mode: "text",
-
-	minWidth: 100, //px. minimum width of edit box
-	minHeight: 200, //px. minimum width of edit box, if it's a TA
-
-	editing: false,
-	textValue: "",
-	defaultText: "",
-	doFade: false,
-
-	onSave: function(newValue, oldValue){},
-	onUndo: function(value){},
-
-	// overwrite buildRendering so we don't clobber our list
-	buildRendering: function(args, frag){
-		this.nodeRef = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-		var node = this.nodeRef;
-		if(node.normalize){ node.normalize(); }
-
-		dojo.widget.buildAndAttachTemplate(this);
-
-		this.editable = document.createElement("span");
-		// this.editable.appendChild(node.firstChild);
-		while(node.firstChild){
-			this.editable.appendChild(node.firstChild);
-		}
-		// this.textValue = this.editable.firstChild.nodeValue;
-		this.textValue = dojo.string.trim(this.editable.innerHTML);
-		if(dojo.string.trim(this.textValue).length == 0){
-			this.editable.innerHTML = this.defaultText;
-		}
-		/*
-		if(node.hasChildNodes()) {
-			node.insertBefore(this.editable, node.firstChild);
-		} else {
-		}
-		*/
-		node.appendChild(this.editable);
-
-		// delay to try and show up before stylesheet
-		var _this = this;
-		setTimeout(function(){
-			_this.editable.appendChild(_this.edit);
-		}, 30);
-
-		dojo.event.connect(this.editable, "onmouseover", this, "mouseover");
-		dojo.event.connect(this.editable, "onmouseout", this, "mouseout");
-		dojo.event.connect(this.editable, "onclick", this, "beginEdit");
-
-		this.fillInTemplate(args, frag);
-	},
-
-	mouseover: function(e){
-		if(!this.editing){
-			dojo.html.addClass(this.editable, "editableRegion");
-			if(this.mode == "textarea"){
-				dojo.html.addClass(this.editable, "editableTextareaRegion");
-			}
-		}
-	},
-
-	mouseout: function(e){
-		// if((e)&&(e.target != this.domNode)){ return; }
-		if(!this.editing){
-			dojo.html.removeClass(this.editable, "editableRegion");
-			dojo.html.removeClass(this.editable, "editableTextareaRegion");
-		}
-	},
-
-	beginEdit: function(e){
-		if(this.editing){ return; }
-		this.mouseout();
-		this.editing = true;
-
-		var ee = this[this.mode.toLowerCase()];
-
-		ee.style.display = "";
-		ee.value = dojo.string.trim(this.textValue);
-		ee.style.fontSize = dojo.style.getStyle(this.editable, "font-size");
-		ee.style.fontWeight = dojo.style.getStyle(this.editable, "font-weight");
-		ee.style.fontStyle = dojo.style.getStyle(this.editable, "font-style");
-		//this.text.style.fontFamily = dojo.dom.getStyle(this.editable, "font-family");
-
-		ee.style.width = Math.max(dojo.html.getInnerWidth(this.editable), this.minWidth) + "px";
-		// ee.style.width = "100%";
-
-		if(this.mode.toLowerCase()=="textarea"){
-			ee.style.display = "block";
-			ee.style.height = Math.max(dojo.html.getInnerHeight(this.editable), this.minHeight) + "px";
-		}
-		this.editable.style.display = "none";
-		this.nodeRef.appendChild(this.form);
-		ee.select();
-		this.submitButton.disabled = true;
-	},
-
-	saveEdit: function(e){
-		e.preventDefault();
-		e.stopPropagation();
-		var ee = this[this.mode.toLowerCase()];
-		if((this.textValue != ee.value)&&
-			(dojo.string.trim(ee.value) != "")){
-			this.doFade = true;
-			this.history.push(this.textValue);
-			this.onSave(ee.value, this.textValue);
-			this.textValue = ee.value;
-			this.editable.innerHTML = this.textValue;
-		}else{
-			this.doFade = false;
-		}
-		this.finishEdit(e);
-	},
-
-	cancelEdit: function(e){
-		if(!this.editing){ return false; }
-		this.editing = false;
-		this.nodeRef.removeChild(this.form);
-		this.editable.style.display = "";
-		return true;
-	},
-
-	finishEdit: function(e){
-		if(!this.cancelEdit(e)){ return; }
-		if(this.doFade) {
-			dojo.fx.highlight(this.editable, dojo.graphics.color.hex2rgb("#ffc"), 700, 300);
-		}
-		this.doFade = false;
-	},
-
-	setText: function(txt){
-		// sets the text without informing the server
-		var tt = dojo.string.trim(txt);
-		this.textValue = tt
-		this.editable.innerHTML = tt;
-	},
-
-	undo: function(){
-		if(this.history.length > 0){
-			var value = this.history.pop();
-			this.editable.innerHTML = value;
-			this.textValue = value;
-			this.onUndo(value);
-		}
-	},
-
-	checkForValueChange: function(){
-		var ee = this[this.mode.toLowerCase()];
-		if((this.textValue != ee.value)&&
-			(dojo.string.trim(ee.value) != "")){
-			this.submitButton.disabled = false;
-		}
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/LayoutPane.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/LayoutPane.js
deleted file mode 100644
index b2bb4c2..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/LayoutPane.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.LayoutPane");
-
-dojo.require("dojo.widget.*");
-dojo.requireAfterIf("html", "dojo.widget.html.LayoutPane");
-dojo.widget.tags.addParseTreeHandler("dojo:LayoutPane");
-
-// NOTE: there's no stub file for this widget
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/LinkPane.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/LinkPane.js
deleted file mode 100644
index 747b3dc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/LinkPane.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.LinkPane");
-
-dojo.require("dojo.widget.*");
-dojo.requireAfterIf("html", "dojo.widget.html.LinkPane");
-dojo.widget.tags.addParseTreeHandler("dojo:LinkPane");
-
-// NOTE: there's no stub file for this widget
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Manager.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Manager.js
deleted file mode 100644
index dbab7fc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Manager.js
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Manager");
-dojo.require("dojo.lang");
-dojo.require("dojo.event.*");
-
-// Manager class
-dojo.widget.manager = new function(){
-	this.widgets = [];
-	this.widgetIds = [];
-	
-	// map of widgetId-->widget for widgets without parents (top level widgets)
-	this.topWidgets = {};
-
-	var widgetTypeCtr = {};
-	var renderPrefixCache = [];
-
-	this.getUniqueId = function (widgetType) {
-		return widgetType + "_" + (widgetTypeCtr[widgetType] != undefined ?
-			++widgetTypeCtr[widgetType] : widgetTypeCtr[widgetType] = 0);
-	}
-
-	this.add = function(widget){
-		dojo.profile.start("dojo.widget.manager.add");
-		this.widgets.push(widget);
-		// FIXME: the rest of this method is very slow!
-		if(widget.widgetId == ""){
-			if(widget["id"]){
-				widget.widgetId = widget["id"];
-			}else if(widget.extraArgs["id"]){
-				widget.widgetId = widget.extraArgs["id"];
-			}else{
-				widget.widgetId = this.getUniqueId(widget.widgetType);
-			}
-		}
-		if(this.widgetIds[widget.widgetId]){
-			dojo.debug("widget ID collision on ID: "+widget.widgetId);
-		}
-		this.widgetIds[widget.widgetId] = widget;
-		// Widget.destroy already calls removeById(), so we don't need to
-		// connect() it here
-		dojo.profile.end("dojo.widget.manager.add");
-	}
-
-	this.destroyAll = function(){
-		for(var x=this.widgets.length-1; x>=0; x--){
-			try{
-				// this.widgets[x].destroyChildren();
-				this.widgets[x].destroy(true);
-				delete this.widgets[x];
-			}catch(e){ }
-		}
-	}
-
-	// FIXME: we should never allow removal of the root widget until all others
-	// are removed!
-	this.remove = function(widgetIndex){
-		var tw = this.widgets[widgetIndex].widgetId;
-		delete this.widgetIds[tw];
-		this.widgets.splice(widgetIndex, 1);
-	}
-	
-	// FIXME: suboptimal performance
-	this.removeById = function(id) {
-		for (var i=0; i<this.widgets.length; i++){
-			if(this.widgets[i].widgetId == id){
-				this.remove(i);
-				break;
-			}
-		}
-	}
-
-	this.getWidgetById = function(id){
-		return this.widgetIds[id];
-	}
-
-	this.getWidgetsByType = function(type){
-		var lt = type.toLowerCase();
-		var ret = [];
-		dojo.lang.forEach(this.widgets, function(x){
-			if(x.widgetType.toLowerCase() == lt){
-				ret.push(x);
-			}
-		});
-		return ret;
-	}
-
-	this.getWidgetsOfType = function (id) {
-		dj_deprecated("getWidgetsOfType is depecrecated, use getWidgetsByType");
-		return dojo.widget.manager.getWidgetsByType(id);
-	}
-
-	this.getWidgetsByFilter = function(unaryFunc){
-		var ret = [];
-		dojo.lang.forEach(this.widgets, function(x){
-			if(unaryFunc(x)){
-				ret.push(x);
-			}
-		});
-		return ret;
-	}
-
-	this.getAllWidgets = function() {
-		return this.widgets.concat();
-	}
-
-	// shortcuts, baby
-	this.byId = this.getWidgetById;
-	this.byType = this.getWidgetsByType;
-	this.byFilter = this.getWidgetsByFilter;
-
-	// map of previousally discovered implementation names to constructors
-	var knownWidgetImplementations = {};
-
-	// support manually registered widget packages
-	var widgetPackages = ["dojo.widget", "dojo.webui.widgets"];
-	for (var i=0; i<widgetPackages.length; i++) {
-		// convenience for checking if a package exists (reverse lookup)
-		widgetPackages[widgetPackages[i]] = true;
-	}
-
-	this.registerWidgetPackage = function(pname) {
-		if(!widgetPackages[pname]){
-			widgetPackages[pname] = true;
-			widgetPackages.push(pname);
-		}
-	}
-	
-	this.getWidgetPackageList = function() {
-		return dojo.lang.map(widgetPackages, function(elt) { return(elt!==true ? elt : undefined); });
-	}
-	
-	this.getImplementation = function(widgetName, ctorObject, mixins){
-		// try and find a name for the widget
-		var impl = this.getImplementationName(widgetName);
-		if(impl){ 
-			// var tic = new Date();
-			var ret = new impl(ctorObject);
-			// dojo.debug(new Date() - tic);
-			return ret;
-		}
-	}
-
-	this.getImplementationName = function(widgetName){
-		/*
-		 * This is the overly-simplistic implemention of getImplementation (har
-		 * har). In the future, we are going to want something that allows more
-		 * freedom of expression WRT to specifying different specializations of
-		 * a widget.
-		 *
-		 * Additionally, this implementation treats widget names as case
-		 * insensitive, which does not necessarialy mesh with the markup which
-		 * can construct a widget.
-		 */
-
-		var lowerCaseWidgetName = widgetName.toLowerCase();
-
-		var impl = knownWidgetImplementations[lowerCaseWidgetName];
-		if(impl){
-			return impl;
-		}
-
-		// first store a list of the render prefixes we are capable of rendering
-		if(!renderPrefixCache.length){
-			for(var renderer in dojo.render){
-				if(dojo.render[renderer]["capable"] === true){
-					var prefixes = dojo.render[renderer].prefixes;
-					for(var i = 0; i < prefixes.length; i++){
-						renderPrefixCache.push(prefixes[i].toLowerCase());
-					}
-				}
-			}
-			// make sure we don't HAVE to prefix widget implementation names
-			// with anything to get them to render
-			renderPrefixCache.push("");
-		}
-
-		// look for a rendering-context specific version of our widget name
-		for(var i = 0; i < widgetPackages.length; i++){
-			var widgetPackage = dojo.evalObjPath(widgetPackages[i]);
-			if(!widgetPackage) { continue; }
-
-			for (var j = 0; j < renderPrefixCache.length; j++) {
-				if (!widgetPackage[renderPrefixCache[j]]) { continue; }
-				for (var widgetClass in widgetPackage[renderPrefixCache[j]]) {
-					if (widgetClass.toLowerCase() != lowerCaseWidgetName) { continue; }
-					knownWidgetImplementations[lowerCaseWidgetName] =
-						widgetPackage[renderPrefixCache[j]][widgetClass];
-					return knownWidgetImplementations[lowerCaseWidgetName];
-				}
-			}
-
-			for (var j = 0; j < renderPrefixCache.length; j++) {
-				for (var widgetClass in widgetPackage) {
-					if (widgetClass.toLowerCase() !=
-						(renderPrefixCache[j] + lowerCaseWidgetName)) { continue; }
-	
-					knownWidgetImplementations[lowerCaseWidgetName] =
-						widgetPackage[widgetClass];
-					return knownWidgetImplementations[lowerCaseWidgetName];
-				}
-			}
-		}
-		
-		throw new Error('Could not locate "' + widgetName + '" class');
-	}
-
-	// FIXME: does it even belong in this name space?
-	// NOTE: this method is implemented by DomWidget.js since not all
-	// hostenv's would have an implementation.
-	/*this.getWidgetFromPrimitive = function(baseRenderType){
-		dj_unimplemented("dojo.widget.manager.getWidgetFromPrimitive");
-	}
-
-	this.getWidgetFromEvent = function(nativeEvt){
-		dj_unimplemented("dojo.widget.manager.getWidgetFromEvent");
-	}*/
-
-	// Catch window resize events and notify top level widgets
-	this.resizing=false;
-	this.onResized = function() {
-		if(this.resizing){
-			return;	// duplicate event
-		}
-		try {
-			this.resizing=true;
-			for(var id in this.topWidgets) {
-				var child = this.topWidgets[id];
-				//dojo.debug("root resizing child " + child.widgetId);
-				if ( child.onResized ) {
-					child.onResized();
-				}
-			}
-		} finally {
-			this.resizing=false;
-		}
-	}
-	if(typeof window != "undefined") {
-		dojo.addOnLoad(this, 'onResized');							// initial sizing
-		dojo.event.connect(window, 'onresize', this, 'onResized');	// window resize
-	}
-
-	// FIXME: what else?
-}
-
-// copy the methods from the default manager (this) to the widget namespace
-dojo.widget.getUniqueId = function () { return dojo.widget.manager.getUniqueId.apply(dojo.widget.manager, arguments); }
-dojo.widget.addWidget = function () { return dojo.widget.manager.add.apply(dojo.widget.manager, arguments); }
-dojo.widget.destroyAllWidgets = function () { return dojo.widget.manager.destroyAll.apply(dojo.widget.manager, arguments); }
-dojo.widget.removeWidget = function () { return dojo.widget.manager.remove.apply(dojo.widget.manager, arguments); }
-dojo.widget.removeWidgetById = function () { return dojo.widget.manager.removeById.apply(dojo.widget.manager, arguments); }
-dojo.widget.getWidgetById = function () { return dojo.widget.manager.getWidgetById.apply(dojo.widget.manager, arguments); }
-dojo.widget.getWidgetsByType = function () { return dojo.widget.manager.getWidgetsByType.apply(dojo.widget.manager, arguments); }
-dojo.widget.getWidgetsByFilter = function () { return dojo.widget.manager.getWidgetsByFilter.apply(dojo.widget.manager, arguments); }
-dojo.widget.byId = function () { return dojo.widget.manager.getWidgetById.apply(dojo.widget.manager, arguments); }
-dojo.widget.byType = function () { return dojo.widget.manager.getWidgetsByType.apply(dojo.widget.manager, arguments); }
-dojo.widget.byFilter = function () { return dojo.widget.manager.getWidgetsByFilter.apply(dojo.widget.manager, arguments); }
-dojo.widget.all = function (n) {
-	var widgets = dojo.widget.manager.getAllWidgets.apply(dojo.widget.manager, arguments);
-	if(arguments.length > 0) {
-		return widgets[n];
-	}
-	return widgets;
-}
-dojo.widget.registerWidgetPackage = function () { return dojo.widget.manager.registerWidgetPackage.apply(dojo.widget.manager, arguments); }
-dojo.widget.getWidgetImplementation = function () { return dojo.widget.manager.getImplementation.apply(dojo.widget.manager, arguments); }
-dojo.widget.getWidgetImplementationName = function () { return dojo.widget.manager.getImplementationName.apply(dojo.widget.manager, arguments); }
-
-dojo.widget.widgets = dojo.widget.manager.widgets;
-dojo.widget.widgetIds = dojo.widget.manager.widgetIds;
-dojo.widget.root = dojo.widget.manager.root;
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Menu.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Menu.js
deleted file mode 100644
index 752ab9f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Menu.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Menu");
-dojo.provide("dojo.widget.DomMenu");
-
-dojo.deprecated("dojo.widget.Menu, dojo.widget.DomMenu",  "use dojo.widget.Menu2", "0.4");
-
-dojo.require("dojo.widget.*");
-
-dojo.widget.tags.addParseTreeHandler("dojo:menu");
-
-/* Menu
- *******/
-
-dojo.widget.Menu = function () {
-	dojo.widget.Menu.superclass.constructor.call(this);
-}
-dojo.inherits(dojo.widget.Menu, dojo.widget.Widget);
-
-dojo.lang.extend(dojo.widget.Menu, {
-	widgetType: "Menu",
-	isContainer: true,
-	
-	items: [],
-	push: function(item){
-		dojo.connect.event(item, "onSelect", this, "onSelect");
-		this.items.push(item);
-	},
-	onSelect: function(){}
-});
-
-
-/* DomMenu
- **********/
-
-dojo.widget.DomMenu = function(){
-	dojo.widget.DomMenu.superclass.constructor.call(this);
-}
-dojo.inherits(dojo.widget.DomMenu, dojo.widget.DomWidget);
-
-dojo.lang.extend(dojo.widget.DomMenu, {
-	widgetType: "Menu",
-	isContainer: true,
-
-	push: function (item) {
-		dojo.widget.Menu.call(this, item);
-		this.domNode.appendChild(item.domNode);
-	}
-});
-
-dojo.requireAfterIf("html", "dojo.widget.html.Menu");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Menu2.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Menu2.js
deleted file mode 100644
index d39b6b3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Menu2.js
+++ /dev/null
@@ -1,703 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Menu2");
-dojo.provide("dojo.widget.html.Menu2");
-dojo.provide("dojo.widget.PopupMenu2");
-dojo.provide("dojo.widget.MenuItem2");
-
-dojo.require("dojo.html");
-dojo.require("dojo.style");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-
-
-dojo.widget.PopupMenu2 = function(){
-	dojo.widget.HtmlWidget.call(this);
-	this.items = [];	// unused???
-	this.targetNodeIds = []; // fill this with nodeIds upon widget creation and it becomes context menu for those nodes
-	this.queueOnAnimationFinish = [];
-}
-
-dojo.inherits(dojo.widget.PopupMenu2, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.PopupMenu2, {
-	widgetType: "PopupMenu2",
-	isContainer: true,
-
-	snarfChildDomOutput: true,
-
-	currentSubmenu: null,
-	currentSubmenuTrigger: null,
-	parentMenu: null,
-	isShowing: false,
-	menuX: 0,
-	menuY: 0,
-	menuWidth: 0,
-	menuHeight: 0,
-	menuIndex: 0,
-
-	domNode: null,
-	containerNode: null,
-
-	templateString: '<div><div dojoAttachPoint="containerNode"></div></div>',
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlMenu2.css"),
-
-	itemHeight: 18,
-	iconGap: 1,
-	accelGap: 10,
-	submenuGap: 2,
-	finalGap: 5,
-	submenuIconSize: 4,
-	separatorHeight: 9,
-	submenuDelay: 500,
-	submenuOverlap: 5,
-	contextMenuForWindow: false,
-	openEvent: null,
-
-	submenuIconSrc: dojo.uri.dojoUri("src/widget/templates/images/submenu_off.gif").toString(),
-	submenuIconOnSrc: dojo.uri.dojoUri("src/widget/templates/images/submenu_on.gif").toString(),
-
-	postCreate: function(){
-
-		dojo.html.addClass(this.domNode, 'dojoPopupMenu2');
-		dojo.html.addClass(this.containerNode, 'dojoPopupMenu2Client');
-
-		this.domNode.style.left = '-9999px'
-		this.domNode.style.top = '-9999px'
-
-		if (this.contextMenuForWindow){
-			var doc = document.documentElement  || dojo.html.body();
-			dojo.event.connect(doc, "oncontextmenu", this, "onOpen");
-		} else if ( this.targetNodeIds.length > 0 ){
-			for(var i=0; i<this.targetNodeIds.length; i++){
-				this.bindDomNode(this.targetNodeIds[i]);
-			}
-		}
-
-		this.layoutMenuSoon();
-	},
-
-	// get open event for current menu
-	getTopOpenEvent: function() {
-		var menu = this;
-		while (menu.parent){ menu = menu.parent; }
-		return menu.openEvent;
-	},
-
-	// attach menu to given node
-	bindDomNode: function(node){
-		dojo.event.connect(dojo.byId(node), "oncontextmenu", this, "onOpen");
-	},
-
-	// detach menu from given node
-	unBindDomNode: function(node){
-		dojo.event.kwDisconnect({
-			srcObj:     dojo.byId(node),
-			srcFunc:    "oncontextmenu",
-			targetObj:  this,
-			targetFunc: "onOpen",
-			once:       true
-		});
-	},
-
-	layoutMenuSoon: function(){
-
-		dojo.lang.setTimeout(this, "layoutMenu", 0);
-	},
-
-	layoutMenu: function(){
-
-		// determine menu width
-
-		var max_label_w = 0;
-		var max_accel_w = 0;
-
-		for(var i=0; i<this.children.length; i++){
-
-			if (this.children[i].getLabelWidth){
-
-				max_label_w = Math.max(max_label_w, this.children[i].getLabelWidth());
-			}
-
-			if (dojo.lang.isFunction(this.children[i].getAccelWidth)){
-
-				max_accel_w = Math.max(max_accel_w, this.children[i].getAccelWidth());
-			}
-		}
-
-		if( isNaN(max_label_w) || isNaN(max_accel_w) ){
-			// Browser needs some more time to calculate sizes
-			this.layoutMenuSoon();
-			return;
-		}
-
-		var clientLeft = dojo.style.getPixelValue(this.domNode, "padding-left", true) + dojo.style.getPixelValue(this.containerNode, "padding-left", true);
-		var clientTop  = dojo.style.getPixelValue(this.domNode, "padding-top", true)  + dojo.style.getPixelValue(this.containerNode, "padding-top", true);
-
-		if( isNaN(clientLeft) || isNaN(clientTop) ){
-			// Browser needs some more time to calculate sizes
-			this.layoutMenuSoon();
-			return;
-		}
-
-		var y = clientTop;
-		var max_item_width = 0;
-
-		for(var i=0; i<this.children.length; i++){
-
-			var ch = this.children[i];
-
-			ch.layoutItem(max_label_w, max_accel_w);
-
-			ch.topPosition = y;
-
-			y += dojo.style.getOuterHeight(ch.domNode);
-			max_item_width = Math.max(max_item_width, dojo.style.getOuterWidth(ch.domNode));
-		}
-
-		dojo.style.setContentWidth(this.containerNode, max_item_width);
-		dojo.style.setContentHeight(this.containerNode, y-clientTop);
-
-		dojo.style.setContentWidth(this.domNode, dojo.style.getOuterWidth(this.containerNode));
-		dojo.style.setContentHeight(this.domNode, dojo.style.getOuterHeight(this.containerNode));
-
-		this.menuWidth = dojo.style.getOuterWidth(this.domNode);
-		this.menuHeight = dojo.style.getOuterHeight(this.domNode);
-	},
-
-	open: function(x, y, parentMenu, explodeSrc){
-
-		// NOTE: alex:
-		//	this couldn't have possibly worked. this.open wound up calling
-		//	this.close, which called open...etc..
-		if (this.isShowing){ /* this.close(); */ return; }
-
-		if ( !parentMenu ) {
-			// record whenever a top level menu is opened
-			dojo.widget.html.Menu2Manager.opened(this, explodeSrc);
-		}
-
-		//dojo.debug("open called for animation "+this.animationInProgress)
-
-		// if I click  right button and menu is opened, then it gets 2 commands: close -> open
-		// so close enables animation and next "open" is put to queue to occur at new location
-		if(this.animationInProgress){
-			this.queueOnAnimationFinish.push(this.open, arguments);
-			return;
-		}
-
-		var viewport = dojo.html.getViewportSize();
-		var scrolloffset = dojo.html.getScrollOffset();
-
-		var clientRect = {
-			'left'  : scrolloffset[0],
-			'right' : scrolloffset[0] + viewport[0],
-			'top'   : scrolloffset[1],
-			'bottom': scrolloffset[1] + viewport[1]
-		};
-
-		if (parentMenu){
-			// submenu is opening
-
-			if (x + this.menuWidth > clientRect.right){ x = x - (this.menuWidth + parentMenu.menuWidth - (2 * this.submenuOverlap)); }
-
-			if (y + this.menuHeight > clientRect.bottom){ y = y -
-			(this.menuHeight - (this.itemHeight + 5)); } // TODO: why 5?
-
-		}else{
-			// top level menu is opening
-			x+=scrolloffset[0];
-			y+=scrolloffset[1];
-			explodeSrc[0] += scrolloffset[0];
-			explodeSrc[1] += scrolloffset[1];
-
-			if (x < clientRect.left){ x = clientRect.left; }
-			if (x + this.menuWidth > clientRect.right){ x = x - this.menuWidth; }
-
-			if (y < clientRect.top){ y = clientRect.top; }
-			if (y + this.menuHeight > clientRect.bottom){ y = y - this.menuHeight; }
-		}
-
-		this.parentMenu = parentMenu;
-		this.explodeSrc = explodeSrc;
-		this.menuIndex = parentMenu ? parentMenu.menuIndex + 1 : 1;
-
-		this.menuX = x;
-		this.menuY = y;
-
-		// move the menu into position but make it invisible
-		// (because when menus are initially constructed they are visible but off-screen)
-		this.domNode.style.zIndex = 10 + this.menuIndex;
-		this.domNode.style.left = x + 'px';
-		this.domNode.style.top = y + 'px';
-		this.domNode.style.display='none';
-		this.domNode.style.position='absolute';
-
-		// then use the user defined method to display it
-		this.show();
-
-		this.isShowing = true;
-	},
-
-	close: function(){
-		// If we are in the process of opening the menu and we are asked to close it,
-		// we should really cancel the current animation, but for simplicity we will
-		// just ignore the request
-		if(this.animationInProgress){
-			this.queueOnAnimationFinish.push(this.close, []);
-			return;
-		}
-
-		this.closeSubmenu();
-		this.hide();
-		this.isShowing = false;
-		dojo.widget.html.Menu2Manager.closed(this);
-	},
-
-	onShow: function() {
-		dojo.widget.HtmlWidget.prototype.onShow.call(this);
-		this.processQueue();
-	},
-
-	// do events from queue
-	processQueue: function() {
-		if (!this.queueOnAnimationFinish.length) return;
-
-		var func = this.queueOnAnimationFinish.shift();
-		var args = this.queueOnAnimationFinish.shift();
-
-		func.apply(this, args);
-	},
-
-	onHide: function() {
-		dojo.widget.HtmlWidget.prototype.onHide.call(this);
-
-		this.processQueue();
-	},
-
-
-	closeAll: function(){
-
-		if (this.parentMenu){
-			this.parentMenu.closeAll();
-		}else{
-			this.close();
-		}
-	},
-
-	closeSubmenu: function(){
-		if (this.currentSubmenu == null){ return; }
-
-		this.currentSubmenu.close();
-		this.currentSubmenu = null;
-
-		this.currentSubmenuTrigger.is_open = false;
-		this.currentSubmenuTrigger.closedSubmenu();
-		this.currentSubmenuTrigger = null;
-	},
-
-	openSubmenu: function(submenu, from_item){
-
-		var our_x = dojo.style.getPixelValue(this.domNode, 'left');
-		var our_y = dojo.style.getPixelValue(this.domNode, 'top');
-		var our_w = dojo.style.getOuterWidth(this.domNode);
-		var item_y = from_item.topPosition;
-
-		var x = our_x + our_w - this.submenuOverlap;
-		var y = our_y + item_y;
-
-		this.currentSubmenu = submenu;
-		this.currentSubmenu.open(x, y, this, from_item.domNode);
-
-		this.currentSubmenuTrigger = from_item;
-		this.currentSubmenuTrigger.is_open = true;
-	},
-
-	onOpen: function(e){
-		this.openEvent = e;
-
-		//dojo.debugShallow(e);
-		this.open(e.clientX, e.clientY, null, [e.clientX, e.clientY]);
-
-		if(e["preventDefault"]){
-			e.preventDefault();
-		}
-	},
-
-	isPointInMenu: function(x, y){
-
-		if (x < this.menuX){ return 0; }
-		if (x > this.menuX + this.menuWidth){ return 0; }
-
-		if (y < this.menuY){ return 0; }
-		if (y > this.menuY + this.menuHeight){ return 0; }
-
-		return 1;
-	}
-});
-
-
-dojo.widget.MenuItem2 = function(){
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.MenuItem2, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.MenuItem2, {
-	widgetType: "MenuItem2",
-	templateString:
-			 '<div class="dojoMenuItem2">'
-			+'<div dojoAttachPoint="iconNode" class="dojoMenuItem2Icon"></div>'
-			+'<span dojoAttachPoint="labelNode" class="dojoMenuItem2Label"><span><span></span></span></span>'
-			+'<span dojoAttachPoint="accelNode" class="dojoMenuItem2Accel"><span><span></span></span></span>'
-			+'<div dojoAttachPoint="submenuNode" class="dojoMenuItem2Submenu"></div>'
-			+'<div dojoAttachPoint="targetNode" class="dojoMenuItem2Target" dojoAttachEvent="onMouseOver: onHover; onMouseOut: onUnhover; onClick;">&nbsp;</div>'
-			+'</div>',
-
-	//
-	// nodes
-	//
-
-	domNode: null,
-	iconNode: null,
-	labelNode: null,
-	accelNode: null,
-	submenuNode: null,
-	targetNode: null,
-
-	//
-	// internal settings
-	//
-
-	is_hovering: false,
-	hover_timer: null,
-	is_open: false,
-	topPosition: 0,
-	is_disabled: false,
-
-	//
-	// options
-	//
-
-	caption: 'Untitled',
-	accelKey: '',
-	iconSrc: '',
-	submenuId: '',
-	isDisabled: false,
-
-
-	postCreate: function(){
-
-		dojo.html.disableSelection(this.domNode);
-
-		if (this.isDisabled){
-			this.setDisabled(true);
-		}
-
-		this.labelNode.childNodes[0].appendChild(document.createTextNode(this.caption));
-		this.accelNode.childNodes[0].appendChild(document.createTextNode(this.accelKey));
-
-		this.labelShadowNode = this.labelNode.childNodes[0].childNodes[0];
-		this.accelShadowNode = this.accelNode.childNodes[0].childNodes[0];
-
-		this.labelShadowNode.appendChild(document.createTextNode(this.caption));
-		this.accelShadowNode.appendChild(document.createTextNode(this.accelKey));
-	},
-
-	layoutItem: function(label_w, accel_w){
-
-		var x_label = this.parent.itemHeight + this.parent.iconGap;
-		var x_accel = x_label + label_w + this.parent.accelGap;
-		var x_submu = x_accel + accel_w + this.parent.submenuGap;
-		var total_w = x_submu + this.parent.submenuIconSize + this.parent.finalGap;
-
-
-		this.iconNode.style.left = '0px';
-		this.iconNode.style.top = '0px';
-
-
-		if (this.iconSrc){
-
-			if ((this.iconSrc.toLowerCase().substring(this.iconSrc.length-4) == ".png") && (dojo.render.html.ie)){
-
-				this.iconNode.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.iconSrc+"', sizingMethod='image')";
-				this.iconNode.style.backgroundImage = '';
-			}else{
-				this.iconNode.style.backgroundImage = 'url('+this.iconSrc+')';
-			}
-		}else{
-			this.iconNode.style.backgroundImage = '';
-		}
-
-		dojo.style.setOuterWidth(this.iconNode, this.parent.itemHeight);
-		dojo.style.setOuterHeight(this.iconNode, this.parent.itemHeight);
-
-		dojo.style.setOuterHeight(this.labelNode, this.parent.itemHeight);
-		dojo.style.setOuterHeight(this.accelNode, this.parent.itemHeight);
-
-		dojo.style.setContentWidth(this.domNode, total_w);
-		dojo.style.setContentHeight(this.domNode, this.parent.itemHeight);
-
-		this.labelNode.style.left = x_label + 'px';
-		this.accelNode.style.left = x_accel + 'px';
-		this.submenuNode.style.left = x_submu + 'px';
-
-		dojo.style.setOuterWidth(this.submenuNode, this.parent.submenuIconSize);
-		dojo.style.setOuterHeight(this.submenuNode, this.parent.itemHeight);
-
-		this.submenuNode.style.display = this.submenuId ? 'block' : 'none';
-		this.submenuNode.style.backgroundImage = 'url('+this.parent.submenuIconSrc+')';
-
-		dojo.style.setOuterWidth(this.targetNode, total_w);
-		dojo.style.setOuterHeight(this.targetNode, this.parent.itemHeight);
-	},
-
-	onHover: function(){
-
-		if (this.is_hovering){ return; }
-		if (this.is_open){ return; }
-
-		this.parent.closeSubmenu();
-		this.highlightItem();
-
-		if (this.is_hovering){ this.stopSubmenuTimer(); }
-		this.is_hovering = 1;
-		this.startSubmenuTimer();
-	},
-
-	onUnhover: function(){
-
-		if (!this.is_open){ this.unhighlightItem(); }
-
-		this.is_hovering = 0;
-		this.stopSubmenuTimer();
-	},
-
-	onClick: function(){
-
-		if (this.is_disabled){ return; }
-
-		if (this.submenuId){
-
-			if (!this.is_open){
-				this.stopSubmenuTimer();
-				this.openSubmenu();
-			}
-
-		}else{
-
-			this.parent.closeAll();
-		}
-	},
-
-	highlightItem: function(){
-
-		dojo.html.addClass(this.domNode, 'dojoMenuItem2Hover');
-		this.submenuNode.style.backgroundImage = 'url('+this.parent.submenuIconOnSrc+')';
-	},
-
-	unhighlightItem: function(){
-
-		dojo.html.removeClass(this.domNode, 'dojoMenuItem2Hover');
-		this.submenuNode.style.backgroundImage = 'url('+this.parent.submenuIconSrc+')';
-	},
-
-	startSubmenuTimer: function(){
-		this.stopSubmenuTimer();
-
-		if (this.is_disabled){ return; }
-
-		var self = this;
-		var closure = function(){ return function(){ self.openSubmenu(); } }();
-
-		this.hover_timer = window.setTimeout(closure, this.parent.submenuDelay);
-	},
-
-	stopSubmenuTimer: function(){
-		if (this.hover_timer){
-			window.clearTimeout(this.hover_timer);
-			this.hover_timer = null;
-		}
-	},
-
-	openSubmenu: function(){
-		// first close any other open submenu
-		this.parent.closeSubmenu();
-
-		var submenu = dojo.widget.getWidgetById(this.submenuId);
-		if (submenu){
-
-			this.parent.openSubmenu(submenu, this);
-		}
-
-		//dojo.debug('open submenu for item '+this.widgetId);
-	},
-
-	closedSubmenu: function(){
-
-		this.onUnhover();
-	},
-
-	setDisabled: function(value){
-
-		if (value == this.is_disabled){ return; }
-
-		this.is_disabled = value;
-
-		if (this.is_disabled){
-			dojo.html.addClass(this.domNode, 'dojoMenuItem2Disabled');
-		}else{
-			dojo.html.removeClass(this.domNode, 'dojoMenuItem2Disabled');
-		}
-	},
-
-	getLabelWidth: function(){
-
-		var node = this.labelNode.childNodes[0];
-
-		return dojo.style.getOuterWidth(node);
-	},
-
-	getAccelWidth: function(){
-
-		var node = this.accelNode.childNodes[0];
-
-		return dojo.style.getOuterWidth(node);
-	}
-});
-
-
-dojo.widget.MenuSeparator2 = function(){
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.MenuSeparator2, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.MenuSeparator2, {
-	widgetType: "MenuSeparator2",
-
-	domNode: null,
-	topNode: null,
-	bottomNode: null,
-
-	templateString: '<div>'
-			+'<div dojoAttachPoint="topNode"></div>'
-			+'<div dojoAttachPoint="bottomNode"></div>'
-			+'</div>',
-
-	postCreate: function(){
-
-		dojo.html.addClass(this.domNode, 'dojoMenuSeparator2');
-		dojo.html.addClass(this.topNode, 'dojoMenuSeparator2Top');
-		dojo.html.addClass(this.bottomNode, 'dojoMenuSeparator2Bottom');
-
-		dojo.html.disableSelection(this.domNode);
-
-		this.layoutItem();
-	},
-
-	layoutItem: function(label_w, accel_w){
-
-		var full_width = this.parent.itemHeight
-				+ this.parent.iconGap
-				+ label_w
-				+ this.parent.accelGap
-				+ accel_w
-				+ this.parent.submenuGap
-				+ this.parent.submenuIconSize
-				+ this.parent.finalGap;
-
-		if (isNaN(full_width)){ return; }
-
-		dojo.style.setContentHeight(this.domNode, this.parent.separatorHeight);
-		dojo.style.setContentWidth(this.domNode, full_width);
-	}
-});
-
-//
-// the menu manager makes sure we don't have several menus
-// open at once. the root menu in an opening sequence calls
-// opened(). when a root menu closes it calls closed(). then
-// everything works. lovely.
-//
-
-dojo.widget.html.Menu2Manager = new function(){
-
-	this.currentMenu = null;
-	this.currentButton = null;		// button that opened current menu (if any)
-	this.focusNode = null;
-
-	dojo.event.connect(document, 'onmousedown', this, 'onClick');
-	dojo.event.connect(window, "onscroll", this, "onClick");
-
-	this.closed = function(menu){
-		if (this.currentMenu == menu){
-			this.currentMenu = null;
-			this.currentButton = null;
-		}
-	};
-
-	this.opened = function(menu, button){
-		if (menu == this.currentMenu){ return; }
-
-		if (this.currentMenu){
-			this.currentMenu.close();
-		}
-
-		this.currentMenu = menu;
-		this.currentButton = button;
-	};
-
-	this.onClick = function(e){
-
-		if (!this.currentMenu){ return; }
-
-		var scrolloffset = dojo.html.getScrollOffset();
-
-		var x = e.clientX + scrolloffset[0];
-		var y = e.clientY + scrolloffset[1];
-
-		var m = this.currentMenu;
-
-		// starting from the base menu, perform a hit test
-		// and exit when one succeeds
-
-		while (m){
-
-			if (m.isPointInMenu(x, y)){
-
-				return;
-			}
-
-			m = m.currentSubmenu;
-		}
-
-		// Also, if user clicked the button that opened this menu, then
-		// that button will send the menu a close() command, so this code
-		// shouldn't try to close the menu.  Closing twice messes up animation.
-		if (this.currentButton && dojo.html.overElement(this.currentButton, e)){
-			return;
-		}
-
-		// the click didn't fall within the open menu tree
-		// so close it
-
-		this.currentMenu.close();
-	};
-}
-
-
-// make it a tag
-dojo.widget.tags.addParseTreeHandler("dojo:PopupMenu2");
-dojo.widget.tags.addParseTreeHandler("dojo:MenuItem2");
-dojo.widget.tags.addParseTreeHandler("dojo:MenuSeparator2");
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/MenuItem.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/MenuItem.js
deleted file mode 100644
index 57c4e0e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/MenuItem.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.MenuItem");
-dojo.provide("dojo.widget.DomMenuItem");
-
-dojo.deprecated("dojo.widget.MenuItem, dojo.widget.DomMenuItem",  "use dojo.widget.Menu2", "0.4");
-
-dojo.require("dojo.string");
-dojo.require("dojo.widget.*");
-
-dojo.widget.tags.addParseTreeHandler("dojo:MenuItem");
-
-/* MenuItem
- ***********/
- 
-dojo.widget.MenuItem = function(){
-	dojo.widget.MenuItem.superclass.constructor.call(this);
-}
-dojo.inherits(dojo.widget.MenuItem, dojo.widget.Widget);
-
-dojo.lang.extend(dojo.widget.MenuItem, {
-	widgetType: "MenuItem",
-	isContainer: true
-});
-
-
-/* DomMenuItem
- **************/
-dojo.widget.DomMenuItem = function(){
-	dojo.widget.DomMenuItem.superclass.constructor.call(this);
-}
-dojo.inherits(dojo.widget.DomMenuItem, dojo.widget.DomWidget);
-
-dojo.lang.extend(dojo.widget.DomMenuItem, {
-	widgetType: "MenuItem"
-});
-
-dojo.requireAfterIf("html", "dojo.html");
-dojo.requireAfterIf("html", "dojo.widget.html.MenuItem");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Parse.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Parse.js
deleted file mode 100644
index 7b9d51d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Parse.js
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Parse");
-
-dojo.require("dojo.widget.Manager");
-dojo.require("dojo.string");
-dojo.require("dojo.dom");
-
-dojo.widget.Parse = function(fragment) {
-	this.propertySetsList = [];
-	this.fragment = fragment;
-
-	/*	createComponents recurses over a raw JavaScript object structure,
-			and calls the corresponding handler for its normalized tagName if it exists
-	*/
-	this.createComponents = function(fragment, parentComp){
-		var djTags = dojo.widget.tags;
-		var returnValue = [];
-		// this allows us to parse without having to include the parent
-		// it is commented out as it currently breaks the existing mechanism for
-		// adding widgets programmatically.  Once that is fixed, this can be used
-		/*if( (fragment["tagName"])&&
-			(fragment != fragment["nodeRef"])){
-			var tn = new String(fragment["tagName"]);
-			// we split so that you can declare multiple
-			// non-destructive widgets from the same ctor node
-			var tna = tn.split(";");
-			for(var x=0; x<tna.length; x++){
-				var ltn = dojo.text.trim(tna[x]).toLowerCase();
-				if(djTags[ltn]){
-					fragment.tagName = ltn;
-					returnValue.push(djTags[ltn](fragment, this, parentComp, count++));
-				}else{
-					if(ltn.substr(0, 5)=="dojo:"){
-						dj_debug("no tag handler registed for type: ", ltn);
-					}
-				}
-			}
-		}*/
-		for(var item in fragment){
-			var built = false;
-			// if we have items to parse/create at this level, do it!
-			try{
-				if( fragment[item] && (fragment[item]["tagName"])&&
-					(fragment[item] != fragment["nodeRef"])){
-					var tn = new String(fragment[item]["tagName"]);
-					// we split so that you can declare multiple
-					// non-destructive widgets from the same ctor node
-					var tna = tn.split(";");
-					for(var x=0; x<tna.length; x++){
-						var ltn = dojo.string.trim(tna[x]).toLowerCase();
-						if(djTags[ltn]){
-							built = true;
-							// var tic = new Date();
-							fragment[item].tagName = ltn;
-							var ret = djTags[ltn](fragment[item], this, parentComp, fragment[item]["index"])
-							returnValue.push(ret);
-						}else{
-							if((dojo.lang.isString(ltn))&&(ltn.substr(0, 5)=="dojo:")){
-								dojo.debug("no tag handler registed for type: ", ltn);
-							}
-						}
-					}
-				}
-			}catch(e){
-				dojo.debug("fragment creation error:", e);
-				// throw(e);
-				// IE is such a bitch sometimes
-			}
-
-			// if there's a sub-frag, build widgets from that too
-			if( (!built) && (typeof fragment[item] == "object")&&
-				(fragment[item] != fragment.nodeRef)&&
-				(fragment[item] != fragment["tagName"])){
-				returnValue.push(this.createComponents(fragment[item], parentComp));
-			}
-		}
-		return returnValue;
-	}
-
-	/*  parsePropertySets checks the top level of a raw JavaScript object
-			structure for any propertySets.  It stores an array of references to 
-			propertySets that it finds.
-	*/
-	this.parsePropertySets = function(fragment) {
-		return [];
-		var propertySets = [];
-		for(var item in fragment){
-			if(	(fragment[item]["tagName"] == "dojo:propertyset") ) {
-				propertySets.push(fragment[item]);
-			}
-		}
-		// FIXME: should we store these propertySets somewhere for later retrieval
-		this.propertySetsList.push(propertySets);
-		return propertySets;
-	}
-	
-	/*  parseProperties checks a raw JavaScript object structure for
-			properties, and returns an array of properties that it finds.
-	*/
-	this.parseProperties = function(fragment) {
-		var properties = {};
-		for(var item in fragment){
-			// FIXME: need to check for undefined?
-			// case: its a tagName or nodeRef
-			if((fragment[item] == fragment["tagName"])||
-				(fragment[item] == fragment.nodeRef)){
-				// do nothing
-			}else{
-				if((fragment[item]["tagName"])&&
-					(dojo.widget.tags[fragment[item].tagName.toLowerCase()])){
-					// TODO: it isn't a property or property set, it's a fragment, 
-					// so do something else
-					// FIXME: needs to be a better/stricter check
-					// TODO: handle xlink:href for external property sets
-				}else if((fragment[item][0])&&(fragment[item][0].value!="")){
-					try{
-						// FIXME: need to allow more than one provider
-						if(item.toLowerCase() == "dataprovider") {
-							var _this = this;
-							this.getDataProvider(_this, fragment[item][0].value);
-							properties.dataProvider = this.dataProvider;
-						}
-						properties[item] = fragment[item][0].value;
-						var nestedProperties = this.parseProperties(fragment[item]);
-						// FIXME: this kind of copying is expensive and inefficient!
-						for(var property in nestedProperties){
-							properties[property] = nestedProperties[property];
-						}
-					}catch(e){ dojo.debug(e); }
-				}
-			}
-		}
-		return properties;
-	}
-
-	/* getPropertySetById returns the propertySet that matches the provided id
-	*/
-	
-	this.getDataProvider = function(objRef, dataUrl) {
-		// FIXME: this is currently sync.  To make this async, we made need to move 
-		//this step into the widget ctor, so that it is loaded when it is needed 
-		// to populate the widget
-		dojo.io.bind({
-			url: dataUrl,
-			load: function(type, evaldObj){
-				if(type=="load"){
-					objRef.dataProvider = evaldObj;
-				}
-			},
-			mimetype: "text/javascript",
-			sync: true
-		});
-	}
-
-	
-	this.getPropertySetById = function(propertySetId){
-		for(var x = 0; x < this.propertySetsList.length; x++){
-			if(propertySetId == this.propertySetsList[x]["id"][0].value){
-				return this.propertySetsList[x];
-			}
-		}
-		return "";
-	}
-	
-	/* getPropertySetsByType returns the propertySet(s) that match(es) the
-	 * provided componentClass
-	 */
-	this.getPropertySetsByType = function(componentType){
-		var propertySets = [];
-		for(var x=0; x < this.propertySetsList.length; x++){
-			var cpl = this.propertySetsList[x];
-			var cpcc = cpl["componentClass"]||cpl["componentType"]||null;
-			if((cpcc)&&(propertySetId == cpcc[0].value)){
-				propertySets.push(cpl);
-			}
-		}
-		return propertySets;
-	}
-	
-	/* getPropertySets returns the propertySet for a given component fragment
-	*/
-	this.getPropertySets = function(fragment){
-		var ppl = "dojo:propertyproviderlist";
-		var propertySets = [];
-		var tagname = fragment["tagName"];
-		if(fragment[ppl]){ 
-			var propertyProviderIds = fragment[ppl].value.split(" ");
-			// FIXME: should the propertyProviderList attribute contain #
-			// 		  syntax for reference to ids or not?
-			// FIXME: need a better test to see if this is local or external
-			// FIXME: doesn't handle nested propertySets, or propertySets that
-			// 		  just contain information about css documents, etc.
-			for(propertySetId in propertyProviderIds){
-				if((propertySetId.indexOf("..")==-1)&&(propertySetId.indexOf("://")==-1)){
-					// get a reference to a propertySet within the current parsed structure
-					var propertySet = this.getPropertySetById(propertySetId);
-					if(propertySet != ""){
-						propertySets.push(propertySet);
-					}
-				}else{
-					// FIXME: add code to parse and return a propertySet from
-					// another document
-					// alex: is this even necessaray? Do we care? If so, why?
-				}
-			}
-		}
-		// we put the typed ones first so that the parsed ones override when
-		// iteration happens.
-		return (this.getPropertySetsByType(tagname)).concat(propertySets);
-	}
-	
-	/* 
-		nodeRef is the node to be replaced... in the future, we might want to add 
-		an alternative way to specify an insertion point
-
-		componentName is the expected dojo widget name, i.e. Button of ContextMenu
-
-		properties is an object of name value pairs
-	*/
-	this.createComponentFromScript = function(nodeRef, componentName, properties){
-		var ltn = "dojo:" + componentName.toLowerCase();
-		if(dojo.widget.tags[ltn]){
-			properties.fastMixIn = true;
-			return [dojo.widget.tags[ltn](properties, this, null, null, properties)];
-		}else{
-			if(ltn.substr(0, 5)=="dojo:"){
-				dojo.debug("no tag handler registed for type: ", ltn);
-			}
-		}
-	}
-}
-
-
-dojo.widget._parser_collection = {"dojo": new dojo.widget.Parse() };
-dojo.widget.getParser = function(name){
-	if(!name){ name = "dojo"; }
-	if(!this._parser_collection[name]){
-		this._parser_collection[name] = new dojo.widget.Parse();
-	}
-	return this._parser_collection[name];
-}
-
-/**
- * Creates widget.
- *
- * @param name     The name of the widget to create
- * @param props    Key-Value pairs of properties of the widget
- * @param refNode  If the last argument is specified this node is used as
- *                 a reference for inserting this node into a DOM tree else
- *                 it beomces the domNode
- * @param position The position to insert this widget's node relative to the
- *                 refNode argument
- * @return The new Widget object
- */
- 
-dojo.widget.createWidget = function (name, props, refNode, position) {
-
-	function fromScript (placeKeeperNode, name, props) {
-		var lowerCaseName = name.toLowerCase();
-		var namespacedName = "dojo:" + lowerCaseName;
-		props[namespacedName] = { 
-			dojotype: [{value: lowerCaseName}],
-			nodeRef: placeKeeperNode,
-			fastMixIn: true
-		};
-		return dojo.widget.getParser().createComponentFromScript(
-			placeKeeperNode, name, props, true);
-	}
-
-	if (typeof name != "string" && typeof props == "string") {
-		dojo.deprecated("dojo.widget.createWidget", 
-			"argument order is now of the form " +
-			"dojo.widget.createWidget(NAME, [PROPERTIES, [REFERENCENODE, [POSITION]]])");
-		return fromScript(name, props, refNode);
-	}
-	
-	props = props||{};
-	var notRef = false;
-	var tn = null;
-	var h = dojo.render.html.capable;
-	if(h){
-		tn = document.createElement("span");
-	}
-	if(!refNode){
-		notRef = true;
-		refNode = tn;
-		if(h){
-			dojo.html.body().appendChild(refNode);
-		}
-	}else if(position){
-		dojo.dom.insertAtPosition(tn, refNode, position);
-	}else{ // otherwise don't replace, but build in-place
-		tn = refNode;
-	}
-	var widgetArray = fromScript(tn, name, props);
-	if (!widgetArray[0] || typeof widgetArray[0].widgetType == "undefined") {
-		throw new Error("createWidget: Creation of \"" + name + "\" widget failed.");
-	}
-	if (notRef) {
-		if (widgetArray[0].domNode.parentNode) {
-			widgetArray[0].domNode.parentNode.removeChild(widgetArray[0].domNode);
-		}
-	}
-	return widgetArray[0]; // just return the widget
-}
- 
-dojo.widget.fromScript = function(name, props, refNode, position){
-	dojo.deprecated("dojo.widget.fromScript", " use " +
-		"dojo.widget.createWidget instead");
-	return dojo.widget.createWidget(name, props, refNode, position);
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/PopUpButton.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/PopUpButton.js
deleted file mode 100644
index cfa592b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/PopUpButton.js
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.PopUpButton");
-dojo.provide("dojo.widget.DomPopUpButton");
-dojo.provide("dojo.widget.HtmlPopUpButton");
-
-dojo.deprecated("dojo.widget.PopUpButton, dojo.widget.DomPopUpButton, dojo.widget.HtmlPopUpButton",  "use dojo.widget.DropDownButton2", "0.4");
-
-//dojo.require("dojo.widget.Button");
-//dojo.require("dojo.widget.HtmlButton");
-
-dojo.require("dojo.widget.Menu");
-dojo.require("dojo.widget.MenuItem");
-
-dojo.require("dojo.html");
-
-dojo.widget.tags.addParseTreeHandler("dojo:PopUpButton");
-
-/* PopUpButton
- **************/
- 
-dojo.widget.PopUpButton = function () {
-	dojo.widget.PopUpButton.superclass.constructor.call(this);
-}
-dojo.inherits(dojo.widget.PopUpButton, dojo.widget.Widget);
-
-dojo.lang.extend(dojo.widget.PopUpButton, {
-	widgetType: "PopUpButton",
-	
-	label: ""
-});
-
-
-/* DomPopUpButton
- *****************/
-dojo.widget.DomPopUpButton = function(){
-	dojo.widget.DomPopUpButton.superclass.constructor.call(this);
-}
-dojo.inherits(dojo.widget.DomPopUpButton, dojo.widget.DomWidget);
-
-dojo.lang.extend(dojo.widget.DomPopUpButton, {
-	widgetType: dojo.widget.PopUpButton.prototype.widgetType
-});
-
-
-/* HtmlPopUpButton
- ******************/
-
-dojo.widget.HtmlPopUpButton = function () {
-	dojo.widget.HtmlPopUpButton.superclass.constructor.call(this);
-}
-dojo.inherits(dojo.widget.HtmlPopUpButton, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.HtmlPopUpButton, {
-	widgetType: dojo.widget.PopUpButton.prototype.widgetType,
-	templateString: null,
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/PopUpButton.css"),
-	
-	buildRendering: function (args, frag) {
-		dojo.html.insertCssFile(this.templateCssPath, null, true);
-	
-		this.domNode = document.createElement("a");
-		this.domNode.className = "PopUpButton";
-		dojo.event.connect(this.domNode, "onmousedown", this, "onMouseDown");
-		
-		// draw the arrow
-		var arrow = document.createElement("img");
-		arrow.src = dojo.uri.dojoUri("src/widget/templates/images/dropdownButtonsArrow.gif");
-		dojo.html.setClass(arrow, "downArrow");
-		this.domNode.appendChild(arrow);
-
-		this.menu = dojo.widget.fromScript("Menu");
-		dojo.html.addClass(this.menu.domNode, "PopUpButtonMenu");
-		dojo.event.connect(this.menu, "onSelect", this, "onSelect");
-		
-		if (frag["dojo:" + this.widgetType.toLowerCase()].nodeRef) {
-			var node = frag["dojo:" + this.widgetType.toLowerCase()].nodeRef;
-			var options = node.getElementsByTagName("option");
-			for (var i = 0; i < options.length; i++) {
-				var properties = {
-					title: dojo.dom.textContent(options[i]),
-					value: options[i].value
-				}
-				this.addItem(dojo.widget.fromScript("MenuItem", properties));
-			}
-		}
-	},
-
-	addItem: function (item) {
-		// TODO: should be dojo.widget.MenuItem
-		if (item instanceof dojo.widget.html.MenuItem) {
-			this.menu.push(item);
-		} else {
-			// TODO: create one
-			var menuItem = dojo.widget.fromScript("MenuItem", {title: item});
-			this.menu.push(menuItem);
-		}
-	},
-	
-	
-/* Enabled utility methods
- **************************/
-	
-	_enabled: true,
-	
-	isEnabled: function() { return this._enabled; },
-	
-	setEnabled: function(enabled, force, preventEvent) {
-		enabled = Boolean(enabled);
-		if (force || this._enabled != enabled) {
-			this._enabled = enabled;
-			if (!preventEvent) {
-				this._fireEvent(this._enabled ? "onEnable" : "onDisable");
-				this._fireEvent("onChangeEnabled");
-			}
-		}
-		
-		dojo.html[(this._enabled ? "add" : "remove")
-			+ "Class"](this.domNode, "disabled");
-		
-		return this._enabled;
-	},
-	
-	enable: function(force, preventEvent) {
-		return this.setEnabled(true, force, preventEvent);
-	},
-	
-	disable: function(force, preventEvent) {
-		return this.setEnabled(false, force, preventEvent);
-	},
-	
-	toggleEnabled: function(force, preventEvent) {
-		return this.setEnabled(!this._enabled, force, preventEvent);
-	},
-
-
-/* Select utility methods
- **************************/
-
-	onSelect: function (item, e) {
-		this.domNode.firstChild.nodeValue = item.title;
-	},
-	
-	onMouseDown: function (e) {
-		if (!this._menuVisible) {
-			this._showMenu(e);
-			dojo.lang.setTimeout(dojo.event.connect, 1, document, "onmousedown", this, "_hideMenu");
-		}
-	},
-	
-	
-	_fireEvent: function(evt) {
-		if(typeof this[evt] == "function") {
-			var args = [this];
-			for(var i = 1; i < arguments.length; i++) {
-				args.push(arguments[i]);
-			}
-			this[evt].apply(this, args);
-		}
-	},
-
-	
-	_showMenu: function (e) {
-		if (!this._enabled) { return; }
-		this._menuVisible = true;
-		with (dojo.html) {
-			var y = getAbsoluteY(this.domNode) + getInnerHeight(this.domNode);
-			var x = getAbsoluteX(this.domNode);
-		}
-	
-		dojo.html.body().appendChild(this.menu.domNode);
-		with (this.menu.domNode.style) {
-			top = y + "px";
-			left = x + "px";
-		}
-	},
-	
-	_hideMenu: function (e) {
-		this.menu.domNode.parentNode.removeChild(this.menu.domNode);
-		dojo.event.disconnect(document, "onmousedown", this, "_hideMenu");
-		this._menuVisible = false;
-	}
-
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ResizableTextarea.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ResizableTextarea.js
deleted file mode 100644
index d266b3e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ResizableTextarea.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.ResizableTextarea");
-dojo.require("dojo.html");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.LayoutPane");
-dojo.require("dojo.widget.ResizeHandle");
-
-dojo.widget.tags.addParseTreeHandler("dojo:resizabletextarea");
-
-dojo.widget.ResizableTextarea = function(){
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.ResizableTextarea, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.ResizableTextarea, {
-	templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlResizableTextarea.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlResizableTextarea.css"),
-	widgetType: "ResizableTextarea",
-	tagName: "dojo:resizabletextarea",
-	isContainer: false,
-	textAreaNode: null,
-	textAreaContainer: null,
-	textAreaContainerNode: null,
-	statusBar: null,
-	statusBarContainerNode: null,
-	statusLabelNode: null,
-	statusLabel: null,
-	rootLayoutNode: null,
-	resizeHandleNode: null,
-	resizeHandle: null,
-
-	fillInTemplate: function(args, frag){
-		this.textAreaNode = this.getFragNodeRef(frag).cloneNode(true);
-
-		// FIXME: Safari apparently needs this!
-		document.body.appendChild(this.domNode);
-
-		this.rootLayout = dojo.widget.createWidget(
-			"LayoutPane",
-			{
-				minHeight: 50,
-				minWidth: 100
-			},
-			this.rootLayoutNode
-		);
-
-
-		this.textAreaContainer = dojo.widget.createWidget(
-			"LayoutPane",
-			{ layoutAlign: "client" },
-			this.textAreaContainerNode
-		);
-		this.rootLayout.addChild(this.textAreaContainer);
-
-		this.textAreaContainer.domNode.appendChild(this.textAreaNode);
-		with(this.textAreaNode.style){
-			width="100%";
-			height="100%";
-		}
-
-		this.statusBar = dojo.widget.createWidget(
-			"LayoutPane",
-			{ 
-				layoutAlign: "bottom", 
-				minHeight: 28
-			},
-			this.statusBarContainerNode
-		);
-		this.rootLayout.addChild(this.statusBar);
-
-		this.statusLabel = dojo.widget.createWidget(
-			"LayoutPane",
-			{ 
-				layoutAlign: "client", 
-				minWidth: 50
-			},
-			this.statusLabelNode
-		);
-		this.statusBar.addChild(this.statusLabel);
-
-		this.resizeHandle = dojo.widget.createWidget(
-			"ResizeHandle", 
-			{ targetElmId: this.rootLayout.widgetId },
-			this.resizeHandleNode
-		);
-		this.statusBar.addChild(this.resizeHandle);
-		// dojo.debug(this.rootLayout.widgetId);
-
-		// dojo.event.connect(this.resizeHandle, "beginSizing", this, "hideContent");
-		// dojo.event.connect(this.resizeHandle, "endSizing", this, "showContent");
-	},
-
-	hideContent: function(){
-		this.textAreaNode.style.display = "none";
-	},
-
-	showContent: function(){
-		this.textAreaNode.style.display = "";
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ResizeHandle.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ResizeHandle.js
deleted file mode 100644
index 12f6b25..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/ResizeHandle.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.ResizeHandle");
-dojo.provide("dojo.widget.html.ResizeHandle");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.html");
-dojo.require("dojo.style");
-dojo.require("dojo.dom");
-dojo.require("dojo.event");
-
-dojo.widget.html.ResizeHandle = function(){
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.html.ResizeHandle, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.html.ResizeHandle, {
-	widgetType: "ResizeHandle",
-
-	isSizing: false,
-	startPoint: null,
-	startSize: null,
-
-	grabImg: null,
-
-	targetElmId: '',
-	imgSrc: dojo.uri.dojoUri("src/widget/templates/grabCorner.gif"),
-
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlResizeHandle.css"),
-	templateString: '<div dojoAttachPoint="domNode"><img dojoAttachPoint="grabImg" /></div>',
-
-	fillInTemplate: function(){
-
-		dojo.style.insertCssFile(this.templateCssPath);
-
-		dojo.html.addClass(this.domNode, 'dojoHtmlResizeHandle');
-		dojo.html.addClass(this.grabImg, 'dojoHtmlResizeHandleImage');
-
-		this.grabImg.src = this.imgSrc;
-	},
-
-	postCreate: function(){
-		dojo.event.connect(this.domNode, "onmousedown", this, "beginSizing");
-	},
-
-	beginSizing: function(e){
-		if (this.isSizing){ return false; }
-
-		this.targetElm = dojo.widget.byId(this.targetElmId);
-		if (!this.targetElm){ return; }
-
-		var screenX = window.event ? window.event.clientX : e.pageX;
-		var screenY = window.event ? window.event.clientY : e.pageY;
-
-		this.isSizing = true;
-		this.startPoint  = {'x':e.clientX, 'y':e.clientY};
-		this.startSize  = {'w':dojo.style.getOuterWidth(this.targetElm.domNode), 'h':dojo.style.getOuterHeight(this.targetElm.domNode)};
-
-		dojo.event.kwConnect({
-			srcObj: dojo.html.body(), 
-			srcFunc: "onmousemove",
-			targetObj: this,
-			targetFunc: "changeSizing",
-			rate: 25
-		});
-		dojo.event.connect(dojo.html.body(), "onmouseup", this, "endSizing");
-
-		e.preventDefault();
-	},
-
-	changeSizing: function(e){
-		// On IE, if you move the mouse above/to the left of the object being resized,
-		// sometimes clientX/Y aren't set, apparently.  Just ignore the event.
-		if(!e.clientX  || !e.clientY){ return; }
-		var dx = this.startPoint.x - e.clientX;
-		var dy = this.startPoint.y - e.clientY;
-		this.targetElm.resizeTo(this.startSize.w - dx, this.startSize.h - dy);
-
-		e.preventDefault();
-	},
-
-	endSizing: function(e){
-		dojo.event.disconnect(dojo.html.body(), "onmousemove", this, "changeSizing");
-		dojo.event.disconnect(dojo.html.body(), "onmouseup", this, "endSizing");
-
-		this.isSizing = false;
-	}
-
-
-});
-
-dojo.widget.tags.addParseTreeHandler("dojo:ResizeHandle");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/RichText.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/RichText.js
deleted file mode 100644
index 8fa9122..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/RichText.js
+++ /dev/null
@@ -1,1041 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.RichText");
-dojo.provide("dojo.widget.HtmlRichText");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.dom");
-dojo.require("dojo.html");
-dojo.require("dojo.event.*");
-dojo.require("dojo.style");
-
-// used to save content
-try {
-	document.write('<textarea id="dojo.widget.RichText.savedContent" ' +
-		'style="display:none;position:absolute;top:-100px;left:-100px;"></textarea>');
-}catch(e){ }
-
-dojo.widget.tags.addParseTreeHandler("dojo:richtext");
-
-dojo.widget.HtmlRichText = function () {
-	dojo.widget.HtmlWidget.call(this);
-	this.contentFilters = [];
-}
-dojo.inherits(dojo.widget.HtmlRichText, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.HtmlRichText, {
-
-	widgetType: "richtext",
-
-	/** whether to inherit the parent's width or simply use 100% */
-	inheritWidth: false,
-	focusOnLoad: true,
-	
-	/**
-	 * If a save name is specified the content is saved and restored if the
-	 * editor is not properly closed after editing has started.
-	 */
-	saveName: "",
-	_content: "",
-	
-	/** The minimum height that the editor should have */
-	minHeight: "1em",
-	
-	isClosed: true,
-	isLoaded: false,
-	
-	/** whether to use the active-x object in IE */
-	useActiveX: false,
-	
-	_SEPARATOR: "@@**%%__RICHTEXTBOUNDRY__%%**@@",
-
-	// contentFilters: [],
-
-/* Init
- *******/
-
-	fillInTemplate: function(){
-		this.open();
-
-		// add the formatting functions
-		var funcs = ["queryCommandEnabled", "queryCommandState",
-			"queryCommandValue", "execCommand"];
-		for (var i = 0; i < funcs.length; i++) {
-			dojo.event.connect("around", this, funcs[i], this, "_normalizeCommand");
-		}
-		
-		// backwards compatibility, needs to be removed
-		dojo.event.connect(this, "onKeyPressed", this, "afterKeyPress");
-		dojo.event.connect(this, "onKeyPress", this, "keyPress");
-		dojo.event.connect(this, "onKeyDown", this, "keyDown");
-		dojo.event.connect(this, "onKeyUp", this, "keyUp");
-	},
-
-	/**
-	 * Transforms the node referenced in this.domNode into a rich text editing
-	 * node. This can result in the creation and replacement with an <iframe> if
-	 * designMode is used, an <object> and active-x component if inside of IE or
-	 * a reguler element if contentEditable is available.
-	 */
-	open: function (element) {
-		dojo.event.topic.publish("dojo.widget.RichText::open", this);
-
-		if (!this.isClosed) { this.close(); }
-		this._content = "";
-		if (arguments.length == 1) { this.domNode = element; } // else unchanged
-		
-		if (this.domNode.nodeName == "TEXTAREA") {
-			this.textarea = this.domNode;
-			var html = this.textarea.value;
-			this.domNode = document.createElement("div");
-			with(this.textarea.style){
-				display = "block";
-				position = "absolute";
-				width = "1px";
-				height = "1px";
-				border = margin = padding = "0px";
-				visiblity = "hidden";
-			}
-			dojo.dom.insertBefore(this.domNode, this.textarea);
-			// this.domNode.innerHTML = html;
-			
-			if(this.textarea.form){
-				dojo.event.connect(this.textarea.form, "onsubmit", 
-					dojo.lang.hitch(this, function(){
-						this.textarea.value = this.getEditorContent();
-					})
-				);
-			}
-			
-			// dojo plucks our original domNode from the document so we need
-			// to go back and put ourselves back in
-			var editor = this;
-			dojo.event.connect(this, "postCreate", function (){
-				dojo.dom.insertAfter(editor.textarea, editor.domNode);
-			});
-		} else {
-			var html = this.domNode.innerHTML;
-		}
-				
-		this._oldHeight = dojo.style.getContentHeight(this.domNode);
-		this._oldWidth = dojo.style.getContentWidth(this.domNode);
-		
-		this.savedContent = document.createElement("div");
-		while (this.domNode.hasChildNodes()) {
-			this.savedContent.appendChild(this.domNode.firstChild);
-		}
-		
-		// If we're a list item we have to put in a blank line to force the
-		// bullet to nicely align at the top of text
-		if (this.domNode.nodeName == "LI") { this.domNode.innerHTML = " <br>"; }
-				
-		if (this.saveName != "") {
-			var saveTextarea = document.getElementById("dojo.widget.RichText.savedContent");
-			if (saveTextarea.value != "") {
-				var datas = saveTextarea.value.split(this._SEPARATOR);
-				for (var i = 0; i < datas.length; i++) {
-					var data = datas[i].split(":");
-					if (data[0] == this.saveName) {
-						html = data[1];
-						datas.splice(i, 1);
-						break;
-					}
-				}				
-			}
-			this.connect(window, "onunload", "_saveContent");
-		}
-
-		// Safari's selections go all out of whack if we do it inline,
-		// so for now IE is our only hero
-		//if (typeof document.body.contentEditable != "undefined") {
-		if (this.useActiveX && dojo.render.html.ie) { // active-x
-			this._drawObject(html);
-		} else if (dojo.render.html.ie) { // contentEditable, easy
-			this.editNode = document.createElement("div");
-			with (this.editNode) {
-				contentEditable = true;
-				innerHTML = html;
-				style.height = this.minHeight;
-			}
-			this.domNode.appendChild(this.editNode);
-			
-			var events = ["onBlur", "onFocus", "onKeyPress",
-				"onKeyDown", "onKeyUp", "onClick"];
-			for (var i = 0; i < events.length; i++) {
-				this.connect(this.editNode, events[i].toLowerCase(), events[i]);
-			}
-		
-			this.window = window;
-			this.document = document;
-			
-			this.onLoad();
-		} else { // designMode in iframe
-			this._drawIframe(html);
-		}
-
-		// TODO: this is a guess at the default line-height, kinda works
-		if (this.domNode.nodeName == "LI") { this.domNode.lastChild.style.marginTop = "-1.2em"; }
-		dojo.html.addClass(this.domNode, "RichTextEditable");
-		
-		this.isClosed = false;
-	},
-	
-	/** Draws an iFrame using the existing one if one exists. Used by Mozilla and Safari */
-	_drawIframe: function (html) {
-		if (!this.iframe) {
-			this.iframe = document.createElement("iframe");
-			with (this.iframe) {
-				scrolling = "no";
-				style.border = "none";
-				style.lineHeight = "0"; // squash line height
-				style.verticalAlign = "bottom";
-			}
-		}
-
-		with (this.iframe) {
-			width = this.inheritWidth ? this._oldWidth : "100%";
-			height = this._oldHeight;
-		}
-		this.domNode.appendChild(this.iframe);
-
-		var _iframeInitialized = false;
-
-		// now we wait for onload. Janky hack!
-		var ifrFunc = dojo.lang.hitch(this, function(){
-			if(!_iframeInitialized){
-				_iframeInitialized = true;
-			}else{ return; }
-			if(!this.editNode){
-				this.window = this.iframe.contentWindow;
-				this.document = this.iframe.contentDocument;
-			
-				// curry the getStyle function
-				var getStyle = (function (domNode) { return function (style) {
-					return dojo.style.getStyle(domNode, style);
-				}; })(this.domNode);
-				var font = getStyle('font-size') + " " + getStyle('font-family');
-		
-				var contentEditable = Boolean(document.body.contentEditable);
-				with(this.document){
-					if(!contentEditable){ designMode = "on"; }
-					open();
-					write(
-						//'<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">' +
-						'<html><title></title>\n' +
-						'<script type="text/javascript">\n' +
-						'	function init(){\n' +
-						// '		var pwidget = window.parent.dojo.widget.byId("'+this.widgetId+'");\n' +
-						// '		// pwidget.window = window\n' +
-						// '		pwidget.document = document\n' +
-						// '		alert(document.body.innerHTML);\n' +
-						// '		pwidget.onLoad();\n' +
-						'	}\n' +
-						'</script>\n' +
-						'<style type="text/css">\n' +
-						'    body,html { padding: 0; margin: 0; font: ' + font + '; }\n' +
-						// TODO: left positioning will case contents to disappear out of view
-						//       if it gets too wide for the visible area
-						'    body { position: fixed; top: 0; left: 0; right: 0;' +
-						'        min-height: ' + this.minHeight + '; }\n' +
-						'    p { margin: 1em 0 !important; }\n' +
-						'    body > *:first-child { padding-top: 0 !important; margin-top: 0 !important; }\n' +
-						'    body > *:last-child { padding-bottom: 0 !important; margin-bottom: 0 !important; }\n' +
-						'    li > ul:-moz-first-node, li > ol:-moz-first-node { padding-top: 1.2em; }\n' +
-						'    li { min-height: 1.2em; }\n' +
-						//'    p,ul,li { padding-top: 0; padding-bottom: 0; margin-top:0; margin-bottom: 0; }\n' +
-						'</style>\n' +
-						//'<base href="' + window.location + '">' +
-						'<body' + (contentEditable ? ' contentEditable="true"' : '') + ' onload="init();">' +
-						html + '</body></html>');
-					close();
-				}
-				
-				this.onLoad();
-			}else{
-				this.editNode.innerHTML = html;
-				this.onDisplayChanged(e);
-			}
-		});
-		if(dojo.render.html.moz){
-			this.iframe.onload = ifrFunc;
-		}else{
-			ifrFunc();
-		}
-	},
-	
-	/** Draws an active x object, used by IE */
-	_drawObject: function (html) {
-		this.object = document.createElement("object");
-
-		with (this.object) {
-			classid = "clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A";
-			width = this.inheritWidth ? this._oldWidth : "100%";
-			height = this._oldHeight;
-			Scrollbars = false;
-			Appearance = this._activeX.appearance.flat;
-		}
-		this.domNode.appendChild(this.object);
-
-		this.object.attachEvent("DocumentComplete", dojo.lang.hitch(this, "onLoad"));
-		this.object.attachEvent("DisplayChanged", dojo.lang.hitch(this, "_updateHeight"));
-		this.object.attachEvent("DisplayChanged", dojo.lang.hitch(this, "onDisplayChanged"));
-
-		this.object.DocumentHTML = '<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">' +
-			'<title></title>' +
-			'<style type="text/css">' +
-			'    body,html { padding: 0; margin: 0; }' + //font: ' + font + '; }' +
-			'    body { overflow: hidden; }' +
-			//'    #bodywrapper {  }' +
-			'</style>' +
-			//'<base href="' + window.location + '">' +
-			'<body><div id="bodywrapper">' + html + '</div></body>';
-	},
-
-/* Event handlers
- *****************/
-
-	onLoad: function(e){
-		this.isLoaded = true;
-		if (this.object){
-			this.document = this.object.DOM;
-			this.editNode = this.document.body.firstChild;
-		}else if (this.iframe){
-			this.editNode = this.document.body;
-			this.connect(this, "onDisplayChanged", "_updateHeight");
-	
-			try { // sanity check for Mozilla
-				this.document.execCommand("useCSS", false, true); // old moz call
-				this.document.execCommand("styleWithCSS", false, false); // new moz call
-				//this.document.execCommand("insertBrOnReturn", false, false); // new moz call
-			}catch(e2){ }
-			
-			if (dojo.render.html.safari) {
-				/*
-				this.iframe.style.visiblity = "visible";
-				this.iframe.style.border = "1px solid black";
-				this.editNode.style.visiblity = "visible";
-				this.editNode.style.border = "1px solid black";
-				*/
-				// this.onDisplayChanged();
-				this.connect(this.editNode, "onblur", "onBlur");
-				this.connect(this.editNode, "onfocus", "onFocus");
-			
-				this.interval = setInterval(dojo.lang.hitch(this, "onDisplayChanged"), 750);
-				// dojo.raise("onload");
-				// dojo.debug(this.editNode.parentNode.parentNode.parentNode.nodeName);
-			} else if (dojo.render.html.mozilla) {
-
-				// We need to unhook the blur event listener on close as we
-				// can encounter a garunteed crash in FF if another event is
-				// also fired
-				var doc = this.document;
-				var blurfp = dojo.event.browser.addListener(this.document, "blur", dojo.lang.hitch(this, "onBlur"));
-				var unBlur = { unBlur: function(e){
-						dojo.event.browser.removeListener(doc, "blur", blurfp);
-				} };
-				dojo.event.connect("before", this, "close", unBlur, "unBlur");
-				dojo.event.browser.addListener(this.document, "focus", dojo.lang.hitch(this, "onFocus"));
-			
-				// safari can't handle key listeners, it kills the speed
-				var addListener = dojo.event.browser.addListener;
-				addListener(this.document, "keypress", dojo.lang.hitch(this, "onKeyPress"));
-				addListener(this.document, "keydown", dojo.lang.hitch(this, "onKeyDown"));
-				addListener(this.document, "keyup", dojo.lang.hitch(this, "onKeyUp"));
-				addListener(this.document, "click", dojo.lang.hitch(this, "onClick"));
-			}
-
-			// FIXME: when scrollbars appear/disappear this needs to be fired						
-		}
-		
-		if(this.focusOnLoad){
-			this.focus();
-		}
-		this.onDisplayChanged(e);
-	},
-
-	/** Fired on keydown */
-	onKeyDown: function (e) {
-		// we need this event at the moment to get the events from control keys
-		// such as the backspace. It might be possible to add this to Dojo, so that
-		// keyPress events can be emulated by the keyDown and keyUp detection.
-	},
-	
-	/** Fired on keyup */
-	onKeyUp: function (e) {
-	},
-	
-	/** Fired on keypress. */
-	onKeyPress: function (e) {
-		// handle the various key events
-
-		var character = e.charCode > 0 ? String.fromCharCode(e.charCode) : null;
-		var code = e.keyCode;
-				
-		var preventDefault = true; // by default assume we cancel;
-
-		// define some key combos
-		if (e.ctrlKey || e.metaKey) { // modifier pressed
-			switch (character) {
-				case "b": this.execCommand("bold"); break;
-				case "i": this.execCommand("italic"); break;
-				case "u": this.execCommand("underline"); break;
-				//case "a": this.execCommand("selectall"); break;
-				//case "k": this.execCommand("createlink", ""); break;
-				case "Z": this.execCommand("redo"); break;
-				case "s": this.close(true); break; // saves
-				default: switch (code) {
-					case e.KEY_LEFT_ARROW:
-					case e.KEY_RIGHT_ARROW:
-						//break; // preventDefault stops the browser
-						       // going through its history
-					default:
-						preventDefault = false; break; // didn't handle here
-				}
-			}
-		} else {
-			switch (code) {
-				case e.KEY_TAB:
-				  // commenting out bcs it's crashing FF
-					// this.execCommand(e.shiftKey ? "unindent" : "indent");
-					// break;
-				default:
-					preventDefault = false; break; // didn't handle here
-			}
-		}
-		
-		if (preventDefault) { e.preventDefault(); }
-
-		// function call after the character has been inserted
-		dojo.lang.setTimeout(this, this.onKeyPressed, 1, e);
-	},
-	
-	/**
-	 * Fired after a keypress event has occured and it's action taken. This
-	 * is useful if action needs to be taken after text operations have
-	 * finished
-	 */
-	onKeyPressed: function (e) {
-		// Mozilla adds a single <p> with an embedded <br> when you hit enter once:
-		//   <p><br>\n</p>
-		// when you hit enter again it adds another <br> inside your enter
-		//   <p><br>\n<br>\n</p>
-		// and if you hit enter again it splits the <br>s over 2 <p>s
-		//   <p><br>\n</p>\n<p><br>\n</p>
-		// now this assumes that <p>s have double the line-height of <br>s to work
-		// and so we need to remove the <p>s to ensure the position of the cursor
-		// changes from the users perspective when they hit enter, as the second two
-		// html snippets render the same when margins are set to 0.
-		
-		// TODO: doesn't really work; is this really needed?
-		//if (dojo.render.html.moz) {
-		//	for (var i = 0; i < this.document.getElementsByTagName("p").length; i++) {
-		//		var p = this.document.getElementsByTagName("p")[i];
-		//		if (p.innerHTML.match(/^<br>\s$/m)) {
-		//			while (p.hasChildNodes()) { p.parentNode.insertBefore(p.firstChild, p); }
-		//			p.parentNode.removeChild(p);
-		//		}
-		//	}
-		//}
-		this.onDisplayChanged(/*e*/); // can't pass in e
-	},
-	
-	onClick: function (e) { this.onDisplayChanged(e); },
-	
-	onBlur: function (e){ },
-	onFocus: function (e){ },
-
-	blur: function () {
-		if (this.iframe) { this.window.blur(); }
-		else if (this.editNode) { this.editNode.blur(); }
-	},
-	
-	focus: function () {
-		if(this.iframe){
-			this.window.focus();
-		}else if(this.editNode){
-			this.editNode.focus();
-		}
-	},
-	
-	/** this event will be fired everytime the display context changes and the
-	 result needs to be reflected in the UI */
-	onDisplayChanged: function (e){ },
-	
-
-/* Formatting commands
- **********************/
-	
-	/** IE's Active X codes */
-	_activeX: {
-		command: {
-			bold: 5000,
-			italic: 5023,
-			underline: 5048,
-
-			justifycenter: 5024,
-			justifyleft: 5025,
-			justifyright: 5026,
-
-			cut: 5003,
-			copy: 5002,
-			paste: 5032,
-			"delete": 5004,
-
-			undo: 5049,
-			redo: 5033,
-
-			removeformat: 5034,
-			selectall: 5035,
-			unlink: 5050,
-
-			indent: 5018,
-			outdent: 5031,
-
-			insertorderedlist: 5030,
-			insertunorderedlist: 5051,
-
-			// table commands
-			inserttable: 5022,
-			insertcell: 5019,
-			insertcol: 5020,
-			insertrow: 5021,
-			deletecells: 5005,
-			deletecols: 5006,
-			deleterows: 5007,
-			mergecells: 5029,
-			splitcell: 5047,
-			
-			// the command need mapping, they don't translate directly
-			// to the contentEditable commands
-			setblockformat: 5043,
-			getblockformat: 5011,
-			getblockformatnames: 5012,
-			setfontname: 5044,
-			getfontname: 5013,
-			setfontsize: 5045,
-			getfontsize: 5014,
-			setbackcolor: 5042,
-			getbackcolor: 5010,
-			setforecolor: 5046,
-			getforecolor: 5015,
-			
-			findtext: 5008,
-			font: 5009,
-			hyperlink: 5016,
-			image: 5017,
-			
-			lockelement: 5027,
-			makeabsolute: 5028,
-			sendbackward: 5036,
-			bringforward: 5037,
-			sendbelowtext: 5038,
-			bringabovetext: 5039,
-			sendtoback: 5040,
-			bringtofront: 5041,
-			
-			properties: 5052
-		},
-		
-		ui: {
-			"default": 0,
-			prompt: 1,
-			noprompt: 2
-		},
-		
-		status: {
-			notsupported: 0,
-			disabled: 1,
-			enabled: 3,
-			latched: 7,
-			ninched: 11
-		},
-		
-		appearance: {
-			flat: 0,
-			inset: 1
-		},
-		
-		state: {
-			unchecked: 0,
-			checked: 1,
-			gray: 2
-		}
-	},
-	
-	/**
-	 * Used as the advice function by dojo.event.connect to map our
-	 * normalized set of commands to those supported by the target
-	 * browser
-	 *
-	 * @param arugments The arguments Array, containing at least one
-	 *                  item, the command and an optional second item,
-	 *                  an argument.
-	 */
-	_normalizeCommand: function (joinObject){
-		var drh = dojo.render.html;
-		
-		var command = joinObject.args[0].toLowerCase();
-		if(command == "formatblock"){
-			if(drh.safari){ command = "heading"; }
-			if(drh.ie){ joinObject.args[1] = "<"+joinObject.args[1]+">"; }
-		}
-		if (command == "hilitecolor" && !drh.mozilla) { command = "backcolor"; }
-		joinObject.args[0] = command;
-		
-		if (joinObject.args.length > 1) { // a command was specified
-			var argument = joinObject.args[1];
-			if (command == "heading") { throw new Error("unimplemented"); }
-			joinObject.args[1] = argument;
-		}
-		
-		return joinObject.proceed();
-	},
-	
-	/**
-	 * Tests whether a command is supported by the host. Clients SHOULD check
-	 * whether a command is supported before attempting to use it, behaviour
-	 * for unsupported commands is undefined.
-	 *
-	 * @param command The command to test for
-	 * @return true if the command is supported, false otherwise
-	 */
-	queryCommandAvailable: function (command) {
-		var ie = 1;
-		var mozilla = 1 << 1;
-		var safari = 1 << 2;
-		var opera = 1 << 3;
-		function isSupportedBy (browsers) {
-			return {
-				ie: Boolean(browsers & ie),
-				mozilla: Boolean(browsers & mozilla),
-				safari: Boolean(browsers & safari),
-				opera: Boolean(browsers & opera)
-			}
-		}
-
-		var supportedBy = null;
-		
-		switch (command.toLowerCase()) {
-			case "bold": case "italic": case "underline":
-			case "subscript": case "superscript":
-			case "fontname": case "fontsize":
-			case "forecolor": case "hilitecolor":
-			case "justifycenter": case "justifyfull": case "justifyleft": case "justifyright":
-			case "cut": case "copy": case "paste": case "delete":
-			case "undo": case "redo":
-				supportedBy = isSupportedBy(mozilla | ie | safari | opera);
-				break;
-				
-			case "createlink": case "unlink": case "removeformat":
-			case "inserthorizontalrule": case "insertimage":
-			case "insertorderedlist": case "insertunorderedlist":
-			case "indent": case "outdent": case "formatblock": case "strikethrough": 
-				supportedBy = isSupportedBy(mozilla | ie | opera);
-				break;
-				
-			case "blockdirltr": case "blockdirrtl":
-			case "dirltr": case "dirrtl":
-			case "inlinedirltr": case "inlinedirrtl":
-				supportedBy = isSupportedBy(ie);
-				break;
-			
-			case "inserttable":
-				supportedBy = isSupportedBy(mozilla | (this.object ? ie : 0));
-				break;
-			
-			case "insertcell": case "insertcol": case "insertrow":
-			case "deletecells": case "deletecols": case "deleterows":
-			case "mergecells": case "splitcell":
-				supportedBy = isSupportedBy(this.object ? ie : 0);
-				break;
-			
-			default: return false;
-		}
-		
-		return (dojo.render.html.ie && supportedBy.ie) ||
-			(dojo.render.html.mozilla && supportedBy.mozilla) ||
-			(dojo.render.html.safari && supportedBy.safari) ||
-			(dojo.render.html.opera && supportedBy.opera);
-	},
-	
-	/**
-	 * Executes a command in the Rich Text area
-	 *
-	 * @param command The command to execute
-	 * @param argument An optional argument to the command
-	 */
-	execCommand: function (command, argument) {
-		if (this.object) {
-			if (command == "forecolor") { command = "setforecolor"; }
-			else if (command == "backcolor") { command = "setbackcolor"; }
-		
-			//if (typeof this._activeX.command[command] == "undefined") { return null; }
-		
-			if (command == "inserttable") {
-				var tableInfo = this.constructor._tableInfo;
-				if (!tableInfo) {
-					tableInfo = document.createElement("object");
-					tableInfo.classid = "clsid:47B0DFC7-B7A3-11D1-ADC5-006008A5848C";
-					document.body.appendChild(tableInfo);
-					this.constructor._table = tableInfo;
-				}
-				
-				tableInfo.NumRows = argument.rows;
-				tableInfo.NumCols = argument.cols;
-				tableInfo.TableAttrs = argument["TableAttrs"];
-				tableInfo.CellAttrs = arr["CellAttrs"];
-				tableInfo.Caption = arr["Caption"];
-			}
-		
-			if (arguments.length == 1) {
-				return this.object.ExecCommand(this._activeX.command[command],
-					this._activeX.ui.noprompt);
-			} else {
-				return this.object.ExecCommand(this._activeX.command[command],
-					this._activeX.ui.noprompt, argument);
-			}
-	
-		// fix up unlink in Mozilla to unlink the link and not just the selection
-		} else if (command == "unlink" &&
-			this.queryCommandEnabled("unlink") && dojo.render.html.mozilla) {
-			// grab selection
-			// Mozilla gets upset if we just store the range so we have to
-			// get the basic properties and recreate to save the selection
-			var selection = this.window.getSelection();
-			var selectionRange = selection.getRangeAt(0);
-			var selectionStartContainer = selectionRange.startContainer;
-			var selectionStartOffset = selectionRange.startOffset;
-			var selectionEndContainer = selectionRange.endContainer;
-			var selectionEndOffset = selectionRange.endOffset;
-			
-			// select our link and unlink
-			var range = document.createRange();
-			var a = this.getSelectedNode();
-			while (a.nodeName != "A") { a = a.parentNode; }
-			range.selectNode(a);
-			selection.removeAllRanges();
-			selection.addRange(range);
-			
-			var returnValue = this.document.execCommand("unlink", false, null);
-			
-			// restore original selection
-			var selectionRange = document.createRange();
-			selectionRange.setStart(selectionStartContainer, selectionStartOffset);
-			selectionRange.setEnd(selectionEndContainer, selectionEndOffset);
-			selection.removeAllRanges();
-			selection.addRange(selectionRange);
-			
-			return returnValue;
-		} else if (command == "inserttable" && dojo.render.html.mozilla) {
-
-			var cols = "<tr>";
-			for (var i = 0; i < argument.cols; i++) { cols += "<td></td>"; }
-			cols += "</tr>";
-		
-			var table = "<table><tbody>";
-			for (var i = 0; i < argument.rows; i++) { table += cols; }
-			table += "</tbody></table>";
-			var returnValue = this.document.execCommand("inserthtml", false, table);
-
-		} else if (command == "hilitecolor" && dojo.render.html.mozilla) {
-			// mozilla doesn't support hilitecolor properly when useCSS is
-			// set to false (bugzilla #279330)
-			
-			this.document.execCommand("useCSS", false, false);
-			var returnValue = this.document.execCommand(command, false, argument);			
-			this.document.execCommand("useCSS", false, true);
-		
-		} else {
-			argument = arguments.length > 1 ? argument : null;
-			var returnValue = this.document.execCommand(command, false, argument);
-		}
-		
-		this.onDisplayChanged();
-		return returnValue;
-	},
-
-	queryCommandEnabled: function (command, argument) {
-		if (this.object) {
-			if (command == "forecolor") { command = "setforecolor"; }
-			else if (command == "backcolor") { command = "setbackcolor"; }
-
-			if (typeof this._activeX.command[command] == "undefined") { return false; }
-			var status = this.object.QueryStatus(this._activeX.command[command]);
-			return (status != this.activeX.status.notsupported && 
-				status != this.activeX.status.diabled);
-		} else {
-			// mozilla returns true always
-			if (command == "unlink" && dojo.render.html.mozilla) {
-				var node = this.getSelectedNode();
-				while (node.parentNode && node.nodeName != "A") { node = node.parentNode; }
-				return node.nodeName == "A";
-			} else if (command == "inserttable" && dojo.render.html.mozilla) {
-				return true;
-			}
-			return this.document.queryCommandEnabled(command);
-		}
-	},
-
-	queryCommandState: function (command, argument) {
-		if (this.object) {
-			if (command == "forecolor") { command = "setforecolor"; }
-			else if (command == "backcolor") { command = "setbackcolor"; }
-
-			if (typeof this._activeX.command[command] == "undefined") { return null; }
-			var status = this.object.QueryStatus(this._activeX.command[command]);
-			return (status == this._activeX.status.enabled ||
-				status == this._activeX.status.ninched);
-		} else {
-			return this.document.queryCommandState(command);
-		}
-	},
-
-	queryCommandValue: function (command, argument) {
-		if (this.object) {
-			switch (command) {
-				case "forecolor":
-				case "backcolor":
-				case "fontsize":
-				case "fontname":
-				case "blockformat":
-					command = "get" + command;
-					return this.object.execCommand(
-						this._activeX.command[command],
-						this._activeX.ui.noprompt);
-			}			
-		
-			//var status = this.object.QueryStatus(this._activeX.command[command]);
-		} else {
-			return this.document.queryCommandValue(command);
-		}
-	},
-	
-	
-/* Misc.
- ********/
-
-	getSelectedNode: function () {
-		if(!this.isLoaded){ return; }
-		if (this.document.selection) {
-			return this.document.selection.createRange().parentElement();
-		} else if (dojo.render.html.mozilla) {
-			return this.window.getSelection().getRangeAt(0).commonAncestorContainer;
-		}
-		return this.editNode;
-	},
-	
-	placeCursorAtStart: function () {
-		if(!this.isLoaded){
-			dojo.event.connect(this, "onLoad", this, "placeCursorAtEnd");
-			return;
-		}
-		dojo.event.disconnect(this, "onLoad", this, "placeCursorAtEnd");
-		if (this.window.getSelection) {
-			var selection = this.window.getSelection;
-			if (selection.removeAllRanges) { // Mozilla			
-				var range = this.document.createRange();
-				range.selectNode(this.editNode.firstChild);
-				range.collapse(true);
-				var selection = this.window.getSelection();
-				selection.removeAllRanges();
-				selection.addRange(range);
-			} else { // Safari
-				// not a great deal we can do
-			}
-		} else if (this.document.selection) { // IE
-			var range = this.document.body.createTextRange();
-			range.moveToElementText(this.editNode);
-			range.collapse(true);
-			range.select();
-		}
-	},
-	
-	placeCursorAtEnd: function () {
-		if(!this.isLoaded){
-			dojo.event.connect(this, "onLoad", this, "placeCursorAtEnd");
-			return;
-		}
-		dojo.event.disconnect(this, "onLoad", this, "placeCursorAtEnd");
-		if (this.window.getSelection) {
-			var selection = this.window.getSelection;
-			if (selection.removeAllRanges) { // Mozilla			
-				var range = this.document.createRange();
-				range.selectNode(this.editNode.lastChild);
-				range.collapse(false);
-				var selection = this.window.getSelection();
-				selection.removeAllRanges();
-				selection.addRange(range);
-			} else { // Safari
-				// not a great deal we can do
-			}
-		} else if (this.document.selection) { // IE
-			var range = this.document.body.createTextRange();
-			range.moveToElementText(this.editNode);
-			range.collapse(true);
-			range.select();
-		}
-	},
-
-	_lastHeight: 0,
-
-	/** Updates the height of the iframe to fit the contents. */
-	_updateHeight: function () {
-		if (this.iframe) {
-			/*
-			if(!this.document.body["offsetHeight"]){
-				return;
-			}
-			*/
-			// The height includes the padding, borders and margins so these
-			// need to be added on
-			var heights = ["margin-top", "margin-bottom",
-				"padding-bottom", "padding-top",
-				"border-width-bottom", "border-width-top"];
-			for (var i = 0, chromeheight = 0; i < heights.length; i++) {
-				var height = dojo.style.getStyle(this.iframe, heights[i]);
-				// Safari doesn't have all the heights so we have to test
-				if (height) {
-					chromeheight += Number(height.replace(/[^0-9]/g, ""));
-				}
-			}
-			// dojo.debug(this.document.body.offsetHeight);
-			// dojo.debug(chromeheight);
-			if(this.document.body["offsetHeight"]){
-				this._lastHeight = this.document.body.offsetHeight + chromeheight;
-				this.iframe.height = this._lastHeight + "px";
-				this.window.scrollTo(0, 0);
-			}
-			// this.iframe.height = this._lastHeight + "px";
-			// dojo.debug(this.iframe.height);
-		} else if (this.object) {
-			this.object.height = dojo.style.getInnerHeight(this.editNode);
-		}
-	},
-	
-	/**
-	 * Saves the content in an onunload event if the editor has not been closed
-	 */
-	_saveContent: function(e){
-		var saveTextarea = document.getElementById("dojo.widget.RichText.savedContent");
-		saveTextarea.value += this._SEPARATOR + this.saveName + ":" + this.getEditorContent();
-	},
-
-	getEditorContent: function(){
-		var ec = "";
-		try{
-			ec = (this._content.length > 0) ? this._content : this.editNode.innerHTML;
-		}catch(e){ /* squelch */ }
-
-		dojo.lang.forEach(this.contentFilters, function(ef){
-			ec = ef(ec);
-		});
-		return ec;
-	},
-	
-	/**
-	 * Kills the editor and optionally writes back the modified contents to the 
-	 * element from which it originated.
-	 *
-	 * @param save Whether or not to save the changes. If false, the changes are
-	 *             discarded.
-	 * @return true if the contents has been modified, false otherwise
-	 */
-	close: function(save, force){
-		if(this.isClosed){return false; }
-
-		if (arguments.length == 0) { save = true; }
-		this._content = this.editNode.innerHTML;
-		var changed = (this.savedContent.innerHTML != this._content);
-		
-		// line height is squashed for iframes
-		if (this.iframe){ this.domNode.style.lineHeight = null; }
-		
-		if(this.interval){ clearInterval(this.interval); }
-		
-		if(dojo.render.html.ie && !this.object){
-			dojo.event.browser.clean(this.editNode);
-		}
-		if(dojo.render.html.moz){
-			var ifr = this.domNode.firstChild;
-			ifr.style.display = "none";
-			/*
-			setTimeout(function(){
-				ifr.parentNode.removeChild(ifr);
-			}, 0);
-			*/
-		}else{
-			this.domNode.innerHTML = "";
-		}
-		// dojo.dom.removeChildren(this.domNode);
-		if(save){
-			if(dojo.render.html.moz){
-				var nc = document.createElement("span");
-				this.domNode.appendChild(nc);
-				nc.innerHTML = this.editNode.innerHTML;
-			}else{
-				this.domNode.innerHTML = this._content;
-			}
-			// kill listeners on the saved content
-			dojo.event.browser.clean(this.savedContent);
-		} else {
-			while (this.savedContent.hasChildNodes()) {
-				this.domNode.appendChild(this.savedContent.firstChild);
-			}
-		}
-		delete this.savedContent;
-		
-		dojo.html.removeClass(this.domNode, "RichTextEditable");
-		this.isClosed = true;
-		this.isLoaded = false;
-
-		return changed;
-	},
-	
-	destroy: function () {
-		if (!this.isClosed) { this.close(false); }
-	
-		// disconnect those listeners.
-		while (this._connected.length) {
-			this.disconnect(this._connected[0],
-				this._connected[1], this._connected[2]);
-		}
-	},
-
-	_connected: [],
-	connect: function (targetObj, targetFunc, thisFunc) {
-		dojo.event.connect(targetObj, targetFunc, this, thisFunc);
-		// this._connected.push([targetObj, targetFunc, thisFunc]);	
-	},
-	
-	// FIXME: below two functions do not work with the above line commented out
-	disconnect: function (targetObj, targetFunc, thisFunc) {
-		for (var i = 0; i < this._connected.length; i++) {
-			if (this._connected[0] == targetObj &&
-				this._connected[1] == targetFunc &&
-				this._connected[2] == thisFunc) {
-				dojo.event.disconnect(targetObj, targetFunc, this, thisFunc);
-				this._connected.splice(i, 1);
-				break;
-			}
-		}
-	},
-	
-	disconnectAllWithRoot: function (targetObj) {
-		for (var i = 0; i < this._connected.length; i++) {
-			if (this._connected[0] == targetObj) {
-				dojo.event.disconnect(targetObj,
-					this._connected[1], this, this._connected[2]);
-				this._connected.splice(i, 1);
-			}
-		}	
-	}
-	
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SimpleDropdownButtons.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SimpleDropdownButtons.js
deleted file mode 100644
index 851b862..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SimpleDropdownButtons.js
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/* TODO:
- * - make the dropdowns "smart" so they can't get cutoff on bottom of page, sides of page, etc.
- * - unify menus with the MenuItem and Menu classes so we can add stuff to all menus at once
- * - allow buttons to be enabled/disabled at runtime
- *     - this probably means creating all menus upfront and then triggering a disable action
- *       for disabled buttons in the constructor loop. we'll need a disable and enable action anyway
- * - should each button with menu be a widget object of it's own?
- */
-dojo.provide("dojo.widget.SimpleDropdownButtons");
-dojo.provide("dojo.widget.HtmlSimpleDropdownButtons");
-
-dojo.deprecated("dojo.widget.SimpleDropdownButtons",  "use dojo.widget.DropDownButton2", "0.4");
-
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.dom");
-dojo.require("dojo.style");
-dojo.require("dojo.html");
-
-dojo.widget.tags.addParseTreeHandler("dojo:simpledropdownbuttons");
-
-dojo.widget.HtmlSimpleDropdownButtons = function() {
-	dojo.widget.HtmlWidget.call(this);
-
-	this.widgetType = "SimpleDropdownButtons";
-	this.templateCssPath = dojo.uri.dojoUri("src/widget/templates/HtmlSimpleDropdownButtons.css");
-
-	this.menuTriggerClass = "dojoSimpleDropdownButtons";
-	this.menuClass = "dojoSimpleDropdownButtonsMenu";
-
-	// overwrite buildRendering so we don't clobber our list
-	this.buildRendering = function(args, frag) {
-		if(this.templateCssPath) {
-			dojo.style.insertCssFile(this.templateCssPath, null, true);
-		}
-		this.domNode = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-
-		var menu = this.domNode;
-		if( !dojo.html.hasClass(menu, this.menuTriggerClass) ) {
-			dojo.html.addClass(menu, this.menuTriggerClass);
-		}
-		var li = dojo.dom.getFirstChildElement(menu);
-		var menuIDs = [];
-		var arrowIDs = [];
-
-		while(li) {
-			if(li.getElementsByTagName("ul").length > 0) {
-				var a = dojo.dom.getFirstChildElement(li);
-				var arrow = document.createElement("a");
-				arrow.href = "javascript:;";
-				arrow.innerHTML = "&nbsp;";
-				dojo.html.setClass(arrow, "downArrow");
-				if(!arrow.id) {
-					arrow.id = dojo.dom.getUniqueId();
-				}
-				arrowIDs.push(arrow.id);
-				var submenu = dojo.dom.getNextSiblingElement(a);
-				if(!submenu.id) {
-					submenu.id = dojo.dom.getUniqueId();
-				}
-				menuIDs.push(submenu.id);
-
-				if( dojo.html.hasClass(a, "disabled") ) {
-					dojo.html.addClass(arrow, "disabled");
-					dojo.html.disableSelection(li);
-					arrow.onfocus = function(){ this.blur(); }
-				} else {
-					dojo.html.addClass(submenu, this.menuClass);
-					dojo.html.body().appendChild(submenu);
-					dojo.event.connect(arrow, "onmousedown", (function() {
-						var ar = arrow;
-						return function(e) {
-							dojo.html.addClass(ar, "pressed");
-						}
-					})());
-					dojo.event.connect(arrow, "onclick", (function() {
-						var aa = a;
-						var ar = arrow;
-						var sm = submenu;
-						var setWidth = false;
-
-						return function(e) {
-							hideAll(sm, ar);
-							sm.style.left = (dojo.html.getScrollLeft()
-								+ e.clientX - e.layerX + aa.offsetLeft) + "px";
-							sm.style.top = (dojo.html.getScrollTop() + e.clientY
-								- e.layerY + aa.offsetTop + aa.offsetHeight) + "px";
-							sm.style.display = sm.style.display == "block" ? "none" : "block";
-							if(sm.style.display == "none") {
-								dojo.html.removeClass(ar, "pressed");
-								e.target.blur()
-							}
-							if(!setWidth && sm.style.display == "block"
-								&& sm.offsetWidth < aa.offsetWidth + ar.offsetWidth) {
-								sm.style.width = aa.offsetWidth + ar.offsetWidth + "px";
-								setWidth = true;
-							}
-							e.preventDefault();
-						}
-					})());
-				}
-
-				dojo.event.connect(a, "onclick", function(e) {
-					if(e && e.target && e.target.blur) {
-						e.target.blur();
-					}
-				});
-
-				if(a.nextSibling) {
-					li.insertBefore(arrow, a.nextSibling);
-				} else {
-					li.appendChild(arrow);
-				}
-
-			}
-			li = dojo.dom.getNextSiblingElement(li);
-		}
-
-		function hideAll(excludeMenu, excludeArrow) {
-			// hide menus
-			for(var i = 0; i < menuIDs.length; i++) {
-				var m = document.getElementById(menuIDs[i]);
-				if(!excludeMenu || m != excludeMenu) {
-					document.getElementById(menuIDs[i]).style.display = "none";
-				}
-			}
-			// restore arrows to non-pressed state
-			for(var i = 0; i < arrowIDs.length; i++) {
-				var m = document.getElementById(arrowIDs[i]);
-				if(!excludeArrow || m != excludeArrow) {
-					dojo.html.removeClass(m, "pressed");
-				}
-			}
-		}
-
-		dojo.event.connect(document.documentElement, "onmousedown", function(e) {
-			if( dojo.html.hasClass(e.target, "downArrow") ) { return };
-			for(var i = 0; i < menuIDs.length; i++) {
-				if( dojo.dom.isDescendantOf(e.target, document.getElementById(menuIDs[i])) ) {
-					return;
-				}
-			}
-			hideAll();
-		});
-	}
-}
-dojo.inherits(dojo.widget.HtmlSimpleDropdownButtons, dojo.widget.HtmlWidget);
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SlideShow.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SlideShow.js
deleted file mode 100644
index c768e85..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SlideShow.js
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.SlideShow");
-dojo.provide("dojo.widget.html.SlideShow");
-
-dojo.require("dojo.event");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.fx.html");
-dojo.require("dojo.style");
-
-dojo.widget.html.SlideShow = function(){
-	dojo.widget.HtmlWidget.call(this);
-
-	this.templatePath = dojo.uri.dojoUri("src/widget/templates/HtmlSlideShow.html");
-	this.templateCssPath = dojo.uri.dojoUri("src/widget/templates/HtmlSlideShow.css");
-
-	// over-ride some defaults
-	this.isContainer = false;
-	this.widgetType = "SlideShow";
-
-	// useful properties
-	this.imgUrls = [];		// the images we'll go through
-	this.imgUrlBase = "";
-	this.urlsIdx = 0;		// where in the images we are
-	this.delay = 4000; 		// give it 4 seconds
-	this.transitionInterval = 2000; // 2 seconds
-	this.imgWidth = 800;	// img width
-	this.imgHeight = 600;	// img height
-	this.background = "img2"; // what's in the bg
-	this.foreground = "img1"; // what's in the fg
-	this.stopped = false;	// should I stay or should I go?
-	this.fadeAnim = null; // references our animation
-
-	// our DOM nodes:
-	this.imagesContainer = null;
-	this.startStopButton = null;
-	this.controlsContainer = null;
-	this.img1 = null;
-	this.img2 = null;
-
-	this.fillInTemplate = function(){
-		dojo.style.setOpacity(this.img1, 0.9999);
-		dojo.style.setOpacity(this.img2, 0.9999);
-		with(this.imagesContainer.style){
-			width = this.imgWidth+"px";
-			height = this.imgHeight+"px";
-		}
-		with(this.img1.style){
-			width = this.imgWidth+"px";
-			height = this.imgHeight+"px";
-		}
-		with(this.img2.style){
-			width = this.imgWidth+"px";
-			height = this.imgHeight+"px";
-		}
-		if(this.imgUrls.length>1){
-			this.img2.src = this.imgUrlBase+this.imgUrls[this.urlsIdx++];
-			this.endTransition();
-		}else{
-			this.img1.src = this.imgUrlBase+this.imgUrls[this.urlsIdx++];
-		}
-	}
-
-	this.togglePaused = function(){
-		if(this.stopped){
-			this.stopped = false;
-			this.endTransition();
-			this.startStopButton.value= "pause";
-		}else{
-			this.stopped = true;
-			this.startStopButton.value= "play";
-		}
-	}
-
-	this.backgroundImageLoaded = function(){
-		// start fading out the foreground image
-		if(this.stopped){ return; }
-		// closure magic for callback
-		var _this = this; 
-		var callback = function(){ _this.endTransition(); };
-
-		// actually start the fadeOut effect
-		// NOTE: if we wanted to use other transition types, we'd set them up
-		// 		 here as well
-		if(this.fadeAnim) {
-			this.fadeAnim.stop();
-		}
-		this.fadeAnim = dojo.fx.html.fadeOut(this[this.foreground], 
-			this.transitionInterval, callback);
-	}
-
-	this.endTransition = function(){
-		// move the foreground image to the background 
-		with(this[this.background].style){ zIndex = parseInt(zIndex)+1; }
-		with(this[this.foreground].style){ zIndex = parseInt(zIndex)-1; }
-
-		// fg/bg book-keeping
-		var tmp = this.foreground;
-		this.foreground = this.background;
-		this.background = tmp;
-
-		// keep on truckin
-		this.loadNextImage();
-	}
-
-	this.loadNextImage = function(){
-		// load a new image in that container, and make sure it informs
-		// us when it finishes loading
-		dojo.event.kwConnect({
-			srcObj: this[this.background],
-			srcFunc: "onload",
-			adviceObj: this,
-			adviceFunc: "backgroundImageLoaded",
-			once: true, // make sure we only ever hear about it once
-			delay: this.delay
-		});
-		dojo.style.setOpacity(this[this.background], 1.0);
-		this[this.background].src = this.imgUrlBase+this.imgUrls[this.urlsIdx++];
-		if(this.urlsIdx>(this.imgUrls.length-1)){
-			this.urlsIdx = 0;
-		}
-	}
-}
-dojo.inherits(dojo.widget.html.SlideShow, dojo.widget.HtmlWidget);
-dojo.widget.tags.addParseTreeHandler("dojo:slideshow");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SplitPane.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SplitPane.js
deleted file mode 100644
index 754946e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SplitPane.js
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.SplitPane");
-dojo.provide("dojo.widget.SplitPanePanel");
-dojo.provide("dojo.widget.html.SplitPane");
-dojo.provide("dojo.widget.html.SplitPanePanel");
-
-//
-// TODO
-// make it prettier
-// active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case)
-//
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.LayoutPane");
-dojo.require("dojo.widget.Container");
-dojo.require("dojo.html");
-dojo.require("dojo.style");
-dojo.require("dojo.dom");
-
-dojo.widget.html.SplitPane = function(){
-
-	dojo.widget.html.Container.call(this);
-
-	this.sizers = [];
-}
-
-dojo.inherits(dojo.widget.html.SplitPane, dojo.widget.html.Container);
-
-dojo.lang.extend(dojo.widget.html.SplitPane, {
-	widgetType: "SplitPane",
-	virtualSizer: null,
-	isHorizontal: 0,
-	paneBefore: null,
-	paneAfter: null,
-	isSizing: false,
-	dragOffset: null,
-	startPoint: null,
-	lastPoint: null,
-	sizingSplitter: null,
-	isActiveResize: 0,
-	offsetX: 0,
-	offsetY: 0,
-	isDraggingLeft: 0,
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlSplitPane.css"),
-	originPos: null,
-
-	activeSizing: '',
-	sizerWidth: 15,
-	orientation: 'horizontal',
-
-	debugName: '',
-
-	fillInTemplate: function(){
-
-		dojo.style.insertCssFile(this.templateCssPath, null, true);
-		dojo.html.addClass(this.domNode, "dojoHtmlSplitPane");
-		this.domNode.style.overflow='hidden';	// workaround firefox bug
-
-		this.paneWidth = dojo.style.getContentWidth(this.domNode);
-		this.paneHeight = dojo.style.getContentHeight(this.domNode);
-
-		this.isHorizontal = (this.orientation == 'horizontal') ? 1 : 0;
-		this.isActiveResize = (this.activeSizing == '1') ? 1 : 0;
-
-		//dojo.debug("fillInTemplate for "+this.debugName);
-	},
-
-	onResized: function(e){
-		this.paneWidth = dojo.style.getContentWidth(this.domNode);
-		this.paneHeight = dojo.style.getContentHeight(this.domNode);
-		this.layoutPanels();
-		this.notifyChildrenOfResize();	// notify children they've been moved/resized
-	},
-
-	postCreate: function(args, fragment, parentComp){
-
-		// dojo.debug("post create for "+this.debugName);
-
-		// attach the children
-
-		for(var i=0; i<this.children.length; i++){
-			with(this.children[i].domNode.style){
-				position = "absolute";
-			}
-			dojo.html.addClass(this.children[i].domNode, 
-				"dojoHtmlSplitterPanePanel");
-		}
-
-		// create the draggers
-
-		for(var i=0; i<this.children.length-1; i++){
-
-			// i still don't understand this closure black magic :) [CH]
-			var self = this;
-			var handler = (function(){ var sizer_i = i; return function(e){ self.beginSizing(e, sizer_i); } })();
-
-			this.sizers[i] = document.createElement('div');
-			this.sizers[i].style.position = 'absolute';
-			this.sizers[i].onmousedown = handler;
-			this.sizers[i].className = this.isHorizontal ? 'dojoHtmlSplitPaneSizerH' : 'dojoHtmlSplitPaneSizerV';
-			this.domNode.appendChild(this.sizers[i]);
-
-			dojo.html.disableSelection(this.sizers[i]);
-
-		}
-
-		// create the fake dragger
-
-		this.virtualSizer = document.createElement('div');
-		this.virtualSizer.style.position = 'absolute';
-		this.virtualSizer.style.display = 'none';
-		//this.virtualSizer.style.backgroundColor = 'lime';
-		this.virtualSizer.style.zIndex = 10;
-		this.virtualSizer.className = this.isHorizontal ? 'dojoHtmlSplitPaneVirtualSizerH' : 'dojoHtmlSplitPaneVirtualSizerV';
-		this.domNode.appendChild(this.virtualSizer);
-
-		dojo.html.disableSelection(this.virtualSizer);
-
-		//
-		// size the panels once the browser has caught up
-		//
-		this.resizeSoon();
-	},
-
-	layoutPanels: function(){
-
-		//
-		// calculate space
-		//
-
-		var space = this.isHorizontal ? this.paneWidth : this.paneHeight;
-
-		if (this.children.length > 1){
-
-			space -= this.sizerWidth * (this.children.length - 1);
-		}
-
-
-		//
-		// calculate total of SizeShare values
-		//
-
-		var out_of = 0;
-
-		for(var i=0; i<this.children.length; i++){
-
-			out_of += this.children[i].sizeShare;
-		}
-
-
-		//
-		// work out actual pixels per sizeshare unit
-		//
-
-		var pix_per_unit = space / out_of;
-
-
-		//
-		// set the SizeActual member of each pane
-		//
-
-		var total_size = 0;
-
-		for(var i=0; i<this.children.length-1; i++){
-
-			var size = Math.round(pix_per_unit * this.children[i].sizeShare);
-			this.children[i].sizeActual = size;
-			total_size += size;
-		}
-		this.children[this.children.length-1].sizeActual = space - total_size;
-
-		//
-		// make sure the sizes are ok
-		//
-
-		this.checkSizes();
-
-
-		//
-		// now loop, positioning each pane
-		//
-
-		var pos = 0;
-		var size = this.children[0].sizeActual;
-		this.movePanel(this.children[0].domNode, pos, size);
-		this.children[0].position = pos;
-		pos += size;
-
-		for(var i=1; i<this.children.length; i++){
-
-			// first we position the sizing handle before this pane
-			this.movePanel(this.sizers[i-1], pos, this.sizerWidth);
-			this.sizers[i-1].position = pos;
-			pos += this.sizerWidth;
-
-			size = this.children[i].sizeActual;
-			this.movePanel(this.children[i].domNode, pos, size);
-			this.children[i].position = pos;
-			pos += size;
-		}
-		
-		//
-		// if children are widgets, then let them resize themselves (if they want to)
-		//
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].onResized();
-		}
-	},
-
-	movePanel: function(panel, pos, size){
-		if (this.isHorizontal){
-			panel.style.left = pos + 'px';
-			panel.style.top = 0;
-
-			dojo.style.setOuterWidth(panel, size);
-			dojo.style.setOuterHeight(panel, this.paneHeight);
-		}else{
-			panel.style.left = 0;
-			panel.style.top = pos + 'px';
-
-			dojo.style.setOuterWidth(panel, this.paneWidth);
-			dojo.style.setOuterHeight(panel, size);
-		}
-	},
-
-	growPane: function(growth, pane){
-
-		if (growth > 0){
-			if (pane.sizeActual > pane.sizeMin){
-				if ((pane.sizeActual - pane.sizeMin) > growth){
-
-					// stick all the growth in this pane
-					pane.sizeActual = pane.sizeActual - growth;
-					growth = 0;
-				}else{
-					// put as much growth in here as we can
-					growth -= pane.sizeActual - pane.sizeMin;
-					pane.sizeActual = pane.sizeMin;
-				}
-			}
-		}
-		return growth;
-	},
-
-	checkSizes: function(){
-
-		var total_min_size = 0;
-		var total_size = 0;
-
-		for(var i=0; i<this.children.length; i++){
-
-			total_size += this.children[i].sizeActual;
-			total_min_size += this.children[i].sizeMin;
-		}
-
-		// only make adjustments if we have enough space for all the minimums
-
-		if (total_min_size <= total_size){
-
-			var growth = 0;
-
-			for(var i=0; i<this.children.length; i++){
-
-				if (this.children[i].sizeActual < this.children[i].sizeMin){
-
-					growth += this.children[i].sizeMin - this.children[i].sizeActual;
-					this.children[i].sizeActual = this.children[i].sizeMin;
-				}
-			}
-
-			if (growth > 0){
-				if (this.isDraggingLeft){
-					for(var i=this.children.length-1; i>=0; i--){
-						growth = this.growPane(growth, this.children[i]);
-					}
-				}else{
-					for(var i=0; i<this.children.length; i++){
-						growth = this.growPane(growth, this.children[i]);
-					}
-				}
-			}
-		}else{
-
-			for(var i=0; i<this.children.length; i++){
-				this.children[i].sizeActual = Math.round(total_size * (this.children[i].sizeMin / total_min_size));
-			}
-		}
-	},
-
-	beginSizing: function(e, i){
-		var clientX = window.event ? window.event.offsetX : e.layerX;
-		var clientY = window.event ? window.event.offsetY : e.layerY;
-		var screenX = window.event ? window.event.clientX : e.pageX;
-		var screenY = window.event ? window.event.clientY : e.pageY;
-
-		this.paneBefore = this.children[i];
-		this.paneAfter = this.children[i+1];
-
-		this.isSizing = true;
-		this.sizingSplitter = this.sizers[i];
-		this.originPos = dojo.style.getAbsolutePosition(this.domNode, true);
-		this.dragOffset = {'x':clientX, 'y':clientY};
-		this.startPoint  = {'x':screenX, 'y':screenY};
-		this.lastPoint  = {'x':screenX, 'y':screenY};
-
-		this.offsetX = screenX - clientX;
-		this.offsetY = screenY - clientY;
-
-		if (!this.isActiveResize){
-			this.showSizingLine();
-		}
-		
-		//
-		// attach mouse events
-		//
-
-		dojo.event.connect(document.documentElement, "onmousemove", this, "changeSizing");
-		dojo.event.connect(document.documentElement, "onmouseup", this, "endSizing");
-	},
-
-	changeSizing: function(e){
-
-		// FIXME: is this fixed in connect()?
-		var screenX = window.event ? window.event.clientX : e.pageX;
-		var screenY = window.event ? window.event.clientY : e.pageY;
-
-		if (this.isActiveResize){
-			this.lastPoint = {'x':screenX, 'y':screenY};
-			this.movePoint();
-			this.updateSize();
-		}else{
-			this.lastPoint = {'x':screenX, 'y':screenY};
-			this.movePoint();
-			this.moveSizingLine();
-		}
-	},
-
-	endSizing: function(e){
-
-		if (!this.isActiveResize){
-			this.hideSizingLine();
-		}
-
-		this.updateSize();
-
-		this.isSizing = false;
-
-		dojo.event.disconnect(document.documentElement, "onmousemove", this, "changeSizing");
-		dojo.event.disconnect(document.documentElement, "onmouseup", this, "endSizing");
-	},
-
-	movePoint: function(){
-
-		// make sure FLastPoint is a legal point to drag to
-		p = this.screenToMainClient(this.lastPoint);
-
-		if (this.isHorizontal){
-
-			var a = p.x - this.dragOffset.x;
-			a = this.legaliseSplitPoint(a);
-			p.x = a + this.dragOffset.x;
-		}else{
-			var a = p.y - this.dragOffset.y;
-			a = this.legaliseSplitPoint(a);
-			p.y = a + this.dragOffset.y;
-		}
-
-		this.lastPoint = this.mainClientToScreen(p);
-	},
-
-	screenToClient: function(pt){
-
-		pt.x -= (this.offsetX + this.sizingSplitter.position);
-		pt.y -= (this.offsetY + this.sizingSplitter.position);
-
-		return pt;
-	},
-
-	clientToScreen: function(pt){
-
-		pt.x += (this.offsetX + this.sizingSplitter.position);
-		pt.y += (this.offsetY + this.sizingSplitter.position);
-
-		return pt;
-	},
-
-	screenToMainClient: function(pt){
-
-		pt.x -= this.offsetX;
-		pt.y -= this.offsetY;
-
-		return pt;
-	},
-
-	mainClientToScreen: function(pt){
-
-		pt.x += this.offsetX;
-		pt.y += this.offsetY;
-
-		return pt;
-	},
-
-	legaliseSplitPoint: function(a){
-
-		a += this.sizingSplitter.position;
-
-		this.isDraggingLeft = (a > 0) ? 1 : 0;
-
-		if (!this.isActiveResize){
-
-			if (a < this.paneBefore.position + this.paneBefore.sizeMin){
-
-				a = this.paneBefore.position + this.paneBefore.sizeMin;
-			}
-
-			if (a > this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin))){
-
-				a = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin));
-			}
-		}
-
-		a -= this.sizingSplitter.position;
-
-		this.checkSizes();
-
-		return a;
-	},
-
-	updateSize: function(){
-
-		var p = this.clientToScreen(this.lastPoint);
-		var p = this.screenToClient(this.lastPoint);
-
-		var pos = this.isHorizontal ? p.x - (this.dragOffset.x + this.originPos.x) : p.y - (this.dragOffset.y + this.originPos.y);
-
-		var start_region = this.paneBefore.position;
-		var end_region   = this.paneAfter.position + this.paneAfter.sizeActual;
-
-		this.paneBefore.sizeActual = pos - start_region;
-		this.paneAfter.position    = pos + this.sizerWidth;
-		this.paneAfter.sizeActual  = end_region - this.paneAfter.position;
-
-		for(var i=0; i<this.children.length; i++){
-
-			this.children[i].sizeShare = this.children[i].sizeActual;
-		}
-
-		this.layoutPanels();
-	},
-
-	showSizingLine: function(){
-
-		this.moveSizingLine();
-
-		if (this.isHorizontal){
-			dojo.style.setOuterWidth(this.virtualSizer, this.sizerWidth);
-			dojo.style.setOuterHeight(this.virtualSizer, this.paneHeight);
-		}else{
-			dojo.style.setOuterWidth(this.virtualSizer, this.paneWidth);
-			dojo.style.setOuterHeight(this.virtualSizer, this.sizerWidth);
-		}
-
-		this.virtualSizer.style.display = 'block';
-	},
-
-	hideSizingLine: function(){
-
-		this.virtualSizer.style.display = 'none';
-	},
-
-	moveSizingLine: function(){
-
-		var origin = {'x':0, 'y':0};
-
-		if (this.isHorizontal){
-			origin.x += (this.lastPoint.x - this.startPoint.x) + this.sizingSplitter.position;
-		}else{
-			origin.y += (this.lastPoint.y - this.startPoint.y) + this.sizingSplitter.position;
-		}
-
-		this.virtualSizer.style.left = origin.x + 'px';
-		this.virtualSizer.style.top = origin.y + 'px';
-	}
-});
-
-// These arguments can be specified for the children of a SplitPane.
-// Since any widget can be specified as a SplitPane child, mix them
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.lang.extend(dojo.widget.Widget, {
-	sizeMin: 10,
-	sizeShare: 10
-});
-
-// Deprecated class for split pane children.
-// Actually any widget can be the child of a split pane
-dojo.widget.html.SplitPanePanel = function(){
-	dojo.widget.html.LayoutPane.call(this);
-}
-dojo.inherits(dojo.widget.html.SplitPanePanel, dojo.widget.html.LayoutPane);
-dojo.lang.extend(dojo.widget.html.SplitPanePanel, {
-	widgetType: "SplitPanePanel"
-});
-
-dojo.widget.tags.addParseTreeHandler("dojo:SplitPane");
-dojo.widget.tags.addParseTreeHandler("dojo:SplitPanePanel");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SvgButton.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SvgButton.js
deleted file mode 100644
index 8669b38..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SvgButton.js
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-// FIXME: not yet functional
-
-dojo.provide("dojo.widget.SvgButton");
-
-dojo.require("dojo.widget.Button");
-
-dojo.widget.SvgButton = function(){
-	// FIXME: this is incomplete and doesn't work yet
-	// if DOMButton turns into a mixin, we should subclass Button instead and
-	// just mix in the DOMButton properties.
-
-	dojo.widget.DomButton.call(this);
-	dojo.widget.SvgWidget.call(this);
-
-	// FIXME: freaking implement this already!
-	this.onFoo = function(){ alert("bar"); }
-
-	this.label = "huzzah!";
-
-	this.setLabel = function(x, y, textSize, label, shape){
-		//var labelNode = this.domNode.ownerDocument.createTextNode(this.label);
-		//var textNode = this.domNode.ownerDocument.createElement("text");
-		var coords = dojo.widget.SvgButton.prototype.coordinates(x, y, textSize, label, shape);
-		var textString = "";
-		switch(shape) {
-			case "ellipse":
-				textString = "<text x='"+ coords[6] + "' y='"+ coords[7] + "'>"+ label + "</text>";
-				//textNode.setAttribute("x", coords[6]);
-				//textNode.setAttribute("y", coords[7]);
-				break;
-			case "rectangle":
-				//FIXME: implement
-				textString = "";
-				//textNode.setAttribute("x", coords[6]);
-				//textNode.setAttribute("y", coords[7]);
-				break;
-			case "circle":
-				//FIXME: implement
-				textString = "";
-				//textNode.setAttribute("x", coords[6]);
-				//textNode.setAttribute("y", coords[7]);
-				break;
-		}
-		//textNode.appendChild(labelNode);
-		//this.domNode.appendChild(textNode);
-		return textString;
-		alert(textNode.getComputedTextLength());
-	}
-
-	this.fillInTemplate = function(x, y, textSize, label, shape){
-		// the idea is to set the text to the appropriate place given its length
-		// and the template shape
-		
-		// FIXME: For now, assuming text sizes are integers in SVG units
-		this.textSize = textSize || 12;
-		this.label = label;
-		// FIXEME: for now, I'm going to fake this... need to come up with a real way to 
-		// determine the actual width of the text, such as computedStyle
-		var textWidth = this.label.length*this.textSize ;
-		//this.setLabel();
-	}
-}
-
-dojo.inherits(dojo.widget.SvgButton, dojo.widget.DomButton);
-
-// FIXME
-dojo.widget.SvgButton.prototype.shapeString = function(x, y, textSize, label, shape) {
-	switch(shape) {
-		case "ellipse":
-			var coords = dojo.widget.SvgButton.prototype.coordinates(x, y, textSize, label, shape)
-			return "<ellipse cx='"+ coords[4]+"' cy='"+ coords[5]+"' rx='"+ coords[2]+"' ry='"+ coords[3]+"'/>";
-			break;
-		case "rect":
-			//FIXME: implement
-			return "";
-			//return "<rect x='110' y='45' width='70' height='30'/>";
-			break;
-		case "circle":
-			//FIXME: implement
-			return "";
-			//return "<circle cx='210' cy='60' r='23'/>";
-			break;
-	}
-}
-
-dojo.widget.SvgButton.prototype.coordinates = function(x, y, textSize, label, shape) {
-	switch(shape) {
-		case "ellipse":
-			var buttonWidth = label.length*textSize;
-			var buttonHeight = textSize*2.5
-			var rx = buttonWidth/2;
-			var ry = buttonHeight/2;
-			var cx = rx + x;
-			var cy = ry + y;
-			var textX = cx - rx*textSize/25;
-			var textY = cy*1.1;
-			return [buttonWidth, buttonHeight, rx, ry, cx, cy, textX, textY];
-			break;
-		case "rectangle":
-			//FIXME: implement
-			return "";
-			break;
-		case "circle":
-			//FIXME: implement
-			return "";
-			break;
-	}
-}
-
-dojo.widget.SvgButton.prototype.labelString = function(x, y, textSize, label, shape){
-	var textString = "";
-	var coords = dojo.widget.SvgButton.prototype.coordinates(x, y, textSize, label, shape);
-	switch(shape) {
-		case "ellipse":
-			textString = "<text x='"+ coords[6] + "' y='"+ coords[7] + "'>"+ label + "</text>";
-			break;
-		case "rectangle":
-			//FIXME: implement
-			textString = "";
-			break;
-		case "circle":
-			//FIXME: implement
-			textString = "";
-			break;
-	}
-	return textString;
-}
-
-//dojo.widget.SVGButton.prototype.templateString = "<g class='dojoButton' dojoAttachEvent='onClick; onMouseMove: onFoo;' dojoAttachPoint='labelNode'>"+ dojo.webui.widgets.SVGButton.prototype.shapeString("ellipse") + "</g>";
-
-dojo.widget.SvgButton.prototype.templateString = function(x, y, textSize, label, shape) {
-	return "<g class='dojoButton' dojoAttachEvent='onClick; onMouseMove: onFoo;' dojoAttachPoint='labelNode'>"+ dojo.webui.widgets.SVGButton.prototype.shapeString(x, y, textSize, label, shape) + dojo.widget.SVGButton.prototype.labelString(x, y, textSize, label, shape) + "</g>";
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SvgWidget.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SvgWidget.js
deleted file mode 100644
index 6818755..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/SvgWidget.js
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.widget.DomWidget");
-dojo.provide("dojo.widget.SvgWidget");
-dojo.provide("dojo.widget.SVGWidget"); // back compat
-
-dojo.require("dojo.dom");
-
-// SVGWidget is a mixin ONLY
-dojo.widget.SvgWidget = function(args){
-	// mix in the parent type
-	// dojo.widget.DomWidget.call(this);
-}
-dojo.inherits(dojo.widget.SvgWidget, dojo.widget.DomWidget);
-
-dojo.lang.extend(dojo.widget.SvgWidget, {
-	getContainerHeight: function(){
-		// NOTE: container height must be returned as the INNER height
-		dj_unimplemented("dojo.widget.SvgWidget.getContainerHeight");
-	},
-
-	getContainerWidth: function(){
-		// return this.parent.domNode.offsetWidth;
-		dj_unimplemented("dojo.widget.SvgWidget.getContainerWidth");
-	},
-
-	setNativeHeight: function(height){
-		// var ch = this.getContainerHeight();
-		dj_unimplemented("dojo.widget.SVGWidget.setNativeHeight");
-	},
-
-	createNodesFromText: function(txt, wrap){
-		return dojo.dom.createNodesFromText(txt, wrap);
-	}
-});
-
-dojo.widget.SVGWidget = dojo.widget.SvgWidget;
-
-try{
-(function(){
-	var tf = function(){
-		// FIXME: fill this in!!!
-		var rw = new function(){
-			dojo.widget.SvgWidget.call(this);
-			this.buildRendering = function(){ return; }
-			this.destroyRendering = function(){ return; }
-			this.postInitialize = function(){ return; }
-			this.cleanUp = function(){ return; }
-			this.widgetType = "SVGRootWidget";
-			this.domNode = document.documentElement;
-		}
-		var wm = dojo.widget.manager;
-		wm.root = rw;
-		wm.add(rw);
-
-		// extend the widgetManager with a getWidgetFromNode method
-		wm.getWidgetFromNode = function(node){
-			var filter = function(x){
-				if(x.domNode == node){
-					return true;
-				}
-			}
-			var widgets = [];
-			while((node)&&(widgets.length < 1)){
-				widgets = this.getWidgetsByFilter(filter);
-				node = node.parentNode;
-			}
-			if(widgets.length > 0){
-				return widgets[0];
-			}else{
-				return null;
-			}
-		}
-
-		wm.getWidgetFromEvent = function(domEvt){
-			return this.getWidgetFromNode(domEvt.target);
-		}
-
-		wm.getWidgetFromPrimitive = wm.getWidgetFromNode;
-	}
-	// make sure we get called when the time is right
-	dojo.event.connect(dojo.hostenv, "loaded", tf);
-})();
-}catch(e){ alert(e); }
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TabPane.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TabPane.js
deleted file mode 100644
index 2ddde7f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TabPane.js
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.TabPane");

-dojo.provide("dojo.widget.html.TabPane");

-dojo.provide("dojo.widget.Tab");

-dojo.provide("dojo.widget.html.Tab");

-

-dojo.require("dojo.widget.*");

-dojo.require("dojo.widget.LayoutPane");

-dojo.require("dojo.event.*");

-dojo.require("dojo.html");

-dojo.require("dojo.style");

-

-//////////////////////////////////////////

-// TabPane -- a set of Tabs

-//////////////////////////////////////////

-dojo.widget.html.TabPane = function() {

-	dojo.widget.html.LayoutPane.call(this);

-}

-dojo.inherits(dojo.widget.html.TabPane, dojo.widget.html.LayoutPane);

-

-dojo.lang.extend(dojo.widget.html.TabPane, {

-	widgetType: "TabPane",

-

-	// Constructor arguments

-	labelPosition: "top",

-	useVisibility: false,		// true-->use visibility:hidden instead of display:none

-

-

-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlTabPane.css"),

-

-	selectedTab: "",		// initially selected tab (widgetId)

-

-	fillInTemplate: function(args, frag) {

-		dojo.widget.html.TabPane.superclass.fillInTemplate.call(this, args, frag);

-		

-		dojo.style.insertCssFile(this.templateCssPath, null, true);

-		dojo.html.prependClass(this.domNode, "dojoTabPane");

-	},

-

-	postCreate: function(args, frag) {

-		// Create <ul> with special formatting to store all the tab labels

-		// TODO: set "bottom" css tag if label is on bottom

-		this.ul = document.createElement("ul");

-		dojo.html.addClass(this.ul, "tabs");

-		dojo.html.addClass(this.ul, this.labelPosition);

-

-		// Load all the tabs, creating a label for each one

-		for(var i=0; i<this.children.length; i++){

-			this._setupTab(this.children[i]);

-		}

-		dojo.widget.html.TabPane.superclass.postCreate.call(this, args, frag);

-

-		// Put tab labels in a panel on the top (or bottom)

-		this.filterAllowed(this, 'labelPosition', ['top', 'bottom']);

-		this.labelPanel = dojo.widget.createWidget("LayoutPane", {layoutAlign: this.labelPosition});

-		this.labelPanel.domNode.appendChild(this.ul);

-		dojo.widget.html.TabPane.superclass.addChild.call(this, this.labelPanel);

-

-		// workaround CSS loading race condition bug

-		dojo.lang.setTimeout(this, this.onResized, 50);

-	},

-

-	addChild: function(child, overrideContainerNode, pos, ref, insertIndex){

-		this._setupTab(child);

-		dojo.widget.html.TabPane.superclass.addChild.call(this,child, overrideContainerNode, pos, ref, insertIndex);

-	},

-

-	_setupTab: function(tab){

-		tab.layoutAlign = "client";

-		tab.domNode.style.display="none";

-		dojo.html.prependClass(tab.domNode, "dojoTabPanel");

-

-		// Create label

-		tab.li = document.createElement("li");

-		var span = document.createElement("span");

-		span.innerHTML = tab.label;

-		dojo.html.disableSelection(span);

-		tab.li.appendChild(span);

-		this.ul.appendChild(tab.li);

-		

-		var self = this;

-		dojo.event.connect(tab.li, "onclick", function(){ self.selectTab(tab); });

-		

-		if(!this.selectedTabWidget || this.selectedTab==tab.widgetId || tab.selected){

-			this.selectedTabWidget=tab;

-		}

-	},

-

-	selectTab: function(tab) {

-		// Deselect old tab and select new one

-		if (this.selectedTabWidget) {

-			this._hideTab(this.selectedTabWidget);

-		}

-		this.selectedTabWidget = tab;

-		this._showTab(tab);

-	},

-	

-	_showTab: function(tab) {

-		dojo.html.addClass(tab.li, "current");

-		tab.selected=true;

-		if ( this.useVisibility && !dojo.render.html.ie ) {

-			tab.domNode.style.visibility="visible";

-		} else {

-			tab.show();

-		}

-	},

-

-	_hideTab: function(tab) {

-		dojo.html.removeClass(tab.li, "current");

-		tab.selected=false;

-		if( this.useVisibility ){

-			tab.domNode.style.visibility="hidden";

-		}else{

-			tab.hide();

-		}

-	},

-

-	onResized: function() {

-		// Display the selected tab

-		if(this.selectedTabWidget){

-			this.selectTab(this.selectedTabWidget);

-		}

-		dojo.widget.html.TabPane.superclass.onResized.call(this);

-	}

-});

-dojo.widget.tags.addParseTreeHandler("dojo:TabPane");

-

-// These arguments can be specified for the children of a TabPane.

-// Since any widget can be specified as a TabPane child, mix them

-// into the base widget class.  (This is a hack, but it's effective.)

-dojo.lang.extend(dojo.widget.Widget, {

-	label: "",

-	selected: false	// is this tab currently selected?

-});

-

-// Deprecated class.  TabPane can take any widget as input.

-// Use ContentPane, LayoutPane, etc.

-dojo.widget.html.Tab = function() {

-	dojo.widget.html.LayoutPane.call(this);

-}

-dojo.inherits(dojo.widget.html.Tab, dojo.widget.html.LayoutPane);

-dojo.lang.extend(dojo.widget.html.Tab, {

-	widgetType: "Tab"

-});

-dojo.widget.tags.addParseTreeHandler("dojo:Tab");

-

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Tabs.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Tabs.js
deleted file mode 100644
index 7f2eaa0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Tabs.js
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Tabs");
-dojo.provide("dojo.widget.html.Tabs");
-
-dojo.deprecated("dojo.widget.Tabs",  "use dojo.widget.TabPane", "0.3");
-
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.dom");
-dojo.require("dojo.html");
-
-dojo.widget.tags.addParseTreeHandler("dojo:tabs");
-
-dojo.widget.html.Tabs = function() {
-	dojo.widget.HtmlWidget.call(this);
-	this.tabs = [];
-	this.panels = [];
-}
-dojo.inherits(dojo.widget.html.Tabs, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.html.Tabs, {
-
-	widgetType: "Tabs",
-	isContainer: true,
-
-	templatePath: null, // prolly not
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlTabs.css"),
-
-	domNode: null,
-	containerNode: null,
-
-	selected: -1,
-
-	tabTarget: "",
-	extractContent: false, // find the bits inside <body>
-	parseContent: false, // parse externally loaded pages for widgets
-
-	preventCache: false,
-
-	buildRendering: function(args, frag) {
-		dojo.style.insertCssFile(this.templateCssPath);
-		this.domNode = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-		if(!this.domNode) { dj_error("html.Tabs: No node reference"); }
-
-		if(args["tabtarget"]) {
-			this.tabtarget = args["tabtarget"];
-			this.containerNode = document.getElementById(args["tabtarget"]);
-		} else {
-			this.containerNode = document.createElement("div");
-			var next = this.domNode.nextSibling;
-			if(next) {
-				this.domNode.parentNode.insertBefore(this.containerNode, next);
-			} else {
-				this.domNode.parentNode.appendChild(this.containerNode);
-			}
-		}
-		dojo.html.addClass(this.containerNode, "dojoTabPanelContainer");
-
-		var li = dojo.dom.getFirstChildElement(this.domNode);
-		while(li) {
-			var a = li.getElementsByTagName("a").item(0);
-			this.addTab(a);
-			li = dojo.dom.getNextSiblingElement(li);
-		}
-
-		if(this.selected == -1) { this.selected = 0; }
-		this.selectTab(null, this.tabs[this.selected]);
-	},
-
-	addTab: function(title, url, tabId, tabHandler) {
-		// TODO: make this an object proper
-		var panel = {
-			url: null,
-			title: null,
-			isLoaded: false,
-			id: null,
-			isLocal: false
-		};
-
-		function isLocal(a) {
-			var url = a.getAttribute("href");
-			var hash = url.indexOf("#");
-			if(hash == 0) {
-				return true;
-			}
-			var loc = location.href.split("#")[0];
-			var url2 = url.split("#")[0];
-			if(loc == url2) {
-				return true;
-			}
-			if(unescape(loc) == url2) {
-				return true;
-			}
-			var outer = a.outerHTML;
-			if(outer && /href=["']?#/i.test(outer)) {
-				return true;
-			}
-			return false;
-		}
-
-		if(title && title.tagName && title.tagName.toLowerCase() == "a") {
-			// init case
-			var a = title;
-			var li = a.parentNode;
-			title = a.innerHTML;
-			url = a.getAttribute("href");
-			var id = null;
-			var hash = url.indexOf("#");
-			if(isLocal(a)) {
-				id = url.split("#")[1];
-				dj_debug("setting local id:", id);
-				url = "#" + id;
-				panel.isLocal = true;
-			} else {
-				id = a.getAttribute("tabid");
-			}
-
-			panel.url = url;
-			panel.title = title;
-			panel.id = id || dojo.html.getUniqueId();
-			dj_debug("panel id:", panel.id, "url:", panel.url);
-		} else {
-			// programmatically adding
-			var li = document.createElement("li");
-			var a = document.createElement("a");
-			a.innerHTML = title;
-			a.href = url;
-			li.appendChild(a);
-			this.domNode.appendChild(li);
-
-			panel.url = url;
-			panel.title = title;
-			panel.id = tabId || dojo.html.getUniqueId();
-			dj_debug("prg tab:", panel.id, "url:", panel.url);
-		}
-
-		if(panel.isLocal) {
-			var node = document.getElementById(id);
-			node.style.display = "none";
-			this.containerNode.appendChild(node);
-		} else {
-			var node = document.createElement("div");
-			node.style.display = "none";
-			node.id = panel.id;
-			this.containerNode.appendChild(node);
-		}
-
-		var handler = a.getAttribute("tabhandler") || tabHandler;
-		if(handler) {
-			this.setPanelHandler(handler, panel);
-		}
-
-		dojo.event.connect(a, "onclick", this, "selectTab");
-
-		this.tabs.push(li);
-		this.panels.push(panel);
-
-		if(this.selected == -1 && dojo.html.hasClass(li, "current")) {
-			this.selected = this.tabs.length-1;
-		}
-
-		return { "tab": li, "panel": panel };
-	},
-
-	selectTab: function(e, target) {
-		if(dojo.lang.isNumber(e)) {
-			target = this.tabs[e];
-		}
-		else if(e) {
-			if(e.target) {
-				target = e.target;
-				while(target && (target.tagName||"").toLowerCase() != "li") {
-					target = target.parentNode;
-				}
-			}
-			if(e.preventDefault) { e.preventDefault(); }
-		}
-
-		dojo.html.removeClass(this.tabs[this.selected], "current");
-
-		for(var i = 0; i < this.tabs.length; i++) {
-			if(this.tabs[i] == target) {
-				dojo.html.addClass(this.tabs[i], "current");
-				this.selected = i;
-				break;
-			}
-		}
-
-		var panel = this.panels[this.selected];
-		if(panel) {
-			this.getPanel(panel);
-			this.hidePanels(panel);
-			document.getElementById(panel.id).style.display = "";
-		}
-	},
-
-	setPanelHandler: function(handler, panel) {
-		var fcn = dojo.lang.isFunction(handler) ? handler : window[handler];
-		if(!dojo.lang.isFunction(fcn)) {
-			throw new Error("Unable to set panel handler, '" + handler + "' not a function.");
-			return;
-		}
-		this["tabHandler" + panel.id] = function() {
-			return fcn.apply(this, arguments);
-		}
-	},
-
-	runPanelHandler: function(panel) {
-		if(dojo.lang.isFunction(this["tabHandler" + panel.id])) {
-			this["tabHandler" + panel.id](panel, document.getElementById(panel.id));
-			return false;
-		}
-		return true;
-	},
-
-	getPanel: function(panel) {
-		if(this.runPanelHandler(panel)) {
-			if(panel.isLocal) {
-				// do nothing?
-			} else {
-				if(!panel.isLoaded || !this.useCache) {
-					this.setExternalContent(panel, panel.url, this.useCache, this.preventCache);
-				}
-			}
-		}
-	},
-
-	setExternalContent: function(panel, url, useCache, preventCache) {
-		var node = document.getElementById(panel.id);
-		node.innerHTML = "Loading...";
-
-		var extract = this.extractContent;
-		var parse = this.parseContent;
-
-		dojo.io.bind({
-			url: url,
-			useCache: useCache,
-			preventCache: preventCache,
-			mimetype: "text/html",
-			handler: function(type, data, e) {
-				if(type == "load") {
-					if(extract) {
-						var matches = data.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-						if(matches) { data = matches[1]; }
-					}
-					node.innerHTML = data;
-					panel.isLoaded = true;
-					if(parse) {
-						var parser = new dojo.xml.Parse();
-						var frag = parser.parseElement(node, null, true);
-						dojo.widget.getParser().createComponents(frag);
-					}
-				} else {
-					node.innerHTML = "Error loading '" + panel.url + "' (" + e.status + " " + e.statusText + ")";
-				}
-			}
-		});
-	},
-
-	hidePanels: function(except) {
-		for(var i = 0; i < this.panels.length; i++) {
-			if(this.panels[i] != except && this.panels[i].id) {
-				var p = document.getElementById(this.panels[i].id);
-				if(p) {
-					p.style.display = "none";
-				}
-			}
-		}
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TaskBar.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TaskBar.js
deleted file mode 100644
index 768f7ea..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TaskBar.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.TaskBar");

-dojo.provide("dojo.widget.TaskBarItem");

-dojo.require("dojo.widget.Widget");

-

-dojo.widget.TaskBar = function(){

-	dojo.widget.Widget.call(this);

-

-	this.widgetType = "TaskBar";

-	this.isContainer = true;

-}

-dojo.inherits(dojo.widget.TaskBar, dojo.widget.Widget);

-dojo.widget.tags.addParseTreeHandler("dojo:taskbar");

-

-dojo.widget.TaskBarItem = function(){

-	dojo.widget.Widget.call(this);

-

-	this.widgetType = "TaskBarItem";

-}

-dojo.inherits(dojo.widget.TaskBarItem, dojo.widget.Widget);

-dojo.widget.tags.addParseTreeHandler("dojo:taskbaritem");

-

-dojo.requireAfterIf("html", "dojo.widget.html.TaskBar");

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TemplatedContainer.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TemplatedContainer.js
deleted file mode 100644
index 2a0a81a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TemplatedContainer.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.TemplatedContainer");
-dojo.provide("dojo.widget.html.TemplatedContainer");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-
-dojo.widget.html.TemplatedContainer = function(){
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.html.TemplatedContainer, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.html.TemplatedContainer, {
-	widgetType: "TemplatedContainer",
-
-	isContainer: true,
-	templateString: '<div><div dojoAttachPoint="header"><hr></div><div dojoAttachPoint="containerNode"></div><div dojoAttachPoint="footer"><hr></div></div>',
-	header: null,
-	containerNode: null,
-	footer: null,
-	domNode: null,
-
-	onResized: function() {
-		// Clients should override this function to do special processing,
-		// then call this.notifyChildrenOfResize() to notify children of resize
-		this.notifyChildrenOfResize();
-	},
-	
-	notifyChildrenOfResize: function() {
-		for(var i=0; i<this.children.length; i++) {
-			var child = this.children[i];
-			//dojo.debug(this.widgetId + " resizing child " + child.widgetId);
-			if ( child.onResized ) {
-				child.onResized();
-			}
-		}
-	}
-});
-
-dojo.widget.tags.addParseTreeHandler("dojo:TemplatedContainer");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TimePicker.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TimePicker.js
deleted file mode 100644
index c2161b8..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/TimePicker.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.TimePicker");
-dojo.provide("dojo.widget.TimePicker.util");
-dojo.require("dojo.widget.DomWidget");
-
-dojo.widget.TimePicker = function(){
-	dojo.widget.Widget.call(this);
-	this.widgetType = "TimePicker";
-	this.isContainer = false;
-	// the following aliases prevent breaking people using 0.2.x
-	this.toRfcDateTime = dojo.widget.TimePicker.util.toRfcDateTime;
-	this.fromRfcDateTime = dojo.widget.TimePicker.util.fromRfcDateTime;
-	this.toAmPmHour = dojo.widget.TimePicker.util.toAmPmHour;
-	this.fromAmPmHour = dojo.widget.TimePicker.util.fromAmPmHour;
-}
-
-dojo.inherits(dojo.widget.TimePicker, dojo.widget.Widget);
-dojo.widget.tags.addParseTreeHandler("dojo:timepicker");
-
-dojo.requireAfterIf("html", "dojo.widget.html.TimePicker");
-
-dojo.widget.TimePicker.util = new function() {
-	// utility functions
-	this.toRfcDateTime = function(jsDate) {
-		if(!jsDate) {
-			jsDate = new Date();
-		}
-		var year = jsDate.getFullYear();
-		var month = jsDate.getMonth() + 1;
-		if (month < 10) {
-			month = "0" + month.toString();
-		}
-		var date = jsDate.getDate();
-		if (date < 10) {
-			date = "0" + date.toString();
-		}
-		var hour = jsDate.getHours();
-		if (hour < 10) {
-			hour = "0" + hour.toString();
-		}
-		var minute = jsDate.getMinutes();
-		if (minute < 10) {
-			minute = "0" + minute.toString();
-		}
-		// no way to set seconds, so set to zero
-		var second = "00";
-		var timeZone = jsDate.getTimezoneOffset();
-		var timeZoneHour = parseInt(timeZone/60);
-		if(timeZoneHour > -10 && timeZoneHour < 0) {
-			timeZoneHour = "-0" + Math.abs(timeZoneHour);
-		} else if(timeZoneHour < 10) {
-			timeZoneHour = "+0" + timeZoneHour.toString();
-		} else if(timeZoneHour >= 10) {
-			timeZoneHour = "+" + timeZoneHour.toString();
-		}
-		var timeZoneMinute = timeZone%60;
-		if(timeZoneMinute < 10) {
-			timeZoneMinute = "0" + timeZoneMinute.toString();
-		}
-		return year + "-" + month + "-" + date + "T" + hour + ":" + minute + ":" + second + timeZoneHour +":" + timeZoneMinute;
-	}
-
-	this.fromRfcDateTime = function(rfcDate, useDefaultMinutes) {
-		var tempDate = new Date();
-		if(!rfcDate || !rfcDate.split("T")[1]) {
-			if(useDefaultMinutes) {
-				tempDate.setMinutes(Math.floor(tempDate.getMinutes()/5)*5);
-			} else {
-				tempDate.setMinutes(0);
-			}
-		} else {
-			var tempTime = rfcDate.split("T")[1].split(":");
-			// fullYear, month, date
-			var tempDate = new Date();
-			tempDate.setHours(tempTime[0]);
-			tempDate.setMinutes(tempTime[1]);
-		}
-		return tempDate;
-	}
-
-	this.toAmPmHour = function(hour) {
-		var amPmHour = hour;
-		var isAm = true;
-		if (amPmHour == 0) {
-			amPmHour = 12;
-		} else if (amPmHour>12) {
-			amPmHour = amPmHour - 12;
-			isAm = false;
-		} else if (amPmHour == 12) {
-			isAm = false;
-		}
-		return [amPmHour, isAm];
-	}
-
-	this.fromAmPmHour = function(amPmHour, isAm) {
-		var hour = parseInt(amPmHour, 10);
-		if(isAm && hour == 12) {
-			hour = 0;
-		} else if (!isAm && hour<12) {
-			hour = hour + 12;
-		}
-		return hour;
-	}
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Toggler.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Toggler.js
deleted file mode 100644
index 225a5fb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Toggler.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Toggler");

-dojo.require("dojo.widget.*");

-dojo.require("dojo.event.*");

-

-// clicking on this node shows/hides another widget

-

-dojo.widget.Toggler = function(){

-	dojo.widget.DomWidget.call(this);

-}

-

-dojo.inherits(dojo.widget.Toggler, dojo.widget.DomWidget);

-

-dojo.lang.extend(dojo.widget.Toggler, {

-	widgetType: "Toggler",

-	

-	// Associated widget 

-	targetId: '',

-	

-	fillInTemplate: function() {

-		dojo.event.connect(this.domNode, "onclick", this, "onClick");

-	},

-	

-	onClick: function() {

-		var pane = dojo.widget.getWidgetById(this.targetId);

-		if ( !pane || !pane.toggle ) { return; }

-		pane.explodeSrc = this.domNode;

-		pane.doToggle();

-	}

-});

-dojo.widget.tags.addParseTreeHandler("dojo:toggler");

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Toolbar.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Toolbar.js
deleted file mode 100644
index a4ca0c0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Toolbar.js
+++ /dev/null
@@ -1,960 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.ToolbarContainer");
-dojo.provide("dojo.widget.html.ToolbarContainer");
-dojo.provide("dojo.widget.Toolbar");
-dojo.provide("dojo.widget.html.Toolbar");
-dojo.provide("dojo.widget.ToolbarItem");
-dojo.provide("dojo.widget.html.ToolbarButtonGroup");
-dojo.provide("dojo.widget.html.ToolbarButton");
-dojo.provide("dojo.widget.html.ToolbarDialog");
-dojo.provide("dojo.widget.html.ToolbarMenu");
-dojo.provide("dojo.widget.html.ToolbarSeparator");
-dojo.provide("dojo.widget.html.ToolbarSpace");
-dojo.provide("dojo.widget.Icon");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.html");
-
-/* ToolbarContainer
- *******************/
-dojo.widget.html.ToolbarContainer = function() {
-	dojo.widget.HtmlWidget.call(this);
-
-	this.widgetType = "ToolbarContainer";
-	this.isContainer = true;
-
-	this.templateString = '<div class="toolbarContainer" dojoAttachPoint="containerNode"></div>';
-	this.templateCssPath = dojo.uri.dojoUri("src/widget/templates/HtmlToolbar.css");
-
-	this.getItem = function(name) {
-		if(name instanceof dojo.widget.ToolbarItem) { return name; }
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.html.Toolbar) {
-				var item = child.getItem(name);
-				if(item) { return item; }
-			}
-		}
-		return null;
-	}
-
-	this.getItems = function() {
-		var items = [];
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.html.Toolbar) {
-				items = items.concat(child.getItems());
-			}
-		}
-		return items;
-	}
-
-	this.enable = function() {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.html.Toolbar) {
-				child.enable.apply(child, arguments);
-			}
-		}
-	}
-
-	this.disable = function() {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.html.Toolbar) {
-				child.disable.apply(child, arguments);
-			}
-		}
-	}
-
-	this.select = function(name) {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.html.Toolbar) {
-				child.select(arguments);
-			}
-		}
-	}
-
-	this.deselect = function(name) {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.html.Toolbar) {
-				child.deselect(arguments);
-			}
-		}
-	}
-
-	this.getItemsState = function() {
-		var values = {};
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.html.Toolbar) {
-				dojo.lang.mixin(values, child.getItemsState());
-			}
-		}
-		return values;
-	}
-
-	this.getItemsActiveState = function() {
-		var values = {};
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.html.Toolbar) {
-				dojo.lang.mixin(values, child.getItemsActiveState());
-			}
-		}
-		return values;
-	}
-
-	this.getItemsSelectedState = function() {
-		var values = {};
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.html.Toolbar) {
-				dojo.lang.mixin(values, child.getItemsSelectedState());
-			}
-		}
-		return values;
-	}
-}
-dojo.inherits(dojo.widget.html.ToolbarContainer, dojo.widget.HtmlWidget);
-dojo.widget.tags.addParseTreeHandler("dojo:toolbarContainer");
-
-/* Toolbar
- **********/
-dojo.widget.html.Toolbar = function() {
-	dojo.widget.HtmlWidget.call(this);
-
-	this.widgetType = "Toolbar";
-	this.isContainer = true;
-
-	this.templateString = '<div class="toolbar" dojoAttachPoint="containerNode" unselectable="on" dojoOnMouseover="_onmouseover" dojoOnMouseout="_onmouseout" dojoOnClick="_onclick" dojoOnMousedown="_onmousedown" dojoOnMouseup="_onmouseup"></div>';
-	//this.templateString = '<div class="toolbar" dojoAttachPoint="containerNode" unselectable="on"></div>';
-
-	// given a node, tries to find it's toolbar item
-	this._getItem = function(node) {
-		var start = new Date();
-		var widget = null;
-		while(node && node != this.domNode) {
-			if(dojo.html.hasClass(node, "toolbarItem")) {
-				var widgets = dojo.widget.manager.getWidgetsByFilter(function(w) { return w.domNode == node; });
-				if(widgets.length == 1) {
-					widget = widgets[0];
-					break;
-				} else if(widgets.length > 1) {
-					dojo.raise("Toolbar._getItem: More than one widget matches the node");
-				}
-			}
-			node = node.parentNode;
-		}
-		return widget;
-	}
-
-	this._onmouseover = function(e) {
-		var widget = this._getItem(e.target);
-		if(widget && widget._onmouseover) { widget._onmouseover(e); }
-	}
-
-	this._onmouseout = function(e) {
-		var widget = this._getItem(e.target);
-		if(widget && widget._onmouseout) { widget._onmouseout(e); }
-	}
-
-	this._onclick = function(e) {
-		var widget = this._getItem(e.target);
-		if(widget && widget._onclick){ 
-			widget._onclick(e);
-		}
-	}
-
-	this._onmousedown = function(e) {
-		var widget = this._getItem(e.target);
-		if(widget && widget._onmousedown) { widget._onmousedown(e); }
-	}
-
-	this._onmouseup = function(e) {
-		var widget = this._getItem(e.target);
-		if(widget && widget._onmouseup) { widget._onmouseup(e); }
-	}
-
-	var oldAddChild = this.addChild;
-	this.addChild = function(item, pos, props) {
-		var widget = dojo.widget.ToolbarItem.make(item, null, props);
-		var ret = oldAddChild.call(this, widget, null, pos, null);
-		return ret;
-	}
-
-	this.push = function() {
-		for(var i = 0; i < arguments.length; i++) {
-			this.addChild(arguments[i]);
-		}
-	}
-
-	this.getItem = function(name) {
-		if(name instanceof dojo.widget.ToolbarItem) { return name; }
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem
-				&& child._name == name) { return child; }
-		}
-		return null;
-	}
-
-	this.getItems = function() {
-		var items = [];
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				items.push(child);
-			}
-		}
-		return items;
-	}
-
-	this.getItemsState = function() {
-		var values = {};
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				values[child._name] = {
-					selected: child._selected,
-					enabled: child._enabled
-				};
-			}
-		}
-		return values;
-	}
-
-	this.getItemsActiveState = function() {
-		var values = this.getItemsState();
-		for(var item in values) {
-			values[item] = values[item].enabled;
-		}
-		return values;
-	}
-
-	this.getItemsSelectedState = function() {
-		var values = this.getItemsState();
-		for(var item in values) {
-			values[item] = values[item].selected;
-		}
-		return values;
-	}
-
-	this.enable = function() {
-		var items = arguments.length ? arguments : this.children;
-		for(var i = 0; i < items.length; i++) {
-			var child = this.getItem(items[i]);
-			if(child instanceof dojo.widget.ToolbarItem) {
-				child.enable(false, true);
-			}
-		}
-	}
-
-	this.disable = function() {
-		var items = arguments.length ? arguments : this.children;
-		for(var i = 0; i < items.length; i++) {
-			var child = this.getItem(items[i]);
-			if(child instanceof dojo.widget.ToolbarItem) {
-				child.disable();
-			}
-		}
-	}
-
-	this.select = function() {
-		for(var i = 0; i < arguments.length; i++) {
-			var name = arguments[i];
-			var item = this.getItem(name);
-			if(item) { item.select(); }
-		}
-	}
-
-	this.deselect = function() {
-		for(var i = 0; i < arguments.length; i++) {
-			var name = arguments[i];
-			var item = this.getItem(name);
-			if(item) { item.disable(); }
-		}
-	}
-
-	this.setValue = function() {
-		for(var i = 0; i < arguments.length; i += 2) {
-			var name = arguments[i], value = arguments[i+1];
-			var item = this.getItem(name);
-			if(item) {
-				if(item instanceof dojo.widget.ToolbarItem) {
-					item.setValue(value);
-				}
-			}
-		}
-	}
-}
-dojo.inherits(dojo.widget.html.Toolbar, dojo.widget.HtmlWidget);
-dojo.widget.tags.addParseTreeHandler("dojo:toolbar");
-
-/* ToolbarItem hierarchy:
-	- ToolbarItem
-		- ToolbarButton
-		- ToolbarDialog
-			- ToolbarMenu
-		- ToolbarSeparator
-			- ToolbarSpace
-				- ToolbarFlexibleSpace
-*/
-
-
-/* ToolbarItem
- **************/
-dojo.widget.ToolbarItem = function() {
-	dojo.widget.HtmlWidget.call(this);
-}
-dojo.inherits(dojo.widget.ToolbarItem, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.ToolbarItem, {
-	templateString: '<span unselectable="on" class="toolbarItem"></span>',
-
-	_name: null,
-	getName: function() { return this._name; },
-	setName: function(value) { return this._name = value; },
-	getValue: function() { return this.getName(); },
-	setValue: function(value) { return this.setName(value); },
-
-	_selected: false,
-	isSelected: function() { return this._selected; },
-	setSelected: function(is, force, preventEvent) {
-		if(!this._toggleItem && !force) { return; }
-		is = Boolean(is);
-		if(force || this._enabled && this._selected != is) {
-			this._selected = is;
-			this.update();
-			if(!preventEvent) {
-				this._fireEvent(is ? "onSelect" : "onDeselect");
-				this._fireEvent("onChangeSelect");
-			}
-		}
-	},
-	select: function(force, preventEvent) {
-		return this.setSelected(true, force, preventEvent);
-	},
-	deselect: function(force, preventEvent) {
-		return this.setSelected(false, force, preventEvent);
-	},
-
-	_toggleItem: false,
-	isToggleItem: function() { return this._toggleItem; },
-	setToggleItem: function(value) { this._toggleItem = Boolean(value); },
-
-	toggleSelected: function(force) {
-		return this.setSelected(!this._selected, force);
-	},
-
-	_enabled: true,
-	isEnabled: function() { return this._enabled; },
-	setEnabled: function(is, force, preventEvent) {
-		is = Boolean(is);
-		if(force || this._enabled != is) {
-			this._enabled = is;
-			this.update();
-			if(!preventEvent) {
-				this._fireEvent(this._enabled ? "onEnable" : "onDisable");
-				this._fireEvent("onChangeEnabled");
-			}
-		}
-		return this._enabled;
-	},
-	enable: function(force, preventEvent) {
-		return this.setEnabled(true, force, preventEvent);
-	},
-	disable: function(force, preventEvent) {
-		return this.setEnabled(false, force, preventEvent);
-	},
-	toggleEnabled: function(force, preventEvent) {
-		return this.setEnabled(!this._enabled, force, preventEvent);
-	},
-
-	_icon: null,
-	getIcon: function() { return this._icon; },
-	setIcon: function(value) {
-		var icon = dojo.widget.Icon.make(value);
-		if(this._icon) {
-			this._icon.setIcon(icon);
-		} else {
-			this._icon = icon;
-		}
-		var iconNode = this._icon.getNode();
-		if(iconNode.parentNode != this.domNode) {
-			if(this.domNode.hasChildNodes()) {
-				this.domNode.insertBefore(iconNode, this.domNode.firstChild);
-			} else {
-				this.domNode.appendChild(iconNode);
-			}
-		}
-		return this._icon;
-	},
-
-	// TODO: update the label node (this.labelNode?)
-	_label: "",
-	getLabel: function() { return this._label; },
-	setLabel: function(value) {
-		var ret = this._label = value;
-		if(!this.labelNode) {
-			this.labelNode = document.createElement("span");
-			this.domNode.appendChild(this.labelNode);
-		}
-		this.labelNode.innerHTML = "";
-		this.labelNode.appendChild(document.createTextNode(this._label));
-		this.update();
-		return ret;
-	},
-
-	// fired from: setSelected, setEnabled, setLabel
-	update: function() {
-		if(this._enabled) {
-			dojo.html.removeClass(this.domNode, "disabled");
-			if(this._selected) {
-				dojo.html.addClass(this.domNode, "selected");
-			} else {
-				dojo.html.removeClass(this.domNode, "selected");
-			}
-		} else {
-			this._selected = false;
-			dojo.html.addClass(this.domNode, "disabled");
-			dojo.html.removeClass(this.domNode, "down");
-			dojo.html.removeClass(this.domNode, "hover");
-		}
-		this._updateIcon();
-	},
-
-	_updateIcon: function() {
-		if(this._icon) {
-			if(this._enabled) {
-				if(this._cssHover) {
-					this._icon.hover();
-				} else if(this._selected) {
-					this._icon.select();
-				} else {
-					this._icon.enable();
-				}
-			} else {
-				this._icon.disable();
-			}
-		}
-	},
-
-	_fireEvent: function(evt) {
-		if(typeof this[evt] == "function") {
-			var args = [this];
-			for(var i = 1; i < arguments.length; i++) {
-				args.push(arguments[i]);
-			}
-			this[evt].apply(this, args);
-		}
-	},
-
-	_onmouseover: function(e) {
-		if(!this._enabled) { return };
-		dojo.html.addClass(this.domNode, "hover");
-	},
-
-	_onmouseout: function(e) {
-		dojo.html.removeClass(this.domNode, "hover");
-		dojo.html.removeClass(this.domNode, "down");
-		if(!this._selected) {
-			dojo.html.removeClass(this.domNode, "selected");
-		}
-	},
-
-	_onclick: function(e) {
-		// FIXME: buttons never seem to have this._enabled set to true on Opera 9
-		// dojo.debug("widget:", this.widgetType, ":", this.getName(), ", enabled:", this._enabled);
-		if(this._enabled && !this._toggleItem) {
-			this._fireEvent("onClick");
-		}
-	},
-
-	_onmousedown: function(e) {
-		if(e.preventDefault) { e.preventDefault(); }
-		if(!this._enabled) { return };
-		dojo.html.addClass(this.domNode, "down");
-		if(this._toggleItem) {
-			if(this.parent.preventDeselect && this._selected) {
-				return;
-			}
-			this.toggleSelected();
-		}
-	},
-
-	_onmouseup: function(e) {
-		dojo.html.removeClass(this.domNode, "down");
-	},
-
-	fillInTemplate: function(args, frag) {
-		if(args.name) { this._name = args.name; }
-		if(args.selected) { this.select(); }
-		if(args.disabled) { this.disable(); }
-		if(args.label) { this.setLabel(args.label); }
-		if(args.icon) { this.setIcon(args.icon); }
-		if(args.toggleitem||args.toggleItem) { this.setToggleItem(true); }
-	}
-});
-
-dojo.widget.ToolbarItem.make = function(wh, whIsType, props) {
-	var item = null;
-
-	if(wh instanceof Array) {
-		item = dojo.widget.createWidget("ToolbarButtonGroup", props);
-		item.setName(wh[0]);
-		for(var i = 1; i < wh.length; i++) {
-			item.addChild(wh[i]);
-		}
-	} else if(wh instanceof dojo.widget.ToolbarItem) {
-		item = wh;
-	} else if(wh instanceof dojo.uri.Uri) {
-		item = dojo.widget.createWidget("ToolbarButton",
-			dojo.lang.mixin(props||{}, {icon: new dojo.widget.Icon(wh.toString())}));
-	} else if(whIsType) {
-		item = dojo.widget.createWidget(wh, props)
-	} else if(typeof wh == "string" || wh instanceof String) {
-		switch(wh.charAt(0)) {
-			case "|":
-			case "-":
-			case "/":
-				item = dojo.widget.createWidget("ToolbarSeparator", props);
-				break;
-			case " ":
-				if(wh.length == 1) {
-					item = dojo.widget.createWidget("ToolbarSpace", props);
-				} else {
-					item = dojo.widget.createWidget("ToolbarFlexibleSpace", props);
-				}
-				break;
-			default:
-				if(/\.(gif|jpg|jpeg|png)$/i.test(wh)) {
-					item = dojo.widget.createWidget("ToolbarButton",
-						dojo.lang.mixin(props||{}, {icon: new dojo.widget.Icon(wh.toString())}));
-				} else {
-					item = dojo.widget.createWidget("ToolbarButton",
-						dojo.lang.mixin(props||{}, {label: wh.toString()}));
-				}
-		}
-	} else if(wh && wh.tagName && /^img$/i.test(wh.tagName)) {
-		item = dojo.widget.createWidget("ToolbarButton",
-			dojo.lang.mixin(props||{}, {icon: wh}));
-	} else {
-		item = dojo.widget.createWidget("ToolbarButton",
-			dojo.lang.mixin(props||{}, {label: wh.toString()}));
-	}
-	return item;
-}
-
-/* ToolbarButtonGroup
- *********************/
-dojo.widget.html.ToolbarButtonGroup = function() {
-	dojo.widget.ToolbarItem.call(this);
-
-	this.widgetType = "ToolbarButtonGroup";
-	this.isContainer = true;
-
-	this.templateString = '<span unselectable="on" class="toolbarButtonGroup" dojoAttachPoint="containerNode"></span>';
-
-	// if a button has the same name, it will be selected
-	// if this is set to a number, the button at that index will be selected
-	this.defaultButton = "";
-
-	var oldAddChild = this.addChild;
-	this.addChild = function(item, pos, props) {
-		var widget = dojo.widget.ToolbarItem.make(item, null, dojo.lang.mixin(props||{}, {toggleItem:true}));
-		dojo.event.connect(widget, "onSelect", this, "onChildSelected");
-		var ret = oldAddChild.call(this, widget, null, pos, null);
-		if(widget._name == this.defaultButton
-			|| (typeof this.defaultButton == "number"
-			&& this.children.length-1 == this.defaultButton)) {
-			widget.select(false, true);
-		}
-		return ret;
-	}
-
-	this.getItem = function(name) {
-		if(name instanceof dojo.widget.ToolbarItem) { return name; }
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem
-				&& child._name == name) { return child; }
-		}
-		return null;
-	}
-
-	this.getItems = function() {
-		var items = [];
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				items.push(child);
-			}
-		}
-		return items;
-	}
-
-	this.onChildSelected = function(e) {
-		this.select(e._name);
-	}
-
-	this.enable = function(force, preventEvent) {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				child.enable(force, preventEvent);
-				if(child._name == this._value) {
-					child.select(force, preventEvent);
-				}
-			}
-		}
-	}
-
-	this.disable = function(force, preventEvent) {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				child.disable(force, preventEvent);
-			}
-		}
-	}
-
-	this._value = "";
-	this.getValue = function() { return this._value; }
-
-	this.select = function(name, force, preventEvent) {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				if(child._name == name) {
-					child.select(force, preventEvent);
-					this._value = name;
-				} else {
-					child.deselect(true, preventEvent);
-				}
-			}
-		}
-		if(!preventEvent) {
-			this._fireEvent("onSelect", this._value);
-			this._fireEvent("onChangeSelect", this._value);
-		}
-	}
-	this.setValue = this.select;
-
-	this.preventDeselect = false; // if true, once you select one, you can't have none selected
-}
-dojo.inherits(dojo.widget.html.ToolbarButtonGroup, dojo.widget.ToolbarItem);
-dojo.widget.tags.addParseTreeHandler("dojo:toolbarButtonGroup");
-
-/* ToolbarButton
- ***********************/
-dojo.widget.html.ToolbarButton = function() {
-	dojo.widget.ToolbarItem.call(this);
-}
-dojo.inherits(dojo.widget.html.ToolbarButton, dojo.widget.ToolbarItem);
-dojo.widget.tags.addParseTreeHandler("dojo:toolbarButton");
-
-dojo.lang.extend(dojo.widget.html.ToolbarButton, {
-	widgetType: "ToolbarButton",
-
-	fillInTemplate: function(args, frag) {
-		dojo.widget.html.ToolbarButton.superclass.fillInTemplate.call(this, args, frag);
-		dojo.html.addClass(this.domNode, "toolbarButton");
-		if(this._icon) {
-			this.setIcon(this._icon);
-		}
-		if(this._label) {
-			this.setLabel(this._label);
-		}
-
-		if(!this._name) {
-			if(this._label) {
-				this.setName(this._label);
-			} else if(this._icon) {
-				var src = this._icon.getSrc("enabled").match(/[\/^]([^\.\/]+)\.(gif|jpg|jpeg|png)$/i);
-				if(src) { this.setName(src[1]); }
-			} else {
-				this._name = this._widgetId;
-			}
-		}
-	}
-});
-
-/* ToolbarDialog
- **********************/
-dojo.widget.html.ToolbarDialog = function() {
-	dojo.widget.html.ToolbarButton.call(this);
-}
-dojo.inherits(dojo.widget.html.ToolbarDialog, dojo.widget.html.ToolbarButton);
-dojo.widget.tags.addParseTreeHandler("dojo:toolbarDialog");
-
-dojo.lang.extend(dojo.widget.html.ToolbarDialog, {
-	widgetType: "ToolbarDialog",
-	
-	fillInTemplate: function (args, frag) {
-		dojo.widget.html.ToolbarDialog.superclass.fillInTemplate.call(this, args, frag);
-		dojo.event.connect(this, "onSelect", this, "showDialog");
-		dojo.event.connect(this, "onDeselect", this, "hideDialog");
-	},
-	
-	showDialog: function (e) {
-		dojo.lang.setTimeout(dojo.event.connect, 1, document, "onmousedown", this, "deselect");
-	},
-	
-	hideDialog: function (e) {
-		dojo.event.disconnect(document, "onmousedown", this, "deselect");
-	}
-
-});
-
-/* ToolbarMenu
- **********************/
-dojo.widget.html.ToolbarMenu = function() {
-	dojo.widget.html.ToolbarDialog.call(this);
-
-	this.widgetType = "ToolbarMenu";
-}
-dojo.inherits(dojo.widget.html.ToolbarMenu, dojo.widget.html.ToolbarDialog);
-dojo.widget.tags.addParseTreeHandler("dojo:toolbarMenu");
-
-/* ToolbarMenuItem
- ******************/
-dojo.widget.ToolbarMenuItem = function() {
-}
-
-/* ToolbarSeparator
- **********************/
-dojo.widget.html.ToolbarSeparator = function() {
-	dojo.widget.ToolbarItem.call(this);
-
-	this.widgetType = "ToolbarSeparator";
-	this.templateString = '<span unselectable="on" class="toolbarItem toolbarSeparator"></span>';
-
-	this.defaultIconPath = new dojo.uri.dojoUri("src/widget/templates/buttons/-.gif");
-
-	var oldFillInTemplate = this.fillInTemplate;
-	this.fillInTemplate = function(args, frag, skip) {
-		oldFillInTemplate.call(this, args, frag);
-		this._name = this.widgetId;
-		if(!skip) {
-			if(!this._icon) {
-				this.setIcon(this.defaultIconPath);
-			}
-			this.domNode.appendChild(this._icon.getNode());
-		}
-	}
-
-	// don't want events!
-	this._onmouseover = this._onmouseout = this._onclick
-		= this._onmousedown = this._onmouseup = null;
-}
-dojo.inherits(dojo.widget.html.ToolbarSeparator, dojo.widget.ToolbarItem);
-dojo.widget.tags.addParseTreeHandler("dojo:toolbarSeparator");
-
-/* ToolbarSpace
- **********************/
-dojo.widget.html.ToolbarSpace = function() {
-	dojo.widget.html.ToolbarSeparator.call(this);
-
-	this.widgetType = "ToolbarSpace";
-
-	var oldFillInTemplate = this.fillInTemplate;
-	this.fillInTemplate = function(args, frag, skip) {
-		oldFillInTemplate.call(this, args, frag, true);
-		if(!skip) {
-			dojo.html.addClass(this.domNode, "toolbarSpace");
-		}
-	}
-}
-dojo.inherits(dojo.widget.html.ToolbarSpace, dojo.widget.html.ToolbarSeparator);
-dojo.widget.tags.addParseTreeHandler("dojo:toolbarSpace");
-
-/* ToolbarSelect
- ******************/
- 
-/*dojo.widget.html.ToolbarSelect = function() {
-	dojo.widget.html.ToolbarDialog.call(this);
-
-	// fix inheritence chain
-	for (var method in this.constructor.prototype) {
-		this[method] = this.constructor.prototype[method];
-	}
-}
-dojo.inherits(dojo.widget.html.ToolbarSelect, dojo.widget.html.ToolbarDialog);
-dojo.widget.tags.addParseTreeHandler("dojo:toolbarSelect");
-
-dojo.lang.extend(dojo.widget.html.ToolbarSelect, {
-	widgetType: "ToolbarSelect",
-	
-	fillInTemplate: function (args, frag) {
-		dojo.widget.html.ToolbarSelect.superclass.fillInTemplate.call(this, args, frag);
-		
-		this.dialog = document.createElement("ul");
-		for(var value in args.values) {
-			var li = document.createElement("li");
-			li.value = args.values[value];
-			li.appendChild(document.createTextNode(value));
-			this.dialog.appendChild(li);
-		}
-	},
-	
-	showDialog: function (e) {
-		dojo.widget.html.ToolbarSelect.superclass.showDialog.call(this, e);
-		with (dojo.html) {
-			var x = getAbsoluteX(this.domNode);
-			var y = getAbsoluteY(this.domNode) + getInnerHeight(this.domNode);
-		}
-		with (this.domNode.style) { top = y + "px"; left = x + "px"; }
-		dojo.html.body().appendChild(this.dialog);
-	},
-	
-	hideDialog: function (e) {
-		dojo.widget.html.ToolbarSelect.superclass.hideDialog.call(this, e);
-		this.dialog.parentNode.removeChild(this.dialog);
-	}
-
-});*/
-
-dojo.widget.html.ToolbarSelect = function() {
-	dojo.widget.ToolbarItem.call(this);
-	this.widgetType = "ToolbarSelect";
-	this.templateString = '<span class="toolbarItem toolbarSelect" unselectable="on"><select dojoAttachPoint="selectBox" dojoOnChange="changed"></select></span>';
-
-	var oldFillInTemplate = this.fillInTemplate;
-	this.fillInTemplate = function(args, frag) {
-		oldFillInTemplate.call(this, args, frag, true);
-		var keys = args.values;
-		var i = 0;
-		for(var val in keys) {
-			var opt = document.createElement("option");
-			opt.setAttribute("value", keys[val]);
-			opt.innerHTML = val;
-			this.selectBox.appendChild(opt);
-		}
-	}
-
-	this.changed = function(e) {
-		this._fireEvent("onSetValue", this.selectBox.value);
-	}
-
-	var oldSetEnabled = this.setEnabled;
-	this.setEnabled = function(is, force, preventEvent) {
-		var ret = oldSetEnabled.call(this, is, force, preventEvent);
-		this.selectBox.disabled = !this._enabled;
-		return ret;
-	}
-
-	// don't want events!
-	this._onmouseover = this._onmouseout = this._onclick
-		= this._onmousedown = this._onmouseup = null;
-}
-dojo.inherits(dojo.widget.html.ToolbarSelect, dojo.widget.ToolbarItem);
-dojo.widget.tags.addParseTreeHandler("dojo:toolbarSelect");
-
-/* Icon
- *********/
-// arguments can be IMG nodes, Image() instances or URLs -- enabled is the only one required
-dojo.widget.Icon = function(enabled, disabled, hover, selected) {
-	if(arguments.length == 0) {
-		throw new Error("Icon must have at least an enabled state");
-	}
-	var states = ["enabled", "disabled", "hover", "selected"];
-	var currentState = "enabled";
-	var domNode = document.createElement("img");
-
-	this.getState = function() { return currentState; }
-	this.setState = function(value) {
-		if(dojo.lang.inArray(value, states)) {
-			if(this[value]) {
-				currentState = value;
-				domNode.setAttribute("src", this[currentState].src);
-			}
-		} else {
-			throw new Error("Invalid state set on Icon (state: " + value + ")");
-		}
-	}
-
-	this.setSrc = function(state, value) {
-		if(/^img$/i.test(value.tagName)) {
-			this[state] = value;
-		} else if(typeof value == "string" || value instanceof String
-			|| value instanceof dojo.uri.Uri) {
-			this[state] = new Image();
-			this[state].src = value.toString();
-		}
-		return this[state];
-	}
-
-	this.setIcon = function(icon) {
-		for(var i = 0; i < states.length; i++) {
-			if(icon[states[i]]) {
-				this.setSrc(states[i], icon[states[i]]);
-			}
-		}
-		this.update();
-	}
-
-	this.enable = function() { this.setState("enabled"); }
-	this.disable = function() { this.setState("disabled"); }
-	this.hover = function() { this.setState("hover"); }
-	this.select = function() { this.setState("selected"); }
-
-	this.getSize = function() {
-		return {
-			width: domNode.width||domNode.offsetWidth,
-			height: domNode.height||domNode.offsetHeight
-		};
-	}
-
-	this.setSize = function(w, h) {
-		domNode.width = w;
-		domNode.height = h;
-		return { width: w, height: h };
-	}
-
-	this.getNode = function() {
-		return domNode;
-	}
-
-	this.getSrc = function(state) {
-		if(state) { return this[state].src; }
-		return domNode.src||"";
-	}
-
-	this.update = function() {
-		this.setState(currentState);
-	}
-
-	for(var i = 0; i < states.length; i++) {
-		var arg = arguments[i];
-		var state = states[i];
-		this[state] = null;
-		if(!arg) { continue; }
-		this.setSrc(state, arg);
-	}
-
-	this.enable();
-}
-
-dojo.widget.Icon.make = function(a,b,c,d) {
-	for(var i = 0; i < arguments.length; i++) {
-		if(arguments[i] instanceof dojo.widget.Icon) {
-			return arguments[i];
-		} else if(!arguments[i]) {
-			nullArgs++;
-		}
-	}
-
-	return new dojo.widget.Icon(a,b,c,d);
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Tooltip.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Tooltip.js
deleted file mode 100644
index af35790..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Tooltip.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Tooltip");

-dojo.require("dojo.widget.Widget");

-

-dojo.widget.tags.addParseTreeHandler("dojo:tooltip");

-

-dojo.widget.Tooltip = function(){

-	dojo.widget.Widget.call(this);

-

-	this.widgetType = "Tooltip";

-	this.isContainer = true;

-}

-dojo.inherits(dojo.widget.Tooltip, dojo.widget.Widget);

-

-dojo.requireAfterIf("html", "dojo.widget.html.Tooltip");

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Tree.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Tree.js
deleted file mode 100644
index d1e4cbd..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Tree.js
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Tree");
-dojo.provide("dojo.widget.HtmlTree");
-dojo.provide("dojo.widget.TreeNode");
-dojo.provide("dojo.widget.HtmlTreeNode");
-
-dojo.require("dojo.event.*");
-dojo.require("dojo.fx.html");
-dojo.require("dojo.widget.Container");
-
-// make it a tag
-dojo.widget.tags.addParseTreeHandler("dojo:Tree");
-dojo.widget.tags.addParseTreeHandler("dojo:TreeNode");
-
-dojo.widget.HtmlTree = function() {
-	dojo.widget.html.Container.call(this);
-}
-dojo.inherits(dojo.widget.HtmlTree, dojo.widget.html.Container);
-
-dojo.lang.extend(dojo.widget.HtmlTree, {
-	widgetType: "Tree",
-
-	domNode: null,
-
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/Tree.css"),
-	templateString: '<div class="dojoTree"></div>',
-
-	selectedNode: null,
-	toggler: null,
-
-
-	//
-	// these icons control the grid and expando buttons for the whole tree
-	//
-
-	blankIconSrc: dojo.uri.dojoUri("src/widget/templates/images/treenode_blank.gif").toString(),
-
-	gridIconSrcT: dojo.uri.dojoUri("src/widget/templates/images/treenode_grid_t.gif").toString(), // for non-last child grid
-	gridIconSrcL: dojo.uri.dojoUri("src/widget/templates/images/treenode_grid_l.gif").toString(), // for last child grid
-	gridIconSrcV: dojo.uri.dojoUri("src/widget/templates/images/treenode_grid_v.gif").toString(), // vertical line
-	gridIconSrcP: dojo.uri.dojoUri("src/widget/templates/images/treenode_grid_p.gif").toString(), // for under parent item child icons
-	gridIconSrcC: dojo.uri.dojoUri("src/widget/templates/images/treenode_grid_c.gif").toString(), // for under child item child icons
-	gridIconSrcX: dojo.uri.dojoUri("src/widget/templates/images/treenode_grid_x.gif").toString(), // grid for sole root item
-	gridIconSrcY: dojo.uri.dojoUri("src/widget/templates/images/treenode_grid_y.gif").toString(), // grid for last rrot item
-	gridIconSrcZ: dojo.uri.dojoUri("src/widget/templates/images/treenode_grid_z.gif").toString(), // for under root parent item child icon
-
-	expandIconSrcPlus: dojo.uri.dojoUri("src/widget/templates/images/treenode_expand_plus.gif").toString(),
-	expandIconSrcMinus: dojo.uri.dojoUri("src/widget/templates/images/treenode_expand_minus.gif").toString(),
-
-	iconWidth: 18,
-	iconHeight: 18,
-
-
-	//
-	// tree options
-	//
-
-	showGrid: true,
-	showRootGrid: true,
-
-	toggle: "default",
-	toggleDuration: 150,
-
-
-	//
-	// subscribable events
-	//
-
-	publishSelectionTopic: "",
-	publishExpandedTopic: "",
-	publishCollapsedTopic: "",
-
-
-	initialize: function(args, frag){
-		switch (this.toggle) {
-			case "fade": this.toggler = new dojo.widget.Tree.FadeToggle(); break;
-			case "wipe": this.toggler = new dojo.widget.Tree.WipeToggle(); break;
-			default    : this.toggler = new dojo.widget.Tree.DefaultToggle();
-		}
-	},
-
-	postCreate: function(){
-		this.buildTree();
-	},
-
-	buildTree: function(){
-
-		dojo.html.disableSelection(this.domNode);
-
-		for(var i=0; i<this.children.length; i++){
-
-			this.children[i].isFirstNode = (i == 0) ? true : false;
-			this.children[i].isLastNode = (i == this.children.length-1) ? true : false;
-
-			var node = this.children[i].buildNode(this, 0);
-
-			this.domNode.appendChild(node);
-		}
-
-
-		//
-		// when we don't show root toggles, we need to auto-expand root nodes
-		//
-
-		if (!this.showRootGrid){
-			for(var i=0; i<this.children.length; i++){
-				this.children[i].expand();
-			}
-		}
-
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].startMe();
-		}
-	},
-
-	addChild: function(child){
-
-		//
-		// this function gets called to add nodes to both trees and nodes, so it's a little confusing :)
-		//
-
-		if (child.widgetType != 'TreeNode'){
-			dojo.raise("You can only add TreeNode widgets to a "+this.widgetType+" widget!");
-			return;
-		}
-
-		if (this.children.length){
-
-			var lastChild = this.children[this.children.length-1];
-			lastChild.isLastNode = false;
-			lastChild.updateIconTree();
-		}else{
-
-			if (this.widgetType == 'TreeNode'){
-				this.isParent = true;
-				this.isExpanded = false;
-				this.updateIcons();
-			}
-
-			child.isFirstNode = true;
-		}
-
-
-
-		if (this.widgetType == 'TreeNode'){
-
-			var childDepth = this.depth+1;
-			var childTree = this.tree;
-
-			child.parentNode = this;
-			child.isLastNode = true;
-
-		}else{
-			var childDepth = 0;
-			var childTree = this;
-
-			child.isLastNode = true;
-		}
-
-		this.children.push(child);
-		var node = child.buildNode(childTree, childDepth);
-
-		if (this.widgetType == 'Tree'){
-			this.domNode.appendChild(node);
-		}else{
-			this.containerNode.appendChild(node);
-		}
-
-		child.startMe();
-	}
-});
-
-
-dojo.widget.HtmlTreeNode = function() {
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.HtmlTreeNode, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.HtmlTreeNode, {
-	widgetType: "TreeNode",
-	isContainer: true,
-	messWithMyChildren: true,
-
-	domNode: null,
-	continerNode: null,
-
-	templateString: '<div class="dojoTreeNode"><div dojoAttachPoint="containerNode"></div></div>',
-
-	childIconSrc: '',
-
-	childIcon: null,
-	underChildIcon: null,
-	expandIcon: null,
-
-	title: "",
-
-	labelNode: null, // the item label
-	imgs: null, // an array of icons imgs
-	rowNode: null, // the tr
-
-	tree: null,
-	parentNode: null,
-	depth: 0,
-
-	isFirstNode: false,
-	isLastNode: false,
-	isExpanded: false,
-	isParent: false,
-	booted: false,
-
-	buildNode: function(tree, depth){
-
-		this.tree = tree;
-		this.depth = depth;
-
-
-		//
-		// add the tree icons
-		//
-
-		this.imgs = [];
-
-		for(var i=0; i<this.depth+2; i++){
-
-			var img = document.createElement('img');
-
-			img.style.width = this.tree.iconWidth + 'px';
-			img.style.height = this.tree.iconHeight + 'px';
-			img.src = this.tree.blankIconSrc;
-			img.style.verticalAlign = 'middle';
-
-			this.domNode.insertBefore(img, this.containerNode);
-
-			this.imgs.push(img);
-		}
-
-		this.expandIcon = this.imgs[this.imgs.length-2];
-		this.childIcon = this.imgs[this.imgs.length-1];
-
-
-		//
-		// add the cell label
-		//
-
-
-		this.labelNode = document.createElement('span');
-
-		this.labelNode.appendChild(document.createTextNode(this.title));
-
-		this.domNode.insertBefore(this.labelNode, this.containerNode);
-
-		dojo.html.addClass(this.labelNode, 'dojoTreeNodeLabel');
-
-
-		dojo.event.connect(this.expandIcon, 'onclick', this, 'onTreeClick');
-		dojo.event.connect(this.childIcon, 'onclick', this, 'onIconClick');
-		dojo.event.connect(this.labelNode, 'onclick', this, 'onLabelClick');
-
-
-		//
-		// create the child rows
-		//
-
-		for(var i=0; i<this.children.length; i++){
-
-			this.children[i].isFirstNode = (i == 0) ? true : false;
-			this.children[i].isLastNode = (i == this.children.length-1) ? true : false;
-			this.children[i].parentNode = this;
-			var node = this.children[i].buildNode(this.tree, this.depth+1);
-
-			this.containerNode.appendChild(node);
-		}
-
-		this.isParent = (this.children.length > 0) ? true : false;
-
-		this.collapse();
-
-		return this.domNode;
-	},
-
-	onTreeClick: function(e){
-
-		if (this.isExpanded){
-			this.collapse();
-		}else{
-			this.expand();
-		}
-	},
-
-	onIconClick: function(){
-		this.onLabelClick();
-	},
-
-	onLabelClick: function(){
-
-		if (this.tree.selectedNode == this){
-
-			//this.editInline();
-			dojo.debug('TODO: start inline edit here!');
-			return;
-		}
-
-		if (this.tree.selectedNode){ this.tree.selectedNode.deselect(); }
-
-		this.tree.selectedNode = this;
-		this.tree.selectedNode.select();
-	},
-
-	select: function(){
-
-		dojo.html.addClass(this.labelNode, 'dojoTreeNodeLabelSelected');
-
-		dojo.event.topic.publish(this.tree.publishSelectionTopic, this.widgetId);
-	},
-
-	deselect: function(){
-
-		dojo.html.removeClass(this.labelNode, 'dojoTreeNodeLabelSelected');
-	},
-
-	updateIcons: function(){
-
-		this.imgs[0].style.display = this.tree.showRootGrid ? 'inline' : 'none';
-
-
-		//
-		// set the expand icon
-		//
-
-		if (this.isParent){
-			this.expandIcon.src = this.isExpanded ? this.tree.expandIconSrcMinus : this.tree.expandIconSrcPlus;
-		}else{
-			this.expandIcon.src = this.tree.blankIconSrc;
-		}
-
-
-		//
-		// set the grid under the expand icon
-		//
-
-		if (this.tree.showGrid){
-			if (this.depth){
-
-				this.setGridImage(-2, this.isLastNode ? this.tree.gridIconSrcL : this.tree.gridIconSrcT);
-			}else{
-				if (this.isFirstNode){
-					this.setGridImage(-2, this.isLastNode ? this.tree.gridIconSrcX : this.tree.gridIconSrcY);
-				}else{
-					this.setGridImage(-2, this.isLastNode ? this.tree.gridIconSrcL : this.tree.gridIconSrcT);
-				}
-			}
-		}else{
-			this.setGridImage(-2, this.tree.blankIconSrc);
-		}
-
-
-		//
-		// set the child icon
-		//
-
-		if (this.childIconSrc){
-			this.childIcon.style.display = 'inline';
-			this.childIcon.src = this.childIconSrc;
-		}else{
-			this.childIcon.style.display = 'none';
-		}
-
-
-		//
-		// set the grid under the child icon
-		//
-
-		if ((this.depth || this.tree.showRootGrid) && this.tree.showGrid){
-
-			this.setGridImage(-1, (this.isParent && this.isExpanded) ? this.tree.gridIconSrcP : this.tree.gridIconSrcC);
-		}else{
-			if (this.tree.showGrid && !this.tree.showRootGrid){
-
-				this.setGridImage(-1, (this.isParent && this.isExpanded) ? this.tree.gridIconSrcZ : this.tree.blankIconSrc);
-			}else{
-				this.setGridImage(-1, this.tree.blankIconSrc);
-			}
-		}
-
-
-		//
-		// set the vertical grid icons
-		//
-
-		var parent = this.parentNode;
-
-		for(var i=0; i<this.depth; i++){
-
-			var idx = this.imgs.length-(3+i);
-
-			this.setGridImage(idx, (this.tree.showGrid && !parent.isLastNode) ? this.tree.gridIconSrcV : this.tree.blankIconSrc);
-
-			parent = parent.parentNode;
-		}
-
-	},
-
-	setGridImage: function(idx, src){
-
-		if (idx < 0){
-			idx = this.imgs.length + idx;
-		}
-
-		this.imgs[idx].style.backgroundImage = 'url(' + src + ')';
-	},
-
-	updateIconTree: function(){
-
-		this.updateIcons();
-
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].updateIconTree();
-		}
-	},
-
-	expand: function(){
-		this.showChildren();
-		this.isExpanded = true;
-		this.updateIcons();
-	},
-
-	collapse: function(){
-		this.hideChildren();
-		this.isExpanded = false;
-		this.updateIcons();
-	},
-
-	hideChildren: function(){
-
-		if (this.booted){
-			this.tree.toggler.hide(this.containerNode);
-		}else{
-			this.containerNode.style.display = 'none';
-		}
-		dojo.event.topic.publish(this.tree.publishCollapsedTopic, this.widgetId);
-	},
-
-	showChildren: function(){
-
-		if (this.booted){
-			this.tree.toggler.show(this.containerNode);
-		}else{
-			this.containerNode.style.display = 'block';
-		}
-		dojo.event.topic.publish(this.tree.publishExpandedTopic, this.widgetId);
-	},
-
-	startMe: function(){
-
-		this.booted = true;
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].startMe();
-		}
-	},
-
-	addChild: function(child){
-
-		this.tree.addChild.call(this, child);
-	}
-
-});
-
-dojo.widget.Tree.DefaultToggle = function(){
-
-	this.show = function(node){
-		node.style.display = 'block';
-	}
-
-	this.hide = function(node){
-		node.style.display = 'none';
-	}
-}
-
-dojo.widget.Tree.FadeToggle = function(duration){
-	this.toggleDuration = duration ? duration : 150;
-
-	this.show = function(node){
-		node.style.display = 'block';
-		dojo.fx.html.fade(node, this.toggleDuration, 0, 1);
-	}
-
-	this.hide = function(node){
-		dojo.fx.html.fadeOut(node, this.toggleDuration, function(node){ node.style.display = 'none'; });
-	}
-}
-
-dojo.widget.Tree.WipeToggle = function(duration){
-	this.toggleDuration = duration ? duration : 150;
-
-	this.show = function(node){
-		node.style.display = 'block';
-		dojo.fx.html.wipeIn(node, this.toggleDuration);
-	}
-
-	this.hide = function(node){
-		dojo.fx.html.wipeOut(node, this.toggleDuration, function(node){ node.style.display = 'none'; });
-	}
-}
-
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Widget.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Widget.js
deleted file mode 100644
index ee09eda..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Widget.js
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Widget");
-dojo.provide("dojo.widget.tags");
-
-dojo.require("dojo.lang");
-dojo.require("dojo.widget.Manager");
-dojo.require("dojo.event.*");
-dojo.require("dojo.string");
-
-dojo.widget.Widget = function(){
-	// these properties aren't primitives and need to be created on a per-item
-	// basis.
-	this.children = [];
-	// this.selection = new dojo.widget.Selection();
-	// FIXME: need to replace this with context menu stuff
-	this.extraArgs = {};
-}
-// FIXME: need to be able to disambiguate what our rendering context is
-//        here!
-
-// needs to be a string with the end classname. Every subclass MUST
-// over-ride.
-dojo.lang.extend(dojo.widget.Widget, {
-	// base widget properties
-	parent: null,
-	// obviously, top-level and modal widgets should set these appropriately
-	isTopLevel:  false,
-	isModal: false,
-
-	isEnabled: true,
-	isHidden: false,
-	isContainer: false, // can we contain other widgets?
-	widgetId: "",
-	widgetType: "Widget", // used for building generic widgets
-
-	toString: function() {
-		return '[Widget ' + this.widgetType + ', ' + (this.widgetId || 'NO ID') + ']';
-	},
-
-	repr: function(){
-		return this.toString();
-	},
-
-	enable: function(){
-		// should be over-ridden
-		this.isEnabled = true;
-	},
-
-	disable: function(){
-		// should be over-ridden
-		this.isEnabled = false;
-	},
-
-	hide: function(){
-		// should be over-ridden
-		this.isHidden = true;
-	},
-
-	show: function(){
-		// should be over-ridden
-		this.isHidden = false;
-	},
-
-	create: function(args, fragment, parentComp){
-		// dojo.debug(this.widgetType, "create");
-		this.satisfyPropertySets(args, fragment, parentComp);
-		// dojo.debug(this.widgetType, "-> mixInProperties");
-		this.mixInProperties(args, fragment, parentComp);
-		// dojo.debug(this.widgetType, "-> postMixInProperties");
-		this.postMixInProperties(args, fragment, parentComp);
-		// dojo.debug(this.widgetType, "-> dojo.widget.manager.add");
-		dojo.widget.manager.add(this);
-		// dojo.debug(this.widgetType, "-> buildRendering");
-		this.buildRendering(args, fragment, parentComp);
-		// dojo.debug(this.widgetType, "-> initialize");
-		this.initialize(args, fragment, parentComp);
-		// dojo.debug(this.widgetType, "-> postInitialize");
-		this.postInitialize(args, fragment, parentComp);
-		// dojo.debug(this.widgetType, "-> postCreate");
-		this.postCreate(args, fragment, parentComp);
-		// dojo.debug(this.widgetType, "done!");
-		return this;
-	},
-
-	destroy: function(finalize){
-		// FIXME: this is woefully incomplete
-		this.uninitialize();
-		this.destroyRendering(finalize);
-		dojo.widget.manager.removeById(this.widgetId);
-	},
-
-	destroyChildren: function(testFunc){
-		testFunc = (!testFunc) ? function(){ return true; } : testFunc;
-		for(var x=0; x<this.children.length; x++){
-			var tc = this.children[x];
-			if((tc)&&(testFunc(tc))){
-				tc.destroy();
-			}
-		}
-		// this.children = [];
-	},
-
-	destroyChildrenOfType: function(type){
-		type = type.toLowerCase();
-		this.destroyChildren(function(item){
-			if(item.widgetType.toLowerCase() == type){
-				return true;
-			}else{
-				return false;
-			}
-		});
-	},
-
-	getChildrenOfType: function(type, recurse){
-		var ret = [];
-		type = type.toLowerCase();
-		for(var x=0; x<this.children.length; x++){
-			if(this.children[x].widgetType.toLowerCase() == type){
-				ret.push(this.children[x]);
-			}
-			if(recurse){
-				ret = ret.concat(this.children[x].getChildrenOfType(type, recurse));
-			}
-		}
-		return ret;
-	},
-
-	getDescendants: function(){
-		// FIXME: this does not appear to be recursive. Shouldn't a function 
-		// with this signature get *all* descendants?
-		var result = [];
-		var stack = [this];
-		var elem;
-		while (elem = stack.pop()){
-			result.push(elem);
-			dojo.lang.forEach(elem.children, function(elem) { stack.push(elem); });
-		}
-		return result;
-	},
-
-	satisfyPropertySets: function(args){
-		// dojo.profile.start("satisfyPropertySets");
-		// get the default propsets for our component type
-		/*
-		var typePropSets = []; // FIXME: need to pull these from somewhere!
-		var localPropSets = []; // pull out propsets from the parser's return structure
-
-		// for(var x=0; x<args.length; x++){
-		// }
-
-		for(var x=0; x<typePropSets.length; x++){
-		}
-
-		for(var x=0; x<localPropSets.length; x++){
-		}
-		*/
-		// dojo.profile.end("satisfyPropertySets");
-		
-		return args;
-	},
-
-	mixInProperties: function(args, frag){
-		if((args["fastMixIn"])||(frag["fastMixIn"])){
-			// dojo.profile.start("mixInProperties_fastMixIn");
-			// fast mix in assumes case sensitivity, no type casting, etc...
-			// dojo.lang.mixin(this, args);
-			for(var x in args){
-				this[x] = args[x];
-			}
-			// dojo.profile.end("mixInProperties_fastMixIn");
-			return;
-		}
-		// dojo.profile.start("mixInProperties");
-		/*
-		 * the actual mix-in code attempts to do some type-assignment based on
-		 * PRE-EXISTING properties of the "this" object. When a named property
-		 * of a propset is located, it is first tested to make sure that the
-		 * current object already "has one". Properties which are undefined in
-		 * the base widget are NOT settable here. The next step is to try to
-		 * determine type of the pre-existing property. If it's a string, the
-		 * property value is simply assigned. If a function, the property is
-		 * replaced with a "new Function()" declaration. If an Array, the
-		 * system attempts to split the string value on ";" chars, and no
-		 * further processing is attempted (conversion of array elements to a
-		 * integers, for instance). If the property value is an Object
-		 * (testObj.constructor === Object), the property is split first on ";"
-		 * chars, secondly on ":" chars, and the resulting key/value pairs are
-		 * assigned to an object in a map style. The onus is on the property
-		 * user to ensure that all property values are converted to the
-		 * expected type before usage.
-		 */
-
-		var undef;
-
-		// NOTE: we cannot assume that the passed properties are case-correct
-		// (esp due to some browser bugs). Therefore, we attempt to locate
-		// properties for assignment regardless of case. This may cause
-		// problematic assignments and bugs in the future and will need to be
-		// documented with big bright neon lights.
-
-		// FIXME: fails miserably if a mixin property has a default value of null in 
-		// a widget
-
-		// NOTE: caching lower-cased args in the prototype is only 
-		// acceptable if the properties are invariant.
-		// if we have a name-cache, get it
-		var lcArgs = dojo.widget.lcArgsCache[this.widgetType];
-		if ( lcArgs == null ){
-			// build a lower-case property name cache if we don't have one
-			lcArgs = {};
-			for(var y in this){
-				lcArgs[((new String(y)).toLowerCase())] = y;
-			}
-			dojo.widget.lcArgsCache[this.widgetType] = lcArgs;
-		}
-		var visited = {};
-		for(var x in args){
-			if(!this[x]){ // check the cache for properties
-				var y = lcArgs[(new String(x)).toLowerCase()];
-				if(y){
-					args[y] = args[x];
-					x = y; 
-				}
-			}
-			if(visited[x]){ continue; }
-			visited[x] = true;
-			if((typeof this[x]) != (typeof undef)){
-				if(typeof args[x] != "string"){
-					this[x] = args[x];
-				}else{
-					if(dojo.lang.isString(this[x])){
-						this[x] = args[x];
-					}else if(dojo.lang.isNumber(this[x])){
-						this[x] = new Number(args[x]); // FIXME: what if NaN is the result?
-					}else if(dojo.lang.isBoolean(this[x])){
-						this[x] = (args[x].toLowerCase()=="false") ? false : true;
-					}else if(dojo.lang.isFunction(this[x])){
-
-						// FIXME: need to determine if always over-writing instead
-						// of attaching here is appropriate. I suspect that we
-						// might want to only allow attaching w/ action items.
-						
-						// RAR, 1/19/05: I'm going to attach instead of
-						// over-write here. Perhaps function objects could have
-						// some sort of flag set on them? Or mixed-into objects
-						// could have some list of non-mutable properties
-						// (although I'm not sure how that would alleviate this
-						// particular problem)? 
-
-						// this[x] = new Function(args[x]);
-
-						// after an IRC discussion last week, it was decided
-						// that these event handlers should execute in the
-						// context of the widget, so that the "this" pointer
-						// takes correctly.
-						var tn = dojo.lang.nameAnonFunc(new Function(args[x]), this);
-						dojo.event.connect(this, x, this, tn);
-					}else if(dojo.lang.isArray(this[x])){ // typeof [] == "object"
-						this[x] = args[x].split(";");
-					} else if (this[x] instanceof Date) {
-						this[x] = new Date(Number(args[x])); // assume timestamp
-					}else if(typeof this[x] == "object"){ 
-						// FIXME: should we be allowing extension here to handle
-						// other object types intelligently?
-
-						// FIXME: unlike all other types, we do not replace the
-						// object with a new one here. Should we change that?
-						var pairs = args[x].split(";");
-						for(var y=0; y<pairs.length; y++){
-							var si = pairs[y].indexOf(":");
-							if((si != -1)&&(pairs[y].length>si)){
-								this[x][dojo.string.trim(pairs[y].substr(0, si))] = pairs[y].substr(si+1);
-							}
-						}
-					}else{
-						// the default is straight-up string assignment. When would
-						// we ever hit this?
-						this[x] = args[x];
-					}
-				}
-			}else{
-				// collect any extra 'non mixed in' args
-				this.extraArgs[x] = args[x];
-			}
-		}
-		// dojo.profile.end("mixInProperties");
-	},
-	
-	postMixInProperties: function(){
-	},
-
-	initialize: function(args, frag){
-		// dj_unimplemented("dojo.widget.Widget.initialize");
-		return false;
-	},
-
-	postInitialize: function(args, frag){
-		return false;
-	},
-
-	postCreate: function(args, frag){
-		return false;
-	},
-
-	uninitialize: function(){
-		// dj_unimplemented("dojo.widget.Widget.uninitialize");
-		return false;
-	},
-
-	buildRendering: function(){
-		// SUBCLASSES MUST IMPLEMENT
-		dj_unimplemented("dojo.widget.Widget.buildRendering, on "+this.toString()+", ");
-		return false;
-	},
-
-	destroyRendering: function(){
-		// SUBCLASSES MUST IMPLEMENT
-		dj_unimplemented("dojo.widget.Widget.destroyRendering");
-		return false;
-	},
-
-	cleanUp: function(){
-		// SUBCLASSES MUST IMPLEMENT
-		dj_unimplemented("dojo.widget.Widget.cleanUp");
-		return false;
-	},
-
-	addedTo: function(parent){
-		// this is just a signal that can be caught
-	},
-
-	addChild: function(child){
-		// SUBCLASSES MUST IMPLEMENT
-		dj_unimplemented("dojo.widget.Widget.addChild");
-		return false;
-	},
-
-	addChildAtIndex: function(child, index){
-		// SUBCLASSES MUST IMPLEMENT
-		dj_unimplemented("dojo.widget.Widget.addChildAtIndex");
-		return false;
-	},
-
-	removeChild: function(childRef){
-		// SUBCLASSES MUST IMPLEMENT
-		dj_unimplemented("dojo.widget.Widget.removeChild");
-		return false;
-	},
-
-	removeChildAtIndex: function(index){
-		// SUBCLASSES MUST IMPLEMENT
-		dj_unimplemented("dojo.widget.Widget.removeChildAtIndex");
-		return false;
-	},
-
-	resize: function(width, height){
-		// both width and height may be set as percentages. The setWidth and
-		// setHeight  functions attempt to determine if the passed param is
-		// specified in percentage or native units. Integers without a
-		// measurement are assumed to be in the native unit of measure.
-		this.setWidth(width);
-		this.setHeight(height);
-	},
-
-	setWidth: function(width){
-		if((typeof width == "string")&&(width.substr(-1) == "%")){
-			this.setPercentageWidth(width);
-		}else{
-			this.setNativeWidth(width);
-		}
-	},
-
-	setHeight: function(height){
-		if((typeof height == "string")&&(height.substr(-1) == "%")){
-			this.setPercentageHeight(height);
-		}else{
-			this.setNativeHeight(height);
-		}
-	},
-
-	setPercentageHeight: function(height){
-		// SUBCLASSES MUST IMPLEMENT
-		return false;
-	},
-
-	setNativeHeight: function(height){
-		// SUBCLASSES MUST IMPLEMENT
-		return false;
-	},
-
-	setPercentageWidth: function(width){
-		// SUBCLASSES MUST IMPLEMENT
-		return false;
-	},
-
-	setNativeWidth: function(width){
-		// SUBCLASSES MUST IMPLEMENT
-		return false;
-	},
-
-	getDescendants: function() {
-		var result = [];
-		var stack = [this];
-		var elem;
-		while (elem = stack.pop()) {
-			result.push(elem);
-			dojo.lang.forEach(elem.children, function(elem) { stack.push(elem); });
-		}
- 
-		return result;
-	}
-});
-
-// Lower case name cache: listing of the lower case elements in each widget.
-// We can't store the lcArgs in the widget itself because if B subclasses A,
-// then B.prototype.lcArgs might return A.prototype.lcArgs, which is not what we
-// want
-dojo.widget.lcArgsCache = {};
-
-// TODO: should have a more general way to add tags or tag libraries?
-// TODO: need a default tags class to inherit from for things like getting propertySets
-// TODO: parse properties/propertySets into component attributes
-// TODO: parse subcomponents
-// TODO: copy/clone raw markup fragments/nodes as appropriate
-dojo.widget.tags = {};
-dojo.widget.tags.addParseTreeHandler = function(type){
-	var ltype = type.toLowerCase();
-	this[ltype] = function(fragment, widgetParser, parentComp, insertionIndex, localProps){ 
-		return dojo.widget.buildWidgetFromParseTree(ltype, fragment, widgetParser, parentComp, insertionIndex, localProps);
-	}
-}
-dojo.widget.tags.addParseTreeHandler("dojo:widget");
-
-dojo.widget.tags["dojo:propertyset"] = function(fragment, widgetParser, parentComp){
-	// FIXME: Is this needed?
-	// FIXME: Not sure that this parses into the structure that I want it to parse into...
-	// FIXME: add support for nested propertySets
-	var properties = widgetParser.parseProperties(fragment["dojo:propertyset"]);
-}
-
-// FIXME: need to add the <dojo:connect />
-dojo.widget.tags["dojo:connect"] = function(fragment, widgetParser, parentComp){
-	var properties = widgetParser.parseProperties(fragment["dojo:connect"]);
-}
-
-dojo.widget.buildWidgetFromParseTree = function(type, frag, 
-												parser, parentComp, 
-												insertionIndex, localProps){
-	var stype = type.split(":");
-	stype = (stype.length == 2) ? stype[1] : type;
-	// FIXME: we don't seem to be doing anything with this!
-	// var propertySets = parser.getPropertySets(frag);
-	var localProperties = localProps || parser.parseProperties(frag["dojo:"+stype]);
-	// var tic = new Date();
-	var twidget = dojo.widget.manager.getImplementation(stype);
-	if(!twidget){
-		throw new Error("cannot find \"" + stype + "\" widget");
-	}else if (!twidget.create){
-		throw new Error("\"" + stype + "\" widget object does not appear to implement *Widget");
-	}
-	localProperties["dojoinsertionindex"] = insertionIndex;
-	// FIXME: we loose no less than 5ms in construction!
-	var ret = twidget.create(localProperties, frag, parentComp);
-	// dojo.debug(new Date() - tic);
-	return ret;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Wizard.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Wizard.js
deleted file mode 100644
index 0bc9697..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/Wizard.js
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.Wizard");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.LayoutPane");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html");
-dojo.require("dojo.style");
-
-//////////////////////////////////////////
-// Wizard -- a set of panels
-//////////////////////////////////////////
-dojo.widget.Wizard = function() {
-	dojo.widget.html.LayoutPane.call(this);
-}
-dojo.inherits(dojo.widget.Wizard, dojo.widget.html.LayoutPane);
-
-dojo.lang.extend(dojo.widget.Wizard, {
-
-	widgetType: "Wizard",
-
-	labelPosition: "top",
-
-	templatePath: dojo.uri.dojoUri("src/widget/templates/Wizard.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/Wizard.css"),
-
-	selected: null,		// currently selected panel
-	wizardNode: null, // the outer wizard node
-	wizardPanelContainerNode: null, // the container for the panels
-	wizardControlContainerNode: null, // the container for the wizard controls
-	previousButton: null, // the previous button
-	nextButton: null, // the next button
-	cancelButton: null, // the cancel button
-	doneButton: null, // the done button
-	nextButtonLabel: "next",
-	previousButtonLabel: "previous",
-	cancelButtonLabel: "cancel",
-	doneButtonLabel: "done",
-	cancelFunction : "",
-
-	hideDisabledButtons: false,
-
-	fillInTemplate: function(args, frag){
-		dojo.event.connect(this.nextButton, "onclick", this, "nextPanel");
-		dojo.event.connect(this.previousButton, "onclick", this, "previousPanel");
-		if (this.cancelFunction){
-			dojo.event.connect(this.cancelButton, "onclick", this.cancelFunction);
-		}else{
-			this.cancelButton.style.display = "none";
-		}
-		dojo.event.connect(this.doneButton, "onclick", this, "done");
-		this.nextButton.value = this.nextButtonLabel;
-		this.previousButton.value = this.previousButtonLabel;
-		this.cancelButton.value = this.cancelButtonLabel;
-		this.doneButton.value = this.doneButtonLabel;
-	},
-
-	checkButtons: function(){
-		var lastStep = !this.hasNextPanel();
-		this.nextButton.disabled = lastStep;
-		this.setButtonClass(this.nextButton);
-		if(this.selected.doneFunction){
-			this.doneButton.style.display = "";
-			// hide the next button if this is the last one and we have a done function
-			if(lastStep){
-				this.nextButton.style.display = "none";
-			}
-		}else{
-			this.doneButton.style.display = "none";
-		}
-		this.previousButton.disabled = ((!this.hasPreviousPanel()) || (!this.selected.canGoBack));
-		this.setButtonClass(this.previousButton);
-	},
-
-	setButtonClass: function(button){
-		if(!this.hideDisabledButtons){
-			button.style.display = "";
-			dojo.html.setClass(button, button.disabled ? "WizardButtonDisabled" : "WizardButton");
-		}else{
-			button.style.display = button.disabled ? "none" : "";
-		}
-	},
-
-	registerChild: function(panel, insertionIndex){
-		dojo.widget.Wizard.superclass.registerChild.call(this, panel, insertionIndex);
-		this.wizardPanelContainerNode.appendChild(panel.domNode);
-		panel.hide();
-
-		if(!this.selected){
-			this.onSelected(panel);
-		}
-		this.checkButtons();
-	},
-
-	onSelected: function(panel){
-		// Deselect old panel and select new one
-		if(this.selected ){
-			if (this.selected.checkPass()) {
-				this.selected.hide();
-			} else {
-				return;
-			}
-		}
-		panel.show();
-		this.selected = panel;
-	},
-
-	getPanels: function() {
-		return this.getChildrenOfType("WizardPane", false);
-	},
-
-	selectedIndex: function() {
-		if (this.selected) {
-			return dojo.lang.indexOf(this.getPanels(), this.selected);
-		}
-		return -1;
-	},
-
-	nextPanel: function() {
-		var selectedIndex = this.selectedIndex();
-		if ( selectedIndex > -1 ) {
-			var childPanels = this.getPanels();
-			if (childPanels[selectedIndex + 1]) {
-				this.onSelected(childPanels[selectedIndex + 1]);
-			}
-		}
-		this.checkButtons();
-	},
-
-	previousPanel: function() {
-		var selectedIndex = this.selectedIndex();
-		if ( selectedIndex > -1 ) {
-			var childPanels = this.getPanels();
-			if (childPanels[selectedIndex - 1]) {
-				this.onSelected(childPanels[selectedIndex - 1]);
-			}
-		}
-		this.checkButtons();
-	},
-
-	hasNextPanel: function() {
-		var selectedIndex = this.selectedIndex();
-		return (selectedIndex < (this.getPanels().length - 1));
-	},
-
-	hasPreviousPanel: function() {
-		var selectedIndex = this.selectedIndex();
-		return (selectedIndex > 0);
-	},
-
-	done: function() {
-		this.selected.done();
-	}
-});
-dojo.widget.tags.addParseTreeHandler("dojo:Wizard");
-
-//////////////////////////////////////////
-// WizardPane -- a panel in a wizard
-//////////////////////////////////////////
-dojo.widget.WizardPane = function() {
-	dojo.widget.html.LayoutPane.call(this);
-}
-dojo.inherits(dojo.widget.WizardPane, dojo.widget.html.LayoutPane);
-
-dojo.lang.extend(dojo.widget.WizardPane, {
-	widgetType: "WizardPane",
-
-	canGoBack: true,
-
-	passFunction: "",
-	doneFunction: "",
-
-	fillInTemplate: function(args, frag) {
-		if (this.passFunction) {
-			this.passFunction = dj_global[this.passFunction];
-		}
-		if (this.doneFunction) {
-			this.doneFunction = dj_global[this.doneFunction];
-		}
-	},
-
-	checkPass: function() {
-		if (this.passFunction && dojo.lang.isFunction(this.passFunction)) {
-			var failMessage = this.passFunction();
-			if (failMessage) {
-				alert(failMessage);
-				return false;
-			}
-		}
-		return true;
-	},
-
-	done: function() {
-		if (this.doneFunction && dojo.lang.isFunction(this.doneFunction)) {
-			this.doneFunction();
-		}
-	}
-});
-
-dojo.widget.tags.addParseTreeHandler("dojo:WizardPane");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/__package__.js
deleted file mode 100644
index 37daeeb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/__package__.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.conditionalLoadModule({
-	common: ["dojo.xml.Parse", 
-			 "dojo.widget.Widget", 
-			 "dojo.widget.Parse", 
-			 "dojo.widget.Manager"],
-	browser: ["dojo.widget.DomWidget",
-			  "dojo.widget.HtmlWidget"],
-	svg: 	 ["dojo.widget.SvgWidget"]
-});
-dojo.hostenv.moduleLoaded("dojo.widget.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Button.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Button.js
deleted file mode 100644
index 2d82c2a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Button.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.Button");
-dojo.require("dojo.widget.Button");
-
-dojo.deprecated("dojo.widget.Button",  "use dojo.widget.Button2", "0.4");
-
-dojo.widget.html.Button = function(){
-	// mix in the button properties
-	dojo.widget.Button.call(this);
-	dojo.widget.HtmlWidget.call(this);
-}
-dojo.inherits(dojo.widget.html.Button, dojo.widget.HtmlWidget);
-dojo.lang.extend(dojo.widget.html.Button, {
-
-	templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlButtonTemplate.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlButtonTemplate.css"),
-
-	label: "",
-	labelNode: null,
-	containerNode: null,
-
-	postCreate: function(args, frag){
-		this.labelNode = this.containerNode;
-		/*
-		if(this.label != "undefined"){
-			this.domNode.appendChild(document.createTextNode(this.label));
-		}
-		*/
-	},
-	
-	onMouseOver: function(e){
-		dojo.html.addClass(this.domNode, "dojoButtonHover");
-		dojo.html.removeClass(this.domNode, "dojoButtonNoHover");
-	},
-	
-	onMouseOut: function(e){
-		dojo.html.removeClass(this.domNode, "dojoButtonHover");
-		dojo.html.addClass(this.domNode, "dojoButtonNoHover");
-	},
-
-	// By default, when I am clicked, click the item (link) inside of me.
-	// By default, a button is a disguised link.
-	// Todo: support actual submit and reset buttons.
-	onClick: function (e) {
-		var child = dojo.dom.getFirstChildElement(this.domNode);
-		if(child){
-			if(child.click){
-				child.click();
-			}else if(child.href){
-				location.href = child.href;
-			}
-		}
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Button2.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Button2.js
deleted file mode 100644
index 517f805..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Button2.js
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.Button2");

-dojo.require("dojo.lang");

-dojo.require("dojo.html");

-dojo.require("dojo.style");

-

-dojo.require("dojo.widget.HtmlWidget");

-dojo.require("dojo.widget.Button2");

-

-dojo.widget.html.Button2 = function(){

-	// call superclass constructors

-	dojo.widget.HtmlWidget.call(this);

-	dojo.widget.Button2.call(this);

-}

-dojo.inherits(dojo.widget.html.Button2, dojo.widget.HtmlWidget);

-dojo.lang.extend(dojo.widget.html.Button2, dojo.widget.Button2.prototype);

-dojo.lang.extend(dojo.widget.html.Button2, {

-

-	templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlButton2Template.html"),

-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlButton2Template.css"),

-	

-	// button images

-	inactiveImg: "src/widget/templates/images/pill-button-blue_benji-",

-	activeImg: "src/widget/templates/images/pill-button-seagreen_benji-",

-	pressedImg: "src/widget/templates/images/pill-button-purple_benji-",

-	disabledImg: "src/widget/templates/images/pill-button-gray_benji-",

-	width2height: 1.0/3.0,

-

-	// attach points

-	containerNode: null,

-	leftImage: null,

-	centerImage: null,

-	rightImage: null,

-

-	fillInTemplate: function(args, frag){

-		if(this.caption != ""){

-			this.containerNode.appendChild(document.createTextNode(this.caption));

-		}

-		dojo.html.disableSelection(this.containerNode);

-		if ( this.disabled ) {

-			dojo.html.prependClass(this.domNode, "dojoButtonDisabled");

-		}

-		

-		// after the browser has had a little time to calculate the size needed

-		// for the button contents, size the button

-		dojo.lang.setTimeout(this, this.sizeMyself, 0);

-	},

-

-	onResized: function(){

-		this.sizeMyself();

-	},

-

-	sizeMyself: function(e){

-		this.height = dojo.style.getOuterHeight(this.containerNode);

-		this.containerWidth = dojo.style.getOuterWidth(this.containerNode);

-		var endWidth= this.height * this.width2height;

-

-		this.containerNode.style.left=endWidth+"px";

-

-		this.leftImage.height = this.rightImage.height = this.centerImage.height = this.height;

-		this.leftImage.width = this.rightImage.width = endWidth+1;

-		this.centerImage.width = this.containerWidth;

-		this.centerImage.style.left=endWidth+"px";

-		this._setImage(this.disabled ? this.disabledImg : this.inactiveImg);

-			

-		this.domNode.style.height=this.height + "px";

-		this.domNode.style.width= (this.containerWidth+2*endWidth) + "px";

-	},

-

-	onMouseOver: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.prependClass(this.domNode, "dojoButtonHover");

-		this._setImage(this.activeImg);

-	},

-

-	onMouseDown: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.prependClass(this.domNode, "dojoButtonDepressed");

-		dojo.html.removeClass(this.domNode, "dojoButtonHover");

-		this._setImage(this.pressedImg);

-	},

-	onMouseUp: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.prependClass(this.domNode, "dojoButtonHover");

-		dojo.html.removeClass(this.domNode, "dojoButtonDepressed");

-		this._setImage(this.activeImg);

-	},

-

-	onMouseOut: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.removeClass(this.domNode, "dojoButtonHover");

-		this._setImage(this.inactiveImg);

-	},

-

-	buttonClick: function(e){

-		if( !this.disabled && this.onClick ) { this.onClick(e); }

-	},

-

-	_setImage: function(prefix){

-		this.leftImage.src=dojo.uri.dojoUri(prefix + "l.gif");

-		this.centerImage.src=dojo.uri.dojoUri(prefix + "c.gif");

-		this.rightImage.src=dojo.uri.dojoUri(prefix + "r.gif");

-	},

-	

-	_toggleMenu: function(menuId){

-		var menu = dojo.widget.getWidgetById(menuId);

-		if ( !menu ) { return; }

-

-		if ( menu.open && !menu.isShowing) {

-			var x = dojo.style.getAbsoluteX(this.domNode, true);

-			var y = dojo.style.getAbsoluteY(this.domNode, true) + this.height;

-			menu.open(x, y, null, this.domNode);

-		} else if ( menu.close && menu.isShowing ){

-			menu.close();

-		} else {

-			menu.toggle();

-		}

-	}

-});

-

-/**** DropDownButton - push the button and a menu shows up *****/

-dojo.widget.html.DropDownButton2 = function(){

-	// call constructors of superclasses

-	dojo.widget.DropDownButton2.call(this);

-	dojo.widget.html.Button2.call(this);

-}

-dojo.inherits(dojo.widget.html.DropDownButton2, dojo.widget.html.Button2);

-dojo.lang.extend(dojo.widget.html.DropDownButton2, dojo.widget.DropDownButton2.prototype);

-

-dojo.lang.extend(dojo.widget.html.DropDownButton2, {

-

-	downArrow: "src/widget/templates/images/whiteDownArrow.gif",

-	disabledDownArrow: "src/widget/templates/images/whiteDownArrow.gif",

-

-	fillInTemplate: function(args, frag){

-		dojo.widget.html.DropDownButton2.superclass.fillInTemplate.call(this, args, frag);

-

-		// draw the arrow

-		var arrow = document.createElement("img");

-		arrow.src = dojo.uri.dojoUri(this.disabled ? this.disabledDownArrow : this.downArrow);

-		dojo.html.setClass(arrow, "downArrow");

-		this.containerNode.appendChild(arrow);

-	},

-

-	onClick: function (e){

-		if( this.disabled ){ return; }

-		this._toggleMenu(this.menuId);

-	}

-});

-

-/**** ComboButton - left side is normal button, right side shows menu *****/

-dojo.widget.html.ComboButton2 = function(){

-	// call constructors of superclasses

-	dojo.widget.html.Button2.call(this);

-	dojo.widget.ComboButton2.call(this);

-}

-dojo.inherits(dojo.widget.html.ComboButton2, dojo.widget.html.Button2);

-dojo.lang.extend(dojo.widget.html.ComboButton2, dojo.widget.ComboButton2.prototype);

-dojo.lang.extend(dojo.widget.html.ComboButton2, {

-

-	templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlComboButton2Template.html"),

-

-	// attach points

-	leftPart: null,

-	rightPart: null,

-	arrowBackgroundImage: null,

-

-	// constants

-	splitWidth: 1,		// pixels between left&right part of button

-	arrowWidth: 10,		// width of segment holding down arrow

-

-	sizeMyself: function(e){

-		this.height = dojo.style.getOuterHeight(this.containerNode);

-		this.containerWidth = dojo.style.getOuterWidth(this.containerNode);

-		var endWidth= this.height/3;

-

-		// left part

-		this.leftImage.height = this.rightImage.height = this.centerImage.height = 

-			this.arrowBackgroundImage.height = this.height;

-		this.leftImage.width = endWidth+1;

-		this.centerImage.width = this.containerWidth;

-		this.leftPart.style.height = this.height + "px";

-		this.leftPart.style.width = endWidth + this.containerWidth + "px";

-		this._setImageL(this.disabled ? this.disabledImg : this.inactiveImg);

-

-		// right part

-		this.arrowBackgroundImage.width=this.arrowWidth;

-		this.rightImage.width = endWidth+1;

-		this.rightPart.style.height = this.height + "px";

-		this.rightPart.style.width = this.arrowWidth + endWidth + "px";

-		this._setImageR(this.disabled ? this.disabledImg : this.inactiveImg);

-

-		// outer container

-		this.domNode.style.height=this.height + "px";

-		var totalWidth = this.containerWidth+this.splitWidth+this.arrowWidth+2*endWidth;

-		this.domNode.style.width= totalWidth + "px";

-	},

-

-	/** functions on left part of button**/

-	leftOver: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.prependClass(this.leftPart, "dojoButtonHover");

-		this._setImageL(this.activeImg);

-	},

-

-	leftDown: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.prependClass(this.leftPart, "dojoButtonDepressed");

-		dojo.html.removeClass(this.leftPart, "dojoButtonHover");

-		this._setImageL(this.pressedImg);

-	},

-	leftUp: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.prependClass(this.leftPart, "dojoButtonHover");

-		dojo.html.removeClass(this.leftPart, "dojoButtonDepressed");

-		this._setImageL(this.activeImg);

-	},

-

-	leftOut: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.removeClass(this.leftPart, "dojoButtonHover");

-		this._setImageL(this.inactiveImg);

-	},

-

-	leftClick: function(e){

-		if ( !this.disabled && this.onClick ) {

-			this.onClick(e);

-		}

-	},

-

-	_setImageL: function(prefix){

-		this.leftImage.src=dojo.uri.dojoUri(prefix + "l.gif");

-		this.centerImage.src=dojo.uri.dojoUri(prefix + "c.gif");

-	},

-

-	/*** functions on right part of button ***/

-	rightOver: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.prependClass(this.rightPart, "dojoButtonHover");

-		this._setImageR(this.activeImg);

-	},

-

-	rightDown: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.prependClass(this.rightPart, "dojoButtonDepressed");

-		dojo.html.removeClass(this.rightPart, "dojoButtonHover");

-		this._setImageR(this.pressedImg);

-	},

-	rightUp: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.prependClass(this.rightPart, "dojoButtonHover");

-		dojo.html.removeClass(this.rightPart, "dojoButtonDepressed");

-		this._setImageR(this.activeImg);

-	},

-

-	rightOut: function(e){

-		if( this.disabled ){ return; }

-		dojo.html.removeClass(this.rightPart, "dojoButtonHover");

-		this._setImageR(this.inactiveImg);

-	},

-

-	rightClick: function(e){

-		if( this.disabled ){ return; }

-		this._toggleMenu(this.menuId);

-	},

-

-	_setImageR: function(prefix){

-		this.arrowBackgroundImage.src=dojo.uri.dojoUri(prefix + "c.gif");

-		this.rightImage.src=dojo.uri.dojoUri(prefix + "r.gif");

-	}

-});

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Checkbox.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Checkbox.js
deleted file mode 100644
index 65b5c45..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Checkbox.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.widget.Checkbox");
-dojo.provide("dojo.widget.html.Checkbox");
-
-// FIXME: the input doesn't get taken out of the tab list (i think)
-// FIXME: the image doesn't get into the tab list (needs to steal the tabindex value from the input)
-
-dojo.widget.html.Checkbox = function(){
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.html.Checkbox, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.html.Checkbox, {
-	widgetType: "Checkbox",
-
-	_testImg: null,
-
-	_events: [
-		"onclick",
-		"onfocus",
-		"onblur",
-		"onselect",
-		"onchange",
-		"onclick",
-		"ondblclick",
-		"onmousedown",
-		"onmouseup",
-		"onmouseover",
-		"onmousemove",
-		"onmouseout",
-		"onkeypress",
-		"onkeydown",
-		"onkeyup"
-	],
-
-	srcOn: dojo.uri.dojoUri('src/widget/templates/check_on.gif'),
-	srcOff: dojo.uri.dojoUri('src/widget/templates/check_off.gif'),
-
-	fillInTemplate: function(){
-
-		// FIXME: if images are disabled, we DON'T want to swap out the element
-		// we can use the usual 'load image to check' trick
-		// i don't know what image we can check yet, so we'll skip this for now...
-
-		// this._testImg = document.createElement("img");
-		// document.body.appendChild(this._testImg);
-		// this._testImg.src = "spacer.gif?cachebust=" + new Date().valueOf();
-		// dojo.connect(this._testImg, 'onload', this, 'onImagesLoaded');
-
-		this.onImagesLoaded();
-	},
-
-	onImagesLoaded: function(){
-
-		// FIXME: if we actually check for loading images, remove the thing here
-		// document.body.removeChild(this._testImg);
-
-		// 'hide' the checkbox
-		this.domNode.style.position = "absolute";
-		this.domNode.style.left = "-9000px";
-
-		// create a replacement image
-		this.imgNode = document.createElement("img");
-		dojo.html.addClass(this.imgNode, "dojoHtmlCheckbox");
-		this.updateImgSrc();
-		dojo.event.connect(this.imgNode, 'onclick', this, 'onClick');
-		dojo.event.connect(this.domNode, 'onchange', this, 'onChange');
-		this.domNode.parentNode.insertBefore(this.imgNode, this.domNode.nextSibling)
-
-		// real ugly - make sure the image has all the events that the checkbox did
-		for(var i=0; i<this._events.length; i++){
-			if(this.domNode[this._events[i]]){
-				dojo.event.connect(	this.imgNode, this._events[i], 
-									this.domNode[this._events[i]]);
-			}
-		}
-	},
-
-	onClick: function(){
-
-		this.domNode.checked = !this.domNode.checked ? true : false;
-		this.updateImgSrc();
-	},
-
-	onChange: function(){
-
-		this.updateImgSrc();
-	},
-
-	updateImgSrc: function(){
-
-		this.imgNode.src = this.domNode.checked ? this.srcOn : this.srcOff;
-	}
-});
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/ComboBox.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/ComboBox.js
deleted file mode 100644
index 289d467..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/ComboBox.js
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.ComboBox");
-dojo.require("dojo.widget.ComboBox");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.fx.*");
-dojo.require("dojo.dom");
-dojo.require("dojo.html");
-dojo.require("dojo.string");
-dojo.require("dojo.widget.html.stabile");
-
-dojo.widget.html.ComboBox = function(){
-	dojo.widget.ComboBox.call(this);
-	dojo.widget.HtmlWidget.call(this);
-
-	this.autoComplete = true;
-	this.formInputName = "";
-	this.name = ""; // clone in the name from the DOM node
-	this.textInputNode = null;
-	this.comboBoxValue = null;
-	this.comboBoxSelectionValue = null;
-	this.optionsListWrapper = null;
-	this.optionsListNode = null;
-	this.downArrowNode = null;
-	this.cbTableNode = null;
-	this.searchTimer = null;
-	this.searchDelay = 100;
-	this.dataUrl = "";
-	// mode can also be "remote" for JSON-returning live search or "html" for
-	// dumber live search
-	this.mode = "local"; 
-	this.selectedResult = null;
-	this._highlighted_option = null;
-	this._prev_key_backspace = false;
-	this._prev_key_esc = false;
-	this._result_list_open = false;
-}
-
-dojo.inherits(dojo.widget.html.ComboBox, dojo.widget.HtmlWidget);
-
-// copied from superclass since we can't really over-ride via prototype
-dojo.lang.extend(dojo.widget.html.ComboBox, dojo.widget.ComboBox.defaults);
-
-dojo.lang.extend(dojo.widget.html.ComboBox, {
-
-
-	templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlComboBox.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlComboBox.css"),
-
-	setValue: function(value) {
-		this.comboBoxValue.value = this.textInputNode.value = value;
-		dojo.widget.html.stabile.setState(this.widgetId, this.getState(), true);
-	},
-
-	getValue: function() {
-		return this.comboBoxValue.value;
-	},
-
-	getState: function() {
-		return {value: this.getValue()};
-	},
-
-	setState: function(state) {
-        	this.setValue(state.value);
-	},
-
-
-	getCaretPos: function(element){
-		// FIXME: we need to figure this out for Konq/Safari!
-		if(dojo.render.html.mozilla){
-			// FIXME: this is totally borked on Moz < 1.3. Any recourse?
-			return element.selectionStart;
-		}else if(dojo.render.html.ie){
-			// in the case of a mouse click in a popup being handled,
-			// then the document.selection is not the textarea, but the popup
-			// var r = document.selection.createRange();
-			// hack to get IE 6 to play nice. What a POS browser.
-			// var tr = r.duplicate();
-			var tr = document.selection.createRange().duplicate();
-			// var ntr = document.selection.createRange().duplicate();
-			var ntr = element.createTextRange();
-			// FIXME: this seems to work but I'm getting some execptions on reverse-tab
-			tr.move("character",0);
-			ntr.move("character",0);
-			/*
-			try{
-				ntr.moveToElementText(element);
-			}catch(e){ dojo.debug(e); }
-			*/
-			ntr.setEndPoint("EndToEnd", tr);
-			return String(ntr.text).replace(/\r/g,"").length;
-		}
-	},
-
-	setCaretPos: function(element, location){
-		location = parseInt(location);
-		this.setSelectedRange(element, location, location);
-	},
-
-	setSelectedRange: function(element, start, end){
-		if(!end){ end = element.value.length; }
-		// Mozilla
-		// parts borrowed from http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130
-		if(element.setSelectionRange){
-			element.focus();
-			element.setSelectionRange(start, end);
-		}else if(element.createTextRange){ // IE
-			var range = element.createTextRange();
-			with(range){
-				collapse(true);
-				moveEnd('character', end);
-				moveStart('character', start);
-				select();
-			}
-		}else{ //otherwise try the event-creation hack (our own invention)
-			// do we need these?
-			element.value = element.value;
-			element.blur();
-			element.focus();
-			// figure out how far back to go
-			var dist = parseInt(element.value.length)-end;
-			var tchar = String.fromCharCode(37);
-			var tcc = tchar.charCodeAt(0);
-			for(var x = 0; x < dist; x++){
-				var te = document.createEvent("KeyEvents");
-				te.initKeyEvent("keypress", true, true, null, false, false, false, false, tcc, tcc);
-				twe.dispatchEvent(te);
-			}
-		}
-	},
-
-	killEvent: function(evt){
-		evt.preventDefault();
-		evt.stopPropagation();
-	},
-
-	onKeyDown: function(evt){
-	},
-
-	setSelectedValue: function(value){
-		// FIXME, not sure what to do here!
-		this.comboBoxSelectionValue.value = value;
-		this.hideResultList();
-	},
-
-	highlightNextOption: function(){
-		if(this._highlighted_option){
-			dojo.html.removeClass(this._highlighted_option, "cbItemHighlight");
-		}
-		if((!this._highlighted_option)||(!this._highlighted_option.nextSibling)){
-			this._highlighted_option = this.optionsListNode.firstChild;
-		}else{
-			this._highlighted_option = this._highlighted_option.nextSibling;
-		}
-		dojo.html.addClass(this._highlighted_option, "cbItemHighlight");
-	},
-
-	highlightPrevOption: function(){
-		if(this._highlighted_option){
-			dojo.html.removeClass(this._highlighted_option, "cbItemHighlight");
-		}
-		if((!this._highlighted_option)||(!this._highlighted_option.previousSibling)){
-			this._highlighted_option = this.optionsListNode.lastChild;
-		}else{
-			this._highlighted_option = this._highlighted_option.previousSibling;
-		}
-		dojo.html.addClass(this._highlighted_option, "cbItemHighlight");
-	},
-
-	onKeyUp: function(evt){
-		if(evt.keyCode == 27){ // esc is 27
-			this.hideResultList();
-			if(this._prev_key_esc){
-				this.textInputNode.blur();
-				this.selectedResult = null;
-			}
-			this._prev_key_esc = true;
-			return;
-		}else if((evt.keyCode == 32)||(evt.keyCode == 13)){ // space is 32, enter is 13.
-			/*
-			// Cancel the enter key event bubble to avoid submitting the form.
-			if (evt.keyCode == 13) {
-				// FIXME: the does not cancel the form submission.
-				this.killEvent(evt);
-			}
-			*/
-			// If the list is open select the option with the event.
-			if(this._result_list_open){
-				evt = { target: this._highlighted_option };
-				this.selectOption(evt);
-			}else{
-				// Otherwise select the option with out the event.
-				this.selectOption();
-			}
-			return;
-		}else if(evt.keyCode == 40){ // down is 40
-			if(!this._result_list_open){
-				this.startSearchFromInput();
-			}
-			this.highlightNextOption();
-			return;
-		}else if(evt.keyCode == 38){ // up is 38
-			this.highlightPrevOption();
-			return;
-		}else{
-			this.setValue(this.textInputNode.value);
-		}
-
-		// backspace is 8
-		this._prev_key_backspace = (evt.keyCode == 8) ? true : false;
-		this._prev_key_esc = false;
-
-		if(this.searchTimer){
-			clearTimeout(this.searchTimer);
-		}
-		if((this._prev_key_backspace)&&(!this.textInputNode.value.length)){
-			this.hideResultList();
-		}else{
-			this.searchTimer = setTimeout(dojo.lang.hitch(this, this.startSearchFromInput), this.searchDelay);
-		}
-	},
-
-	fillInTemplate: function(args, frag){
-		// FIXME: need to get/assign DOM node names for form participation here.
-		this.comboBoxValue.name = this.name;
-		this.comboBoxSelectionValue.name = this.name+"_selected";
-		
-		// NOTE: this doesn't copy style info inherited from classes;
-		// it's just primitive support for direct style setting
-		var sourceNodeStyle = this.getFragNodeRef(frag).style;
-		if ( sourceNodeStyle ){
-			this.domNode.style.cssText = sourceNodeStyle.cssText;
-		}
-
-		// FIXME: add logic
-		this.dataProvider = new dojo.widget.ComboBoxDataProvider();
-
-		if(!dojo.string.isBlank(this.dataUrl)){
-			if("local" == this.mode){
-				var _this = this;
-				dojo.io.bind({
-					url: this.dataUrl,
-					load: function(type, data, evt){ 
-						if(type=="load"){
-							_this.dataProvider.setData(data);
-						}
-					},
-					mimetype: "text/javascript"
-				});
-			}else if("remote" == this.mode){
-				this.dataProvider = new dojo.widget.incrementalComboBoxDataProvider(this.dataUrl);
-			}
-		}else{
-			// check to see if we can populate the list from <option> elements
-			var node = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-			if((node)&&(node.nodeName.toLowerCase() == "select")){
-				// NOTE: we're not handling <optgroup> here yet
-				var opts = node.getElementsByTagName("option");
-				var ol = opts.length;
-				var data = [];
-				for(var x=0; x<ol; x++){
-					data.push([new String(opts[x].innerHTML), new String(opts[x].value)]);
-				}
-				this.dataProvider.setData(data);
-			}
-		}
-
-		// Prevent IE bleed-through problem
-		this.bgIframe = new dojo.html.BackgroundIframe();
-		if(this.bgIframe.iframe){
-			this.optionsListWrapper.appendChild(this.bgIframe.iframe);
-		}
-	},
-
-	openResultList: function(results){
-		this.clearResultList();
-		if(!results.length){
-			this.hideResultList();
-		}else{
-			this.showResultList();
-		}
-		if(	(this.autoComplete)&&
-			(results.length)&&
-			(!this._prev_key_backspace)&&
-			(this.textInputNode.value.length > 0)){
-			var cpos = this.getCaretPos(this.textInputNode);
-			// only try to extend if we added the last charachter at the end of the input
-			if((cpos+1) >= this.textInputNode.value.length){
-				this.textInputNode.value = results[0][0];
-				// build a new range that has the distance from the earlier
-				// caret position to the end of the first string selected
-				this.setSelectedRange(this.textInputNode, cpos, this.textInputNode.value.length);
-			}
-		}
-
-		var even = true;
-		while(results.length){
-			var tr = results.shift();
-			if(tr){
-				var td = document.createElement("div");
-				td.appendChild(document.createTextNode(tr[0]));
-				td.setAttribute("resultName", tr[0]);
-				td.setAttribute("resultValue", tr[1]);
-				td.className = "cbItem "+((even) ? "cbItemEven" : "cbItemOdd");
-				even = (!even);
-				this.optionsListNode.appendChild(td);
-			}
-		}
-
-		dojo.event.kwConnect({
-			once: true,
-			srcObj: dojo.html.body(),
-			srcFunc: "onclick", 
-			adviceObj: this, 
-			adviceFunc: "hideResultList"
-		});
-
-		// prevent IE bleed through
-		dojo.lang.setTimeout(this, "showBackgroundIframe", 100);
-	},
-
-	showBackgroundIframe: function(){
-		var w = dojo.style.getOuterWidth(this.optionsListNode);
-		var h = dojo.style.getOuterHeight(this.optionsListNode);
-		if ( isNaN(w) || isNaN(h) ){
-			// need more time to calculate size
-			dojo.lang.setTimeout(this, "showBackgroundIframe", 100);
-			return;
-		}
-		this.bgIframe.show([0,0,w,h]);
-		this.bgIframe.setZIndex(1);
-	},
-
-	selectOption: function(evt){
-		if(!evt){
-			evt = { target: this._highlighted_option };
-		}
-
-		if(!dojo.dom.isDescendantOf(evt.target, this.optionsListNode)){
-			return;
-		}
-
-		var tgt = evt.target;
-		while((tgt.nodeType!=1)||(!tgt.getAttribute("resultName"))){
-			tgt = tgt.parentNode;
-			if(tgt === dojo.html.body()){
-				return false;
-			}
-		}
-
-		this.textInputNode.value = tgt.getAttribute("resultName");
-		this.selectedResult = [tgt.getAttribute("resultName"), tgt.getAttribute("resultValue")];
-		this.setValue(tgt.getAttribute("resultName"));
-		this.comboBoxSelectionValue.value = tgt.getAttribute("resultValue");
-		this.hideResultList();
-	},
-
-	clearResultList: function(){
-		var oln = this.optionsListNode;
-		while(oln.firstChild){
-			oln.removeChild(oln.firstChild);
-		}
-	},
-
-	hideResultList: function(){
-		dojo.fx.fadeHide(this.optionsListNode, 200);
-		dojo.event.disconnect(dojo.html.body(), "onclick", this, "hideResultList");
-		this._result_list_open = false;
-		this.bgIframe.hide();
-		return;
-	},
-
-	showResultList: function(){
-		if(this._result_list_open){ return; }
-		with(this.optionsListNode.style){
-			display = "";
-			// visibility = "hidden";
-			height = "";
-			width = dojo.html.getInnerWidth(this.downArrowNode)+dojo.html.getInnerWidth(this.textInputNode)+"px";
-			if(dojo.render.html.khtml){
-				marginTop = dojo.html.totalOffsetTop(this.optionsListNode.parentNode)+"px";
-			}
-		}
-		dojo.html.setOpacity(this.optionsListNode, 0);
-		dojo.fx.fadeIn(this.optionsListNode, 200);
-		this._result_list_open = true;
-	},
-
-	handleArrowClick: function(){
-		if(this._result_list_open){
-			this.hideResultList();
-		}else{
-			this.startSearchFromInput();
-		}
-	},
-
-	startSearchFromInput: function(){
-		this.startSearch(this.textInputNode.value);
-	},
-
-	postCreate: function(){
-		dojo.event.connect(this, "startSearch", this.dataProvider, "startSearch");
-		dojo.event.connect(this.dataProvider, "provideSearchResults", this, "openResultList");
-		var s = dojo.widget.html.stabile.getState(this.widgetId);
-		if (s) {
-			this.setState(s);
-		}
-	}
-
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Container.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Container.js
deleted file mode 100644
index 9e5a2f0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Container.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.Container");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.Container");
-
-dojo.widget.html.Container = function(){
-	dojo.widget.HtmlWidget.call(this);
-}
-
-dojo.inherits(dojo.widget.html.Container, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.html.Container, {
-	widgetType: "Container",
-
-	isContainer: true,
-	containerNode: null,
-	domNode: null,
-
-	onResized: function() {
-		// Clients should override this function to do special processing,
-		// then call this.notifyChildrenOfResize() to notify children of resize
-		this.notifyChildrenOfResize();
-	},
-	
-	notifyChildrenOfResize: function() {
-		for(var i=0; i<this.children.length; i++) {
-			var child = this.children[i];
-			//dojo.debug(this.widgetId + " resizing child " + child.widgetId);
-			if ( child.onResized ) {
-				child.onResized();
-			}
-		}
-	}
-});
-
-dojo.widget.tags.addParseTreeHandler("dojo:Container");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/ContentPane.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/ContentPane.js
deleted file mode 100644
index 1acd3de..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/ContentPane.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.ContentPane");

-

-dojo.require("dojo.widget.*");

-dojo.require("dojo.io.*");

-dojo.require("dojo.widget.Container");

-dojo.require("dojo.widget.ContentPane");

-

-dojo.widget.html.ContentPane = function(){

-	dojo.widget.html.Container.call(this);

-}

-dojo.inherits(dojo.widget.html.ContentPane, dojo.widget.html.Container);

-

-dojo.lang.extend(dojo.widget.html.ContentPane, {

-	widgetType: "ContentPane",

-

-	href: "",

-	extractContent: true,

-	parseContent: true,

-	cacheContent: true,

-	

-	// To generate pane content from a java function

-	handler: "",

-

-	postCreate: function(args, frag, parentComp){

-		if ( this.handler != "" ){

-			this.setHandler(this.handler);

-		}

-	},

-

-	onResized: function(){

-		if(this.isVisible()){

-			this.loadContents();

-		}

-		dojo.widget.html.ContentPane.superclass.onResized.call(this);

-	},

-

-	show: function(){

-		this.loadContents();

-		dojo.widget.html.ContentPane.superclass.show.call(this);

-	},

-

-	loadContents: function() {

-		if ( this.isLoaded ){

-			return;

-		}

-		this.isLoaded=true;

-		if ( dojo.lang.isFunction(this.handler)) {

-			this._runHandler();

-		} else if ( this.href != "" ) {

-			this._downloadExternalContent(this.href, this.cacheContent);

-		}

-	},

-

-	// Reset the (external defined) content of this pane

-	setUrl: function(url) {

-		this.href = url;

-		this.isLoaded = false;

-		if ( this.isVisible() ){

-			this.loadContents();

-		}

-	},

-

-	_downloadExternalContent: function(url, useCache) {

-		this.setContent("Loading...");

-

-		var self = this;

-		dojo.io.bind({

-			url: url,

-			useCache: useCache,

-			mimetype: "text/html",

-			handler: function(type, data, e) {

-				if(type == "load") {

-					if(self.extractContent) {

-						var matches = data.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);

-						if(matches) { data = matches[1]; }

-					}

-					self.setContent.call(self, data);

-				} else {

-					self.setContent.call(self, "Error loading '" + url + "' (" + e.status + " " + e.statusText + ")");

-				}

-			}

-		});

-	},

-

-	setContent: function(data){

-		var node = this.containerNode || this.domNode;

-		node.innerHTML = data;

-		if(this.parseContent) {

-			var parser = new dojo.xml.Parse();

-			var frag = parser.parseElement(node, null, true);

-			dojo.widget.getParser().createComponents(frag);

-			this.onResized();

-		}

-	},

-

-	// Generate pane content from given java function

-	setHandler: function(handler) {

-		var fcn = dojo.lang.isFunction(handler) ? handler : window[handler];

-		if(!dojo.lang.isFunction(fcn)) {

-			throw new Error("Unable to set handler, '" + handler + "' not a function.");

-			return;

-		}

-		this.handler = function() {

-			return fcn.apply(this, arguments);

-		}

-	},

-

-	_runHandler: function() {

-		if(dojo.lang.isFunction(this.handler)) {

-			this.handler(this, this.domNode);

-			return false;

-		}

-		return true;

-	}

-});

-

-dojo.widget.tags.addParseTreeHandler("dojo:ContentPane");

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/ContextMenu.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/ContextMenu.js
deleted file mode 100644
index 7fc198c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/ContextMenu.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.ContextMenu");
-dojo.require("dojo.html");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.ContextMenu");
-dojo.require("dojo.lang");
-
-dojo.widget.html.ContextMenu = function(){
-	dojo.widget.ContextMenu.call(this);
-	dojo.widget.HtmlWidget.call(this);
-
-	this.isShowing = 0;
-	this.templatePath = dojo.uri.dojoUri("src/widget/templates/HtmlContextMenuTemplate.html");
-	this.templateCssPath = dojo.uri.dojoUri("src/widget/templates/Menu.css");
-
-	this.targetNodeIds = []; // fill this with nodeIds upon widget creation and it only responds to those nodes
-
-	// default event detection method 
-	var eventType = "oncontextmenu"; 
-
-	var doc = document.documentElement  || dojo.html.body(); 
-
-	var _blockHide = false; 
-
-	this.fillInTemplate = function(args, frag){
-
-		var func = "onOpen";
-		var attached = false;
-
-		// connect with rightclick if oncontextmenu is not around
-		// NOTE: It would be very nice to have a dojo.event.browser.supportsEvent here
-		// NOTE: Opera does not have rightclick events, it is listed here only because
-		//     it bails out when connecting with oncontextmenu event
-
-		if((dojo.render.html.khtml && !dojo.render.html.safari) || (dojo.render.html.opera)){
-			eventType = "onmousedown";
-			func = "_checkRightClick";
-		}
-
-		// attach event listeners to our selected nodes
-		for(var i=0; i<this.targetNodeIds.length; i++){
-			var node = document.getElementById(this.targetNodeIds[i]);
-			if(node){
-				dojo.event.connect(node, eventType, this, func);
-				attached = true;
-			}else{
-				// remove this nodeId
-				dj_debug("Couldent find "+this.targetNodeIds[i]+", cant do ContextMenu on this node");
-				this.targetNodeIds.splice(i,1);
-			}
-		}
-
-		// if we got attached to a node, hide on all non node contextevents
-		if(attached){ func = "_canHide"; }
-
-		dojo.event.connect(doc, eventType, this, func);
-	}
-
-	this.onOpen = function(evt){
-		// if (this.isShowing){ this.onHide(evt); } // propably not needed
-		this.isShowing = 1;
-
-		// if I do this, I cant preventDefault in khtml
-		//evt = dojo.event.browser.fixEvent(evt);
- 
-		// stop default contextmenu, needed in khtml
-		if (evt.preventDefault){ evt.preventDefault(); }
-
-		// need to light up this one before we check width and height
-		this.domNode.style.left = "-9999px";
-		this.domNode.style.top  = "-9999px";
-		this.domNode.style.display = "block";
-
-		// calculate if menu is going to apear within window
-		// or if its partially out of visable area
-		with(dojo.html){
-
-			var menuW = getInnerWidth(this.domNode);
-			var menuH = getInnerHeight(this.domNode);
-
-			var viewport = getViewportSize();
-			var scrolloffset = getScrollOffset();
-		}
-
-		var minX = viewport[0];
-		var minY = viewport[1];
-
-		var maxX = (viewport[0] + scrolloffset[0]) - menuW;
-		var maxY = (viewport[1] + scrolloffset[1]) - menuH;
-
-		var posX = evt.clientX + scrolloffset[0];
-		var posY = evt.clientY + scrolloffset[1];
-
-		if (posX > maxX){ posX = posX - menuW; }
-		if (posY > maxY){ posY = posY - menuH; }
-
-		this.domNode.style.left = posX + "px";
-		this.domNode.style.top = posY + "px";
-
-
-		// block the onclick that follows this particular right click
-		// not if the eventtrigger is documentElement and always when
-		// we use onmousedown hack
-		_blockHide = (evt.currentTarget!=doc || eventType=='onmousedown');
-
-		//return false; // we propably doesnt need to return false as we dont stop the event as we did before
-	}
-
-	/*
-	* _canHide is meant to block the onHide call that follows the event that triggered
-	* onOpen. This is (hopefully) faster that event.connect and event.disconnect every
-	* time the code executes and it makes connecting with onmousedown event possible
-	* and we dont have to stop the event from bubbling further.
-	*
-	* this code is moved into a separete function because it makes it possible for the
-	* user to connect to a onHide event, if anyone would like that.
-	*/
-
-	this._canHide = function(evt){
-		// block the onclick that follows the same event that turn on contextmenu
-		if(_blockHide){
-			// the onclick check is needed to prevent displaying multiple
-			// menus when we have 2 or more contextmenus loaded and are using
-			// the onmousedown hack
-			if(evt.type=='click' || eventType=='oncontextmenu'){
-				_blockHide = false;
-				return;
-			}else{
-				return;
-			}
-		}
-
-		this.onHide(evt);
-	}
-	
-	this.onHide = function(evt){
-		// FIXME: use whatever we use to do more general style setting?
-		this.domNode.style.display = "none";
-		//dojo.event.disconnect(doc, "onclick", this, "onHide");
-		this.isShowing = 0;
-	}
-
-	// callback for rightclicks, needed for browsers that doesnt implement oncontextmenu, konqueror and more? 
-	this._checkRightClick = function(evt){ 
-
-		// for some reason konq comes here even when we are not clicking on the attached nodes 
-		// added check for targetnode 
-		if (evt.button==2 && (this.targetNodeIds.length==0 || (evt.currentTarget.id!="" && dojo.lang.inArray(this.targetNodeIds, evt.currentTarget.id)))){
-
-			return this.onOpen(evt);
-		}
-	}
-
-	dojo.event.connect(doc, "onclick", this, "_canHide");
-}
-
-dojo.inherits(dojo.widget.html.ContextMenu, dojo.widget.HtmlWidget);
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/DatePicker.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/DatePicker.js
deleted file mode 100644
index a80d08a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/DatePicker.js
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.DatePicker");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.DatePicker");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html");
-
-/*
-	Some assumptions:
-	- I'm planning on always showing 42 days at a time, and we can scroll by week,
-	not just by month or year
-	- To get a sense of what month to highlight, I basically initialize on the 
-	first Saturday of each month, since that will be either the first of two or 
-	the second of three months being partially displayed, and then I work forwards 
-	and backwards from that point.
-	Currently, I assume that dates are stored in the RFC 3339 format,
-	because I find it to be most human readable and easy to parse
-	http://www.faqs.org/rfcs/rfc3339.html: 		2005-06-30T08:05:00-07:00
-	FIXME: scroll by week not yet implemented
-*/
-
-
-dojo.widget.html.DatePicker = function(){
-	dojo.widget.DatePicker.call(this);
-	dojo.widget.HtmlWidget.call(this);
-
-	var _this = this;
-	// today's date, JS Date object
-	this.today = "";
-	// selected date, JS Date object
-	this.date = "";
-	// rfc 3339 date
-	this.storedDate = "";
-	// date currently selected in the UI, stored in year, month, date in the format that will be actually displayed
-	this.currentDate = {};
-	// stored in year, month, date in the format that will be actually displayed
-	this.firstSaturday = {};
-	this.classNames = {
-		previous: "previousMonth",
-		current: "currentMonth",
-		next: "nextMonth",
-		currentDate: "currentDate",
-		selectedDate: "selectedItem"
-	}
-
-	this.templatePath =  dojo.uri.dojoUri("src/widget/templates/HtmlDatePicker.html");
-	this.templateCssPath = dojo.uri.dojoUri("src/widget/templates/HtmlDatePicker.css");
-	
-	this.fillInTemplate = function(){
-		this.initData();
-		this.initUI();
-	}
-	
-	this.initData = function() {
-		this.today = new Date();
-		if(this.storedDate && (this.storedDate.split("-").length > 2)) {
-			this.date = dojo.widget.DatePicker.util.fromRfcDate(this.storedDate);
-		} else {
-			this.date = this.today;
-		}
-		// calendar math is simplified if time is set to 0
-		this.today.setHours(0);
-		this.date.setHours(0);
-		var month = this.date.getMonth();
-		var tempSaturday = dojo.widget.DatePicker.util.initFirstSaturday(this.date.getMonth().toString(), this.date.getFullYear());
-		this.firstSaturday.year = tempSaturday.year;
-		this.firstSaturday.month = tempSaturday.month;
-		this.firstSaturday.date = tempSaturday.date;
-	}
-	
-	this.setDate = function(rfcDate) {
-		this.storedDate = rfcDate;
-	}
-	
-	
-	this.initUI = function() {
-		this.selectedIsUsed = false;
-		this.currentIsUsed = false;
-		var currentClassName = "";
-		var previousDate = new Date();
-		var calendarNodes = this.calendarDatesContainerNode.getElementsByTagName("td");
-		var currentCalendarNode;
-		// set hours of date such that there is no chance of rounding error due to 
-		// time change in local time zones
-		previousDate.setHours(8);
-		var nextDate = new Date(this.firstSaturday.year, this.firstSaturday.month, this.firstSaturday.date, 8);
-
-		
-		if(this.firstSaturday.date < 7) {
-			// this means there are days to show from the previous month
-			var dayInWeek = 6;
-			for (var i=this.firstSaturday.date; i>0; i--) {
-				currentCalendarNode = calendarNodes.item(dayInWeek);
-				currentCalendarNode.innerHTML = nextDate.getDate();
-				dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
-				dayInWeek--;
-				previousDate = nextDate;
-				nextDate = this.incrementDate(nextDate, false);
-			}
-			for(var i=dayInWeek; i>-1; i--) {
-				currentCalendarNode = calendarNodes.item(i);
-				currentCalendarNode.innerHTML = nextDate.getDate();
-				dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "previous"));
-				previousDate = nextDate;
-				nextDate = this.incrementDate(nextDate, false);				
-			}
-		} else {
-			nextDate.setDate(1);
-			for(var i=0; i<7; i++) {
-				currentCalendarNode = calendarNodes.item(i);
-				currentCalendarNode.innerHTML = i + 1;
-				dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
-				previousDate = nextDate;
-				nextDate = this.incrementDate(nextDate, true);				
-			}
-		}
-		previousDate.setDate(this.firstSaturday.date);
-		previousDate.setMonth(this.firstSaturday.month);
-		previousDate.setFullYear(this.firstSaturday.year);
-		nextDate = this.incrementDate(previousDate, true);
-		var count = 7;
-		currentCalendarNode = calendarNodes.item(count);
-		while((nextDate.getMonth() == previousDate.getMonth()) && (count<42)) {
-			currentCalendarNode.innerHTML = nextDate.getDate();
-			dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
-			currentCalendarNode = calendarNodes.item(++count);
-			previousDate = nextDate;
-			nextDate = this.incrementDate(nextDate, true);
-		}
-		
-		while(count < 42) {
-			currentCalendarNode.innerHTML = nextDate.getDate();
-			dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "next"));
-			currentCalendarNode = calendarNodes.item(++count);
-			previousDate = nextDate;
-			nextDate = this.incrementDate(nextDate, true);
-		}
-		this.setMonthLabel(this.firstSaturday.month);
-		this.setYearLabels(this.firstSaturday.year);
-	}
-	
-	this.incrementDate = function(date, bool) {
-		// bool: true to increase, false to decrease
-		var time = date.getTime();
-		var increment = 1000 * 60 * 60 * 24;
-		time = (bool) ? (time + increment) : (time - increment);
-		var returnDate = new Date();
-		returnDate.setTime(time);
-		return returnDate;
-	}
-	
-	this.incrementWeek = function(date, bool) {
-		dojo.unimplemented('dojo.widget.html.DatePicker.incrementWeek');
-	}
-
-	this.incrementMonth = function(date, bool) {
-		dojo.unimplemented('dojo.widget.html.DatePicker.incrementMonth');
-	}
-
-	this.incrementYear = function(date, bool) {
-		dojo.unimplemented('dojo.widget.html.DatePicker.incrementYear');
-	}
-
-	this.onIncrementDate = function(evt) {
-		dojo.unimplemented('dojo.widget.html.DatePicker.onIncrementDate');
-	}
-	
-	this.onIncrementWeek = function(evt) {
-		// FIXME: should make a call to incrementWeek when that is implemented
-		evt.stopPropagation();
-		dojo.unimplemented('dojo.widget.html.DatePicker.onIncrementWeek');
-		switch(evt.target) {
-			case this.increaseWeekNode:
-				break;
-			case this.decreaseWeekNode:
-				break;
-		}
-	}
-
-	this.onIncrementMonth = function(evt) {
-		// FIXME: should make a call to incrementMonth when that is implemented
-		evt.stopPropagation();
-		var month = this.firstSaturday.month;
-		var year = this.firstSaturday.year;
-		switch(evt.currentTarget) {
-			case this.increaseMonthNode:
-				if(month < 11) {
-					month++;
-				} else {
-					month = 0;
-					year++;
-					
-					this.setYearLabels(year);
-				}
-				break;
-			case this.decreaseMonthNode:
-				if(month > 0) {
-					month--;
-				} else {
-					month = 11;
-					year--;
-					this.setYearLabels(year);
-				}
-				break;
-			case this.increaseMonthNode.getElementsByTagName("img").item(0):
-				if(month < 11) {
-					month++;
-				} else {
-					month = 0;
-					year++;
-					this.setYearLabels(year);
-				}
-				break;
-			case this.decreaseMonthNode.getElementsByTagName("img").item(0):
-				if(month > 0) {
-					month--;
-				} else {
-					month = 11;
-					year--;
-					this.setYearLabels(year);
-				}
-				break;
-		}
-		var tempSaturday = dojo.widget.DatePicker.util.initFirstSaturday(month.toString(), year);
-		this.firstSaturday.year = tempSaturday.year;
-		this.firstSaturday.month = tempSaturday.month;
-		this.firstSaturday.date = tempSaturday.date;
-		this.initUI();
-	}
-	
-	this.onIncrementYear = function(evt) {
-		// FIXME: should make a call to incrementYear when that is implemented
-		evt.stopPropagation();
-		var year = this.firstSaturday.year;
-		switch(evt.target) {
-			case this.nextYearLabelNode:
-				year++;
-				break;
-			case this.previousYearLabelNode:
-				year--;
-				break;
-		}
-		var tempSaturday = dojo.widget.DatePicker.util.initFirstSaturday(this.firstSaturday.month.toString(), year);
-		this.firstSaturday.year = tempSaturday.year;
-		this.firstSaturday.month = tempSaturday.month;
-		this.firstSaturday.date = tempSaturday.date;
-		this.initUI();
-	}
-
-	this.setMonthLabel = function(monthIndex) {
-		this.monthLabelNode.innerHTML = this.months[monthIndex];
-	}
-	
-	this.setYearLabels = function(year) {
-		this.previousYearLabelNode.innerHTML = year - 1;
-		this.currentYearLabelNode.innerHTML = year;
-		this.nextYearLabelNode.innerHTML = year + 1;
-	}
-	
-	this.getDateClassName = function(date, monthState) {
-		var currentClassName = this.classNames[monthState];
-		if ((!this.selectedIsUsed) && (date.getDate() == this.date.getDate()) && (date.getMonth() == this.date.getMonth()) && (date.getFullYear() == this.date.getFullYear())) {
-			currentClassName = this.classNames.selectedDate + " " + currentClassName;
-			this.selectedIsUsed = 1;
-		}
-		if((!this.currentIsUsed) && (date.getDate() == this.today.getDate()) && (date.getMonth() == this.today.getMonth()) && (date.getFullYear() == this.today.getFullYear())) {
-			currentClassName = currentClassName + " "  + this.classNames.currentDate;
-			this.currentIsUsed = 1;
-		}
-		return currentClassName;
-	}
-
-	this.onClick = function(evt) {
-		dojo.event.browser.stopEvent(evt)
-	}
-	
-	this.onSetDate = function(evt) {
-		dojo.event.browser.stopEvent(evt);
-		this.selectedIsUsed = 0;
-		this.todayIsUsed = 0;
-		var month = this.firstSaturday.month;
-		var year = this.firstSaturday.year;
-		if (dojo.html.hasClass(evt.target, this.classNames["next"])) {
-			month = ++month % 12;
-			// if month is now == 0, add a year
-			year = (month==0) ? ++year : year;
-		} else if (dojo.html.hasClass(evt.target, this.classNames["previous"])) {
-			month = --month % 12;
-			// if month is now == 0, add a year
-			year = (month==11) ? --year : year;
-		}
-		this.date = new Date(year, month, evt.target.innerHTML);
-		this.setDate(dojo.widget.DatePicker.util.toRfcDate(this.date));
-		this.initUI();
-	}
-}
-dojo.inherits(dojo.widget.html.DatePicker, dojo.widget.HtmlWidget);
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/DebugConsole.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/DebugConsole.js
deleted file mode 100644
index 7458654..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/DebugConsole.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.DebugConsole");

-

-dojo.require("dojo.widget.*");

-dojo.require("dojo.widget.FloatingPane");

-

-// Collection of widgets in a bar, like Windows task bar

-dojo.widget.html.DebugConsole= function(){

-

-	dojo.widget.html.FloatingPane.call(this);

-	dojo.widget.DebugConsole.call(this);

-}

-

-dojo.inherits(dojo.widget.html.DebugConsole, dojo.widget.html.FloatingPane);

-

-dojo.lang.extend(dojo.widget.html.DebugConsole, {

-	postCreate: function() {

-		dojo.widget.html.DebugConsole.superclass.postCreate.call(this);

-		this.clientPane.domNode.id = "debugConsoleClientPane"

-		djConfig.isDebug = true;

-		djConfig.debugContainerId = this.clientPane.domNode.id;

-	}

-});

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/DropdownButton.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/DropdownButton.js
deleted file mode 100644
index e8f779e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/DropdownButton.js
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/* TODO:

- * - make the dropdown "smart" so it can't get cutoff on bottom of page, sides of page, etc.

- */

-

-dojo.provide("dojo.widget.html.DropdownButton");

-

-dojo.require("dojo.event.*");

-dojo.require("dojo.widget.*");

-dojo.require("dojo.widget.HtmlWidget");

-dojo.require("dojo.uri.Uri");

-dojo.require("dojo.dom");

-dojo.require("dojo.style");

-dojo.require("dojo.html");

-

-dojo.widget.html.DropdownButton = function() {

-	// mix in the button properties

-	dojo.widget.DropdownButton.call(this);

-	dojo.widget.HtmlWidget.call(this);

-}

-

-dojo.inherits(dojo.widget.html.DropdownButton, dojo.widget.HtmlWidget);

-

-dojo.lang.extend(dojo.widget.html.DropdownButton, {

-	

-	// In IE, event handlers on objects inside buttons don't work correctly, so

-	// we just set onClick on the button itself.

-	templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlDropDownButtonTemplate.html"),

-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlButtonTemplate.css"),

-

-	// attach points

-	button: null,

-	table: null,

-	labelCell: null,

-	borderCell: null,

-	arrowCell: null,

-	arrow: null,

-

-	fillInTemplate: function(args, frag) {

-		// input data (containing the anchor for the button itself, plus the

-		// thing to display when you push the down arrow)

-		var input = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];

-

-		// Recursively expand widgets inside of the <dojo:dropdownButton>

-		var parser = new dojo.xml.Parse();

-		var frag = parser.parseElement(input, null, true);

-		var ary = dojo.widget.getParser().createComponents(frag);

-

-		this.a = dojo.dom.getFirstChildElement(input);	// the button contents

-		this.menu = dojo.dom.getNextSiblingElement(this.a);	// the menu under the button

-		

-		this.disabled = dojo.html.hasClass(this.a, "disabled");

-		if( this.disabled ) {

-			dojo.html.addClass(this.button, "dojoDisabled");

-			this.domNode.setAttribute("disabled", "true");

-		}

-

-		dojo.html.disableSelection(this.a);

-		this.a.style["text-decoration"]="none";

-		this.labelCell.appendChild(this.a);

-

-		this.arrow.src =

-			dojo.uri.dojoUri("src/widget/templates/images/dropdownButtonsArrow" +

-			(this.disabled ? "-disabled" : "") + ".gif");

-

-		// Attach menu to body so that it appears above other buttons

-		this.menu.style.position="absolute";

-		this.menu.style.display="none";

-		this.menu.style["z-index"] = 99;

-		dojo.html.body().appendChild(this.menu);

-	},

-

-	postCreate: function() {

-		if ( dojo.render.html.ie ) {

-			// Compensate for IE's weird padding of button content, which seems to be relative

-			// to the length of the content

-			var contentWidth = dojo.style.getOuterWidth(this.table);

-			this.labelCell.style["left"] = "-" + (contentWidth / 10) + "px";

-			this.arrowCell.style["left"] = (contentWidth / 10) + "px";

-		}

-

-		// Make menu at least as wide as the button

-		var buttonWidth = dojo.style.getOuterWidth(this.button);

-		var menuWidth = dojo.style.getOuterWidth(this.menu);

-		if ( buttonWidth > menuWidth ) {

-			dojo.style.setOuterWidth(this.menu, buttonWidth);

-		}

-	},

-

-	// If someone clicks anywhere else on the screen (including another menu),

-	// then close this menu.

-	onCanvasMouseDown: function(e) {

-		if( !dojo.dom.isDescendantOf(e.target, this.button) &&

-			!dojo.dom.isDescendantOf(e.target, this.menu) ) {

-			this.hideMenu();

-		}

-	},

-

-	eventWasOverArrow: function(e) {

-		// want to use dojo.html.overElement() but also need to detect clicks

-		// on the area between the arrow and the edge of the button

-		var eventX = e.clientX;

-		var borderX = dojo.style.totalOffsetLeft(this.borderCell);

-		return (eventX > borderX );

-	},

-

-	onMouseOver: function(e) {

-		dojo.html.addClass(this.button, "dojoButtonHover");

-		dojo.html.removeClass(this.button, "dojoButtonNoHover");

-	},

-	

-	onMouseOut: function(e) {

-		dojo.html.removeClass(this.button, "dojoButtonHover");

-		dojo.html.addClass(this.button, "dojoButtonNoHover");

-	},

-

-	onClick: function(e) {

-		if ( this.eventWasOverArrow(e) ) {

-			this._onClickArrow();

-		} else {

-			this._onClickButton();

-		}

-	},

-

-	// Action when the user presses the button

-	_onClickButton: function(e) {

-		if ( this.a ) {

-			if ( this.a.click ) {

-				this.a.click();

-			} else if ( this.a.href ) {

-				location.href = this.a.href;

-			}

-		}

-	},

-

-	// Action when user presses the arrow

-	_onClickArrow: function() {

-		if ( this.menu.style.display == "none" ) {

-			this.showMenu();

-		} else {

-			this.hideMenu();

-		}

-	},

-	

-	showMenu: function() {

-		if ( this.disabled )

-			return;

-

-		// Position it accordingly, relative to screen root (since

-		// it's attached to document.body)

-		this.menu.style.left = dojo.style.totalOffsetLeft(this.button) + "px";

-		this.menu.style.top = dojo.style.totalOffsetTop(this.button) + dojo.style.getOuterHeight(this.button) + "px";

-

-		// Display the menu; do this funky code below to stop the menu from extending

-		// all the way to the right edge of the screen.

-		// TODO: retest simple display="" to confirm that it doesn't work.

-		try {

-			this.menu.style.display="table";	// mozilla

-		} catch(e) {

-			this.menu.style.display="block";	// IE

-		}

-

-		// If someone clicks somewhere else on the screen then close the menu

-		dojo.event.connect(document.documentElement, "onmousedown", this, "onCanvasMouseDown");

-		

-		// When someone clicks the menu, after the menu handles the event,

-		// close the menu (be careful not to close the menu too early or else

-		// the menu will never receive the event.)

-		dojo.event.connect(this.menu, "onclick", this, "hideMenu");

-	},

-

-	hideMenu: function() {

-		this.menu.style.display = "none";

-		dojo.event.disconnect(document.documentElement, "onmousedown", this, "onCanvasMouseDown");

-		dojo.event.disconnect(this.menu, "onclick", this, "hideMenu");

-	}

-});

-

-

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/LayoutPane.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/LayoutPane.js
deleted file mode 100644
index 21386b7..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/LayoutPane.js
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.LayoutPane");
-dojo.provide("dojo.widget.html.LayoutPane");
-
-//
-// this widget provides Delphi-style panel layout semantics
-// this is a good place to stash layout logic, then derive components from it
-//
-// TODO: allow more edge priority orders (e.g. t,r,l,b)
-// TODO: allow percentage sizing stuff
-//
-
-dojo.require("dojo.widget.LayoutPane");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.Container");
-dojo.require("dojo.html");
-dojo.require("dojo.style");
-dojo.require("dojo.dom");
-dojo.require("dojo.string");
-
-
-dojo.widget.html.LayoutPane = function(){
-	dojo.widget.html.Container.call(this);
-}
-
-dojo.inherits(dojo.widget.html.LayoutPane, dojo.widget.html.Container);
-
-dojo.lang.extend(dojo.widget.html.LayoutPane, {
-	widgetType: "LayoutPane",
-
-	isChild: false,
-
-	clientWidth: 0,
-	clientHeight: 0,
-
-	layoutChildPriority: 'top-bottom',
-
-	cssPath: dojo.uri.dojoUri("src/widget/templates/HtmlLayoutPane.css"),
-
-	// If this pane's content is external then set the url here	
-	url: "inline",
-	extractContent: true,
-	parseContent: true,
-	cacheContent: true,
-	
-	// To generate pane content from a java function
-	handler: "none",
-
-	minWidth: 0,
-	minHeight: 0,
-
-	fillInTemplate: function(){
-		this.filterAllowed(this, 'layoutChildPriority', ['left-right', 'top-bottom']);
-
-		// Need to include CSS manually because there is no template file/string
-		dojo.style.insertCssFile(this.cssPath, null, true);
-		dojo.html.addClass(this.domNode, "dojoLayoutPane");
-	},
-
-	postCreate: function(args, fragment, parentComp){
-		for(var i=0; i<this.children.length; i++){
-			this._injectChild(this.children[i]);
-		}
-
-		if ( this.handler != "none" ){
-			this.setHandler(this.handler);
-		}
-		if ( this.isVisible() ){
-			this.loadContents();
-		}
-	},
-
-	// If the pane contents are external then load them
-	loadContents: function() {
-		if ( this.isLoaded ){
-			return;
-		}
-		if ( dojo.lang.isFunction(this.handler)) {
-			this._runHandler();
-		} else if ( this.url != "inline" ) {
-			this._downloadExternalContent(this.url, this.cacheContent);
-		}
-		this.isLoaded=true;
-	},
-
-	// Reset the (external defined) content of this pane
-	setUrl: function(url) {
-		this.url = url;
-		this.isLoaded = false;
-		if ( this.isVisible() ){
-			this.loadContents();
-		}
-	},
-
-	_downloadExternalContent: function(url, useCache) {
-		dojo.deprecated("LayoutPane url parameter.", "use LinkPane to download from a URL", "0.4");
-		//dojo.debug(this.widgetId + " downloading " + url);
-		var node = this.containerNode || this.domNode;
-		node.innerHTML = "Loading...";
-
-		var extract = this.extractContent;
-		var parse = this.parseContent;
-		var self = this;
-
-		dojo.io.bind({
-			url: url,
-			useCache: useCache,
-			mimetype: "text/html",
-			handler: function(type, data, e) {
-				if(type == "load") {
-					if(extract) {
-						var matches = data.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-						if(matches) { data = matches[1]; }
-			}
-					node.innerHTML = data;
-					if(parse) {
-						var parser = new dojo.xml.Parse();
-						var frag = parser.parseElement(node, null, true);
-						dojo.widget.getParser().createComponents(frag);
-					}
-					self.onResized();
-				} else {
-					node.innerHTML = "Error loading '" + url + "' (" + e.status + " " + e.statusText + ")";
-				}
-			}
-		});
-	},
-
-	// Generate pane content from given java function
-	setHandler: function(handler) {
-		var fcn = dojo.lang.isFunction(handler) ? handler : window[handler];
-		if(!dojo.lang.isFunction(fcn)) {
-			throw new Error("Unable to set handler, '" + handler + "' not a function.");
-			return;
-		}
-		this.handler = function() {
-			return fcn.apply(this, arguments);
-		}
-	},
-
-	_runHandler: function() {
-		if(dojo.lang.isFunction(this.handler)) {
-			dojo.deprecated("use LinkPane to download content from a java function", "0.4");
-			this.handler(this, this.domNode);
-			return false;
-		}
-		return true;
-	},
-
-	filterAllowed: function(node, param, values){
-		if ( !dojo.lang.inArray(values, node[param]) ) {
-			node[param] = values[0];
-		}
-	},
-
-	layoutChildren: function(){
-		// find the children to arrange
-
-		var kids = {'left':[], 'right':[], 'top':[], 'bottom':[], 'client':[], 'flood':[]};
-		var hits = 0;
-
-		for(var i=0; i<this.children.length; i++){
-			if (this.hasLayoutAlign(this.children[i])){
-				kids[this.children[i].layoutAlign].push(this.children[i]);
-				hits++;
-			}
-		}
-
-		if (!hits){
-			return;
-		}
-
-		var container = this.containerNode || this.domNode;
-
-		// calc layout space
-
-		this.clientWidth  = dojo.style.getContentWidth(container);
-		this.clientHeight = dojo.style.getContentHeight(container);
-
-		// note: don't setup clientRect as a member of the prototype because that
-		// would make the contents shared between instances
-		this.clientRect={};
-		this.clientRect['left']   = dojo.style.getPixelValue(container, "padding-left", true);
-		this.clientRect['right']  = dojo.style.getPixelValue(container, "padding-right", true);
-		this.clientRect['top']    = dojo.style.getPixelValue(container, "padding-top", true);
-		this.clientRect['bottom'] = dojo.style.getPixelValue(container, "padding-bottom", true);
-
-		// arrange them in order
-		this._layoutCenter(kids, "flood");
-		if (this.layoutChildPriority == 'top-bottom'){
-			this._layoutFloat(kids, "top");
-			this._layoutFloat(kids, "bottom");
-			this._layoutFloat(kids, "left");
-			this._layoutFloat(kids, "right");
-		}else{
-			this._layoutFloat(kids, "left");
-			this._layoutFloat(kids, "right");
-			this._layoutFloat(kids, "top");
-			this._layoutFloat(kids, "bottom");
-		}
-		this._layoutCenter(kids, "client");
-	},
-
-	// Position the left/right/top/bottom aligned elements
-	_layoutFloat: function(kids, position){
-		var ary = kids[position];
-		
-		// figure out which two of the left/right/top/bottom properties to set
-		var lr = (position=="right")?"right":"left";
-		var tb = (position=="bottom")?"bottom":"top";
-
-		for(var i=0; i<ary.length; i++){
-			var elm=ary[i];
-			
-			// set two of left/right/top/bottom properties
-			elm.domNode.style[lr]=this.clientRect[lr] + "px";
-			elm.domNode.style[tb]=this.clientRect[tb] + "px";
-			
-			// adjust record of remaining space
-			if ( (position=="top")||(position=="bottom") ) {
-				dojo.style.setOuterWidth(elm.domNode, this.clientWidth);
-				var height = dojo.style.getOuterHeight(elm.domNode);
-				this.clientHeight -= height;
-				this.clientRect[position] += height;
-			} else {
-				dojo.style.setOuterHeight(elm.domNode, this.clientHeight);
-				var width = dojo.style.getOuterWidth(elm.domNode);
-				this.clientWidth -= width;
-				this.clientRect[position] += width;
-			}
-		}
-	},
-
-	// Position elements into the remaining space (in the center)
-	// If multiple elements are present they overlap each other
-	_layoutCenter: function(kids, position){
-		var ary = kids[position];
-		for(var i=0; i<ary.length; i++){
-			var elm=ary[i];
-			elm.domNode.style.left=this.clientRect.left + "px";
-			elm.domNode.style.top=this.clientRect.top + "px";
-			dojo.style.setOuterWidth(elm.domNode, this.clientWidth);		
-			dojo.style.setOuterHeight(elm.domNode, this.clientHeight);
-		}
-
-	},
-
-	hasLayoutAlign: function(child){
-		return dojo.lang.inArray(['left','right','top','bottom','client', 'flood'], child.layoutAlign);
-	},
-
-	addChild: function(child, overrideContainerNode, pos, ref, insertIndex){
-		this._injectChild(child);
-		dojo.widget.html.LayoutPane.superclass.addChild.call(this, child, overrideContainerNode, pos, ref, insertIndex);
-		this.resizeSoon();
-	},
-
-	_injectChild: function(child){
-		if ( this.hasLayoutAlign(child) ){
-			child.domNode.style.position = 'absolute';
-			child.isChild = true;	
-			this.filterAllowed(child, 'layoutAlign', ['none', 'left', 'top', 'right', 'bottom', 'client', 'flood']);
-			dojo.html.addClass(child.domNode, "dojoAlign" + dojo.string.capitalize(child.layoutAlign));		
-		}
-	},
-
-	removeChild: function(pane){
-		dojo.widget.html.LayoutPane.superclass.removeChild.call(this,pane);
-		dojo.dom.removeNode(pane.domNode);
-		this.resizeSoon();
-	},
-
-	onResized: function(){
-		if ( !this.isVisible() ) {
-			return;
-		}
-
-		//dojo.debug(this.widgetId + ": resized");
-
-		// set position/size for my children
-		this.layoutChildren();
-
-		// notify children that they have been moved/resized
-		this.notifyChildrenOfResize();
-	},
-
-	resizeTo: function(w, h){
-
-		w = Math.max(w, this.getMinWidth());
-		h = Math.max(h, this.getMinHeight());
-
-		dojo.style.setOuterWidth(this.domNode, w);
-		dojo.style.setOuterHeight(this.domNode, h);
-		this.onResized();
-	},
-
-	show: function(){
-		// If this is the first time we are displaying this object,
-		// and the contents are external, then download them.
-		this.loadContents();
-
-		// If this node was created while display=="none" then it
-		// hasn't been laid out yet.  Do that now.
-		this.domNode.style.display="";
-		this.onResized();
-		this.domNode.style.display="none";
-		this.domNode.style.visibility="";
-
-		dojo.widget.html.LayoutPane.superclass.show.call(this);
-	},
-
-	getMinWidth: function(){
-
-		//
-		// we need to first get the cumulative width
-		//
-
-		var w = this.minWidth;
-
-		if ((this.layoutAlign == 'left') || (this.layoutAlign == 'right')){
-
-			w = dojo.style.getOuterWidth(this.domNode);
-		}
-
-		for(var i=0; i<this.children.length; i++){
-			var ch = this.children[i];
-			var a = ch.layoutAlign;
-
-			if ((a == 'left') || (a == 'right') || (a == 'client')){
-
-				if (dojo.lang.isFunction(ch.getMinWidth)){
-					w += ch.getMinWidth();
-				}
-			}
-		}
-
-		//
-		// but then we need to check to see if the top/bottom kids are larger
-		//
-
-		for(var i=0; i<this.children.length; i++){
-			var ch = this.children[i];
-			var a = ch.layoutAlign;
-
-			if ((a == 'top') || (a == 'bottom')){
-
-				if (dojo.lang.isFunction(ch.getMinWidth)){
-					w = Math.max(w, ch.getMinWidth());
-				}
-			}
-		}
-
-		return w;
-	},
-
-	getMinHeight: function(){
-
-		//
-		// we need to first get the cumulative height
-		//
-
-		var h = this.minHeight;
-
-		if ((this.layoutAlign == 'top') || (this.layoutAlign == 'bottom')){
-
-			h = dojo.style.getOuterHeight(this.domNode);
-		}
-
-		for(var i=0; i<this.children.length; i++){
-			var ch = this.children[i];
-			var a = ch.layoutAlign;
-
-			if ((a == 'top') || (a == 'bottom') || (a == 'client')){
-
-				if (dojo.lang.isFunction(ch.getMinHeight)){
-					h += ch.getMinHeight();
-				}
-			}
-		}
-
-		//
-		// but then we need to check to see if the left/right kids are larger
-		//
-
-		for(var i=0; i<this.children.length; i++){
-			var ch = this.children[i];
-			var a = ch.layoutAlign;
-
-			if ((a == 'left') || (a == 'right')){
-
-				if (dojo.lang.isFunction(ch.getMinHeight)){
-					h = Math.max(h, ch.getMinHeight());
-				}
-			}
-		}
-
-		return h;
-	}
-});
-
-// This arguments can be specified for the children of a LayoutPane.
-// Since any widget can be specified as a LayoutPane child, mix it
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.lang.extend(dojo.widget.Widget, {
-	layoutAlign: 'none'
-});
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/LinkPane.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/LinkPane.js
deleted file mode 100644
index dbf0fdc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/LinkPane.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.LinkPane");

-dojo.provide("dojo.widget.html.LinkPane");

-

-//

-// a div that loads from a URL.  (Similar to an iframe, but

-// it's in the same environment as the main window)

-//

-

-dojo.require("dojo.widget.LinkPane");

-dojo.require("dojo.widget.*");

-dojo.require("dojo.event.*");

-dojo.require("dojo.io.*");

-dojo.require("dojo.widget.ContentPane");

-dojo.require("dojo.html");

-dojo.require("dojo.style");

-dojo.require("dojo.dom");

-dojo.require("dojo.string");

-

-

-dojo.widget.html.LinkPane = function(){

-	dojo.widget.html.ContentPane.call(this);

-}

-

-dojo.inherits(dojo.widget.html.LinkPane, dojo.widget.html.ContentPane);

-

-dojo.lang.extend(dojo.widget.html.LinkPane, {

-	widgetType: "LinkPane",

-

-	// I'm using a template because the user may specify the input as

-	// <a href="foo.html">label</a>, in which case we need to get rid of the

-	// <a> because we don't want a link.

-	templateString: '<div class="dojoLinkPane"></div>',

-

-	fillInTemplate: function(args, frag){

-		var source = this.getFragNodeRef(frag);

-

-		// If user has specified node contents, they become the label

-		// (the link must be plain text)

-		this.label += source.innerHTML;

-

-		// Copy style info from input node to output node

-		this.domNode.style.cssText = source.style.cssText;

-		dojo.html.addClass(this.domNode, dojo.html.getClass(source));

-	}

-});

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Menu.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Menu.js
deleted file mode 100644
index 8f3148a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Menu.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.widget.Menu");
-dojo.provide("dojo.widget.html.Menu");
-
-/* HtmlMenu
- ***********/
- 
-dojo.widget.html.Menu = function(){
-	dojo.widget.html.Menu.superclass.constructor.call(this);
-	this.items = [];
-}
-dojo.inherits(dojo.widget.html.Menu, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.html.Menu, {
-	widgetType: "Menu",
-	isContainer: true,
-
-	// copy children widgets output directly to parent (this node), to avoid
-	// errors trying to insert an <li> under a <div>
-	snarfChildDomOutput: true,
-
-	templateString: '<ul></ul>',
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/Menu.css"),
-	
-	fillInTemplate: function (args, frag){
-		//dojo.widget.HtmlMenu.superclass.fillInTemplate.apply(this, arguments);
-		this.domNode.className = "dojoMenu";
-	},
-	
- 
-	_register: function (item ) {
-		dojo.event.connect(item, "onSelect", this, "onSelect");
-		this.items.push(item);
-	},
-
-	push: function (item) {
-		this.domNode.appendChild(item.domNode);
-		this._register(item);
-	}
-
-});
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/MenuItem.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/MenuItem.js
deleted file mode 100644
index baff43a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/MenuItem.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.MenuItem");
-
-/* HtmlMenuItem
- ***************/
-
-dojo.widget.html.MenuItem = function(){
-	dojo.widget.HtmlWidget.call(this);
-}
-dojo.inherits(dojo.widget.html.MenuItem, dojo.widget.HtmlWidget);
-
-dojo.lang.extend(dojo.widget.html.MenuItem, {
-	widgetType: "MenuItem",
-	templateString: '<li class="dojoMenuItem" dojoAttachEvent="onMouseOver; onMouseOut; onMouseDown; onMouseUp; onClick;"></li>',
-	title: "",
-
-	fillInTemplate: function(args, frag){
-		dojo.html.disableSelection(this.domNode);
-
-		if(!dojo.string.isBlank(this.title)){
-			this.domNode.appendChild(document.createTextNode(this.title));
-		}else{
-			this.domNode.appendChild(frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"]);
-		}
-	},
-	
-	onMouseOver: function(e){
-		dojo.html.addClass(this.domNode, "dojoMenuItemHover");
-	},
-	
-	onMouseOut: function(e){
-		dojo.html.removeClass(this.domNode, "dojoMenuItemHover");
-	},
-	
-	onClick: function(e){ this.onSelect(this, e); },
-	onMouseDown: function(e){},
-	onMouseUp: function(e){},
-	
-	// By default, when I am clicked, click the item inside of me
-	onSelect: function (item, e) {
-		var child = dojo.dom.getFirstChildElement(this.domNode);
-		if(child){
-			if(child.click){
-				child.click();
-			}else if(child.href){
-				location.href = child.href;
-			}
-		}
-	}
-});
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/TaskBar.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/TaskBar.js
deleted file mode 100644
index 7a7a660..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/TaskBar.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.TaskBar");

-dojo.provide("dojo.widget.html.TaskBarItem");

-

-dojo.require("dojo.widget.*");

-dojo.require("dojo.widget.FloatingPane");

-dojo.require("dojo.widget.HtmlWidget");

-dojo.require("dojo.event");

-

-// Icon associated w/a floating pane

-dojo.widget.html.TaskBarItem = function(){

-	dojo.widget.TaskBarItem.call(this);

-	dojo.widget.HtmlWidget.call(this);

-}

-dojo.inherits(dojo.widget.html.TaskBarItem, dojo.widget.HtmlWidget);

-

-dojo.lang.extend(dojo.widget.html.TaskBarItem, {

-	// constructor arguments

-	iconSrc: '',

-	caption: 'Untitled',

-	window: null,

-	templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlTaskBarItemTemplate.html"),

-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlTaskBar.css"),

-

-	fillInTemplate: function() {

-		if ( this.iconSrc != '' ) {

-			var img = document.createElement("img");

-			img.src = this.iconSrc;

-			this.domNode.appendChild(img);

-		}

-		this.domNode.appendChild(document.createTextNode(this.caption));

-		dojo.html.disableSelection(this.domNode);

-	},

-

-	postCreate: function() {

-		this.window=dojo.widget.getWidgetById(this.windowId);

-		this.window.explodeSrc = this.domNode;

-		dojo.event.connect(this.window, "destroy", this, "destroy")

-	},

-

-	onClick: function() {

-		if (this.window.windowState != "minimized") {

-			this.window.bringToTop();

-		} else {

-			this.window.restoreWindow();

-		}

-	}

-});

-

-// Collection of widgets in a bar, like Windows task bar

-dojo.widget.html.TaskBar = function(){

-

-	dojo.widget.html.FloatingPane.call(this);

-	dojo.widget.TaskBar.call(this);

-	this.titleBarDisplay = "none";

-}

-

-dojo.inherits(dojo.widget.html.TaskBar, dojo.widget.html.FloatingPane);

-

-dojo.lang.extend(dojo.widget.html.TaskBar, {

-	addChild: function(child) {

-		var tbi = dojo.widget.createWidget("TaskBarItem",{windowId:child.widgetId, caption: child.title, iconSrc: child.iconSrc} );

-		dojo.widget.html.TaskBar.superclass.addChild.call(this,tbi);

-	}

-});

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/TimePicker.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/TimePicker.js
deleted file mode 100644
index d1b053b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/TimePicker.js
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.TimePicker");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.TimePicker");
-dojo.require("dojo.widget.TimePicker.util");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html");
-
-dojo.widget.html.TimePicker = function(){
-	dojo.widget.TimePicker.call(this);
-	dojo.widget.HtmlWidget.call(this);
-
-
-	var _this = this;
-	// selected time, JS Date object
-	this.time = "";
-	// set following flag to true if a default time should be set
-	this.useDefaultTime = false;
-	// set the following to true to set default minutes to current time, false to // use zero
-	this.useDefaultMinutes = false;
-	// rfc 3339 date
-	this.storedTime = "";
-	// time currently selected in the UI, stored in hours, minutes, seconds in the format that will be actually displayed
-	this.currentTime = {};
-	this.classNames = {
-		selectedTime: "selectedItem"
-	}
-	this.any = "any"
-	// dom node indecies for selected hour, minute, amPm, and "any time option"
-	this.selectedTime = {
-		hour: "",
-		minute: "",
-		amPm: "",
-		anyTime: false
-	}
-
-	// minutes are ordered as follows: ["12", "6", "1", "7", "2", "8", "3", "9", "4", "10", "5", "11"]
-	this.hourIndexMap = ["", 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 11, 0];
-	// minutes are ordered as follows: ["00", "30", "05", "35", "10", "40", "15", "45", "20", "50", "25", "55"]
-	this.minuteIndexMap = [0, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 11];
-
-	this.templatePath =  dojo.uri.dojoUri("src/widget/templates/HtmlTimePicker.html");
-	this.templateCssPath = dojo.uri.dojoUri("src/widget/templates/HtmlTimePicker.css");
-
-	this.fillInTemplate = function(){
-		this.initData();
-		this.initUI();
-	}
-
-	this.initData = function() {
-		// FIXME: doesn't currently validate the time before trying to set it
-		// Determine the date/time from stored info, or by default don't 
-		//  have a set time
-		// FIXME: should normalize against whitespace on storedTime... for now 
-		// just a lame hack
-		if(this.storedTime.split("T")[1] && this.storedTime!=" " && this.storedTime.split("T")[1]!="any") {
-			this.time = dojo.widget.TimePicker.util.fromRfcDateTime(this.storedTime, this.useDefaultMinutes);
-		} else if (this.useDefaultTime) {
-			this.time = dojo.widget.TimePicker.util.fromRfcDateTime("", this.useDefaultMinutes);
-		} else {
-			this.selectedTime.anyTime = true;
-		}
-	}
-
-	this.initUI = function() {
-		// set UI to match the currently selected time
-		if(this.time) {
-			var amPmHour = dojo.widget.TimePicker.util.toAmPmHour(this.time.getHours());
-			var hour = amPmHour[0];
-			var isAm = amPmHour[1];
-			var minute = this.time.getMinutes();
-			var minuteIndex = parseInt(minute/5);
-			this.onSetSelectedHour(this.hourIndexMap[hour]);
-			this.onSetSelectedMinute(this.minuteIndexMap[minuteIndex]);
-			this.onSetSelectedAmPm(isAm);
-		} else {
-			this.onSetSelectedAnyTime();
-		}
-	}
-
-	this.setDateTime = function(rfcDate) {
-		this.storedTime = rfcDate;
-	}
-	
-	this.onClearSelectedHour = function(evt) {
-		this.clearSelectedHour();
-	}
-
-	this.onClearSelectedMinute = function(evt) {
-		this.clearSelectedMinute();
-	}
-
-	this.onClearSelectedAmPm = function(evt) {
-		this.clearSelectedAmPm();
-	}
-
-	this.onClearSelectedAnyTime = function(evt) {
-		this.clearSelectedAnyTime();
-		if(this.selectedTime.anyTime) {
-			this.selectedTime.anyTime = false;
-			this.time = dojo.widget.TimePicker.util.fromRfcDateTime("", this.useDefaultMinutes);
-			this.initUI();
-		}
-	}
-
-	this.clearSelectedHour = function() {
-		var hourNodes = this.hourContainerNode.getElementsByTagName("td");
-		for (var i=0; i<hourNodes.length; i++) {
-			dojo.html.setClass(hourNodes.item(i), "");
-		}
-	}
-
-	this.clearSelectedMinute = function() {
-		var minuteNodes = this.minuteContainerNode.getElementsByTagName("td");
-		for (var i=0; i<minuteNodes.length; i++) {
-			dojo.html.setClass(minuteNodes.item(i), "");
-		}
-	}
-
-	this.clearSelectedAmPm = function() {
-		var amPmNodes = this.amPmContainerNode.getElementsByTagName("td");
-		for (var i=0; i<amPmNodes.length; i++) {
-			dojo.html.setClass(amPmNodes.item(i), "");
-		}
-	}
-
-	this.clearSelectedAnyTime = function() {
-		dojo.html.setClass(this.anyTimeContainerNode, "anyTimeContainer");
-	}
-
-	this.onSetSelectedHour = function(evt) {
-		this.onClearSelectedAnyTime();
-		this.onClearSelectedHour();
-		this.setSelectedHour(evt);
-		this.onSetTime();
-	}
-
-	this.setSelectedHour = function(evt) {
-		if(evt && evt.target) {
-			dojo.html.setClass(evt.target, this.classNames.selectedTime);
-			this.selectedTime["hour"] = evt.target.innerHTML;
-		} else if (!isNaN(evt)) {
-			var hourNodes = this.hourContainerNode.getElementsByTagName("td");
-			if(hourNodes.item(evt)) {
-				dojo.html.setClass(hourNodes.item(evt), this.classNames.selectedTime);
-				this.selectedTime["hour"] = hourNodes.item(evt).innerHTML;
-			}
-		}
-		this.selectedTime.anyTime = false;
-	}
-
-	this.onSetSelectedMinute = function(evt) {
-		this.onClearSelectedAnyTime();
-		this.onClearSelectedMinute();
-		this.setSelectedMinute(evt);
-		this.selectedTime.anyTime = false;
-		this.onSetTime();
-	}
-
-	this.setSelectedMinute = function(evt) {
-		if(evt && evt.target) {
-			dojo.html.setClass(evt.target, this.classNames.selectedTime);
-			this.selectedTime["minute"] = evt.target.innerHTML;
-		} else if (!isNaN(evt)) {
-			var minuteNodes = this.minuteContainerNode.getElementsByTagName("td");
-			if(minuteNodes.item(evt)) {
-				dojo.html.setClass(minuteNodes.item(evt), this.classNames.selectedTime);
-				this.selectedTime["minute"] = minuteNodes.item(evt).innerHTML;
-			}
-		}
-	}
-
-	this.onSetSelectedAmPm = function(evt) {
-		this.onClearSelectedAnyTime();
-		this.onClearSelectedAmPm();
-		this.setSelectedAmPm(evt);
-		this.selectedTime.anyTime = false;
-		this.onSetTime();
-	}
-
-	this.setSelectedAmPm = function(evt) {
-		if(evt && evt.target) {
-			dojo.html.setClass(evt.target, this.classNames.selectedTime);
-			this.selectedTime["amPm"] = evt.target.innerHTML;
-		} else {
-			evt = evt ? 0 : 1;
-			var amPmNodes = this.amPmContainerNode.getElementsByTagName("td");
-			if(amPmNodes.item(evt)) {
-				dojo.html.setClass(amPmNodes.item(evt), this.classNames.selectedTime);
-				this.selectedTime["amPm"] = amPmNodes.item(evt).innerHTML;
-			}
-		}
-	}
-
-	this.onSetSelectedAnyTime = function(evt) {
-		this.onClearSelectedHour();
-		this.onClearSelectedMinute();
-		this.onClearSelectedAmPm();
-		this.setSelectedAnyTime();
-		this.onSetTime();
-	}
-
-	this.setSelectedAnyTime = function(evt) {
-		this.selectedTime.anyTime = true;
-		dojo.html.setClass(this.anyTimeContainerNode, this.classNames.selectedTime + " " + "anyTimeContainer");
-	}
-
-	this.onClick = function(evt) {
-		dojo.event.browser.stopEvent(evt)
-	}
-
-	this.onSetTime = function() {
-		if(this.selectedTime.anyTime) {
-			this.time = new Date();
-			var tempDateTime = dojo.widget.TimePicker.util.toRfcDateTime(this.time);
-			this.setDateTime(tempDateTime.split("T")[0] + "T" + this.any);
-		} else {
-			var hour = 12;
-			var minute = 0;
-			var isAm = false;
-			if(this.selectedTime["hour"]) {
-				hour = parseInt(this.selectedTime["hour"], 10);
-			}
-			if(this.selectedTime["minute"]) {
-				minute = parseInt(this.selectedTime["minute"], 10);
-			}
-			if(this.selectedTime["amPm"]) {
-				isAm = (this.selectedTime["amPm"].toLowerCase() == "am");
-			}
-			this.time = new Date();
-			this.time.setHours(dojo.widget.TimePicker.util.fromAmPmHour(hour, isAm));
-			this.time.setMinutes(minute);
-			this.setDateTime(dojo.widget.TimePicker.util.toRfcDateTime(this.time));
-		}
-	}
-
-}
-dojo.inherits(dojo.widget.html.TimePicker, dojo.widget.HtmlWidget);
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Tooltip.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Tooltip.js
deleted file mode 100644
index 3bd05c3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/Tooltip.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.html.Tooltip");

-dojo.require("dojo.widget.HtmlWidget");

-dojo.require("dojo.widget.Tooltip");

-dojo.require("dojo.uri");

-dojo.require("dojo.widget.*");

-dojo.require("dojo.event");

-dojo.require("dojo.style");

-dojo.require("dojo.html");

-

-dojo.widget.html.Tooltip = function(){

-	// mix in the tooltip properties

-	dojo.widget.Tooltip.call(this);

-	dojo.widget.HtmlWidget.call(this);

-}

-dojo.inherits(dojo.widget.html.Tooltip, dojo.widget.HtmlWidget);

-dojo.lang.extend(dojo.widget.html.Tooltip, {

-

-	// Constructor arguments (should these be in tooltip.js rather than html/tooltip.js???)

-	caption: "undefined",

-	delay: 500,

-	connectId: "",

-

-	templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlTooltipTemplate.html"),

-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlTooltipTemplate.css"),

-

-	containerNode: null,

-	connectNode: null,

-

-	hovering: false,

-	displayed: false,

-

-	fillInTemplate: function(args, frag){

-		if(this.caption != "undefined"){

-			this.domNode.appendChild(document.createTextNode(this.caption));

-		}

-		dojo.html.body().appendChild(this.domNode);

-		this.connectNode = dojo.byId(this.connectId);

-		

-		// IE bug workaround

-		this.bgIframe = new dojo.html.BackgroundIframe();

-	},

-	

-	postCreate: function(args, frag){

-		var self = this;

-		this.timerEvent = function () { self.display.apply(self); };

-		dojo.event.connect(this.connectNode, "onmouseover", this, "onMouseOver");

-	},

-	

-	onMouseOver: function(e) {

-		if( this.displayed ){ return; }

-		this.timerEventId = setTimeout(this.timerEvent, this.delay);

-		dojo.event.connect(document.documentElement, "onmousemove", this, "onMouseMove");

-	},

-	

-	onMouseMove: function(e) {

-		this.mouseX = e.pageX || e.clientX + dojo.html.body().scrollLeft;

-		this.mouseY = e.pageY || e.clientY + dojo.html.body().scrollTop;

-		if( !dojo.html.overElement(this.connectNode, e) ){

-			// Note: can't use onMouseOut because the "explode" effect causes

-			// spurious onMouseOut/onMouseOver events (due to interference from outline)

-			this.erase();

-		}

-	},

-

-	display: function() {

-		if ( this.displayed ) { return; }

-

-		this.domNode.style.top = this.mouseY + 15 + "px";

-		this.domNode.style.left = this.mouseX + 10 + "px";

-

-		// if rendering using explosion effect, need to set explosion source

-		this.explodeSrc = [this.mouseX, this.mouseY];

-

-		this.show();

-		this.bgIframe.show(this.domNode);

-

-		this.displayed=true;

-	},

-

-	onShow: function() {

-		// for explode effect, have to display the iframe after the effect completes

-		this.bgIframe.show(this.domNode);

-		dojo.widget.html.Tooltip.superclass.onShow.call(this);

-	},

-

-	erase: function() {

-		if ( this.timerEventId ) {

-			clearTimeout(this.timerEventId);

-			delete this.timerEventId;

-		}

-		if ( this.displayed ) {

-			this.hide();

-			this.bgIframe.hide();

-			this.displayed=false;

-		}

-		dojo.event.disconnect(document.documentElement, "onmousemove", this, "onMouseMove");

-	}

-});

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/stabile.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/stabile.js
deleted file mode 100644
index 398662e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/html/stabile.js
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-// Maintain state of widgets when user hits back/forward button

-

-dojo.provide("dojo.widget.html.stabile");

-

-dojo.widget.html.stabile = {

-	// Characters to quote in single-quoted regexprs

-	_sqQuotables: new RegExp("([\\\\'])", "g"),

-

-	// Current depth.

-	_depth: 0,

-

-	// Set to true when calling v.toString, to sniff for infinite

-	// recursion.

-	_recur: false,

-

-	// Levels of nesting of Array and object displays.

-	// If when >= depth, no display or array or object internals.

-	depthLimit: 2

-};

-

-

-

-

-

-//// PUBLIC METHODS

-

-// Get the state stored for the widget with the given ID, or undefined

-// if none.

-// 

-dojo.widget.html.stabile.getState = function(id){

-	dojo.widget.html.stabile.setup();

-	return dojo.widget.html.stabile.widgetState[id];

-}

-

-

-// Set the state stored for the widget with the given ID.  If isCommit

-// is true, commits all widget state to more stable storage.

-// 

-dojo.widget.html.stabile.setState = function(id, state, isCommit){

-	dojo.widget.html.stabile.setup();

-	dojo.widget.html.stabile.widgetState[id] = state;

-	if(isCommit){

-		dojo.widget.html.stabile.commit(dojo.widget.html.stabile.widgetState);

-	}

-}

-

-

-// Sets up widgetState: a hash keyed by widgetId, maps to an object

-// or array writable with "describe".  If there is data in the widget

-// storage area, use it, otherwise initialize an empty object.

-// 

-dojo.widget.html.stabile.setup = function(){

-	if(!dojo.widget.html.stabile.widgetState){

-		var text = dojo.widget.html.stabile.getStorage().value;

-		dojo.widget.html.stabile.widgetState = text ? dj_eval("("+text+")") : {};

-	}

-}

-

-

-// Commits all widget state to more stable storage, so if the user

-// navigates away and returns, it can be restored.

-// 

-dojo.widget.html.stabile.commit = function(state){

-	dojo.widget.html.stabile.getStorage().value = dojo.widget.html.stabile.description(state);

-}

-

-

-// Return a JSON "description string" for the given value.

-// Supports only core JavaScript types with literals, plus Date,

-// and cyclic structures are unsupported.

-// showAll defaults to false -- if true, this becomes a simple symbolic

-// object dumper, but you cannot "eval" the output.

-//

-dojo.widget.html.stabile.description = function(v, showAll){

-	// Save and later restore dojo.widget.html.stabile._depth;

-	var depth = dojo.widget.html.stabile._depth;

-

-	try {

-

-		if(v===void(0)){

-			return "undefined";

-		}

-		if(v===null){

-			return "null";

-		}

-		if(typeof(v)=="boolean" || typeof(v)=="number"

-		    || v instanceof Boolean || v instanceof Number){

-			return v.toString();

-		}

-

-		if(typeof(v)=="string" || v instanceof String){

-			// Quote strings and their contents as required.

-			// Replacing by $& fails in IE 5.0

-			var v1 = v.replace(dojo.widget.html.stabile._sqQuotables, "\\$1"); 

-			v1 = v1.replace(/\n/g, "\\n");

-			v1 = v1.replace(/\r/g, "\\r");

-			// Any other important special cases?

-			return "'"+v1+"'";

-		}

-

-		if(v instanceof Date){

-			// Create a data constructor.

-			return "new Date("+d.getFullYear+","+d.getMonth()+","+d.getDate()+")";

-		}

-

-		var d;

-		if(v instanceof Array || v.push){

-			// "push" test needed for KHTML/Safari, don't know why -cp

-

-			if(depth>=dojo.widget.html.stabile.depthLimit)

-			  return "[ ... ]";

-

-			d = "[";

-			var first = true;

-			dojo.widget.html.stabile._depth++;

-			for(var i=0; i<v.length; i++){

-				// Skip functions and undefined values

-				// if(v[i]==undef || typeof(v[i])=="function")

-				//   continue;

-				if(first){

-					first = false;

-				}else{

-					d += ",";

-				}

-				d+=arguments.callee(v[i], showAll);

-			}

-			return d+"]";

-		}

-

-		if(v.constructor==Object

-		    || v.toString==describeThis){

-			if(depth>=dojo.widget.html.stabile.depthLimit)

-			  return "{ ... }";

-

-			// Instanceof Hash is good, or if we just use Objects,

-			// we can say v.constructor==Object.

-			// IE (5?) lacks hasOwnProperty, but perhaps objects do not always

-			// have prototypes??

-			if(typeof(v.hasOwnProperty)!="function" && v.prototype){

-				throw new Error("description: "+v+" not supported by script engine");

-			}

-			var first = true;

-			d = "{";

-			dojo.widget.html.stabile._depth++;

-			for(var key in v){

-				// Skip values that are functions or undefined.

-				if(v[key]==void(0) || typeof(v[key])=="function")

-					continue;

-				if(first){

-					first = false;

-				}else{

-					d += ", ";

-				}

-				kd = key;

-				// If the key is not a legal identifier, use its description.

-				// For strings this will quote the stirng.

-				if(!kd.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)){

-					kd = arguments.callee(key, showAll);

-				}

-				d += kd+": "+arguments.callee(v[key], showAll);

-			}

-			return d+"}";

-		}

-

-		if(showAll){

-			if(dojo.widget.html.stabile._recur){

-				return objectToString.apply(v, []);

-			}else{

-				dojo.widget.html.stabile._recur = true;

-				return v.toString();

-			}

-		}else{

-			// log("Description? "+v.toString()+", "+typeof(v));

-			throw new Error("Unknown type: "+v);

-			return "'unknown'";

-		}

-

-	} finally {

-		// Always restore the global current depth.

-		dojo.widget.html.stabile._depth = depth;

-	}

-

-}

-

-

-

-//// PRIVATE TO MODULE

-

-// Gets an object (form field) with a read/write "value" property.

-// 

-dojo.widget.html.stabile.getStorage = function(){

-	if (dojo.widget.html.stabile.dataField) {

-		return dojo.widget.html.stabile.dataField;

-	}

-	var form = document.forms._dojo_form;

-	return dojo.widget.html.stabile.dataField = form ? form.stabile : {value: ""};

-}

-

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/svg/Chart.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/svg/Chart.js
deleted file mode 100644
index 5b9067e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/svg/Chart.js
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.svg.Chart");
-
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.Chart");
-dojo.require("dojo.math");
-dojo.require("dojo.html");
-dojo.require("dojo.svg");
-dojo.require("dojo.graphics.color");
-
-dojo.widget.svg.Chart=function(){
-	dojo.widget.Chart.call(this);
-	dojo.widget.HtmlWidget.call(this);
-};
-dojo.inherits(dojo.widget.svg.Chart, dojo.widget.HtmlWidget);
-dojo.lang.extend(dojo.widget.svg.Chart, {
-	//	widget props
-	templatePath:null,
-	templateCssPath:null,
-
-	//	state
-	_isInitialized:false,
-	hasData:false,
-
-	//	chart props
-	vectorNode:null,
-	plotArea:null,
-	dataGroup:null,
-	axisGroup:null,
-
-	properties:{
-		height:400,	//	defaults, will resize to the domNode.
-		width:600,
-		plotType:null,
-		padding:{
-			top:10,
-			bottom:2,
-			left:60,
-			right:30
-		},
-		axes:{
-			x:{
-				plotAt:0,
-				label:"",
-				unitLabel:"",
-				unitType:Number,
-				nUnitsToShow:10,
-				range:{
-					min:0,
-					max:200
-				}
-			},
-			y:{
-				plotAt:0,
-				label:"",
-				unitLabel:"",
-				unitType:Number,
-				nUnitsToShow:10,
-				range:{
-					min:0,
-					max:200
-				}
-			}
-		}
-	},
-	
-	fillInTemplate:function(args,frag){
-		this.parseData();
-		this.initialize();
-		this.render();
-	},
-	parseData:function(){
-	},
-	initialize:function(){
-		//	begin by grabbing the table, and reading it in.
-		var table=this.domNode.getElementsByTagName("table")[0];
-		if (!table) return;
-		
-		var bRangeX=false;
-		var bRangeY=false;
-		
-		//	properties off the table
-		if (table.getAttribute("width")) this.properties.width=table.getAttribute("width");
-		if (table.getAttribute("height")) this.properties.height=table.getAttribute("height");
-		if (table.getAttribute("plotType")) this.properties.plotType=table.getAttribute("plotType");
-		if (table.getAttribute("padding")){
-			if (table.getAttribute("padding").indexOf(",") > -1)
-				var p=table.getAttribute("padding").split(","); 
-			else var p=table.getAttribute("padding").split(" ");
-			if (p.length==1){
-				var pad=parseFloat(p[0]);
-				this.properties.padding.top=pad;
-				this.properties.padding.right=pad;
-				this.properties.padding.bottom=pad;
-				this.properties.padding.left=pad;
-			} else if(p.length==2){
-				var padV=parseFloat(p[0]);
-				var padH=parseFloat(p[1]);
-				this.properties.padding.top=padV;
-				this.properties.padding.right=padH;
-				this.properties.padding.bottom=padV;
-				this.properties.padding.left=padH;
-			} else if(p.length==4){
-				this.properties.padding.top=parseFloat(p[0]);
-				this.properties.padding.right=parseFloat(p[1]);
-				this.properties.padding.bottom=parseFloat(p[2]);
-				this.properties.padding.left=parseFloat(p[3]);
-			}
-		}
-		if (table.getAttribute("rangeX")){
-			var p=table.getAttribute("rangeX");
-			if (p.indexOf(",")>-1) p=p.split(",");
-			else p=p.split(" ");
-			this.properties.axes.x.range.min=parseFloat(p[0]);
-			this.properties.axes.x.range.max=parseFloat(p[1]);
-			bRangeX=true;
-		}
-		if (table.getAttribute("rangeY")){
-			var p=table.getAttribute("rangeY");
-			if (p.indexOf(",")>-1) p=p.split(",");
-			else p=p.split(" ");
-			this.properties.axes.y.range.min=parseFloat(p[0]);
-			this.properties.axes.y.range.max=parseFloat(p[1]);
-			bRangeY=true;
-		}
-
-		var thead=table.getElementsByTagName("thead")[0];
-		var tbody=table.getElementsByTagName("tbody")[0];
-		if(!(thead&&tbody)) dojo.raise("dojo.widget.Chart: supplied table must define a head and a body.");
-
-		//	set up the series.
-		var columns=thead.getElementsByTagName("tr")[0].getElementsByTagName("th");	//	should be <tr><..>
-		
-		//	assume column 0 == X
-		for (var i=1; i<columns.length; i++){
-			var key="column"+i;
-			var label=columns[i].innerHTML;
-			var plotType=columns[i].getAttribute("plotType")||"line";
-			var color=columns[i].getAttribute("color");
-			var ds=new dojo.widget.Chart.DataSeries(key,label,plotType,color);
-			this.series.push(ds);
-		}
-
-		//	ok, get the values.
-		var rows=tbody.getElementsByTagName("tr");
-		var xMin=Number.MAX_VALUE,xMax=Number.MIN_VALUE;
-		var yMin=Number.MAX_VALUE,yMax=Number.MIN_VALUE;
-		var ignore = ["accesskey","align","bgcolor","class","colspan","height","id","nowrap","rowspan","style","tabindex","title","valign","width"];
-
-		for(var i=0; i<rows.length; i++){
-			var row=rows[i];
-			var cells=row.getElementsByTagName("td");
-			var x=Number.MIN_VALUE;
-			for (var j=0; j<cells.length; j++){
-				if (j==0){
-					x=parseFloat(cells[j].innerHTML);
-					xMin=Math.min(xMin, x);
-					xMax=Math.max(xMax, x);
-				} else {
-					var ds=this.series[j-1];
-					var y=parseFloat(cells[j].innerHTML);
-					yMin=Math.min(yMin,y);
-					yMax=Math.max(yMax,y);
-					var o={x:x, value:y};
-					var attrs=cells[j].attributes;
-					for(var k=0; k<attrs.length; k++){
-						var attr=attrs.item(k);
-						var bIgnore=false;
-						for (var l=0; l<ignore.length; l++){
-							if (attr.nodeName.toLowerCase()==ignore[l]){
-								bIgnore=true;
-								break;
-							}
-						}
-						if(!bIgnore) o[attr.nodeName]=attr.nodeValue;
-					}
-					ds.add(o);
-				}
-			}
-		}
-
-		//	fix the axes
-		if(!bRangeX){
-			this.properties.axes.x.range={min:xMin, max:xMax};
-		}
-		if(!bRangeY){
-			this.properties.axes.y.range={min:yMin, max:yMax};
-		}
-
-		//	where to plot the axes
-		if (table.getAttribute("axisAt")){
-			var p=table.getAttribute("axisAt");
-			if (p.indexOf(",")>-1) p=p.split(",");
-			else p=p.split(" ");
-			
-			//	x axis
-			if (!isNaN(parseFloat(p[0]))){
-				this.properties.axes.x.plotAt=parseFloat(p[0]);
-			} else if (p[0].toLowerCase()=="ymin"){
-				this.properties.axes.x.plotAt=this.properties.axes.y.range.min;
-			} else if (p[0].toLowerCase()=="ymax"){
-				this.properties.axes.x.plotAt=this.properties.axes.y.range.max;
-			}
-
-			// y axis
-			if (!isNaN(parseFloat(p[1]))){
-				this.properties.axes.y.plotAt=parseFloat(p[1]);
-			} else if (p[1].toLowerCase()=="xmin"){
-				this.properties.axes.y.plotAt=this.properties.axes.x.range.min;
-			} else if (p[1].toLowerCase()=="xmax"){
-				this.properties.axes.y.plotAt=this.properties.axes.x.range.max;
-			}
-		} else {
-			this.properties.axes.x.plotAt=this.properties.axes.y.range.min;
-			this.properties.axes.y.plotAt=this.properties.axes.x.range.min;
-		}
-
-		//	table values should be populated, now pop it off.
-		this.domNode.removeChild(table);
-
-		//	get the width and the height.
-//		this.properties.width=dojo.html.getInnerWidth(this.domNode);
-//		this.properties.height=dojo.html.getInnerHeight(this.domNode);
-
-		// ok, lets create the chart itself.
-		dojo.svg.g.suspend();		
-		if(this.vectorNode) this.destroy();
-		this.vectorNode=document.createElementNS(dojo.svg.xmlns.svg, "svg");
-		this.vectorNode.setAttribute("width", this.properties.width);
-		this.vectorNode.setAttribute("height", this.properties.height);
-
-		//	set up the clip path for the plot area.
-		var defs = document.createElementNS(dojo.svg.xmlns.svg, "defs");
-		var clip = document.createElementNS(dojo.svg.xmlns.svg, "clipPath");
-		clip.setAttribute("id","plotClip"+this.widgetId);
-		var rect = document.createElementNS(dojo.svg.xmlns.svg, "rect");		
-		rect.setAttribute("x", this.properties.padding.left);
-		rect.setAttribute("y", this.properties.padding.top);
-		rect.setAttribute("width", this.properties.width-this.properties.padding.left-this.properties.padding.right);
-		rect.setAttribute("height", this.properties.height-this.properties.padding.bottom-this.properties.padding.bottom);
-		clip.appendChild(rect);
-		defs.appendChild(clip);
-		this.vectorNode.appendChild(defs);
-
-		//	the plot background.
-		this.plotArea = document.createElementNS(dojo.svg.xmlns.svg, "g");
-		this.vectorNode.appendChild(this.plotArea);
-		var rect = document.createElementNS(dojo.svg.xmlns.svg, "rect");		
-		rect.setAttribute("x", this.properties.padding.left);
-		rect.setAttribute("y", this.properties.padding.top);
-		rect.setAttribute("width", this.properties.width-this.properties.padding.left-this.properties.padding.right);
-		rect.setAttribute("height", this.properties.height-this.properties.padding.bottom-this.properties.padding.bottom);
-		rect.setAttribute("fill", "#fff");
-		this.plotArea.appendChild(rect);
-
-		//	data group
-		this.dataGroup = document.createElementNS(dojo.svg.xmlns.svg, "g");
-		this.dataGroup.setAttribute("style","clip-path:url(#plotClip"+this.widgetId+");");
-		this.plotArea.appendChild(this.dataGroup);
-
-		//	axis group
-		this.axisGroup = document.createElementNS(dojo.svg.xmlns.svg, "g");
-		this.plotArea.appendChild(this.axisGroup);
-
-		//	x axis
-		var stroke=1;
-		var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
-		var y=dojo.widget.svg.Chart.Plotter.getY(this.properties.axes.x.plotAt, this);
-		line.setAttribute("y1", y);
-		line.setAttribute("y2", y);
-		line.setAttribute("x1",this.properties.padding.left-stroke);
-		line.setAttribute("x2",this.properties.width-this.properties.padding.right);
-		line.setAttribute("style","stroke:#000;stroke-width:"+stroke+";");
-		this.axisGroup.appendChild(line);
-		
-		//	x axis units.
-		//	(min and max)
-		var textSize=10;
-		var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-		text.setAttribute("x", this.properties.padding.left);
-		text.setAttribute("y", this.properties.height-this.properties.padding.bottom+textSize+2);
-		text.setAttribute("style", "text-anchor:middle;font-size:"+textSize+"px;fill:#000;");
-		text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.x.range.min)),2));
-		this.axisGroup.appendChild(text);
-		
-		var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-		text.setAttribute("x", this.properties.width-this.properties.padding.right-(textSize/2));
-		text.setAttribute("y", this.properties.height-this.properties.padding.bottom+textSize+2);
-		text.setAttribute("style", "text-anchor:middle;font-size:"+textSize+"px;fill:#000;");
-		text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.x.range.max)),2));
-		this.axisGroup.appendChild(text);	
-		
-		//	y axis
-		var line=document.createElementNS(dojo.svg.xmlns.svg, "line");
-		var x=dojo.widget.svg.Chart.Plotter.getX(this.properties.axes.y.plotAt, this);
-		line.setAttribute("x1", x);
-		line.setAttribute("x2", x);
-		line.setAttribute("y1", this.properties.padding.top);
-		line.setAttribute("y2", this.properties.height-this.properties.padding.bottom);
-		line.setAttribute("style", "stroke:#000;stroke-width:"+stroke+";");
-		this.axisGroup.appendChild(line);
-
-		//	y axis units
-		var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-		text.setAttribute("x", this.properties.padding.left-4);
-		text.setAttribute("y", this.properties.height-this.properties.padding.bottom);
-		text.setAttribute("style", "text-anchor:end;font-size:"+textSize+"px;fill:#000;");
-		text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.y.range.min)),2));
-		this.axisGroup.appendChild(text);
-		
-		var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-		text.setAttribute("x", this.properties.padding.left-4);
-		text.setAttribute("y", this.properties.padding.top+(textSize/2));
-		text.setAttribute("style", "text-anchor:end;font-size:"+textSize+"px;fill:#000;");
-		text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.y.range.max)),2));
-		this.axisGroup.appendChild(text);	
-
-		this.domNode.appendChild(this.vectorNode);
-		dojo.svg.g.resume();
-
-		//	this is last.
-		this.assignColors();
-		this._isInitialized=true;
-	},
-	destroy:function(){
-		while(this.domNode.childNodes.length>0){
-			this.domNode.removeChild(this.domNode.childNodes.item(0));
-		}
-		this.vectorNode=this.plotArea=this.dataGroup=this.axisGroup=null;
-	},
-	render:function(){
-		dojo.svg.g.suspend();
-		
-		if (this.dataGroup){
-			while(this.dataGroup.childNodes.length>0){
-				this.dataGroup.removeChild(this.dataGroup.childNodes.item(0));
-			}
-		} else {
-			this.initialize();
-		}
-
-		//	the remove/append is an attempt to streamline the rendering, it's totally optional
-//		var p=this.dataGroup.parentNode;
-//		p.removeChild(this.dataGroup);
-		for(var i=0; i<this.series.length; i++){
-			dojo.widget.svg.Chart.Plotter.plot(this.series[i], this);
-		}
-//		p.appendChild(this.dataGroup);
-		
-		dojo.svg.g.resume();
-	}
-});
-
-dojo.widget.svg.Chart.PlotTypes = {
-	Bar:"bar",
-	Line:"line",
-	Scatter:"scatter",
-	Bubble:"bubble"
-};
-
-dojo.widget.svg.Chart.Plotter=new function(){
-	var _this=this;
-	var plotters = {};
-	var types=dojo.widget.svg.Chart.PlotTypes;
-	
-	this.getX=function(value, chart){
-		var v=parseFloat(value);
-		var min=chart.properties.axes.x.range.min;
-		var max=chart.properties.axes.x.range.max;
-		var ofst=0-min;
-		min+=ofst; max+=ofst; v+=ofst;
-
-		var xmin=chart.properties.padding.left;
-		var xmax=chart.properties.width-chart.properties.padding.right;
-		var x=(v*((xmax-xmin)/max))+xmin;
-		return x;
-	};
-	this.getY=function(value, chart){
-		var v=parseFloat(value);
-		var max=chart.properties.axes.y.range.max;
-		var min=chart.properties.axes.y.range.min;
-		var ofst=0;
-		if(min<0)ofst+=Math.abs(min);
-		min+=ofst; max+=ofst; v+=ofst;
-		
-		var ymin=chart.properties.height-chart.properties.padding.bottom;
-		var ymax=chart.properties.padding.top;
-		var y=(((ymin-ymax)/(max-min))*(max-v))+ymax;
-		return y;
-	};
-
-	this.addPlotter=function(name, func){
-		plotters[name]=func;
-	};
-	this.plot=function(series, chart){
-		if (series.values.length==0) return;
-		if (series.plotType && plotters[series.plotType]){
-			return plotters[series.plotType](series, chart);
-		}
-		else if (chart.plotType && plotters[chart.plotType]){
-			return plotters[chart.plotType](series, chart);
-		}
-//		else {
-//			return plotters[types.Bar](series, chart);
-//		}
-	};
-
-	//	plotting
-	plotters[types.Bar]=function(series, chart){
-		var space=1;
-		var lastW = 0;
-		for (var i=0; i<series.values.length; i++){
-			var x=_this.getX(series.values[i].x, chart);
-			var w;
-			if (i==series.values.length-1){
-				w=lastW;
-			} else{
-				w=_this.getX(series.values[i+1].x, chart)-x-space;
-				lastW=w;
-			}
-			x-=(w/2);
-
-			var yA=_this.getY(chart.properties.axes.x.plotAt, chart);
-			var y=_this.getY(series.values[i].value, chart);
-			var h=Math.abs(yA-y);
-			if (parseFloat(series.values[i].value)<chart.properties.axes.x.plotAt){
-				var oy=yA;
-				yA=y;
-				y=oy;
-			}
-
-			var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect");
-			bar.setAttribute("fill", series.color);
-			bar.setAttribute("title", series.label + ": " + series.values[i].value);
-			bar.setAttribute("stroke-width", "0");
-			bar.setAttribute("x", x);
-			bar.setAttribute("y", y);
-			bar.setAttribute("width", w);
-			bar.setAttribute("height", h);
-			bar.setAttribute("fill-opacity", "0.9");
-			chart.dataGroup.appendChild(bar);
-		}
-	};
-	plotters[types.Line]=function(series, chart){
-		var tension=3;
-		var line = document.createElementNS(dojo.svg.xmlns.svg, "path");
-		line.setAttribute("fill", "none");
-		line.setAttribute("stroke", series.color);
-		line.setAttribute("stroke-width", "1.5");
-		line.setAttribute("stroke-opacity", "0.85");
-		line.setAttribute("title", series.label);
-		chart.dataGroup.appendChild(line);
-
-		var path = [];
-		for (var i=0; i<series.values.length; i++){
-			var x = _this.getX(series.values[i].x, chart)
-			var y = _this.getY(series.values[i].value, chart);
-
-			var dx = chart.properties.padding.left+1;
-			var dy = chart.properties.height-chart.properties.padding.bottom;
-			if (i>0){
-				dx=x-_this.getX(series.values[i-1].x, chart);
-				dy=_this.getY(series.values[i-1].value, chart);
-			}
-			
-			if (i==0) path.push("M");
-			else {
-				path.push("C");
-				var cx=x-(tension-1)*(dx/tension);
-				path.push(cx+","+dy);
-				cx=x-(dx/tension);
-				path.push(cx+","+y);
-			}
-			path.push(x+","+y);
-		}
-		line.setAttribute("d", path.join(" "));
-	};
-	plotters[types.Scatter]=function(series, chart){
-		var r=7;
-		for (var i=0; i<series.values.length; i++){
-			var x=_this.getX(series.values[i].x, chart);
-			var y=_this.getY(series.values[i].value, chart);
-			var point = document.createElementNS(dojo.svg.xmlns.svg, "path");
-			point.setAttribute("fill", series.color);
-			point.setAttribute("stroke-width", "0");
-			point.setAttribute("title", series.label + ": " + series.values[i].value);
-			point.setAttribute("d",
-				"M " + x + "," + (y-r) + " " +
-				"Q " + x + "," + y + " " + (x+r) + "," + y + " " +
-				"Q " + x + "," + y + " " + x + "," + (y+r) + " " +
-				"Q " + x + "," + y + " " + (x-r) + "," + y + " " +
-				"Q " + x + "," + y + " " + x + "," + (y-r) + " " +
-				"Z"
-			);
-			chart.dataGroup.appendChild(point);
-		}
-	};
-	plotters[types.Bubble]=function(series, chart){
-		//	added param for series[n].value: size
-		var minR=1;
-		
-		//	do this off the x axis?
-		var min=chart.properties.axes.x.range.min;
-		var max=chart.properties.axes.x.range.max;
-		var ofst=0-min;
-		min+=ofst; max+=ofst; v+=ofst;
-		var xmin=chart.properties.padding.left;
-		var xmax=chart.properties.width-chart.properties.padding.right;
-		var factor=(max-min)/(xmax-xmin)*25;
-		
-		for (var i=0; i<series.values.length; i++){
-			var size = series.values[i].size;
-			if (isNaN(parseFloat(size))) size=minR;
-			var point=document.createElementNS(dojo.svg.xmlns.svg, "circle");
-			point.setAttribute("stroke-width", 0);
-			point.setAttribute("fill", series.color);
-			point.setAttribute("fill-opacity", "0.8");
-			point.setAttribute("r", (parseFloat(size)*factor)/2);
-			point.setAttribute("cx", _this.getX(series.values[i].x, chart));
-			point.setAttribute("cy", _this.getY(series.values[i].value, chart));
-			point.setAttribute("title", series.label + ": " + series.values[i].value + " (" + size + ")");
-			chart.dataGroup.appendChild(point);
-		}
-	};
-}();
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/svg/HslColorPicker.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/svg/HslColorPicker.js
deleted file mode 100644
index 45f2b96..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/svg/HslColorPicker.js
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.widget.svg.HslColorPicker");
-
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.HslColorPicker");
-dojo.require("dojo.math");
-dojo.require("dojo.svg");
-dojo.require("dojo.graphics.color");
-
-dojo.widget.svg.HslColorPicker=function(){
-	dojo.widget.HslColorPicker.call(this);
-	dojo.widget.HtmlWidget.call(this);
-	dojo.debug("warning: the HslColorPicker is not a finished widget, and is not yet ready for general use");
-	this.hue = "0";
-	this.saturation = "0";
-	this.light = "0";
-	this.storedColor = "#0054aa";
-	var _this = this;
-	this.filterObject = {
-	}
-};
-dojo.inherits(dojo.widget.svg.HslColorPicker, dojo.widget.HtmlWidget);
-dojo.lang.extend(dojo.widget.svg.HslColorPicker, {
-	//	widget props
-	templatePath: dojo.uri.dojoUri("src/widget/templates/HslColorPicker.svg"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/HslColorPicker.css"),
-	fillInTemplate: function() {
-		this.height = "131px";
-		this.svgDoc = this.hueNode.ownerDocument;
-		this.leftGradientColorNode = this.hueNode.ownerDocument.getElementById("leftGradientColor");
-		this.rightGradientColorNode = this.hueNode.ownerDocument.getElementById("rightGradientColor");
-		this.hueNode.setAttributeNS(dojo.dom.xmlns.xlink, "href", dojo.uri.dojoUri("src/widget/templates/images/hue.png"));
-		var hsl = dojo.graphics.color.hex2hsl(this.storedColor);
-		this.hue = hsl[0];
-		this.saturation = hsl[1];
-		this.light = hsl[2];
-		this.setSaturationStopColors();
-		//this.setHueSlider();
-		//this.setSaturationLightSlider();
-	},
-	setSaturationStopColors: function() {
-		//this.leftGradientStopColor = "rgb(" + dojo.graphics.color.hsl2rgb(this.hue, 20, 50).join(", ") + ")";
-		//this.rightGradientStopColor = "rgb(" + dojo.graphics.color.hsl2rgb(this.hue, 100, 50).join(", ") + ")";
-		//this.leftGradientStopColor = dojo.graphics.color.hsl2hex(this.hue, 20, 50);
-		//this.rightGradientStopColor = dojo.graphics.color.hsl2hex(this.hue, 100, 50);
-		this.leftGradientStopColor = dojo.graphics.color.rgb2hex(this.hsl2rgb(this.hue, 0, 50));
-		this.rightGradientStopColor = dojo.graphics.color.rgb2hex(this.hsl2rgb(this.hue, 100, 50));
-		this.leftGradientColorNode.setAttributeNS(null,'stop-color',this.leftGradientStopColor);
-		this.rightGradientColorNode.setAttributeNS(null,'stop-color',this.rightGradientStopColor);
-	},
-	setHue: function(hue) {
-		this.hue = hue;
-	},
-	setHueSlider: function() {
-		// FIXME: need to add some padding around the picker so you can see the slider at the top and bottom of the picker)
-		this.hueSliderNode.setAttribute("y", parseInt((this.hue/360) * parseInt(this.height) - 2) + "px" );
-	},
-	setSaturationLight: function(saturation, light) {
-		this.saturation = saturation;
-		this.light = light;
-	},
-	setSaturationLightSlider: function() {
-		// TODO
-	},
-	onHueClick: function(evt) {
-		// get the position that was clicked on the element
-		// FIXME: handle document scrolling, offset
-		var yPosition = parseInt(evt.clientY) - parseInt(evt.target.getAttribute("y"));
-		this.setHue( 360 - parseInt(yPosition*(360/parseInt(this.height))) );
-		this.setSaturationStopColors();
-		this.setStoredColor(dojo.graphics.color.hsl2hex(this.hue, this.saturation, this.light));
-	},
-	onHueDrag: function(evt) {
-		// TODO
-	},
-	onSaturationLightClick: function(evt) {
-		// get the position that was clicked on the element
-		// FIXME: handle document scrolling, offset
-		var xPosition = parseInt(evt.clientX) - parseInt(evt.target.getAttribute("y"));
-		var yPosition = parseInt(evt.clientY) - parseInt(evt.target.getAttribute("y"));
-		saturation = parseInt(parseInt(xPosition)*(101/106));
-		light = parseInt(parseInt(yPosition)*(101/106));
-		this.setSaturationLight(saturation, light);
-		this.setStoredColor(dojo.graphics.color.hsl2hex(this.hue, this.saturation, this.light));
-	},
-	onSaturationLightDrag: function(evt) {
-		// TODO
-	},
-	getStoredColor: function() {
-		return this.storedColor;
-	},
-	setStoredColor: function(rgbHexColor) {
-		this.storedColor = rgbHexColor;
-		dojo.event.topic.publish("/" + this.widgetId + "/setStoredColor", this.filterObject);
-	},
-	hsl2rgb: function(hue, saturation, light)
-	{
-		// hsl2rgb in dojo.graphics.color did not behave hte way I expected, so 
-		// I'm using some old code I wrote until I figure out what the issue is
-		// first, check to see if saturation = 0
-		function rgb(q1,q2,hue) {
-			if (hue>360) hue=hue-360;
-			if (hue<0) hue=hue+360;
-			if (hue<60) return (q1+(q2-q1)*hue/60);
-			else if (hue<180) return(q2);
-			else if (hue<240) return(q1+(q2-q1)*(240-hue)/60);
-			else return(q1);
-		}
-		this.rgb = rgb
-	
-		if (saturation==0) {
-			return [Math.round(light*255/100), Math.round(light*255/100), Math.round(light*255/100)];
-		} else {
-			light = light/100;
-			saturation = saturation/100;
-			// check to see if light > 0.5
-			if ((light)<0.5) {
-				var temp2 = (light)*(1.0+saturation)
-			} else {
-				var temp2 = (light+saturation-(light*saturation))
-			}
-			temp1 = 2.0*light - temp2;
-			var rgbcolor = [];
-			rgbcolor[0] = Math.round(rgb(temp1,temp2,parseInt(hue)+120)*255);
-			rgbcolor[1] = Math.round(rgb(temp1,temp2,hue)*255);
-			rgbcolor[2] = Math.round(rgb(temp1,temp2,parseInt(hue)-120)*255);
-			return rgbcolor;
-		}
-	}
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/AccordionPanel.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/AccordionPanel.css
deleted file mode 100644
index a6a367d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/AccordionPanel.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.AccordionPanel {
-	border: 0px; 
-	margin: 0px; 
-	padding: 0px;
-}
-
-.AccordionPanelLabel {
-	cursor: pointer;
-	color: white;
-	background-color: #272937;
-	font-family: Verdana, Helvetica, sans-serif;
-	font-size: 0.8em;
-	border: 0px; 
-	margin: 0px; 
-	padding: 0px;
-}
-
-.AccordionPanelInitialContent {
-	cursor: pointer;
-	background-color: #fffed0;
-	border: 0px; 
-	margin: 0px; 
-	padding: 0px;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/AccordionPanel.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/AccordionPanel.html
deleted file mode 100644
index 455c2f8..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/AccordionPanel.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<div class="AccordionPanel">
-	<div dojoAttachPoint="labelNode" 
-		dojoOnClick="toggleOpen" 
-		class="AccordionPanelLabel"><span>
-		</span></div>
-	<div dojoAttachPoint="initialContentNode"
-		class="AccordionPanelInitialContent"><span>
-			
-		</span></div>
-	<div dojoAttachPoint="contentNode"
-		class="AccordtionPanelContent"><span>
-			
-		</span></div>
-</div>
-<!--
-<table cellpadding="0" cellspacing="0" border="0">
-	<tr>
-		<td dojoAttachPoint="labelNode" 
-			dojoOnClick="toggleOpen"
-			style="margin: 0px; padding: 0px; cursor: pointer;">
-			label
-		</td>
-	</tr>
-	<tr>
-		<td dojoAttachPoint="initialContentNode">
-			initial content
-		</td>
-	</tr>
-	<tr>
-		<td>
-			<div dojoAttachPoint="contentNode"></div>
-		</td>
-	</tr>
-</table>
--->
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HslColorPicker.svg b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HslColorPicker.svg
deleted file mode 100644
index ce22964..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HslColorPicker.svg
+++ /dev/null
@@ -1,30 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"
-	xmlns:xlink="http://www.w3.org/1999/xlink"
-	version="1.1" baseProfile="full" width="170" height="131" xmlns:html="http://www.w3.org/1999/xhtml">
-	<defs>
-	<linearGradient id="colorGradient" dojoAttachPoint="colorGradientNode" x1="0" x2="131" y1="0" y2="0" gradientUnits="userSpaceOnUse">
-		<stop id="leftGradientColor" dojoAttachPoint="leftGradientColorNode" offset="0%" stop-color="#828282"/>
-		<stop id="rightGradientColor" dojoAttachPoint="rightGradientColorNode" offset="100%" stop-color="#053fff"/>
-	</linearGradient>
-	<linearGradient id="verticalGradient" x1="0" x2="0" y1="0" y2="131" gradientUnits="userSpaceOnUse">
-		<stop offset="0%" style="stop-color:#000000;"/>
-		<stop offset="50%" style="stop-color:#000000;stop-opacity:0;"/>
-		<stop offset="50%" style="stop-color:#ffffff;stop-opacity:0;"/>
-		<stop offset="100%" style="stop-color:#ffffff;"/>
-	</linearGradient>
-	<linearGradient id="sliderGradient">
-		<stop offset="0%" style="stop-color:#000000;"/>
-		<stop offset="15%" style="stop-color:#ffffff;"/>
-		<stop offset="30%" style="stop-color:#000000;"/>
-		<stop offset="45%" style="stop-color:#ffffff;"/>
-		<stop offset="60%" style="stop-color:#000000;"/>
-		<stop offset="75%" style="stop-color:#ffffff;"/>
-		<stop offset="90%" style="stop-color:#000000;"/>
-	</linearGradient>
-</defs>
-	<rect x="0" y="0" width="131px" height="131px" fill="url(#colorGradient)"/>
-	<rect x="0" y="0" width="131px" height="131px" style="fill:url(#verticalGradient);"/>
-	<rect id="saturationLightSlider" dojoAttachPoint="saturationLightSliderNode" x="100" y="100" width="5px" height="5px" style="stroke:url(#sliderGradient);stroke-width:1px;fill-opacity:0;"/>
-	<image xlink:href="images/hue.png" dojoAttachPoint="hueNode" x="140px" y="0px" width="21px" height="131px" dojoAttachEvent="onclick: onHueClick;"/>
-	<rect dojoAttachPoint="hueSliderNode" x="139px" y="40px" width="24px" height="4px" style="stroke-opacity:1;fill-opacity:0;stroke:black;"/>
-</svg>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButton2Template.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButton2Template.css
deleted file mode 100644
index 94f0f53..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButton2Template.css
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ---- button --- */

-.dojoButton {

-	padding: 0 0 0 0;

-	font-size: 8pt;

-	white-space: nowrap;

-	cursor: pointer;

-}

-

-.dojoButton .dojoButtonContents {

-	padding: 2px 2px 2px 2px;

-	text-align: center;		/* if icon and label are split across two lines, center icon */

-	color: white;

-}

-

-.dojoButtonLeftPart .dojoButtonContents {

-	padding-right: 8px;

-}

-

-.dojoButtonDisabled {

-	cursor: url("images/no.gif"), default;

-}

-

-

-.dojoButtonContents img {

-	vertical-align: middle;	/* if icon and label are on same line, center them */

-}

-

-/* -------- colors ------------ */

-

-.dojoButtonHover .dojoButtonContents {

-}

-

-.dojoButtonDepressed .dojoButtonContents {

-	font-style: italic;

-	color: yellow;

-}

-

-.dojoButtonDisabled .dojoButtonContents {

-	color: #eeeeee;

-}

-

-

-/* ---------- drop down button specific ---------- */

-

-/* border between label and arrow (for drop down buttons */

-.dojoButton .border {

-	width: 1px;

-	background: gray;

-}

-

-/* button arrow */

-.dojoButton .downArrow {

-	padding-left: 10px;

-	text-align: center;

-}

-

-.dojoButton.disabled .downArrow {

-	cursor : default;

-}
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButton2Template.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButton2Template.html
deleted file mode 100644
index 6310c1b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButton2Template.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div class="dojoButton" style="position:relative;" dojoAttachEvent="onMouseOver; onMouseOut; onMouseDown; onMouseUp; onClick:buttonClick;">

-  <div class="dojoButtonContents" align=center dojoAttachPoint="containerNode" style="position:absolute;z-index:2;"></div>

-  <img dojoAttachPoint="leftImage" style="position:absolute;left:0px;">

-  <img dojoAttachPoint="centerImage" style="position:absolute;z-index:1;">

-  <img dojoAttachPoint="rightImage" style="position:absolute;top:0px;right:0px;">

-</div>

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButtonTemplate.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButtonTemplate.css
deleted file mode 100644
index b92e975..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButtonTemplate.css
+++ /dev/null
@@ -1,83 +0,0 @@
-/* ---- button --- */
-.dojoButton {
-	padding: 0 0 0 0;
-	margin: 0 0 0 0;
-	font-size: 8pt;
-	white-space: nowrap;
-	cursor: pointer;
-}
-
-.dojoButton.dojoDisabled {
-	cursor: default;
-}
-
-.dojoButton a {
-	color: black;
-	text-decoration: none;
-}
-.dojoButton.dojoDisabled a {
-	color: #999;
-}
-
-.dojoButton .label {
-	padding-right: 5px;
-	text-align: center;		/* if icon and label are split across two lines, center icon */
-}
-
-.dojoButton img {
-	vertical-align: middle;	/* if icon and label are on same line, center them */
-}
-
-.dojoButton td, .dojoButtonWrapper td {
-	margin: 0 0 0 0;
-	padding: 0 0 0 0;
-	position: relative;
-}
-.dojoButton table {
-	padding: 0 0 0 0;
-	cell-spacing: 0px;
-	cell-padding: 0px;
-}
-
-/* -------- colors ------------ */
-.dojoButtonNoHover  {
-}
-
-.dojoButtonHover {
-}
-
-.dojoButton.disabled, .dojoButton.disabled * {
-	color : #999;
-	cursor : default;
-	background-color : #f4f4f4;
-}
-
-/** ----- container for the button and stub to attach the menu below it ----- **/
-.dojoButtonWrapper {
-	border-spacing: 0px;
-	cell-spacing: 0px;
-	cell-padding: 0px;
-	margin: 0 0 0 0;
-	padding: 0 0 0 0;
-	display: inline;
-	margin-right: 10px;
-	text-decoration: none;
-}
-
-/* ---------- drop down button specific ---------- */
-
-/* border between label and arrow (for drop down buttons */
-.dojoButton .border {
-	width: 1px;
-	background: gray;
-}
-
-/* button arrow */
-.dojoButton .downArrow {
-	padding-left: 10px;
-	text-align: center;
-}
-
-.dojoButton.disabled .downArrow {
-	cursor : default;
-}
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButtonTemplate.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButtonTemplate.html
deleted file mode 100644
index 6dc7aa4..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlButtonTemplate.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<button style="padding-top: 2px; padding-bottom: 2px;" class='dojoButton dojoButtonNoHover' resizeHandle='true'
-	dojoAttachEvent='onMouseOver; onMouseOut; onClick;'
-	dojoAttachPoint='containerNode'>${this.label}</button>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlCiviCrmDatePicker.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlCiviCrmDatePicker.html
deleted file mode 100644
index ba60d39..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlCiviCrmDatePicker.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<table cellpadding="0" cellspacing="0" border="0" width="400">
-	<tr>
-		<td id="dateHolderTd" width="200">
-		</td>
-		<td id="timeHolderTd" width="200">
-		</td>
-	</tr>
-	<tr style="display: none;" id="formItemsTr">
-		<td id="formItemsTd">&nbsp;</td>
-		<td>&nbsp;</td>
-	</tr>
-</table>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlComboBox.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlComboBox.css
deleted file mode 100644
index 2921a03..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlComboBox.css
+++ /dev/null
@@ -1,39 +0,0 @@
-input.comboBoxInput {
-	font-size: 0.8em;
-	border: 0px;
-}
-
-.comboBoxOptions {
-	font-family: Verdana, Helvetica, Garamond, sans-serif;
-	font-size: 0.7em;
-	background-color: white;
-	border: 1px solid #afafaf;
-	position: absolute;
-	z-index: 1000; 
-	overflow: auto;
-	-moz-opacity: 0;
-	cursor: default;
-}
-
-table.dojoComboBox {
-	border: 1px solid #afafaf;
-}
-
-.cbItem {
-	padding-left: 2px;
-	padding-top: 2px;
-	margin: 0px;
-}
-
-.cbItemEven {
-	background-color: #f4f4f4;
-}
-
-.cbItemOdd {
-	background-color: white;
-}
-
-.cbItemHighlight {
-	background-color: #63709A;
-	color: white;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlComboBox.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlComboBox.html
deleted file mode 100644
index cad92ee..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlComboBox.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<div style="position: relative; z-index: 100;">
-	<input type="hidden" name="" value="" 
-		dojoAttachPoint="comboBoxValue">
-	<input type="hidden" name="" value="" 
-		dojoAttachPoint="comboBoxSelectionValue">
-	<table class="dojoComboBox"
-		cellpadding="0"
-		cellmargin="0"
-		border="0"
-		dojoAttachPoint="cbTableNode"
-		dojoAttachEvent="onClick: killEvent;">
-		<tr valign="top">
-			<td width=100%>
-				<input type="text" class="comboBoxInput"
-					dojoAttachEvent="keyDown: onKeyDown; keyUp: onKeyUp;"
-					dojoAttachPoint="textInputNode"
-					style="width: 100%;">
-			</td>
-			<td>
-				<img border="0" 
-					hspace="0"
-					vspace="0"
-					dojoAttachPoint="downArrowNode"
-					dojoAttachEvent="onMouseUp: handleArrowClick;"
-					src="${dojoRoot}/src/widget/templates/images/combo_box_arrow.png">
-			</td>
-		</tr>
-	</table>
-	<div dojoAttachPoint="optionsListWrapper" style="position:relative;">
-		<div class="comboBoxOptions" dojoAttachPoint="optionsListNode"
-			dojoAttachEvent="onClick: selectOption" style="display:none;">
-		</div>
-	</div>
-</div>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlComboButton2Template.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlComboButton2Template.html
deleted file mode 100644
index 353306c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlComboButton2Template.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<div class="dojoButton" style="position:relative;top:0px;left:0px; text-align:none;">

-

-	<div dojoAttachPoint="leftPart" class="dojoButtonLeftPart" style="position:absolute;left:0px;top:0px;"

-		dojoAttachEvent="onMouseOver:leftOver; onMouseOut:leftOut; onMouseUp:leftUp; onClick:leftClick;">

-		<div class="dojoButtonContents" dojoAttachPoint="containerNode" style="position:absolute;top:0px;right:0px;z-index:2;"></div>

-		<img dojoAttachPoint="leftImage" style="position:absolute;left:0px;top:0px;">

-		<img dojoAttachPoint="centerImage" style="position:absolute;right:0px;top:0px;z-index:1;">

-	</div>

-

-	<div dojoAttachPoint="rightPart" class="dojoButtonRightPart" style="position:absolute;top:0px;right:0px;"

-		dojoAttachEvent="onMouseOver:rightOver; onMouseOut:rightOut; onMouseUp:rightUp; onClick:rightClick;">

-		<img dojoAttachPoint="arrowBackgroundImage" style="position:absolute;top:0px;left:0px;z-index:1;">

-		<img src="${dojoRoot}/src/widget/templates/images/whiteDownArrow.gif"

-		  		style="z-index:2;position:absolute;left:3px;top:50%;">

-		<img dojoAttachPoint="rightImage" style="position:absolute;top:0px;right:0px;">

-	</div>

-

-</div>

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlContextMenuTemplate.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlContextMenuTemplate.html
deleted file mode 100644
index 8c85c54..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlContextMenuTemplate.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<ul class="dojoContextMenu" 
-	dojoAttachPoint="containerNode">
-</ul>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDatePicker.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDatePicker.css
deleted file mode 100644
index 871ab21..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDatePicker.css
+++ /dev/null
@@ -1,77 +0,0 @@
-.datePickerContainer {
-	margin:0.5em 2em 0.5em 0;
-	width:10em;
-	float:left;
-}
-
-.previousMonth {
-	background-color:#bbbbbb;
-}
-
-.currentMonth {
-	background-color:#8f8f8f;
-}
-
-.nextMonth {
-	background-color:#eeeeee;
-}
-
-.currentDate {
-	text-decoration:underline;
-	font-style:italic;
-}
-
-.selectedItem {
-	background-color:#3a3a3a;
-	color:#ffffff;
-}
-
-.calendarContainer {
-	border-collapse:collapse;
-	border-spacing:0;
-	border-bottom:1px solid #e6e6e6;
-}
-
-.calendarContainer thead{
-	border-bottom:1px solid #e6e6e6;
-}
-
-.calendarContainer td {
-	font-size:0.85em;
-	padding:0.15em;
-	text-align:center;
-	cursor:pointer;cursor:hand;
-}
-
-.monthLabel {
-	font-size:0.9em;
-	font-weight:400;
-	margin:0;
-	text-align:center;
-}
-
-.monthLabel .month {
-	padding:0 0.4em 0 0.4em;
-}
-
-.yearLabel {
-	font-size:0.9em;
-	font-weight:400;
-	margin:0.25em 0 0 0;
-	text-align:right;
-	color:#a3a3a3;
-}
-
-.yearLabel .selectedYear {
-	color:#000;
-	padding:0 0.2em;
-}
-
-.nextYear, .previousYear {
-	cursor:pointer;cursor:hand;
-}
-
-.incrementControl {
-	cursor:pointer;cursor:hand;
-	width:1em;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDatePicker.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDatePicker.html
deleted file mode 100644
index 96a135a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDatePicker.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<div class="datePickerContainer" dojoAttachPoint="datePickerContainerNode">
-	<h3 class="monthLabel">
-	<!--
-	<span 
-		dojoAttachPoint="decreaseWeekNode" 
-		dojoAttachEvent="onClick: onIncrementWeek;" 
-		class="incrementControl">
-		<img src="${dojoRoot}/src/widget/templates/decrementWeek.gif" alt="&uarr;" />
-	</span>
-	-->
-	<span 
-		dojoAttachPoint="decreaseMonthNode" 
-		dojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl">
-		<img src="${dojoRoot}/src/widget/templates/decrementMonth.gif" 
-			alt="&uarr;" dojoAttachPoint="decrementMonthImageNode">
-	</span>
-	<span dojoAttachPoint="monthLabelNode" class="month">July</span>
-	<span 
-		dojoAttachPoint="increaseMonthNode" 
-		dojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl">
-		<img src="${dojoRoot}/src/widget/templates/incrementMonth.gif" 
-			alt="&darr;"  dojoAttachPoint="incrementMonthImageNode">
-	</span>
-	<!--
-		<span dojoAttachPoint="increaseWeekNode" 
-			dojoAttachEvent="onClick: onIncrementWeek;" 
-			class="incrementControl">
-			<img src="${dojoRoot}/src/widget/templates/incrementWeek.gif" 
-			alt="&darr;" />
-		</span>
-	-->
-	</h3>
-	<table class="calendarContainer">
-		<thead>
-			<tr>
-				<td>Su</td>
-				<td>Mo</td>
-				<td>Tu</td>
-				<td>We</td>
-				<td>Th</td>
-				<td>Fr</td>
-				<td>Sa</td>
-			</tr>
-		</thead>
-		<tbody dojoAttachPoint="calendarDatesContainerNode" 
-			dojoAttachEvent="onClick: onSetDate;">
-			<tr dojoAttachPoint="calendarRow0">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-			<tr dojoAttachPoint="calendarRow1">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-			<tr dojoAttachPoint="calendarRow2">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-			<tr dojoAttachPoint="calendarRow3">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-			<tr dojoAttachPoint="calendarRow4">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-			<tr dojoAttachPoint="calendarRow5">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-		</tbody>
-	</table>
-	<h3 class="yearLabel">
-		<span dojoAttachPoint="previousYearLabelNode"
-			dojoAttachEvent="onClick: onIncrementYear;" class="previousYear"></span>
-		<span class="selectedYear" dojoAttachPoint="currentYearLabelNode"></span>
-		<span dojoAttachPoint="nextYearLabelNode" 
-			dojoAttachEvent="onClick: onIncrementYear;" class="nextYear"></span>
-	</h3>
-</div>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDialog.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDialog.html
deleted file mode 100644
index fdfe8ed..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDialog.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<div class="dojoDialog">
-
-	<span dojoAttachPoint="tabStart" 
-		dojoOnFocus="trapTabs" 
-		dojoOnBlur="clearTrap" tabindex="0"></span>
-
-	<div dojoAttachPoint="containerNode"></div>
-
-	<span dojoAttachPoint="tabEnd" 
-		dojoOnFocus="trapTabs" 
-		dojoOnBlur="clearTrap" tabindex="0"></span>
-
-</div>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDropDownButtonTemplate.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDropDownButtonTemplate.html
deleted file mode 100644
index 2453e1a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlDropDownButtonTemplate.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<button dojoAttachPoint="button" class="dojoButton dojoButtonNoHover" dojoAttachEvent="onMouseOver: ; onMouseOut: ; onClick: ;">

-  <table dojoAttachPoint="table" style="margin:0 0 0 0;"><tr>

-    <td class="label" dojoAttachPoint="labelCell"></td>

-    <td class="border" dojoAttachPoint="borderCell"></td>

-    <td class="downArrow" dojoAttachPoint="arrowCell">

-      <img dojoAttachPoint="arrow">

-    </td>

-  </tr></table>

-</button>
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlFisheyeList.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlFisheyeList.css
deleted file mode 100644
index ca5ddde..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlFisheyeList.css
+++ /dev/null
@@ -1,27 +0,0 @@
-.dojoHtmlFisheyeListItemLabel {

-	font-family: Arial, Helvetica, sans-serif;

-	background-color: #eee;

-	border: 2px solid #666;

-	padding: 2px;

-	text-align: center;

-	position: absolute;

-	display: none;

-}

-

-.dojoHtmlFisheyeListItemLabel.selected {

-	display: block;

-}

-

-.dojoHtmlFisheyeListItemImage {

-	border: 0px;

-	position: absolute;

-}

-

-.dojoHtmlFisheyeListItem {

-	position: absolute;

-	z-index: 2;

-}

-

-.dojoHtmlFisheyeListBar {

-	position: relative;

-}

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlFloatingPane.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlFloatingPane.css
deleted file mode 100644
index 11d7192..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlFloatingPane.css
+++ /dev/null
@@ -1,94 +0,0 @@
-
-.dojoFloatingPane {
-	position: absolute;
-	border: 1px solid;
-	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-	overflow: visible;		/* so drop shadow is displayed */
-	z-index: 10;
-	background-color: ThreeDFace;
-}
-
-.dojoTitleBarIcon {
-	height: 22px;
-	width: 22px;
-	vertical-align: middle;
-	margin-right: 5px;
-	margin-left: 5px;
-}
-
-.dojoFloatingPaneActions{
-	float: right;
-	position: absolute;
-	right: 2px;
-	top: 2px;
-	vertical-align: middle;
-}
-
-.dojoFloatingPaneTitleBar {
-	vertical-align: top;
-	margin: 2px 4px 2px 2px;
-	color: CaptionText;
-	font: small-caption;
-}
-.dojoFloatingPaneActionItem {
-	vertical-align: middle;
-	margin-right: 1px;
-	height: 22px;
-	width: 22px;
-}
-
-.dojoFloatingPaneDragbar {
-	z-index: 10;
-	margin: 2px 2px 0px 2px;
-	background-color: ActiveCaption;
-	cursor: default;
-	overflow: hidden;
-	white-space: nowrap;
-	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-	vertical-align: middle;
-}
-
-/* background image for title bar */
-.dojoFloatingPaneDragbarBackground {
-	z-index: -1;
-}
-.dojoFloatingPaneDragbarForeground {
-	z-index: 1;
-}
-
-/* bar at bottom of window that holds resize handle */
-.dojoFloatingPaneResizebar {
-	z-index: 10;
-	height: 13px;
-	background-color: ThreeDFace;
-}
-
-.dojoFloatingPaneClient {
-	position: absolute;
-	z-index: 10;
-	border: 1px solid;
-	border-color: ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow;
-	margin: 2px;
-	background-color: ThreeDFace;
-	padding: 8px;
-	font-family: Verdana, Helvetica, Garamond, sans-serif;
-	font-size: 12px;
-	width: 100%;
-	overflow: auto;
-}
-
-.dojoDropShadow {
-	position: absolute;
-	top: 10px;
-	left: 10px;
-	z-index: -1;
-	background: gray;
-}
-
-.dojoCanvasShadow{
-	position: absolute;
-	top: 15px;
-	left: -15px;
-	z-index: -1;
-	background: transparent;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlInlineEditBox.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlInlineEditBox.css
deleted file mode 100644
index f4dde8b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlInlineEditBox.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.editLabel {
-	font-size : small;
-	padding : 0 5px;
-	display : none;
-}
-
-.editableRegion {
-	background-color : #ffc !important;
-	cursor : pointer;
-	_cursor : hand;
-}
-
-.editableRegion .editLabel {
-	display : inline;
-}
-
-.editableTextareaRegion .editLabel {
-	display : block;
-}
-
-.inlineEditBox {
-	/*background-color : #ffc;*/
-	display : inline;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlInlineEditBox.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlInlineEditBox.html
deleted file mode 100644
index 5d07833..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlInlineEditBox.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<div>
-	<form class="inlineEditBox" dojoAttachPoint="form" dojoAttachEvent="onSubmit:saveEdit; onReset:cancelEdit; onKeyUp: checkForValueChange;">
-		<input type="text" dojoAttachPoint="text" style="display: none;" />
-		<textarea dojoAttachPoint="textarea" style="display: none;"></textarea>
-		<input type="submit" value="Save" dojoAttachPoint="submitButton" />
-		<input type="reset" value="Cancel" dojoAttachPoint="cancelButton" />
-	</form>
-	<a href="javascript:;" dojoAttachPoint="edit" dojoAttachEvent="onClick:beginEdit" class="editLabel">Edit</a>
-</div>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlLayoutPane.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlLayoutPane.css
deleted file mode 100644
index 4d07bff..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlLayoutPane.css
+++ /dev/null
@@ -1,13 +0,0 @@
-.dojoLayoutPane {

-	display: block;

-	position: relative;

-}

-

-.dojoAlignNone, .dojoAlignLeft, .dojoAlignRight,

-.dojoAlignTop, .dojoAlignBottom {

-	overflow: hidden;

-}

-

-.dojoAlignClient {

-	overflow: auto;

-}

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlMenu2.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlMenu2.css
deleted file mode 100644
index 9c052ee..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlMenu2.css
+++ /dev/null
@@ -1,129 +0,0 @@
-
-.dojoPopupMenu2 {
-	position: absolute;
-	border: 1px solid;
-	border-color: ThreeDLightShadow ThreeDDarkShadow ThreeDDarkShadow ThreeDLightShadow;
-}
-
-.dojoPopupMenu2Client {
-	border: 1px solid;
-	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-	background-color: ThreeDFace;
-	padding: 1px;
-}
-
-.dojoMenuItem2 {
-	position: relative;
-	white-space: nowrap;
-	font: menu;
-	color: WindowText;
-	margin: 0;
-}
-
-.dojoMenuItem2 span {
-	margin: 0;
-}
-
-.dojoMenuItem2Hover {
-	background-color: Highlight;
-	color: HighlightText;
-}
-
-.dojoMenuItem2Icon {
-	position: absolute;
-	background-position: center center;
-	background-repeat: no-repeat;
-	z-index: 1;
-}
-
-.dojoMenuItem2Label {
-	position: absolute;
-	vertical-align: middle;
-	z-index: 1;
-}
-
-.dojoMenuItem2Label span {
-	position: relative;
-	vertical-align: middle;
-	z-index: 2;
-}
-
-.dojoMenuItem2Label span span {
-	position: absolute;
-	color: ThreeDHighlight;
-	display: none;
-	left: 1px;
-	top: 1px;
-	z-index: -2;
-}
-
-.dojoMenuItem2Accel {
-	position: absolute;
-	vertical-align: middle;
-	z-index: 1;
-}
-
-.dojoMenuItem2Accel span {
-	position: relative;
-	vertical-align: middle;
-	z-index: 2;
-}
-
-.dojoMenuItem2Accel span span {
-	position: absolute;
-	color: ThreeDHighlight;
-	display: none;
-	left: 1px;
-	top: 1px;
-	z-index: -2;
-}
-
-.dojoMenuItem2Disabled .dojoMenuItem2Label span,
-.dojoMenuItem2Disabled .dojoMenuItem2Accel span {
-	color: ThreeDShadow;
-}
-
-.dojoMenuItem2Disabled .dojoMenuItem2Label span span,
-.dojoMenuItem2Disabled .dojoMenuItem2Accel span span {
-	color: ThreeDHighlight;
-	display: block;
-}
-
-.dojoMenuItem2Hover .dojoMenuItem2Label span span,
-.dojoMenuItem2Hover .dojoMenuItem2Accel span span {
-	display: none;
-}
-
-.dojoMenuItem2Submenu {
-	position: absolute;
-	background-position: center center;
-	background-repeat: no-repeat;
-}
-
-.dojoMenuItem2Target {
-	position: absolute;
-	z-index: 10;
-	font-size: 1px;
-	background-image: url('images/transparent.gif');
-	cursor: pointer;
-	_cursor: hand;
-}
-
-.dojoMenuSeparator2 {
-	font-size: 1px;
-	margin: 0;
-}
-
-.dojoMenuSeparator2Top {
-	height: 50%;
-	border-bottom: 1px solid ThreeDShadow;
-	margin: 0px 2px;
-	font-size: 1px;
-}
-
-.dojoMenuSeparator2Bottom {
-	height: 50%;
-	border-top: 1px solid ThreeDHighlight;
-	margin: 0px 2px;
-	font-size: 1px;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlMenuItemTemplate.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlMenuItemTemplate.html
deleted file mode 100644
index 36249b1..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlMenuItemTemplate.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<div dojoAttachPoint="labelNode" dojoAttachEvent="onClick">
-</div>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlResizableTextarea.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlResizableTextarea.css
deleted file mode 100644
index 8f0cf23..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlResizableTextarea.css
+++ /dev/null
@@ -1,15 +0,0 @@
-div.statusBar {
-	background-color: ThreeDFace;
-	height: 28px;
-	padding: 1px;
-	overflow: hidden;
-	font-size: 12px;
-}
-
-div.statusPanel {
-	background-color: ThreeDFace;
-	border: 1px solid;
-	border-color: ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow;
-	margin: 1px;
-	padding: 2px 6px;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlResizableTextarea.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlResizableTextarea.html
deleted file mode 100644
index 88827f7..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlResizableTextarea.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<div>
-	<div style="border: 2px solid black; width: 90%; height: 200px;"
-		dojoAttachPoint="rootLayoutNode">
-		<div dojoAttachPoint="textAreaContainerNode" 
-			style="border: 0px; margin: 0px; overflow: hidden;">
-		</div>
-		<div dojoAttachPoint="statusBarContainerNode" class="statusBar">
-			<div dojoAttachPoint="statusLabelNode" 
-				class="statusPanel"
-				style="padding-right: 0px; z-index: 1;">drag to resize</div>
-			<div dojoAttachPoint="resizeHandleNode"></div>
-		</div>
-	</div>
-</div>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlResizeHandle.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlResizeHandle.css
deleted file mode 100644
index 2a4d181..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlResizeHandle.css
+++ /dev/null
@@ -1,19 +0,0 @@
-.dojoHtmlResizeHandle {
-	position: absolute;
-	right: 2px;
-	bottom: 2px;
-	width: 13px;
-	height: 13px;
-	padding: 0px;
-	margin: 0px;
-	border: 0px;
-	z-index: 20;
-	background-color: ThreeDFace;
-	cursor: nw-resize;
-}
-
-.dojoHtmlResizeHandle img {
-	position: absolute;
-	top: 0px;
-	left: 0px;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSimpleDropdownButtons.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSimpleDropdownButtons.css
deleted file mode 100644
index e72afbd..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSimpleDropdownButtons.css
+++ /dev/null
@@ -1,100 +0,0 @@
-ul.dojoSimpleDropdownButtons {
-	margin : 0;
-	padding : 5px 0;
-}
-
-ul.dojoSimpleDropdownButtons li {
-	display : inline;
-	margin-right : 5px;
-	padding : 2px 0;
-}
-
-ul.dojoSimpleDropdownButtons li a {
-	padding : 2px 9px;
-	border : 2px outset #ccc;
-	border-right-width : 1px;
-	background : #f4f4f4;
-	color : #333;
-	text-decoration : none;
-}
-
-ul.dojoSimpleDropdownButtons li ul {
-	display : none;
-}
-
-ul.dojoSimpleDropdownButtons li a.disabled {
-	color : #999;
-	cursor : default;
-}
-
-ul.dojoSimpleDropdownButtons li .downArrow {
-	display : inline;
-	padding : 2px 4px;
-	border : 2px outset #ccc;
-	border-left : 0;
-	background : #f4f4f4 url(images/dropdownButtonsArrow.gif) no-repeat 4px 9px;
-	text-decoration : none;
-	color : black;
-	cursor : pointer;
-	_cursor : hand;
-}
-
-ul.dojoSimpleDropdownButtons li .downArrow.disabled {
-	background-image : url(images/dropdownButtonsArrow-disabled.gif);
-	cursor : default;
-}
-
-ul.dojoSimpleDropdownButtons li a:hover,
-ul.dojoSimpleDropdownButtons li span.downArrow:hover {
-	color : black;
-	background-color : #ddd;
-}
-
-ul.dojoSimpleDropdownButtons li .downArrow.pressed, ul.dojoSimpleDropdownButtons li .downArrow:focus {
-	border-style : inset;
-	background-position : 5px 10px;
-	padding : 2px 4px;
-}
-
-ul.dojoSimpleDropdownButtons li a.disabled:hover,
-ul.dojoSimpleDropdownButtons li span.downArrow.disabled:hover {
-	color : #999;
-	background-color : #f4f4f4;
-}
-
-ul.dojoSimpleDropdownButtons li a:focus {
-	padding : 3px 8px 1px 10px;
-	color : #333;
-	border-style : inset;
-}
-
-/* Menu
- ******************** */
-ul.dojoSimpleDropdownButtonsMenu {
-	position : absolute;
-	margin : 0;
-	_margin : -2px;
-	padding : 0;
-	display : none;
-	border : 1px solid #aaa;
-	background : #f4f4f4;
-	list-style : none;
-	z-index : 99;
-}
-
-ul.dojoSimpleDropdownButtonsMenu li {
-	_display : inline;
-}
-
-ul.dojoSimpleDropdownButtonsMenu a {
-	display : block;
-	padding : 2px 5px;
-	color : #333;
-	text-decoration : none;
-}
-
-ul.dojoSimpleDropdownButtonsMenu a:hover {
-	background : #ddd;
-	color : black;
-}
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSlideShow.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSlideShow.css
deleted file mode 100644
index 02e97cd..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSlideShow.css
+++ /dev/null
@@ -1,9 +0,0 @@
-.slideShowImg {
-	position: absolute;
-	left: 0px;
-	top: 0px; 
-	border: 2px solid #4d4d4d;
-	padding: 0px;
-	margin: 0px;
-}
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSlideShow.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSlideShow.html
deleted file mode 100644
index 889b36c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSlideShow.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<table cellpadding="0" cellspacing="0" border="0">
-	<tr>
-		<td dojoAttachPoint="controlsContainer">
-			<input type="button" value="pause" 
-				dojoAttachPoint="startStopButton"
-				dojoAttachEvent="onClick: togglePaused;">
-		</td>
-	</tr>
-	<tr>
-		<td>
-			<div style="position: relative; width: 800px; height: 600px;"
-				dojoAttachPoint="imagesContainer"
-				dojoAttachEvent="onClick: togglePaused;">
-				<img dojoAttachPoint="img1" class="slideShowImg" 
-					style="z-index: 1;"  />
-				<img dojoAttachPoint="img2" class="slideShowImg" 
-					style="z-index: 0;" />
-			</div>	
-		</td>
-	</tr>
-</table>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSplitPane.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSplitPane.css
deleted file mode 100644
index 7788901..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlSplitPane.css
+++ /dev/null
@@ -1,45 +0,0 @@
-.dojoHtmlSplitPane{
-	position: relative;
-	overflow: hidden;
-}
-
-.dojoHtmlSplitterPanePanel{
-	position: absolute;
-	background-color: ThreeDFace;
-	padding: 5px;
-	margin: 0;
-}
-
-.dojoHtmlSplitPaneSizerH,
-.dojoHtmlSplitPaneSizerV {
-	font-size: 1px;
-	cursor: move;
-	cursor: w-resize;
-	background-color: ThreeDFace;
-	border: 1px solid;
-	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-	margin: 0;
-}
-
-.dojoHtmlSplitPaneSizerV {
-
-	cursor: n-resize;
-}
-
-.dojoHtmlSplitPaneVirtualSizerH,
-.dojoHtmlSplitPaneVirtualSizerV {
-
-	font-size: 1px;
-	cursor: move;
-	cursor: w-resize;
-	background-color: ThreeDShadow;
-	-moz-opacity: 0.5;
-	opacity: 0.5;
-	filter: Alpha(Opacity=50);
-	margin: 0;
-}
-
-.dojoHtmlSplitPaneVirtualSizerV {
-
-	cursor: n-resize;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTabPane.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTabPane.css
deleted file mode 100644
index e5d1ded..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTabPane.css
+++ /dev/null
@@ -1,69 +0,0 @@
-.dojoTabPane {

-	overflow: hidden;	/* workaround firefox bug */

-}

-

-.dojoTabPanel {

-	padding : 10px;

-	border : 1px solid #765;

-	margin-top : -1px;

-	margin-bottom : 10px;

-	overflow : auto;

-}

-

-.tabs {

-	margin : 0;

-	padding : 0;

-	list-style : none;

-}

-

-.tabs li {

-	float : left;

-	padding-left : 9px;

-	border-bottom : 1px solid #765;

-	background : url(images/tab_left.gif) no-repeat left top;

-	cursor: pointer;

-}

-

-.tabs li span {

-	display : block;

-	padding : 4px 15px 4px 6px;

-	background : url(images/tab_right.gif) no-repeat right top;

-	color : #333;

-	font-size : 90%;

-	text-decoration : none;

-}

-

-.tabs li.current {

-	padding-bottom : 1px;

-	border-bottom : 0;

-	background-position : 0 -150px;

-}

-

-.tabs li.current span {

-	padding-bottom : 5px;

-	margin-bottom : -1px;

-	background-position : 100% -150px;

-}

-

-/* bottom tabs */

-.tabs.bottom {

-	border-top : 0;

-}

-

-.tabs.bottom li {

-	border-bottom : 0;

-	background : url(images/tab_left_r.gif) no-repeat left bottom;

-}

-

-.tabs.bottom li span {

-	background : url(images/tab_right_r.gif) no-repeat right bottom;

-}

-

-.tabs.bottom li.current {

-	margin-top : -1px;

-	background-image : url(images/tab_left_r_curr.gif);

-}

-

-.tabs.bottom li.current span {

-	background-image : url(images/tab_right_r_curr.gif);

-}

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTabs.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTabs.css
deleted file mode 100644
index 1261781..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTabs.css
+++ /dev/null
@@ -1,81 +0,0 @@
-.dojoTabPanelContainer {

-	width : 100%;

-	height : 20em;

-	padding : 10px;

-	border : 1px solid #765;

-	clear : both;

-	margin-top : -1px;

-	margin-bottom : 10px;

-	overflow : auto;

-	float : left;

-	box-sizing: border-box;

-	-moz-box-sizing: border-box;

-}

-

-.dojoTabPanelContainer :first-child {

-	margin-top : 0;

-}

-

-.tabs {

-	margin : 0;

-	padding : 0;

-	list-style : none;

-	_border : 1px solid white;

-}

-

-.tabs li {

-	float : left;

-	padding-left : 9px;

-	border-bottom : 1px solid #765;

-	background : url(images/tab_left.gif) no-repeat left top;

-}

-

-.tabs li a {

-	display : block;

-	padding : 4px 15px 4px 6px;

-	background : url(images/tab_right.gif) no-repeat right top;

-	color : #333;

-	font-size : 90%;

-	text-decoration : none;

-}

-

-.tabs li.current {

-	padding-bottom : 1px;

-	border-bottom : 0;

-	background-position : 0 -150px;

-}

-

-.tabs li.current a {

-	padding-bottom : 5px;

-	margin-bottom : -1px;

-	background-position : 100% -150px;

-}

-

-/* bottom tabs */

-.tabs.bottom {

-	_border-top : 0;

-}

-

-.tabs.bottom li {

-	border-bottom : 0;

-	background : url(images/tab_left_r.gif) no-repeat left bottom;

-}

-

-.tabs.bottom li a {

-	background : url(images/tab_right_r.gif) no-repeat right bottom;

-}

-

-.tabs.bottom li.current {

-	margin-top : -1px;

-	background-image : url(images/tab_left_r_curr.gif);

-}

-

-.tabs.bottom li.current a {

-	background-image : url(images/tab_right_r_curr.gif);

-}

-

-#tabsHere {

-	overflow : auto;

-	float : none;

-	margin : 0;

-}

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTaskBar.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTaskBar.css
deleted file mode 100644
index 259dbc9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTaskBar.css
+++ /dev/null
@@ -1,27 +0,0 @@
-.dojoTaskBarItem {

-	background-color: ThreeDFace;

-	border: outset 2px;

-	display: inline;

-	margin-right: 5px;

-	cursor: pointer;

-	height: 35px;

-	width: 100px;

-	font-size: 10pt;

-	white-space: nowrap;

-	text-align: center;

-}

-

-.dojoTaskBarItem img {

-	vertical-align: middle;

-	margin-right: 5px;

-	margin-left: 5px;	

-	height: 32px;

-	width: 32px;

-}

-

-.dojoTaskBarItem a {

-	 color: black;

-	text-decoration: none;

-}

-

-

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTaskBarItemTemplate.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTaskBarItemTemplate.html
deleted file mode 100644
index ced4b32..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTaskBarItemTemplate.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<div class="dojoTaskBarItem" dojoAttachEvent="onClick">

-</div>
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTimePicker.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTimePicker.css
deleted file mode 100644
index 428db07..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTimePicker.css
+++ /dev/null
@@ -1,37 +0,0 @@
-.timePickerContainer {
-	margin:1.75em 0 0.5em 0;
-	width:10em;
-	float:left;
-}
-
-.timeContainer {
-	border-collapse:collapse;
-	border-spacing:0;
-}
-
-.timeContainer thead td{
-	border-bottom:1px solid #e6e6e6;
-	padding:0 0.4em 0.2em 0.4em;
-}
-
-.timeContainer td {
-	font-size:0.9em;
-	padding:0 0.25em 0 0.25em;
-	text-align:left;
-	cursor:pointer;cursor:hand;
-}
-
-.timeContainer td.minutesHeading {
-	border-left:1px solid #e6e6e6;
-	border-right:1px solid #e6e6e6;	
-}
-
-.timeContainer .minutes {
-	border-left:1px solid #e6e6e6;
-	border-right:1px solid #e6e6e6;
-}
-
-.selectedItem {
-	background-color:#3a3a3a;
-	color:#ffffff;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTimePicker.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTimePicker.html
deleted file mode 100644
index b092b0e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTimePicker.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<div class="timePickerContainer" dojoAttachPoint="timePickerContainerNode">
-	<table class="timeContainer" cellspacing="0" >
-		<thead>
-			<tr>
-				<td dojoAttachEvent="onClick: onSetSelectedHour;">Hour</td>
-				<td class="minutesHeading">Minute</td>
-				<td dojoAttachEvent="onClick: onSetSelectedHour;">&nbsp;</td>
-			</tr>
-		</thead>
-		<tbody>
-			<tr>
-				<td valign="top">
-					<table>
-						<tbody dojoAttachPoint="hourContainerNode"  
-							dojoAttachEvent="onClick: onSetSelectedHour;">
-							<tr>
-								<td>12</td>
-								<td>6</td>
-							</tr>
-							<tr>
-								<td>1</td>
-								<td>7</td>
-							</tr>
-							<tr>
-								<td>2</td>
-								<td>8</td>
-							</tr>
-							<tr>
-								<td>3</td>
-								<td>9</td>
-							</tr>
-							<tr>
-								<td>4</td>
-								<td>10</td>
-							</tr>
-							<tr>
-								<td>5</td>
-								<td>11</td>
-							</tr>
-						</tbody>
-					</table>
-				</td>
-				<td valign="top" class="minutes">
-					<table>
-						<tbody dojoAttachPoint="minuteContainerNode" 
-							dojoAttachEvent="onClick: onSetSelectedMinute;">
-							<tr>
-								<td>00</td>
-								<td>30</td>
-							</tr>
-							<tr>
-								<td>05</td>
-								<td>35</td>
-							</tr>
-							<tr>
-								<td>10</td>
-								<td>40</td>
-							</tr>
-							<tr>
-								<td>15</td>
-								<td>45</td>
-							</tr>
-							<tr>
-								<td>20</td>
-								<td>50</td>
-							</tr>
-							<tr>
-								<td>25</td>
-								<td>55</td>
-							</tr>
-						</tbody>
-					</table>
-				</td>
-				<td valign="top">
-					<table>
-						<tbody dojoAttachPoint="amPmContainerNode" 
-							dojoAttachEvent="onClick: onSetSelectedAmPm;">
-							<tr>
-								<td>AM</td>
-							</tr>
-							<tr>
-								<td>PM</td>
-							</tr>
-						</tbody>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td></td>
-				<td>
-					<div dojoAttachPoint="anyTimeContainerNode" 
-						dojoAttachEvent="onClick: onSetSelectedAnyTime;" 
-						class="anyTimeContainer">any</div>
-				</td>
-				<td></td>
-			</tr>
-		</tbody>
-	</table>
-</div>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlToolbar.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlToolbar.css
deleted file mode 100644
index b5fe8d5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlToolbar.css
+++ /dev/null
@@ -1,54 +0,0 @@
-.toolbarContainer {
-	border-bottom : 0;
-	background-color : #def;
-	color : ButtonText;
-	font : Menu;
-	background-image: url(images/toolbar-bg.gif);
-}
-
-.toolbar {
-	padding : 2px 4px;
-	min-height : 26px;
-	_height : 26px;
-}
-
-.toolbarItem {
-	float : left;
-	padding : 1px 2px;
-	margin : 0 2px 1px 0;
-	cursor : pointer;
-}
-
-.toolbarItem.selected, .toolbarItem.down {
-	margin : 1px 1px 0 1px;
-	padding : 0px 1px;
-	border : 1px solid #bbf;
-	background-color : #fafaff;
-}
-
-.toolbarButton img {
-	vertical-align : bottom;
-}
-
-.toolbarButton span {
-	line-height : 16px;
-	vertical-align : middle;
-}
-
-.toolbarButton.hover {
-	padding : 0px 1px;
-	border : 1px solid #99c;
-}
-
-.toolbarItem.disabled {
-	opacity : 0.3;
-	filter : alpha(opacity=30);
-	cursor : default;
-}
-
-.toolbarSeparator {
-	cursor : default;
-}
-
-.toolbarFlexibleSpace {
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTooltipTemplate.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTooltipTemplate.css
deleted file mode 100644
index e937679..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTooltipTemplate.css
+++ /dev/null
@@ -1,10 +0,0 @@
-.dojoTooltip {

-	border: solid black 1px;

-	background: beige;

-	color: black;

-	position: absolute;

-	max-width: 200px;

-	font-size: small;

-	padding: 2px 2px 2px 2px;

-	z-index: 10;

-}
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTooltipTemplate.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTooltipTemplate.html
deleted file mode 100644
index c44cb84..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/HtmlTooltipTemplate.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<div class='dojoTooltip' style="display:none" dojoAttachPoint="containerNode">

-</div>
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Menu.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Menu.css
deleted file mode 100644
index 1419f6d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Menu.css
+++ /dev/null
@@ -1,60 +0,0 @@
-.dojoMenu {
-	border:1px solid #000000;
-	list-style-type:none;
-	margin:0;
-	padding:0;
-	padding-bottom: 1px;
-	background-color:#f4f4f4;
-	font-size: 8pt;
-}
-
-.dojoMenuSeparator {
-	list-style-type:none;
-	margin:0;
-	padding:1px 0;
-	border-bottom:1px solid #000000;
-	line-height:1px;
-	height:1px;
-}
-
-li:hover.dojoMenuSeparator {
-	background-color:#e5e5e5;
-	cursor:default;
-}
-
-
-
-
-.dojoContextMenu {
-	position: absolute;
-	display: none;
-	border: 2px solid;
-	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-	list-style-type: none;
-	margin: 0;
-	padding: 1px;
-	background-color: ThreeDFace;
-	font-size: 8pt;
-}
-
-.dojoMenuItem {
-	white-space: nowrap;
-	padding: 2px;
-	font: menu;
-	color: WindowText;
-}
-
-.dojoMenuItem a {
-	text-decoration: none;
-	color: WindowText;
-	font: inherit;
-}
-
-.dojoMenuItemHover {
-	padding: 2px;
-	background-color: blue;
-	cursor: pointer;
-	_cursor: hand;
-	background-color: Highlight;
-	color: HighlightText;
-}
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/PopUpButton.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/PopUpButton.css
deleted file mode 100644
index 780ea43..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/PopUpButton.css
+++ /dev/null
@@ -1,35 +0,0 @@
-.PopUpButton {
-	padding : 2px 6px 2px 9px;
-	border : 1px outset #ccc;
-	background : #f4f4f4;
-	color : #333;
-	text-decoration : none;
-}
-
-.PopUpButton .downArrow {
-	margin-left: 0.5em;
-	margin-bottom: 2px;
-}
-
-.downArrow.disabled {
-	background-image : url(images/dropdownButtonsArrow-disabled.gif);
-	cursor : default;
-}
-
-ul.dropdownButtons li a:hover,
-ul.dropdownButtons li span.downArrow:hover {
-	color : black;
-	background-color : #ddd;
-}
-
-ul.dropdownButtons li .downArrow.pressed, ul.dropdownButtons li .downArrow:focus {
-	border-style : inset;
-	background-position : 5px 10px;
-	padding : 2px 4px;
-}
-
-ul.dropdownButtons li a.disabled:hover,
-ul.dropdownButtons li span.downArrow.disabled:hover {
-	color : #999;
-	background-color : #f4f4f4;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Tree.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Tree.css
deleted file mode 100644
index 0af721d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Tree.css
+++ /dev/null
@@ -1,29 +0,0 @@
-.dojoTree {
-	font: caption;
-	font-size: 11px;
-	font-weight: normal;
-	overflow: auto;
-}
-
-.dojoTreeNodeLabel {
-	padding: 1px 2px;
-	color: WindowText;
-	cursor: default;
-}
-
-.dojoTreeNodeLabel:hover {
-	text-decoration: underline;
-}
-
-.dojoTreeNodeLabelSelected {
-	background-color: Highlight;
-	color: HighlightText;
-}
-
-.dojoTree div {
-	white-space: nowrap;
-}
-
-.dojoTree img {
-	vertical-align: middle;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Wizard.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Wizard.css
deleted file mode 100644
index ff12ef9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Wizard.css
+++ /dev/null
@@ -1,72 +0,0 @@
-.WizardContainer {
-	background: #EEEEEE;
-	border: #798EC5 1px solid;
-	padding: 2px;
-}
-
-.WizardTitle {
-	color: #003366;
-	padding: 8px 5px 15px 2px;
-	font-weight: bold;
-	font-size: x-small;
-	font-style: normal;
-	font-family: Verdana, Arial, Helvetica;
-	text-align: left;
-}
-
-.WizardText {
-	color: #000033;
-	font-weight: normal;
-	font-size: xx-small;
-	font-family: Verdana, Arial, Helvetica;
-	padding: 2 50; text-align: justify;
-}
-
-.WizardLightText {
-	color: #666666;
-	font-weight: normal;
-	font-size: xx-small;
-	font-family: verdana, arial, helvetica;
-	padding: 2px 50px;
-	text-align: justify;
-}
-
-.WizardButtonHolder {
-	text-align: right;
-	padding: 10px 5px;
-}
-
-.WizardButton {
-	color: #ffffff;
-	background: #798EC5;
-	font-size: xx-small;
-	font-family: verdana, arial, helvetica, sans-serif;
-	border-right: #000000 1px solid;
-	border-bottom: #000000 1px solid;
-	border-left: #666666 1px solid;
-	border-top: #666666 1px solid;
-	padding-right: 4px;
-	padding-left: 4px;
-	text-decoration: none; height: 18px;
-}
-
-.WizardButton:hover {
-	cursor: pointer;
-}
-
-.WizardButtonDisabled {
-	color: #eeeeee;
-	background-color: #999999;
-	font-size: xx-small;
-	FONT-FAMILY: verdana, arial, helvetica, sans-serif;
-	border-right: #000000 1px solid;
-	border-bottom: #000000 1px solid;
-	border-left: #798EC5 1px solid;
-	border-top: #798EC5 1px solid;
-	padding-right: 4px;
-	padding-left: 4px;
-	text-decoration: none;
-	height: 18px;
-}
-
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Wizard.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Wizard.html
deleted file mode 100644
index a91474f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/Wizard.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<div class="WizardContainer" dojoAttachPoint="wizardNode">
-    <div class="WizardText" dojoAttachPoint="wizardPanelContainerNode">
-    </div>
-    <div class="WizardButtonHolder" dojoAttachPoint="wizardControlContainerNode">
-        <input class="WizardButton" type="button" dojoAttachPoint="previousButton"/>
-        <input class="WizardButton" type="button" dojoAttachPoint="nextButton"/>
-        <input class="WizardButton" type="button" dojoAttachPoint="cancelButton"/>
-        <input class="WizardButton" type="button" dojoAttachPoint="doneButton" style="display:none"/>
-    </div>
-</div>
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/-.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/-.gif
deleted file mode 100644
index eaed04a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/-.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/backcolor.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/backcolor.gif
deleted file mode 100644
index 90c0a5b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/backcolor.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/bold.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/bold.gif
deleted file mode 100644
index c6291f0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/bold.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/cancel.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/cancel.gif
deleted file mode 100644
index 7c5db93..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/cancel.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/copy.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/copy.gif
deleted file mode 100644
index 975740a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/copy.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/createlink.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/createlink.gif
deleted file mode 100644
index dad6feb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/createlink.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/cut.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/cut.gif
deleted file mode 100644
index 2066038..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/cut.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/delete.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/delete.gif
deleted file mode 100644
index 3c3df5b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/delete.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/forecolor.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/forecolor.gif
deleted file mode 100644
index 148e188..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/forecolor.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/hilitecolor.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/hilitecolor.gif
deleted file mode 100644
index 90c0a5b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/hilitecolor.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/indent.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/indent.gif
deleted file mode 100644
index a67139d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/indent.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/inserthorizontalrule.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/inserthorizontalrule.gif
deleted file mode 100644
index 9f6e5e8..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/inserthorizontalrule.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/insertimage.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/insertimage.gif
deleted file mode 100644
index f06067e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/insertimage.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/insertorderedlist.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/insertorderedlist.gif
deleted file mode 100644
index 427839d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/insertorderedlist.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/inserttable.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/inserttable.gif
deleted file mode 100644
index 027f7c8..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/inserttable.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/insertunorderedlist.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/insertunorderedlist.gif
deleted file mode 100644
index caedfd2..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/insertunorderedlist.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/italic.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/italic.gif
deleted file mode 100644
index 7bb67aa..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/italic.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifycenter.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifycenter.gif
deleted file mode 100644
index 9505db2..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifycenter.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifyfull.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifyfull.gif
deleted file mode 100644
index 29cf731..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifyfull.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifyleft.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifyleft.gif
deleted file mode 100644
index d0356d4..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifyleft.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifyright.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifyright.gif
deleted file mode 100644
index b9f7a96..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/justifyright.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/left_to_right.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/left_to_right.gif
deleted file mode 100644
index 9edfa63..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/left_to_right.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_bullet_indent.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_bullet_indent.gif
deleted file mode 100644
index 4dd2bfb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_bullet_indent.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_bullet_outdent.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_bullet_outdent.gif
deleted file mode 100644
index a5e7dac..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_bullet_outdent.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_num_indent.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_num_indent.gif
deleted file mode 100644
index aa63b62..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_num_indent.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_num_outdent.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_num_outdent.gif
deleted file mode 100644
index 09f4573..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/list_num_outdent.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/outdent.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/outdent.gif
deleted file mode 100644
index f320b3e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/outdent.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/paste.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/paste.gif
deleted file mode 100644
index 13e2324..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/paste.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/redo.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/redo.gif
deleted file mode 100644
index da4545d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/redo.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/removeformat.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/removeformat.gif
deleted file mode 100644
index 5d8ce2d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/removeformat.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/right_to_left.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/right_to_left.gif
deleted file mode 100644
index 231f183..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/right_to_left.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/save.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/save.gif
deleted file mode 100644
index 6ffb975..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/save.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/space.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/space.gif
deleted file mode 100644
index 5bfd67a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/space.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/strikethrough.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/strikethrough.gif
deleted file mode 100644
index 0e00304..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/strikethrough.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/subscript.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/subscript.gif
deleted file mode 100644
index effcf57..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/subscript.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/superscript.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/superscript.gif
deleted file mode 100644
index 1b6f401..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/superscript.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/underline.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/underline.gif
deleted file mode 100644
index ef8c19e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/underline.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/undo.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/undo.gif
deleted file mode 100644
index ef846e6..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/undo.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/wikiword.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/wikiword.gif
deleted file mode 100644
index 88e7324..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/buttons/wikiword.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/check_off.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/check_off.gif
deleted file mode 100644
index fd22f04..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/check_off.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/check_on.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/check_on.gif
deleted file mode 100644
index 6bd3f0a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/check_on.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/decrementMonth.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/decrementMonth.gif
deleted file mode 100644
index da5d869..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/decrementMonth.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/decrementWeek.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/decrementWeek.gif
deleted file mode 100644
index 1f2b8a0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/decrementWeek.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/grabCorner.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/grabCorner.gif
deleted file mode 100644
index f0ba3ee..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/grabCorner.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/EditorTree.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/EditorTree.css
deleted file mode 100644
index be51564..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/EditorTree.css
+++ /dev/null
@@ -1,30 +0,0 @@
-.dojoTree {

-	font: caption;

-	font-size: 11px;

-	font-weight: normal;

-	overflow: auto;

-}

-

-

-.dojoTreeNodeLabelTitle {

-	padding-left: 2px;

-	color: WindowText;

-}

-

-.dojoTreeNodeLabel {

-	cursor:hand;

-	cursor:pointer;

-}

-

-.dojoTreeNodeLabelSelected {

-	background-color: Highlight;

-	color: HighlightText;

-}

-

-.dojoTree div {

-	white-space: nowrap;

-}

-

-.dojoTree img, .dojoTreeNodeLabel img {

-	vertical-align: middle;

-}

diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/blank.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/blank.gif
deleted file mode 100644
index 15b86cf..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/blank.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/closed.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/closed.gif
deleted file mode 100644
index 7e911b9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/closed.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/document.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/document.gif
deleted file mode 100644
index 809a3f5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/document.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/minus.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/minus.gif
deleted file mode 100644
index fa32215..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/minus.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/open.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/open.gif
deleted file mode 100644
index 2cef26a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/open.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/plus.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/plus.gif
deleted file mode 100644
index 9917a54..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/plus.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_blank.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_blank.gif
deleted file mode 100644
index 3b4587e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_blank.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_child.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_child.gif
deleted file mode 100644
index ab5e1a4..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_child.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_expand_minus.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_expand_minus.gif
deleted file mode 100644
index d854212..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_expand_minus.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_expand_plus.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_expand_plus.gif
deleted file mode 100644
index ccc30eb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_expand_plus.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_c.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_c.gif
deleted file mode 100644
index 84d3d7e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_c.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_l.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_l.gif
deleted file mode 100644
index fd1ecf1..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_l.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_p.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_p.gif
deleted file mode 100644
index fd47bba..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_p.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_t.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_t.gif
deleted file mode 100644
index d1db9c5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_t.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_v.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_v.gif
deleted file mode 100644
index 307ec0e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_v.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_x.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_x.gif
deleted file mode 100644
index 666ec67..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_x.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_y.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_y.gif
deleted file mode 100644
index 64104f5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_y.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_z.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_z.gif
deleted file mode 100644
index c7aaba9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_grid_z.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_loading.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_loading.gif
deleted file mode 100644
index 7436a8d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/EditorTree/treenode_loading.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/blank.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/blank.gif
deleted file mode 100644
index e565824..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/blank.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/combo_box_arrow.png b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/combo_box_arrow.png
deleted file mode 100644
index 1de92b7..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/combo_box_arrow.png
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/dropdownButtonsArrow-disabled.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/dropdownButtonsArrow-disabled.gif
deleted file mode 100644
index 8ef6b2f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/dropdownButtonsArrow-disabled.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/dropdownButtonsArrow.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/dropdownButtonsArrow.gif
deleted file mode 100644
index ea60995..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/dropdownButtonsArrow.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneClose.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneClose.gif
deleted file mode 100644
index e044bdb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneClose.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneMaximize.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneMaximize.gif
deleted file mode 100644
index 1e3df4a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneMaximize.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneMinimize.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneMinimize.gif
deleted file mode 100644
index f9ae347..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneMinimize.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneRestore.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneRestore.gif
deleted file mode 100644
index f13dd64..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/floatingPaneRestore.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/hue.png b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/hue.png
deleted file mode 100644
index 046e767..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/hue.png
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/no.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/no.gif
deleted file mode 100644
index 3d16477..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/no.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/no.svg b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/no.svg
deleted file mode 100644
index 40e2426..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/no.svg
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
-"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<!-- Created with Sodipodi ("http://www.sodipodi.com/") --><svg height="400pt" id="svg548" sodipodi:docbase="/home/nicu/svg_gal/misc" sodipodi:docname="/home/nicu/svg_gal/misc/no.svg" sodipodi:version="0.32" width="400pt" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink">
-  <metadata>
-    <rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-      <cc:Work rdf:about="">
-        <dc:title>Clipart by Nicu Buculei - nosmoke</dc:title>
-        <dc:description></dc:description>
-        <dc:subject>
-          <rdf:Bag>
-            <rdf:li></rdf:li>
-            <rdf:li>roadsign</rdf:li>
-            <rdf:li>transportation</rdf:li>
-          </rdf:Bag>
-        </dc:subject>
-        <dc:publisher>
-          <cc:Agent rdf:about="http://www.openclipart.org">
-            <dc:title>Nicu Buculei</dc:title>
-          </cc:Agent>
-        </dc:publisher>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Nicu Buculei</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:rights>
-          <cc:Agent>
-            <dc:title>Nicu Buculei</dc:title>
-          </cc:Agent>
-        </dc:rights>
-        <dc:date></dc:date>
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-        <cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
-        <dc:language>en</dc:language>
-      </cc:Work>
-      <cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
-        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <defs id="defs550"/>
-  <sodipodi:namedview id="base" showgrid="true"/>
-  <path d="M 652.532959 241.644196 A 213.328094 219.971527 0 1 0 225.876770,241.644196 A 213.328 219.972 0 1 0 652.533 241.644 L 439.204865 241.644196 z" id="path566" sodipodi:cx="439.204865" sodipodi:cy="241.644196" sodipodi:rx="213.328094" sodipodi:ry="219.971527" sodipodi:type="arc" style="font-size:12;fill:none;fill-rule:evenodd;stroke:#bf0000;stroke-width:37.1167;" transform="matrix(1.069204,0.000000,0.000000,1.030201,-219.3637,2.298203)"/>
-  <path d="M 472.422058 280.766663 A 181.587234 183.801697 0 1 0 109.247604,280.766663 A 181.587 183.802 0 1 0 472.422 280.767 L 290.834839 280.766663 z" id="path575" sodipodi:cx="290.834839" sodipodi:cy="280.766663" sodipodi:rx="181.587234" sodipodi:ry="183.801697" sodipodi:type="arc" style="fill-rule:evenodd;stroke:none;fill:#ffffff;fill-opacity:1;stroke-opacity:1;stroke-width:1pt;stroke-linejoin:miter;stroke-linecap:butt;" transform="matrix(1.154471,0.000000,0.000000,1.136546,-84.78633,-67.86404)"/>
-  <path d="M 114.506 300.977 C 114.506 299.159 102.693 234.636 114.506 209.19 C 136.317 170.112 146.313 134.671 148.131 104.68 C 149.04 105.589 149.949 152.845 146.313 158.298 C 135.408 179.2 124.503 202.829 117.233 225.548 C 117.233 270.078 115.415 304.612 114.506 300.977 z " id="path564" sodipodi:nodetypes="cccccc" style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-opacity:1;stroke-width:1pt;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:0.577778;" transform="translate(3.063965,38.16154)"/>
-  <path d="M 109.248 76.2965 L 401.559 383.371 " id="path567" sodipodi:nodetypes="cc" style="font-size:12;fill:none;fill-rule:evenodd;stroke:#bf0000;stroke-width:37.5;" transform="translate(2.952785,14.76315)"/>
-</svg>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji-c.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji-c.gif
deleted file mode 100644
index 54c63fc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji-c.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji-l.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji-l.gif
deleted file mode 100644
index a56fa26..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji-l.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji-r.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji-r.gif
deleted file mode 100644
index ed06337..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji-r.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji_p_01.svg b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji_p_01.svg
deleted file mode 100644
index f84d87c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-blue_benji_p_01.svg
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
-"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<!-- Created with Inkscape (http://www.inkscape.org/) --><svg height="104.00000pt" id="svg1" inkscape:version="0.40" sodipodi:docbase="/home/bpcomp/Inkscape" sodipodi:docname="aqua-pill-blue.svg" sodipodi:version="0.32" width="308.00000pt" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink">
-  <metadata>
-    <rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-      <cc:Work rdf:about="">
-        <dc:title>pill-button-blue</dc:title>
-        <dc:description></dc:description>
-        <dc:subject>
-          <rdf:Bag>
-            <rdf:li>hash</rdf:li>
-            <rdf:li></rdf:li>
-            <rdf:li>webpage</rdf:li>
-            <rdf:li>shape</rdf:li>
-            <rdf:li>button</rdf:li>
-            <rdf:li>computer</rdf:li>
-            <rdf:li>buttons</rdf:li>
-          </rdf:Bag>
-        </dc:subject>
-        <dc:publisher>
-          <cc:Agent rdf:about="http://www.openclipart.org">
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:publisher>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:rights>
-          <cc:Agent>
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:rights>
-        <dc:date></dc:date>
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-        <cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
-        <dc:language>en</dc:language>
-      </cc:Work>
-      <cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
-        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <defs id="defs3">
-    <linearGradient id="linearGradient1759">
-      <stop id="stop1760" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:0.0000000;"/>
-      <stop id="stop1761" offset="1.0000000" style="stop-color:#ffffff;stop-opacity:1.0000000;"/>
-    </linearGradient>
-    <linearGradient id="linearGradient1755">
-      <stop id="stop1756" offset="0.0000000" style="stop-color:#0d56db;stop-opacity:1.0000000;"/>
-      <stop id="stop1757" offset="1.0000000" style="stop-color:#061176;stop-opacity:1.0000000;"/>
-    </linearGradient>
-    <linearGradient gradientTransform="matrix(1.800141,0.000000,0.000000,0.555512,-116.6050,-231.0506)" gradientUnits="userSpaceOnUse" id="linearGradient1686" inkscape:collect="always" x1="172.99106" x2="172.99106" xlink:href="#linearGradient1755" y1="432.17224" y2="633.04230"/>
-    <linearGradient gradientTransform="matrix(1.784730,0.000000,0.000000,0.560309,-116.6050,-231.0506)" gradientUnits="userSpaceOnUse" id="linearGradient1754" inkscape:collect="always" x1="175.19505" x2="175.19505" xlink:href="#linearGradient1755" y1="627.57422" y2="426.25912"/>
-    <linearGradient gradientTransform="scale(2.045893,0.488784)" gradientUnits="userSpaceOnUse" id="linearGradient1762" inkscape:collect="always" x1="91.269760" x2="91.269775" xlink:href="#linearGradient1759" y1="93.231247" y2="3.6385469"/>
-  </defs>
-  <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="173.73576" inkscape:cy="22.298666" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="914" inkscape:window-width="1276" inkscape:window-x="0" inkscape:window-y="46" inkscape:zoom="0.86831673" pagecolor="#ffffff"/>
-  <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
-    <g id="g5828">
-      <rect height="113.72585" id="rect1061" rx="57.582676" ry="56.143105" style="fill:url(#linearGradient1754);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient1686);stroke-width:6.2500000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" width="368.52905" x="8.6373997" y="7.9563966"/>
-      <rect height="80.668518" id="rect1758" rx="48.225491" ry="38.806480" style="fill:url(#linearGradient1762);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:6.2500000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;" width="343.50781" x="21.422380" y="15.607353"/>
-    </g>
-  </g>
-</svg>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji-c.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji-c.gif
deleted file mode 100644
index b33ced5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji-c.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji-l.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji-l.gif
deleted file mode 100644
index d9139ad..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji-l.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji-r.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji-r.gif
deleted file mode 100644
index 620b0f5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji-r.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji.svg b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji.svg
deleted file mode 100644
index 0848db3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-gray_benji.svg
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
-"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<!-- Created with Inkscape (http://www.inkscape.org/) --><svg height="104.00000pt" id="svg1" inkscape:version="0.40" sodipodi:docbase="/home/bpcomp/Inkscape" sodipodi:docname="aqua-pill-blue.svg" sodipodi:version="0.32" width="308.00000pt" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink">
-  <metadata>
-    <rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-      <cc:Work rdf:about="">
-        <dc:title>pill-button-blue</dc:title>
-        <dc:description></dc:description>
-        <dc:subject>
-          <rdf:Bag>
-            <rdf:li>hash</rdf:li>
-            <rdf:li></rdf:li>
-            <rdf:li>webpage</rdf:li>
-            <rdf:li>shape</rdf:li>
-            <rdf:li>button</rdf:li>
-            <rdf:li>computer</rdf:li>
-            <rdf:li>buttons</rdf:li>
-          </rdf:Bag>
-        </dc:subject>
-        <dc:publisher>
-          <cc:Agent rdf:about="http://www.openclipart.org">
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:publisher>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:rights>
-          <cc:Agent>
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:rights>
-        <dc:date></dc:date>
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-        <cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
-        <dc:language>en</dc:language>
-      </cc:Work>
-      <cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
-        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <defs id="defs3">
-    <linearGradient id="linearGradient1759">
-      <stop id="stop1760" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:0.0000000;"/>
-      <stop id="stop1761" offset="1.0000000" style="stop-color:#ffffff;stop-opacity:1.0000000;"/>
-    </linearGradient>
-    <linearGradient id="linearGradient1755">
-      <stop id="stop1756" offset="0.0000000" style="stop-color:gray;stop-opacity:1.0000000;"/>
-      <stop id="stop1757" offset="1.0000000" style="stop-color:gray;stop-opacity:1.0000000;"/>
-    </linearGradient>
-    <linearGradient gradientTransform="matrix(1.800141,0.000000,0.000000,0.555512,-116.6050,-231.0506)" gradientUnits="userSpaceOnUse" id="linearGradient1686" inkscape:collect="always" x1="172.99106" x2="172.99106" xlink:href="#linearGradient1755" y1="432.17224" y2="633.04230"/>
-    <linearGradient gradientTransform="matrix(1.784730,0.000000,0.000000,0.560309,-116.6050,-231.0506)" gradientUnits="userSpaceOnUse" id="linearGradient1754" inkscape:collect="always" x1="175.19505" x2="175.19505" xlink:href="#linearGradient1755" y1="627.57422" y2="426.25912"/>
-    <linearGradient gradientTransform="scale(2.045893,0.488784)" gradientUnits="userSpaceOnUse" id="linearGradient1762" inkscape:collect="always" x1="91.269760" x2="91.269775" xlink:href="#linearGradient1759" y1="93.231247" y2="3.6385469"/>
-  </defs>
-  <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="173.73576" inkscape:cy="22.298666" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="914" inkscape:window-width="1276" inkscape:window-x="0" inkscape:window-y="46" inkscape:zoom="0.86831673" pagecolor="#ffffff"/>
-  <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
-    <g id="g5828">
-      <rect height="113.72585" id="rect1061" rx="57.582676" ry="56.143105" style="fill:url(#linearGradient1754);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient1686);stroke-width:6.2500000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" width="368.52905" x="8.6373997" y="7.9563966"/>
-      <rect height="80.668518" id="rect1758" rx="48.225491" ry="38.806480" style="fill:url(#linearGradient1762);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:6.2500000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;" width="343.50781" x="21.422380" y="15.607353"/>
-    </g>
-  </g>
-</svg>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji-c.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji-c.gif
deleted file mode 100644
index 3e40bcb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji-c.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji-l.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji-l.gif
deleted file mode 100644
index b558e41..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji-l.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji-r.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji-r.gif
deleted file mode 100644
index 8daac10..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji-r.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji_01.svg b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji_01.svg
deleted file mode 100644
index 26a08f4..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-purple_benji_01.svg
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
-"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<!-- Created with Inkscape (http://www.inkscape.org/) --><svg height="104.00000pt" id="svg1" inkscape:version="0.40" sodipodi:docbase="/home/bpcomp/Inkscape" sodipodi:docname="aqua-pill-purple.svg" sodipodi:version="0.32" width="308.00000pt" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink">
-  <metadata>
-    <rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-      <cc:Work rdf:about="">
-        <dc:title>pill-button-purple</dc:title>
-        <dc:description></dc:description>
-        <dc:subject>
-          <rdf:Bag>
-            <rdf:li>webpage</rdf:li>
-            <rdf:li>shape</rdf:li>
-            <rdf:li>button</rdf:li>
-          </rdf:Bag>
-        </dc:subject>
-        <dc:publisher>
-          <cc:Agent rdf:about="http://www.openclipart.org">
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:publisher>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:rights>
-          <cc:Agent>
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:rights>
-        <dc:date></dc:date>
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-        <cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
-        <dc:language>en</dc:language>
-      </cc:Work>
-      <cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
-        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <defs id="defs3">
-    <linearGradient id="linearGradient1759">
-      <stop id="stop1760" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:0.0000000;"/>
-      <stop id="stop1761" offset="1.0000000" style="stop-color:#ffffff;stop-opacity:1.0000000;"/>
-    </linearGradient>
-    <linearGradient id="linearGradient1755">
-      <stop id="stop1756" offset="0.0000000" style="stop-color:#db0d87;stop-opacity:1.0000000;"/>
-      <stop id="stop1757" offset="1.0000000" style="stop-color:#76064b;stop-opacity:1.0000000;"/>
-    </linearGradient>
-    <linearGradient gradientTransform="matrix(1.800141,0.000000,0.000000,0.555512,-116.6050,-231.0506)" gradientUnits="userSpaceOnUse" id="linearGradient1686" inkscape:collect="always" x1="172.99106" x2="172.99106" xlink:href="#linearGradient1755" y1="432.17224" y2="633.04230"/>
-    <linearGradient gradientTransform="matrix(1.784730,0.000000,0.000000,0.560309,-116.6050,-231.0506)" gradientUnits="userSpaceOnUse" id="linearGradient1754" inkscape:collect="always" x1="175.19505" x2="175.19505" xlink:href="#linearGradient1755" y1="627.57422" y2="426.25912"/>
-    <linearGradient gradientTransform="scale(2.045893,0.488784)" gradientUnits="userSpaceOnUse" id="linearGradient1762" inkscape:collect="always" x1="91.269760" x2="91.269775" xlink:href="#linearGradient1759" y1="93.231247" y2="3.6385469"/>
-  </defs>
-  <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="173.73576" inkscape:cy="22.298666" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="914" inkscape:window-width="1276" inkscape:window-x="0" inkscape:window-y="46" inkscape:zoom="0.86831673" pagecolor="#ffffff"/>
-  <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
-    <g id="g5828">
-      <rect height="113.72585" id="rect1061" rx="57.582676" ry="56.143105" style="fill:url(#linearGradient1754);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient1686);stroke-width:6.2500000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" width="368.52905" x="8.6373997" y="7.9563966"/>
-      <rect height="80.668518" id="rect1758" rx="48.225491" ry="38.806480" style="fill:url(#linearGradient1762);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:6.2500000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;" width="343.50781" x="21.422380" y="15.607353"/>
-    </g>
-  </g>
-</svg>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_ben_01.svg b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_ben_01.svg
deleted file mode 100644
index a379850..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_ben_01.svg
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
-"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<!-- Created with Inkscape (http://www.inkscape.org/) --><svg height="104.00000pt" id="svg1" inkscape:version="0.40" sodipodi:docbase="/home/bpcomp/Inkscape" sodipodi:docname="aqua-pill-seagreen.svg" sodipodi:version="0.32" width="308.00000pt" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink">
-  <metadata>
-    <rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-      <cc:Work rdf:about="">
-        <dc:title>pill-button-seagreen</dc:title>
-        <dc:description></dc:description>
-        <dc:subject>
-          <rdf:Bag>
-            <rdf:li>webpage</rdf:li>
-            <rdf:li>shape</rdf:li>
-            <rdf:li>button</rdf:li>
-          </rdf:Bag>
-        </dc:subject>
-        <dc:publisher>
-          <cc:Agent rdf:about="http://www.openclipart.org">
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:publisher>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:rights>
-          <cc:Agent>
-            <dc:title>Benji Park</dc:title>
-          </cc:Agent>
-        </dc:rights>
-        <dc:date></dc:date>
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-        <cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
-        <dc:language>en</dc:language>
-      </cc:Work>
-      <cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
-        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <defs id="defs3">
-    <linearGradient id="linearGradient1759">
-      <stop id="stop1760" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:0.0000000;"/>
-      <stop id="stop1761" offset="1.0000000" style="stop-color:#ffffff;stop-opacity:1.0000000;"/>
-    </linearGradient>
-    <linearGradient id="linearGradient1755">
-      <stop id="stop1756" offset="0.0000000" style="stop-color:#0cdbb7;stop-opacity:1.0000000;"/>
-      <stop id="stop1757" offset="1.0000000" style="stop-color:#067662;stop-opacity:1.0000000;"/>
-    </linearGradient>
-    <linearGradient gradientTransform="matrix(1.800141,0.000000,0.000000,0.555512,-116.6050,-231.0506)" gradientUnits="userSpaceOnUse" id="linearGradient1686" inkscape:collect="always" x1="172.99106" x2="172.99106" xlink:href="#linearGradient1755" y1="432.17224" y2="633.04230"/>
-    <linearGradient gradientTransform="matrix(1.784730,0.000000,0.000000,0.560309,-116.6050,-231.0506)" gradientUnits="userSpaceOnUse" id="linearGradient1754" inkscape:collect="always" x1="175.19505" x2="175.19505" xlink:href="#linearGradient1755" y1="627.57422" y2="426.25912"/>
-    <linearGradient gradientTransform="scale(2.045893,0.488784)" gradientUnits="userSpaceOnUse" id="linearGradient1762" inkscape:collect="always" x1="91.269760" x2="91.269775" xlink:href="#linearGradient1759" y1="93.231247" y2="3.6385469"/>
-  </defs>
-  <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="173.73585" inkscape:cy="22.298651" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="914" inkscape:window-width="1276" inkscape:window-x="0" inkscape:window-y="46" inkscape:zoom="1.2279853" pagecolor="#ffffff"/>
-  <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
-    <g id="g5828">
-      <rect height="113.72585" id="rect1061" rx="57.582676" ry="56.143105" style="fill:url(#linearGradient1754);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient1686);stroke-width:6.2500000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" width="368.52905" x="8.6373997" y="7.9563966"/>
-      <rect height="80.668518" id="rect1758" rx="48.225491" ry="38.806480" style="fill:url(#linearGradient1762);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:6.2500000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;" width="343.50781" x="21.422380" y="15.607353"/>
-    </g>
-  </g>
-</svg>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_benji-c.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_benji-c.gif
deleted file mode 100644
index 865d178..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_benji-c.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_benji-l.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_benji-l.gif
deleted file mode 100644
index f413547..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_benji-l.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_benji-r.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_benji-r.gif
deleted file mode 100644
index 0558bb5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/pill-button-seagreen_benji-r.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowB.png b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowB.png
deleted file mode 100644
index ccd873a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowB.png
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowBL.png b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowBL.png
deleted file mode 100644
index 7fcab83..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowBL.png
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowBR.png b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowBR.png
deleted file mode 100644
index 83c31bc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowBR.png
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowL.png b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowL.png
deleted file mode 100644
index 0b15918..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowL.png
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowR.png b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowR.png
deleted file mode 100644
index d4545ac..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowR.png
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowTR..png b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowTR..png
deleted file mode 100644
index 6049a16..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowTR..png
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowUL.png b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowUL.png
deleted file mode 100644
index 80544b7..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowUL.png
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowUR.png b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowUR.png
deleted file mode 100644
index 10db9cb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/shadowUR.png
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/submenu_off.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/submenu_off.gif
deleted file mode 100644
index 8ffd1d6..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/submenu_off.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/submenu_on.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/submenu_on.gif
deleted file mode 100644
index 876933f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/submenu_on.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_left.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_left.gif
deleted file mode 100644
index 730d7e2..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_left.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_left_r.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_left_r.gif
deleted file mode 100644
index 29f4be5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_left_r.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_left_r_curr.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_left_r_curr.gif
deleted file mode 100644
index 2915d9b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_left_r_curr.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_right.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_right.gif
deleted file mode 100644
index c17a8de..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_right.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_right_r.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_right_r.gif
deleted file mode 100644
index 2666ae8..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_right_r.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_right_r_curr.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_right_r_curr.gif
deleted file mode 100644
index e93cf84..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/tab_right_r_curr.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/titlebar-bg.jpg b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/titlebar-bg.jpg
deleted file mode 100644
index d9d890e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/titlebar-bg.jpg
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/toolbar-bg.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/toolbar-bg.gif
deleted file mode 100644
index e88d31a..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/toolbar-bg.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/transparent.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/transparent.gif
deleted file mode 100644
index cb1dadb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_blank.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_blank.gif
deleted file mode 100644
index 3b4587e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_blank.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_expand_minus.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_expand_minus.gif
deleted file mode 100644
index d854212..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_expand_minus.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_expand_plus.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_expand_plus.gif
deleted file mode 100644
index ccc30eb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_expand_plus.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_c.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_c.gif
deleted file mode 100644
index 84d3d7e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_c.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_l.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_l.gif
deleted file mode 100644
index fd1ecf1..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_l.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_p.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_p.gif
deleted file mode 100644
index fd47bba..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_p.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_t.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_t.gif
deleted file mode 100644
index d1db9c5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_t.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_v.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_v.gif
deleted file mode 100644
index 307ec0e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_v.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_x.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_x.gif
deleted file mode 100644
index 666ec67..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_x.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_y.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_y.gif
deleted file mode 100644
index 64104f5..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_y.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_z.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_z.gif
deleted file mode 100644
index c7aaba9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_grid_z.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_node.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_node.gif
deleted file mode 100644
index 34f26d1..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/treenode_node.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/verticalbar.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/verticalbar.gif
deleted file mode 100644
index 746029b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/verticalbar.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/whiteDownArrow.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/whiteDownArrow.gif
deleted file mode 100644
index 20c1f62..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/images/whiteDownArrow.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/incrementMonth.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/incrementMonth.gif
deleted file mode 100644
index 42fe20d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/incrementMonth.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/incrementWeek.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/incrementWeek.gif
deleted file mode 100644
index 76f1b25..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/widget/templates/incrementWeek.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/Parse.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/Parse.js
deleted file mode 100644
index 7c6f91d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/Parse.js
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.xml.Parse");
-
-dojo.require("dojo.dom");
-
-//TODO: determine dependencies
-// currently has dependency on dojo.xml.DomUtil nodeTypes constants...
-
-/* generic method for taking a node and parsing it into an object
-
-TODO: WARNING: This comment is wrong!
-
-For example, the following xml fragment
-
-<foo bar="bar">
-	<baz xyzzy="xyzzy"/>
-</foo>
-
-can be described as:
-
-dojo.???.foo = {}
-dojo.???.foo.bar = {}
-dojo.???.foo.bar.value = "bar";
-dojo.???.foo.baz = {}
-dojo.???.foo.baz.xyzzy = {}
-dojo.???.foo.baz.xyzzy.value = "xyzzy"
-
-*/
-// using documentFragment nomenclature to generalize in case we don't want to require passing a collection of nodes with a single parent
-dojo.xml.Parse = function(){
-	this.parseFragment = function(documentFragment) {
-		// handle parent element
-		var parsedFragment = {};
-		// var tagName = dojo.xml.domUtil.getTagName(node);
-		var tagName = dojo.dom.getTagName(documentFragment);
-		// TODO: What if document fragment is just text... need to check for nodeType perhaps?
-		parsedFragment[tagName] = new Array(documentFragment.tagName);
-		var attributeSet = this.parseAttributes(documentFragment);
-		for(var attr in attributeSet){
-			if(!parsedFragment[attr]){
-				parsedFragment[attr] = [];
-			}
-			parsedFragment[attr][parsedFragment[attr].length] = attributeSet[attr];
-		}
-		var nodes = documentFragment.childNodes;
-		for(var childNode in nodes){
-			switch(nodes[childNode].nodeType){
-				case  dojo.dom.ELEMENT_NODE: // element nodes, call this function recursively
-					parsedFragment[tagName].push(this.parseElement(nodes[childNode]));
-					break;
-				case  dojo.dom.TEXT_NODE: // if a single text node is the child, treat it as an attribute
-					if(nodes.length == 1){
-						if(!parsedFragment[documentFragment.tagName]){
-							parsedFragment[tagName] = [];
-						}
-						parsedFragment[tagName].push({ value: nodes[0].nodeValue });
-					}
-					break;
-			}
-		}
-		
-		return parsedFragment;
-	}
-
-	this.parseElement = function(node, hasParentNodeSet, optimizeForDojoML, thisIdx){
-		// TODO: make this namespace aware
-		var parsedNodeSet = {};
-		var tagName = dojo.dom.getTagName(node);
-		parsedNodeSet[tagName] = [];
-		if((!optimizeForDojoML)||(tagName.substr(0,4).toLowerCase()=="dojo")){
-			var attributeSet = this.parseAttributes(node);
-			for(var attr in attributeSet){
-				if((!parsedNodeSet[tagName][attr])||(typeof parsedNodeSet[tagName][attr] != "array")){
-					parsedNodeSet[tagName][attr] = [];
-				}
-				parsedNodeSet[tagName][attr].push(attributeSet[attr]);
-			}
-	
-			// FIXME: we might want to make this optional or provide cloning instead of
-			// referencing, but for now, we include a node reference to allow
-			// instantiated components to figure out their "roots"
-			parsedNodeSet[tagName].nodeRef = node;
-			parsedNodeSet.tagName = tagName;
-			parsedNodeSet.index = thisIdx||0;
-		}
-	
-		var count = 0;
-		for(var i=0; i<node.childNodes.length; i++){
-			var tcn = node.childNodes.item(i);
-			switch(tcn.nodeType){
-				case  dojo.dom.ELEMENT_NODE: // element nodes, call this function recursively
-					count++;
-					var ctn = dojo.dom.getTagName(tcn);
-					if(!parsedNodeSet[ctn]){
-						parsedNodeSet[ctn] = [];
-					}
-					parsedNodeSet[ctn].push(this.parseElement(tcn, true, optimizeForDojoML, count));
-					if(	(tcn.childNodes.length == 1)&&
-						(tcn.childNodes.item(0).nodeType == dojo.dom.TEXT_NODE)){
-						parsedNodeSet[ctn][parsedNodeSet[ctn].length-1].value = tcn.childNodes.item(0).nodeValue;
-					}
-					break;
-				case  dojo.dom.TEXT_NODE: // if a single text node is the child, treat it as an attribute
-					if(node.childNodes.length == 1) {
-						parsedNodeSet[tagName].push({ value: node.childNodes.item(0).nodeValue });
-					}
-					break;
-				default: break;
-				/*
-				case  dojo.dom.ATTRIBUTE_NODE: // attribute node... not meaningful here
-					break;
-				case  dojo.dom.CDATA_SECTION_NODE: // cdata section... not sure if this would ever be meaningful... might be...
-					break;
-				case  dojo.dom.ENTITY_REFERENCE_NODE: // entity reference node... not meaningful here
-					break;
-				case  dojo.dom.ENTITY_NODE: // entity node... not sure if this would ever be meaningful
-					break;
-				case  dojo.dom.PROCESSING_INSTRUCTION_NODE: // processing instruction node... not meaningful here
-					break;
-				case  dojo.dom.COMMENT_NODE: // comment node... not not sure if this would ever be meaningful 
-					break;
-				case  dojo.dom.DOCUMENT_NODE: // document node... not sure if this would ever be meaningful
-					break;
-				case  dojo.dom.DOCUMENT_TYPE_NODE: // document type node... not meaningful here
-					break;
-				case  dojo.dom.DOCUMENT_FRAGMENT_NODE: // document fragment node... not meaningful here
-					break;
-				case  dojo.dom.NOTATION_NODE:// notation node... not meaningful here
-					break;
-				*/
-			}
-		}
-		//return (hasParentNodeSet) ? parsedNodeSet[node.tagName] : parsedNodeSet;
-		return parsedNodeSet;
-	}
-
-	/* parses a set of attributes on a node into an object tree */
-	this.parseAttributes = function(node) {
-		// TODO: make this namespace aware
-		var parsedAttributeSet = {};
-		var atts = node.attributes;
-		// TODO: should we allow for duplicate attributes at this point...
-		// would any of the relevant dom implementations even allow this?
-		for(var i=0; i<atts.length; i++) {
-			var attnode = atts.item(i);
-			if((dojo.render.html.capable)&&(dojo.render.html.ie)){
-				if(!attnode){ continue; }
-				if(	(typeof attnode == "object")&&
-					(typeof attnode.nodeValue == 'undefined')||
-					(attnode.nodeValue == null)||
-					(attnode.nodeValue == '')){ 
-					continue; 
-				}
-			}
-			var nn = (attnode.nodeName.indexOf("dojo:") == -1) ? attnode.nodeName : attnode.nodeName.split("dojo:")[1];
-			parsedAttributeSet[nn] = { 
-				value: attnode.nodeValue 
-			};
-		}
-		return parsedAttributeSet;
-	}
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/__package__.js
deleted file mode 100644
index 3c352ad..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/__package__.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.xml.Parse");
-dojo.hostenv.conditionalLoadModule({
-	common:		["dojo.xml.domUtil"],
-    browser: 	["dojo.xml.htmlUtil"],
-    svg: 		["dojo.xml.svgUtil"]
-});
-dojo.hostenv.moduleLoaded("dojo.xml.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/domUtil.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/domUtil.js
deleted file mode 100644
index de70dcc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/domUtil.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.xml.domUtil");
-dojo.require("dojo.graphics.color");
-dojo.require("dojo.dom");
-dojo.require("dojo.style");
-
-dj_deprecated("dojo.xml.domUtil is deprecated, use dojo.dom instead");
-
-// for loading script:
-dojo.xml.domUtil = new function(){
-	this.nodeTypes = {
-		ELEMENT_NODE                  : 1,
-		ATTRIBUTE_NODE                : 2,
-		TEXT_NODE                     : 3,
-		CDATA_SECTION_NODE            : 4,
-		ENTITY_REFERENCE_NODE         : 5,
-		ENTITY_NODE                   : 6,
-		PROCESSING_INSTRUCTION_NODE   : 7,
-		COMMENT_NODE                  : 8,
-		DOCUMENT_NODE                 : 9,
-		DOCUMENT_TYPE_NODE            : 10,
-		DOCUMENT_FRAGMENT_NODE        : 11,
-		NOTATION_NODE                 : 12
-	}
-	
-	this.dojoml = "http://www.dojotoolkit.org/2004/dojoml";
-	this.idIncrement = 0;
-	
-	this.getTagName = function(){return dojo.dom.getTagName.apply(dojo.dom, arguments);}
-	this.getUniqueId = function(){return dojo.dom.getUniqueId.apply(dojo.dom, arguments);}
-	this.getFirstChildTag = function() {return dojo.dom.getFirstChildElement.apply(dojo.dom, arguments);}
-	this.getLastChildTag = function() {return dojo.dom.getLastChildElement.apply(dojo.dom, arguments);}
-	this.getNextSiblingTag = function() {return dojo.dom.getNextSiblingElement.apply(dojo.dom, arguments);}
-	this.getPreviousSiblingTag = function() {return dojo.dom.getPreviousSiblingElement.apply(dojo.dom, arguments);}
-
-	this.forEachChildTag = function(node, unaryFunc) {
-		var child = this.getFirstChildTag(node);
-		while(child) {
-			if(unaryFunc(child) == "break") { break; }
-			child = this.getNextSiblingTag(child);
-		}
-	}
-
-	this.moveChildren = function() {return dojo.dom.moveChildren.apply(dojo.dom, arguments);}
-	this.copyChildren = function() {return dojo.dom.copyChildren.apply(dojo.dom, arguments);}
-	this.clearChildren = function() {return dojo.dom.removeChildren.apply(dojo.dom, arguments);}
-	this.replaceChildren = function() {return dojo.dom.replaceChildren.apply(dojo.dom, arguments);}
-
-	this.getStyle = function() {return dojo.style.getStyle.apply(dojo.style, arguments);}
-	this.toCamelCase = function() {return dojo.style.toCamelCase.apply(dojo.style, arguments);}
-	this.toSelectorCase = function() {return dojo.style.toSelectorCase.apply(dojo.style, arguments);}
-
-	this.getAncestors = function(){return dojo.dom.getAncestors.apply(dojo.dom, arguments);}
-	this.isChildOf = function() {return dojo.dom.isDescendantOf.apply(dojo.dom, arguments);}
-	this.createDocumentFromText = function() {return dojo.dom.createDocumentFromText.apply(dojo.dom, arguments);}
-
-	if(dojo.render.html.capable || dojo.render.svg.capable) {
-		this.createNodesFromText = function(txt, wrap){return dojo.dom.createNodesFromText.apply(dojo.dom, arguments);}
-	}
-
-	this.extractRGB = function(color) { return dojo.graphics.color.extractRGB(color); }
-	this.hex2rgb = function(hex) { return dojo.graphics.color.hex2rgb(hex); }
-	this.rgb2hex = function(r, g, b) { return dojo.graphics.color.rgb2hex(r, g, b); }
-
-	this.insertBefore = function() {return dojo.dom.insertBefore.apply(dojo.dom, arguments);}
-	this.before = this.insertBefore;
-	this.insertAfter = function() {return dojo.dom.insertAfter.apply(dojo.dom, arguments);}
-	this.after = this.insertAfter
-	this.insert = function(){return dojo.dom.insertAtPosition.apply(dojo.dom, arguments);}
-	this.insertAtIndex = function(){return dojo.dom.insertAtIndex.apply(dojo.dom, arguments);}
-	this.textContent = function () {return dojo.dom.textContent.apply(dojo.dom, arguments);}
-	this.renderedTextContent = function () {return dojo.dom.renderedTextContent.apply(dojo.dom, arguments);}
-	this.remove = function (node) {return dojo.dom.removeNode.apply(dojo.dom, arguments);}
-}
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/htmlUtil.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/htmlUtil.js
deleted file mode 100644
index c8f516e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/htmlUtil.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.xml.htmlUtil");
-dojo.require("dojo.html");
-dojo.require("dojo.style");
-dojo.require("dojo.dom");
-
-dj_deprecated("dojo.xml.htmlUtil is deprecated, use dojo.html instead");
-
-dojo.xml.htmlUtil = new function(){
-	this.styleSheet = dojo.style.styleSheet;
-	
-	this._clobberSelection = function(){return dojo.html.clearSelection.apply(dojo.html, arguments);}
-	this.disableSelect = function(){return dojo.html.disableSelection.apply(dojo.html, arguments);}
-	this.enableSelect = function(){return dojo.html.enableSelection.apply(dojo.html, arguments);}
-	
-	this.getInnerWidth = function(){return dojo.style.getInnerWidth.apply(dojo.style, arguments);}
-	
-	this.getOuterWidth = function(node){
-		dj_unimplemented("dojo.xml.htmlUtil.getOuterWidth");
-	}
-
-	this.getInnerHeight = function(){return dojo.style.getInnerHeight.apply(dojo.style, arguments);}
-
-	this.getOuterHeight = function(node){
-		dj_unimplemented("dojo.xml.htmlUtil.getOuterHeight");
-	}
-
-	this.getTotalOffset = function(){return dojo.style.getTotalOffset.apply(dojo.style, arguments);}
-	this.totalOffsetLeft = function(){return dojo.style.totalOffsetLeft.apply(dojo.style, arguments);}
-
-	this.getAbsoluteX = this.totalOffsetLeft;
-
-	this.totalOffsetTop = function(){return dojo.style.totalOffsetTop.apply(dojo.style, arguments);}
-	
-	this.getAbsoluteY = this.totalOffsetTop;
-
-	this.getEventTarget = function(){return dojo.html.getEventTarget.apply(dojo.html, arguments);}
-	this.getScrollTop = function() {return dojo.html.getScrollTop.apply(dojo.html, arguments);}
-	this.getScrollLeft = function() {return dojo.html.getScrollLeft.apply(dojo.html, arguments);}
-
-	this.evtTgt = this.getEventTarget;
-
-	this.getParentOfType = function(){return dojo.html.getParentOfType.apply(dojo.html, arguments);}
-	this.getAttribute = function(){return dojo.html.getAttribute.apply(dojo.html, arguments);}
-	this.getAttr = function (node, attr) { // for backwards compat (may disappear!!!)
-		dj_deprecated("dojo.xml.htmlUtil.getAttr is deprecated, use dojo.xml.htmlUtil.getAttribute instead");
-		return dojo.xml.htmlUtil.getAttribute(node, attr);
-	}
-	this.hasAttribute = function(){return dojo.html.hasAttribute.apply(dojo.html, arguments);}
-
-	this.hasAttr = function (node, attr) { // for backwards compat (may disappear!!!)
-		dj_deprecated("dojo.xml.htmlUtil.hasAttr is deprecated, use dojo.xml.htmlUtil.hasAttribute instead");
-		return dojo.xml.htmlUtil.hasAttribute(node, attr);
-	}
-	
-	this.getClass = function(){return dojo.html.getClass.apply(dojo.html, arguments)}
-	this.hasClass = function(){return dojo.html.hasClass.apply(dojo.html, arguments)}
-	this.prependClass = function(){return dojo.html.prependClass.apply(dojo.html, arguments)}
-	this.addClass = function(){return dojo.html.addClass.apply(dojo.html, arguments)}
-	this.setClass = function(){return dojo.html.setClass.apply(dojo.html, arguments)}
-	this.removeClass = function(){return dojo.html.removeClass.apply(dojo.html, arguments)}
-
-	// Enum type for getElementsByClass classMatchType arg:
-	this.classMatchType = {
-		ContainsAll : 0, // all of the classes are part of the node's class (default)
-		ContainsAny : 1, // any of the classes are part of the node's class
-		IsOnly : 2 // only all of the classes are part of the node's class
-	}
-
-	this.getElementsByClass = function() {return dojo.html.getElementsByClass.apply(dojo.html, arguments)}
-	this.getElementsByClassName = this.getElementsByClass;
-	
-	this.setOpacity = function() {return dojo.style.setOpacity.apply(dojo.style, arguments)}
-	this.getOpacity = function() {return dojo.style.getOpacity.apply(dojo.style, arguments)}
-	this.clearOpacity = function() {return dojo.style.clearOpacity.apply(dojo.style, arguments)}
-	
-	this.gravity = function(){return dojo.html.gravity.apply(dojo.html, arguments)}
-	
-	this.gravity.NORTH = 1;
-	this.gravity.SOUTH = 1 << 1;
-	this.gravity.EAST = 1 << 2;
-	this.gravity.WEST = 1 << 3;
-	
-	this.overElement = function(){return dojo.html.overElement.apply(dojo.html, arguments)}
-
-	this.insertCssRule = function(){return dojo.style.insertCssRule.apply(dojo.style, arguments)}
-	
-	this.insertCSSRule = function(selector, declaration, index){
-		dj_deprecated("dojo.xml.htmlUtil.insertCSSRule is deprecated, use dojo.xml.htmlUtil.insertCssRule instead");
-		return dojo.xml.htmlUtil.insertCssRule(selector, declaration, index);
-	}
-	
-	this.removeCssRule = function(){return dojo.style.removeCssRule.apply(dojo.style, arguments)}
-
-	this.removeCSSRule = function(index){
-		dj_deprecated("dojo.xml.htmlUtil.removeCSSRule is deprecated, use dojo.xml.htmlUtil.removeCssRule instead");
-		return dojo.xml.htmlUtil.removeCssRule(index);
-	}
-
-	this.insertCssFile = function(){return dojo.style.insertCssFile.apply(dojo.style, arguments)}
-
-	this.insertCSSFile = function(URI, doc, checkDuplicates){
-		dj_deprecated("dojo.xml.htmlUtil.insertCSSFile is deprecated, use dojo.xml.htmlUtil.insertCssFile instead");
-		return dojo.xml.htmlUtil.insertCssFile(URI, doc, checkDuplicates);
-	}
-
-	this.getBackgroundColor = function() {return dojo.style.getBackgroundColor.apply(dojo.style, arguments)}
-
-	this.getUniqueId = function() { return dojo.dom.getUniqueId(); }
-
-	this.getStyle = function() {return dojo.style.getStyle.apply(dojo.style, arguments)}
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/svgUtil.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/svgUtil.js
deleted file mode 100644
index 61e7482..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/src/xml/svgUtil.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-	Copyright (c) 2004-2005, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.xml.svgUtil");
-// FIXME: add imports for deps!
-
-dojo.xml.svgUtil = new function(){
-
-	this.getInnerWidth = function(node){
-		// FIXME: need to find out from dylan how to 
-	}
-
-	this.getOuterWidth = function(node){
-		
-	}
-
-	this.getInnerHeight = function(node){
-		
-	}
-
-	this.getOuterHeight = function(node){
-		
-	}
-
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/Util.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/Util.js
deleted file mode 100644
index 69bc44d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/Util.js
+++ /dev/null
@@ -1,51 +0,0 @@
-dojo.provide("struts.Util");
-
-struts.Util.passThroughArgs = function(args, target){
-	// pass through the extra args, catering for special cases of style and class for html elements
-	for (n in args) {
-		var v = args[n];
-		if (n == "style") {
-			target.style.cssText = v;
-		}else if (n == "class") {
-			target.className = v;
-		}else if (n == "dojoType") {
-		}else if (n == "dojotype") {
-		}else{
-			target[n] = v;
-		}
-	}
-}
-
-struts.Util.passThroughWidgetTagContent = function(widget, frag, target) {
-	// fill in the target with the contents of the widget tag
-	var widgetTag = frag["dojo:" + widget.widgetType.toLowerCase()].nodeRef;
-	if(widgetTag) target.innerHTML = widgetTag.innerHTML;
-}
-
-struts.Util.copyProperties = function(source, target){
-	// pass through the extra args, catering for special cases of style and class for html elements
-	for (key in source) target[key] = source[key];
-}
-
-
-struts.Util.globalCallbackCount = 0;
-
-struts.Util.makeGlobalCallback = function(target) {
-	var name = 'callback_hack_' + struts.Util.globalCallbackCount++;
-	window[name] = target;
-	return name;
-}
-
-struts.Util.setTimeout = function(callback, method, millis) {
-	window.setTimeout(callback + "." + method + "()", millis);
-}
-struts.Util.clearTimeout = function(callback) {
-	window.clearTimeout(callback);
-}
-
-
-struts.Util.nextIdValue = 0;
-
-struts.Util.nextId = function(scope) {
-	return (scope==null?"id":scope) + struts.Util.nextIdValue++;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/tooltip.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/tooltip.gif
deleted file mode 100644
index 1987964..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/tooltip.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/Bind.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/Bind.html
deleted file mode 100644
index 78d981d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/Bind.html
+++ /dev/null
@@ -1 +0,0 @@
-<span style='display:none'/>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/Bind.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/Bind.js
deleted file mode 100644
index 5fe107b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/Bind.js
+++ /dev/null
@@ -1,202 +0,0 @@
-dojo.provide("struts.widgets.Bind");
-dojo.provide("struts.widgets.HTMLBind");
-
-dojo.require("dojo.io.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.xml.Parse");
-
-dojo.require("struts.Util");
-
-/*
- * 
- */
-
-struts.widgets.HTMLBind = function() {
-
-    // inheritance
-    // see: http://www.cs.rit.edu/~atk/JavaScript/manuals/jsobj/
-    dojo.widget.HtmlWidget.call(this);
-    var self = this;
-
-    this.widgetType = "Bind";
-    this.templatePath = dojo.uri.dojoUri("struts/widgets/Bind.html");
-
-
-    // the name of the global javascript variable to associate with this widget instance
-    this.id = "";
-
-    // the id of the form object to bind to
-    this.formId = "";
-
-    // the url to bind to
-    this.href = "";
-
-    // javascript code to provide the href - will be evaluated each time before the data is loaded
-    this.getHref = ""
-
-    // topics that will be notified with a "notify" message when the bind operation has completed successfully
-    this.notifyTopics = "";
-
-    // html to display when there is an error loading content
-    this.errorHtml = "Failed to load remote content";
-
-    // do we show transport errors
-    this.showTransportError = false;
-
-    /**
-      * Bind Operation Outputs
-      *
-      * if evalResult = true the result will be eval'ed by bind (internally the content type will be set to etxt/javascript
-      * otherwise targetDiv and onLoad may both be specified, targetDiv will be filled first
-      */
-
-    // topics that this widget will listen to. Any message received on these topics will trigger a bind operation
-    this.listenTopics = "";
-
-    // the dom id of a target div to fill with the response
-    this.targetDiv = "";
-
-    // javascript code to be executed when data arrives - arguments are (eventType, data)
-    this.onLoad = "";
-
-    // if true, we set the bind mimetype to text/javascript to cause dojo to eval the result
-    this.evalResult = false;
-
-    // does the bind call use the client side cache - NOTE : doesn't seem to make IE not use the cache :(
-    this.useCache = false;
-
-    var trim = function(a) {
-        a = a.replace( /^\s+/g, "" );// strip leading
-        return a.replace( /\s+$/g, "" );// strip trailing
-    }
-
-    this.fillInTemplate = function() {
-        // subscribe to out listenTopics
-
-        var lt = self.listenTopics.split(",");
-        for (var i=0; i < lt.length; i++) {
-            var e = trim(lt[i]);
-            dojo.event.topic.subscribe( e, self, "bind" );
-        }
-
-        // associate the global instance for this widget
-        if (self.id != "") {
-            window[self.id] = self;
-        }
-
-
-    }
-
-    this.bind = function() {
-
-        var args = {
-            load: self.load,
-            error: self.error,
-            useCache: self.useCache
-        };
-
-        // the formId can either be a id or a form refrence
-        if (self.formId != "") {
-            if (typeof formId == "object") {
-                args.formNode = self.formId;
-            }else{
-                args.formNode = document.getElementById(self.formId);
-            }
-        }
-
-
-        if (self.href != "") {
-            args.url = this.href;
-        }
-        if (self.getHref != "") {
-            args.url = eval(this.getHref);
-        }
-
-        if (self.evalResult) {
-            args.mimetype = "text/javascript";
-        }
-
-        try {
-            dojo.io.bind(args);
-        } catch (e) {
-            dojo.debug("EXCEPTION: " + e);
-
-        }
-
-    }
-
-    this.load = function(type, data) {
-
-        if (self.targetDiv != "") {
-            var div = document.getElementById(self.targetDiv);
-            if (div) {
-                var d = struts.Util.nextId();
-
-                // IE seems to have major issues with setting div.innerHTML in this thread !!
-                window.setTimeout(function() {
-                    div.innerHTML = data;
-
-                    // create widget components from the received html
-                    try{
-                        var xmlParser = new dojo.xml.Parse();
-                        var frag  = xmlParser.parseElement(div, null, true);
-                        dojo.widget.getParser().createComponents(frag);
-                        // eval any scripts being returned
-                        var scripts = div.getElementsByTagName('script');
-                        for (var i=0; i<scripts.length; i++) {
-                            eval(scripts[i].innerHTML);
-                        }
-                    }catch(e){
-                        dojo.debug("auto-build-widgets error: "+e);
-                    }
-                    //moved here to support WW-1193
-                    if (self.onLoad != "") {
-                        eval(self.onLoad);
-                    }
-
-                }, 0);
-
-                dojo.debug("received html <a onclick=\"var e = document.getElementById('" + d + "'); e.style.display = (e.style.display=='none')?'block':'none';return false;\" href='#'>showHide</a><textarea style='display:none; width:98%;height:200px' id='" + d + "'>" + data + "</textarea>");
-            }
-        } else {
-            //moved here to support WW-1193
-            if (self.onLoad != "") {
-                eval(self.onLoad);
-            }
-        }
-
-
-        // notify our listeners
-        if (self.notifyTopics != "") {
-            var nt = self.notifyTopics.split(",");
-            for (var i=0; i < nt.length; i++) {
-                var topic = trim(nt[i]);
-                dojo.debug('notifying [' + topic + ']');
-                //dojo.event.topic.publish( topic, "notify" );
-                dojo.event.topic.publish(topic, self.id);
-            }
-        }
-
-    }
-
-    this.error = function(type, error) {
-        if (self.showTransportError) {
-            alert(error.message);
-        }else{
-            alert(self.errorHtml);
-        }
-    }
-
-}
-
-struts.widgets.HTMLBind = struts.widgets.HTMLBind;
-
-// complete the inheritance process
-dojo.inherits(struts.widgets.HTMLBind, dojo.widget.HtmlWidget);
-
-// make it a tag
-dojo.widget.tags.addParseTreeHandler("dojo:bind");
-
-// HACK - register this module as a widget package - to be replaced when dojo implements a propper widget namspace manager
-dojo.widget.manager.registerWidgetPackage('struts.widgets');
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindAnchor.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindAnchor.html
deleted file mode 100644
index 2367ec9..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindAnchor.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<a dojoAttachPoint="anchor"></a>
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindAnchor.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindAnchor.js
deleted file mode 100644
index 8e9e632..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindAnchor.js
+++ /dev/null
@@ -1,75 +0,0 @@
-dojo.provide("struts.widgets.BindAnchor");
-dojo.provide("struts.widgets.HTMLBindAnchor");
-
-dojo.require("dojo.io.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.xml.Parse");
-
-dojo.require("struts.Util");
-dojo.require("struts.widgets.HTMLBind");
-
-/*
- * Component to do remote updating of a DOM tree.
- */
-
-struts.widgets.HTMLBindAnchor = function() {
-	
-	// inheritance
-    // see: http://www.cs.rit.edu/~atk/JavaScript/manuals/jsobj/
-	struts.widgets.HTMLBind.call(this);
-	var self = this;
-
-	this.widgetType = "BindAnchor";
-	this.templatePath = dojo.uri.dojoUri("struts/widgets/BindAnchor.html");
-
-	// the template anchor instance
-	this.anchor = null;
-
-    //a snippet of js to invode before binding
-    this.preInvokeJS = "";
-
-    var super_fillInTemplate = this.fillInTemplate;
-	this.fillInTemplate = function(args, frag) {
-		super_fillInTemplate(args, frag);
-
-		if (self.id) {
-			self.anchor.id = self.id;
-		}
-		
-		struts.Util.passThroughArgs(self.extraArgs, self.anchor);
-		self.anchor.href = "javascript:{}";
-        dojo.event.kwConnect({
-            srcObj: self.anchor,
-            srcFunc: "onclick",
-            adviceObj: self,
-            adviceFunc: "execute",
-            adviceType: 'before'
-        });
-
-        struts.Util.passThroughWidgetTagContent(self, frag, self.anchor);
-    }
-    this.execute = function() {
-        var executeConnect = true;
-        //If the user provided some preInvokeJS invoke it and store the results into the
-        //executeConnect var to determine if the connect should occur
-		if (self.preInvokeJS != "") {
-            dojo.debug('Evaluating js: ' + this.preInvokeJS);
-            executeConnect = eval(this.preInvokeJS);
-		}
-        if (executeConnect) {
-            this.bind();
-        }
-
-
-    }
-}
-
-// complete the inheritance process
-dojo.inherits(struts.widgets.HTMLBindAnchor, struts.widgets.HTMLBind);
-
-// make it a tag
-dojo.widget.tags.addParseTreeHandler("dojo:BindAnchor");
-
-// HACK - register this module as a widget package - to be replaced when dojo implements a propper widget namspace manager
-dojo.widget.manager.registerWidgetPackage('struts.widgets');
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindButton.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindButton.html
deleted file mode 100644
index 556f63c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindButton.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<input dojoAttachPoint="attachBtn" dojoAttachEvent="onClick: execute" type="submit" />
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindButton.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindButton.js
deleted file mode 100644
index 4df0d0b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindButton.js
+++ /dev/null
@@ -1,69 +0,0 @@
-dojo.provide("struts.widgets.BindButton");
-dojo.provide("struts.widgets.HTMLBindButton");
-
-dojo.require("dojo.io.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.xml.Parse");
-
-dojo.require("struts.Util");
-dojo.require("struts.widgets.HTMLBind");
-
-/*
- * Component to do a remote submit of a HTML form.
- */
-
-struts.widgets.HTMLBindButton = function() {
-
-	// inheritance
-    // see: http://www.cs.rit.edu/~atk/JavaScript/manuals/jsobj/
-	struts.widgets.HTMLBind.call(this);
-	var self = this;
-
-	this.widgetType = "BindButton";
-	this.templatePath = dojo.uri.dojoUri("struts/widgets/BindButton.html");
-
-    // dom node in the template that will contain the remote content
-	this.attachBtn = null;
-
-    //a snippet of js to invode before binding
-    this.preInvokeJS = "";
-
-    var super_fillInTemplate = this.fillInTemplate;
-	this.fillInTemplate = function(args, frag) {
-		super_fillInTemplate(args, frag);
-
-       if (self.id) {
-			self.attachBtn.id = self.id;
-		}
-
-		struts.Util.passThroughArgs(self.extraArgs, self.attachBtn);
-	}
-
-    this.execute = function() {
-        var executeConnect = true;
-
-        //If the user provided some preInvokeJS invoke it and store the results into the
-        //executeConnect var to determine if the connect should occur
-		if (self.preInvokeJS != "") {
-            dojo.debug('Evaluating js: ' + this.preInvokeJS);
-            executeConnect = eval(this.preInvokeJS);
-		}
-        if (executeConnect) {
-            try {
-                this.bind();
-            } catch (e) {
-                dojo.debug("EXCEPTION: " + e);
-
-            }
-        }
-    }
-}
-
-dojo.inherits(struts.widgets.HTMLBindButton, struts.widgets.HTMLBind);
-
-// make it a tag
-dojo.widget.tags.addParseTreeHandler("dojo:BindButton");
-
-// HACK - register this module as a widget package - to be replaced when dojo implements a propper widget namspace manager
-dojo.widget.manager.registerWidgetPackage('struts.widgets');
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindDiv.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindDiv.html
deleted file mode 100644
index 0b4de9c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindDiv.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<div dojoAttachPoint="contentDiv"></div>
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindDiv.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindDiv.js
deleted file mode 100644
index d5f9b4c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/BindDiv.js
+++ /dev/null
@@ -1,157 +0,0 @@
-dojo.provide("struts.widgets.BindDiv");
-dojo.provide("struts.widgets.HTMLBindDiv");
-
-dojo.require("dojo.io.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.xml.Parse");
-
-dojo.require("struts.Util");
-dojo.require("struts.widgets.HTMLBind");
-
-/*
- * Component to do remote updating of a DOM tree.
- */
-
-struts.widgets.HTMLBindDiv = function() {
-
-	// inheritance
-    // see: http://www.cs.rit.edu/~atk/JavaScript/manuals/jsobj/
-	struts.widgets.HTMLBind.call(this);
-	var self = this;
-
-	this.widgetType = "BindDiv";
-	this.templatePath = dojo.uri.dojoUri("struts/widgets/BindDiv.html");
-
-
-	// register a global object to use for window.setTimeout callbacks
-	this.callback = struts.Util.makeGlobalCallback(this);
-
-	//
-	// default properties that can be provided by the widget user
-	//
-
-	// html to display while loading remote content
-    this.loadingHtml = "";
-
-	// initial dealy before fetching content
-	this.delay = 0;
-	
-	// how often to update the content from the server, after the initial delay
-	this.refresh = 0;
-
-	// does the timeout loop start automatically ?
-	this.autoStart = true;
-
-	// dom node in the template that will contain the remote content
-	this.contentDiv = null;
-
-	// support a toggelable div - each listenEvent will trigger a change in the display state
-	// the bind call will only happen when the remote div is displayed
-	this.toggle = false;
-		
-	this._nextTimeout = function(millis) {
-		struts.Util.setTimeout(self.callback, "afterTimeout", millis);
-	}
-
-	var super_fillInTemplate = this.fillInTemplate;
-	this.fillInTemplate = function(args, frag) {
-		super_fillInTemplate(args, frag);
-
-		if (self.id == "") { 
-			self.contentDiv.id = struts.Util.nextId();		
-		}else {
-			self.contentDiv.id = self.id;
-		}
-
-		self.targetDiv = self.contentDiv.id;
-		
-		struts.Util.passThroughArgs(self.extraArgs, self.contentDiv);
-		struts.Util.passThroughWidgetTagContent(self, frag, self.contentDiv);
-
-		// hook into before the bind operation to display the loading message
-		// do this always - to allow for on the fuy changes to the loadingHtml
-		dojo.event.kwConnect({
-			srcObj: self,
-			srcFunc: "bind",
-			adviceObj: self,
-			adviceFunc: "loading"
-		});
-
-		if (self.autoStart) {
-			self.start();
-		}
-
-	   	if (self.toggle) {
-			dojo.event.kwConnect({
-				type: 'around',
-				srcObj: self,
-				srcFunc: "bind",
-				adviceObj: self,
-				adviceFunc: "__toggleInterceptor"
-			});
-    	}
-
-	}
-	
-	this.__toggleInterceptor = function(invocation) {
-		var hidden = self.contentDiv.style.display == 'none';
-		self.contentDiv.style.display = (hidden)?'':'none';
-		if (hidden) {
-			invocation.proceed();
-		}
-	}
-	
-	this.error = function(type, error) {
-		//for (a in error) dojo.debug("error." + a + ":" + error[a]);
-		if (self.showTransportError) {
-			self.contentDiv.innerHTML = error.message;
-		}else{
-			self.contentDiv.innerHTML = self.errorHtml;
-		}
-	}
-	
-    this.loading = function() {
-        if( self.loadingHtml != "" ) {
-        	self.contentDiv.innerHTML = self.loadingHtml;
-        }
-	}
-
-	this.afterTimeout = function() {
-		if (running) {
-		
-			// do the bind
-			self.bind();
-			
-			// setup the next timeout
-			if (self.refresh > 0) {
-				self._nextTimeout(self.refresh);
-			}
-		}
-	}
-
-	
-	var running = false;
-	this.stop = function() {
-		if (!running) return;
-		running = false;
-		struts.Util.clearTimeout(self.callback);
-	}
-
-	this.start = function() {
-		if (running) return;
-		running = true;
-		
-		if (self.delay > 0) {
-			self._nextTimeout(self.delay);
-		}
-	}
-
-}
-dojo.inherits(struts.widgets.HTMLBindDiv, struts.widgets.HTMLBind);
-
-// make it a tag
-dojo.widget.tags.addParseTreeHandler("dojo:BindDiv");
-
-// HACK - register this module as a widget package - to be replaced when dojo implements a propper widget namspace manager
-dojo.widget.manager.registerWidgetPackage('struts.widgets');
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DateTimeUtil.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DateTimeUtil.js
deleted file mode 100644
index dcee994..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DateTimeUtil.js
+++ /dev/null
@@ -1,249 +0,0 @@
-/* 
- * Struts2
- * =======
- * 
- * This is a simple DateTimeUtil used by Struts2 DatePicker and TimePicker.
- * Its a pretty crude one, and there's lots of room for improvement. Please 
- * feel free to improve it if you like.
- * 
- * It's main methods are :-
- * -  struts.widgets.DateTimeUtil.parseDate(date, format);
- * -  struts.widgets.DateTimeUtil.parseTime(date, format);
- * -  struts.widgets.DateTimeUtil.parseDateTime(date, format);
- * 
- * which parse the 'date' string using the 'format' specifed and return a
- * js Date object. If not parsing is possible, it will just return the current
- * date as a Date object.
- * 
- * version $Date$ $Id$
- */
-dojo.provide("struts.widgets.DateTimeUtil");
-
-struts.widgets.DateTimeUtil.parseDate = function(date, format) {
-    var _d = new Date();
-    struts.widgets.DateTimeUtil.tryToParseForDay(_d, date, format);
-    struts.widgets.DateTimeUtil.tryToParseForMonth(_d, date, format);
-    struts.widgets.DateTimeUtil.tryToParseForYear(_d, date, format);
-    return _d;
-}
-
-struts.widgets.DateTimeUtil.parseTime = function(date, format) {
-    var _d = new Date();
-    struts.widgets.DateTimeUtil.tryToParseForHours(_d, date, format);
-    struts.widgets.DateTimeUtil.tryToParseForMinutes(_d, date, format);
-    return _d;
-}
-
-struts.widgets.DateTimeUtil.parseDateTime = function(date, format) {
-    var _d = new date();
-    struts.widgets.DateTimeUtil.tryToParseForDay(_d, date, format);
-    struts.widgets.DateTimeUtil.tryToParseForMonth(_d, date, format);
-    struts.widgets.DateTimeUtil.tryToParseForYear(_d, date, format);
-    struts.widgets.DateTimeUtil.tryToParseForHours(_d, date, format);
-    struts.widgets.DateTimeUtil.tryToPraseForMinutes(_d, date, format);
-    return _d;
-}
-
-
-struts.widgets.DateTimeUtil.tryToParseForDay = function(dateObj, date, format) {
-    var tmp = format;
-    var _function;
-
-	if (tmp.indexOf("#dd") > -1) {
-	    tmp = tmp.replace(/#dd/g, "(\\d+)");
-		_function = function(dateObject, day) {
-		    dateObject.setDate(day);
-		}
-	}
-	else if (tmp.indexOf("#d") > -1) {
-	    tmp = tmp.replace(/#d/g, "(\\d+)");
-	    _function = function(dateObject, day) {
-	        dateObject.setDate(day);
-	    }
-	}
-	
-    if (tmp.indexOf("#M") > -1) {
-		tmp = tmp.replace(/#MMMM/g, "\\w+");
-		tmp = tmp.replace(/#MMM/g, "\\w+");
-		tmp = tmp.replace(/#MM/g, "\\w+");
-		tmp = tmp.replace(/#M/g, "\\w+");
-	}
-
-	if (tmp.indexOf("#y") > -1) {
-		tmp = tmp.replace(/#yyyy/g, "\\w+");
-		tmp = tmp.replace(/#yy/g, "\\w+");
-		tmp = tmp.replace(/#y/g, "\\w+");
-	}
-
-	var regexp = tmp;
-	var rg = new RegExp("\\b"+regexp+"\\b", "g");
-	var r = rg.exec(date);
-	if (r && r.length >= 1 && _function) {
-	    _function(dateObj, r[1]);
-	}
-}
-
-
-struts.widgets.DateTimeUtil.tryToParseForMonth = function(dateObj, date, format) {
-    var tmp = format;
-    var _function;
-
-	if (tmp.indexOf("#MM") > -1) {
-	    tmp = tmp.replace(/#MM/g, "(\\d+)");
-		_function = function(dateObject, month) {
-		    dateObject.setMonth(month - 1);
-		}
-	}
-	else if (tmp.indexOf("#M") > -1) {
-	    tmp = tmp.replace(/#M/g, "(\\d+)");
-	    _function = function(dateObject, month) {
-	        dateObject.setDate(month - 1);
-	    }
-	}
-	
-	if (tmp.indexOf("#d") > -1) {
-		tmp = tmp.replace(/#dddd/g, "\\w+");
-		tmp = tmp.replace(/#ddd/g, "\\w+");
-		tmp = tmp.replace(/#dd/g, "\\w+");
-		tmp = tmp.replace(/#d/g, "\\w+");
-	}
-	
-	if (tmp.indexOf("#y") > -1) {
-		tmp = tmp.replace(/#yyyy/g, "\\w+");
-		tmp = tmp.replace(/#yy/g, "\\w+");
-		tmp = tmp.replace(/#y/g, "\\w+");
-	}
-
-	var regexp = tmp;
-	var rg = new RegExp("\\b"+regexp+"\\b", "g");
-	var r = rg.exec(date);
-	if (r && r.length >= 1 && _function) {
-	    _function(dateObj, r[1]);
-	}
-}
-
-
-struts.widgets.DateTimeUtil.tryToParseForYear = function(dateObj, date, format) {
-    var tmp = format;
-    var _function;
-
-	if (tmp.indexOf("#yyyy") > -1) {
-	    tmp = tmp.replace(/#yyyy/g, "(\\d+)");
-		_function = function(dateObject, year) {
-		    dateObject.setYear(year);
-		}
-	}
-	else if (tmp.indexOf("#yy") > -1) {
-	    tmp = tmp.replace(/#yy/g, "(\\d+)");
-	    _function = function(dateObject, year) {
-	        var _d = new Date();
-	        var _y = _d.getFullYear().substring(0, 2)+''+year;
-	        dateObject.setYear(_y);
-	    }
-	}
-	else if (tmp.indexOf("#y") > -1) {
-	    tmp = tmp.replace(/#y/g, "(\\d+)");
-	    _function = function(dateObject, year) {
-	        var _d = new Date();
-	        var _y = _d.getFullYear().substring(0, 3)+''+year;
-	        dateObject.setYear(_y);
-	    }
-	}
-	
-	if (tmp.indexOf("#d") > -1) {
-		tmp = tmp.replace(/#dddd/g, "\\w+");
-		tmp = tmp.replace(/#ddd/g, "\\w+");
-		tmp = tmp.replace(/#dd/g, "\\w+");
-		tmp = tmp.replace(/#d/g, "\\w+");
-	}
-	
-	if (tmp.indexOf("#M") > -1) {
-		tmp = tmp.replace(/#MMMM/g, "\\w+");
-		tmp = tmp.replace(/#MMM/g, "\\w+");
-		tmp = tmp.replace(/#MM/g, "\\w+");
-		tmp = tmp.replace(/#M/g, "\\w+");
-	}
-
-	var regexp = tmp;
-	var rg = new RegExp("\\b"+regexp+"\\b", "g");
-	var r = rg.exec(date);
-	if (r && r.length >= 1 && _function) {
-	    _function(dateObj, r[1]);
-	}
-}
-
-
-struts.widgets.DateTimeUtil.tryToParseForHours = function(dateObj, date, format) {
-    var tmp = format;
-    var _function;
-    
-    if (tmp.indexOf("#h") > -1) {
-        tmp = tmp.replace(/#hh/g, "(\\d+)");
-        tmp = tmp.replace(/#h/g, "(\\d+)");
-        _function = function(dateObj, hour) {
-            dateObj.setHours(hour);
-        }
-    }
-    if (tmp.indexOf("#H") > -1) {
-        tmp = tmp.replace(/#HH/g, "(\\d+)");
-        tmp = tmp.replace(/#H/g, "(\\d+)");
-        _function = function(dateObj, hour) {
-            dateObj.setHours(hour);
-        }
-    }
-    if (tmp.indexOf("#m") > -1) {
-		tmp = tmp.replace(/#mm/g, "\\w+");
-		tmp = tmp.replace(/#m/g, "\\w+");
-	}
-	if (tmp.indexOf("#T") > -1) {
-	    tmp = tmp.replace(/#TT/g, "\\w+");
-	    tmp = tmp.replace(/#T/g, "\\w+");
-	}
-	if (tmp.indexOf("#t") > -1) {
-	    tmp = tmp.replace(/#tt/g, "\\w+");
-	    tmp = tmp.replace(/#t/g, "\\w+");
-	}
-	var regexp = tmp;
-	var rg = new RegExp("\\b"+tmp+"\\b", "g");
-	var r = rg.exec(date);
-	if (r && r.length >= 1 && _function) {
-	    _function(dateObj, r[1]);
-	}
-}
-
-struts.widgets.DateTimeUtil.tryToParseForMinutes = function(dateObj, date, format) {
-    var tmp = format;
-    var _function;
-    
-    if (tmp.indexOf("#m") > -1) {
-        tmp = tmp.replace(/#mm/g, "(\\d+)");
-        tmp = tmp.replace(/#m/g, "(\\d+)");
-        _function = function(dateObj, minutes) {
-            dateObj.setMinutes(minutes);
-        }
-    }
-	if (tmp.indexOf("#H") > -1) {
-	    tmp = tmp.replace(/#HH/g, "\\w+");
-	    tmp = tmp.replace(/#H/g, "\\w+");
-	}
-	if (tmp.indexOf("#h") > -1) {
-	    tmp = tmp.replace(/#hh/g, "\\w+");
-	    tmp = tmp.replace(/#h/g, "\\w+");
-	}
-	if (tmp.indexOf("#T") > -1) {
-	    tmp = tmp.replace(/#TT/g, "\\w+");
-	    tmp = tmp.replace(/#T/g, "\\w+");
-	}
-	if (tmp.indexOf("#t") > -1) {
-	    tmp = tmp.replace(/#tt/g, "\\w+");
-	    tmp = tmp.replace(/#t/g, "\\w+");
-	}
-	var regexp = tmp;
-	var rg = new RegExp("\\b"+tmp+"\\b", "g");
-	var r = rg.exec(date);
-	if (r && r.length >= 1 && _function) {
-	    _function(dateObj, r[1]);
-	}
-}
-
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownDatePicker.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownDatePicker.js
deleted file mode 100644
index 1ca997e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownDatePicker.js
+++ /dev/null
@@ -1,54 +0,0 @@
-dojo.provide("struts.widgets.DropDownDatePicker");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.DatePicker");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html");
-dojo.require("struts.widgets.DropdownContainer");
-dojo.require("struts.widgets.DateTimeUtil");
-
-struts.widgets.DropDownDatePicker = function () {
-    struts.widgets.DropdownContainer.call(this);
-    this.widgetType = "DropDownDatePicker";
-    
-    this.initUI = function() {
-		var properties = {
-			widgetContainerId: this.widgetId
-		}
-
-		this.subWidgetRef = dojo.widget.createWidget("DatePicker", properties,   this.subWidgetNode);
-		dojo.event.connect(this.subWidgetRef, "onSetDate", this, "onPopulate");
-		dojo.event.connect(this.valueInputNode, "onkeyup", this, "onInputChange");
-		this.onUpdateDate = function(evt) {
-			this.storedDate = evt.storedDate;
-		}
-		this.onInputChange();
-	}
-	
-	this.onPopulate = function() {
-		this.valueInputNode.value = dojo.date.toString(this.subWidgetRef.date, this.dateFormat);
-	}
-
-	this.onInputChange = function(){
-		//var test = new Date(this.valueInputNode.value);
-		var test = struts.widgets.DateTimeUtil.parseDate(this.valueInputNode.value, this.dateFormat);
-		this.subWidgetRef.date = test;
-		this.subWidgetRef.setDate(dojo.widget.DatePicker.util.toRfcDate(test));
-		this.subWidgetRef.initUI();
-		//this.onPopulate();
-	}
-}
-
-dojo.inherits(struts.widgets.DropDownDatePicker, struts.widgets.DropdownContainer);
-dojo.widget.tags.addParseTreeHandler("dojo:dropdowndatepicker");
-dojo.lang.extend(struts.widgets.DropDownDatePicker, {
-	
-	//	default attributes
-	dateFormat: "#MM/#dd/#yyyy",
-	iconPath: "/struts/dojo/struts/widgets/dateIcon.gif",
-	iconAlt: "date",
-	iconTitle: "Select a date",
-	inputWidth:"7em"
-	
-});
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownTimePicker.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownTimePicker.js
deleted file mode 100644
index 3552157..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownTimePicker.js
+++ /dev/null
@@ -1,46 +0,0 @@
-dojo.provide("struts.widgets.DropDownTimePicker");
-dojo.require("struts.widgets.DropdownContainer");
-dojo.require("dojo.widget.html.TimePicker");
-dojo.require("struts.widgets.DateTimeUtil");
-
-struts.widgets.DropDownTimePicker = function() {
-    struts.widgets.DropdownContainer.call(this);
-    this.widgetType = "DropDownTimePicker";
-    var timeFormat = "#hh:#mm #TT";
-    
-    this.initUI = function() {
-		var properties = {
-			widgetContainerId: this.widgetId
-		}
-		
-		this.subWidgetRef = dojo.widget.createWidget("TimePicker", properties,   this.subWidgetNode);
-		dojo.event.connect(this.subWidgetRef, "onSetTime", this, "onPopulate");
-		dojo.event.connect(this.valueInputNode, "onkeyup", this, "onInputChange");
-		this.onInputChange();
-    }
-    
-    this.onPopulate = function() {
-		this.valueInputNode.value = dojo.date.toString(this.subWidgetRef.time, this.timeFormat);
-	}
-
-	this.onInputChange = function(){
-	    if (this.valueInputNode.value && this.valueInputNode.value.toString().length > 0) {
-		  var test = struts.widgets.DateTimeUtil.parseTime(this.valueInputNode.value, this.timeFormat);
-		  // test.setTime(this.valueInputNode.value);
-		  this.subWidgetRef.time = test;
-		  this.subWidgetRef.setDateTime(dojo.widget.TimePicker.util.toRfcDateTime(test));
-	   	  this.subWidgetRef.initUI();
-		  //this.onPopulate();
-	    }
-	}
-}
-
-dojo.inherits(struts.widgets.DropDownTimePicker, struts.widgets.DropdownContainer);
-dojo.widget.tags.addParseTreeHandler("dojo:dropdowntimepicker");
-dojo.lang.extend(struts.widgets.DropDownTimePicker, {
-    timeFormat: "#hh:#mm #TT",
-	iconPath: "/struts/dojo/struts/widgets/timeIcon.gif",
-	iconAlt: "time",
-	iconTitle: "Select a time",
-	inputWidth:"7em"
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropdownContainer.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropdownContainer.js
deleted file mode 100644
index 5b9cb54..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropdownContainer.js
+++ /dev/null
@@ -1,75 +0,0 @@
-dojo.provide("struts.widgets.DropdownContainer");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.DatePicker");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html");
-
-struts.widgets.DropdownContainer = function(){
-	// this is just an interface that gets mixed in
-	dojo.widget.HtmlWidget.call(this);
-	this.widgetType = "DropdownContainer";
-	
-	this.iconPath;
-	this.iconAlt;
-	this.iconTitle;
-	this.value;
-	
-	this.templatePath = dojo.uri.dojoUri("struts/widgets/dropdowncontainer.html");
-	this.templateCssPath = dojo.uri.dojoUri("struts/widgets/dropdowncontainer.css");
-	//this.templateString = '<div><input type="text" value="" style="vertical-align:middle;" dojoAttachPoint="valueInputNode" /><img src="" alt="" dojoAttachPoint="containerDropdownNode" dojoAttachEvent="onclick: onDropdown;" style="vertical-align:middle; cursor:pointer; cursor:hand;" /><div dojoAttachPoint="subWidgetContainerNode" style="display:none;position:absolute;width:12em;background-color:#fff;"><div dojoAttachPoint="subWidgetNode" class="subWidgetContainer"></div></div></div>';
-	//this.templateCssPath = "";
-	
-	this.fillInTemplate = function(args, frag) {
-        try {
-		    var source = this.getFragNodeRef(frag);
-            var txt = source.getElementsByTagName("input")[0];
-            this.domNode.insertBefore(txt, this.valueInputNode);
-            this.domNode.removeChild(this.valueInputNode);
-            this.valueInputNode = txt
-        } catch (e) {alert("ex:"+e);}
-        
-        
-        this.subWidgetContainerNode.style.left = "";
-		this.subWidgetContainerNode.style.top = "";
-        
-        this.valueInputNode.style.width = this.inputWidth;
-        if (this.value) {
-            this.valueInputNode.value = this.value;
-        }
-        
-        this.containerDropdownNode.src = this.iconPath;
-		this.containerDropdownNode.alt = this.iconAlt;
-		this.containerDropdownNode.title = this.iconTitle;
-        
-		this.initUI();
-	}
-	
-	this.initUI = function() {
-	    // subclass should overrides this to init the UI in this container
-	}
-	
-	this.onPopulate = function() {
-	}
-	
-	this.onInputChange = function(){
-	}
-	
-	this.onDropdown = function(evt) {
-		this.show(this.subWidgetContainerNode.style.display == "block");
-	}
-	
-	this.show = function(bool) {
-		this.subWidgetContainerNode.style.display = (bool) ? "none" : "block";
-	}
-	
-	this.onHide = function(evt) {
-		this.show(false);
-	}
-}
-
-dojo.inherits(struts.widgets.DropdownContainer, dojo.widget.HtmlWidget);
-dojo.widget.tags.addParseTreeHandler("dojo:dropdowncontainer");
-dojo.lang.extend(struts.widgets.DropdownContainer, {
-
-});
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DynArchCalendar.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DynArchCalendar.html
deleted file mode 100644
index 5a84db4..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DynArchCalendar.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div dojoAttachPoint='controlsDiv'>
-	<div id='test'></div>
-
-</div>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DynArchCalendar.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DynArchCalendar.js
deleted file mode 100644
index dddbed6..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DynArchCalendar.js
+++ /dev/null
@@ -1,151 +0,0 @@
-dojo.provide("struts.widgets.DynArchCalendar");
-dojo.provide("struts.widgets.HTMLDynArchCalendar");
-
-dojo.require("dojo.io.*");
-
-dojo.require("dojo.event.*");
-
-dojo.require("dojo.xml.Parse");
-dojo.require("dojo.widget.*");
-
-dojo.require("struts.Util");
-
-/*
- * Component to do remote updating of a DOM tree.
- */
-
-struts.widgets.HTMLDynArchCalendar = function() {
-
-	dojo.widget.DomWidget.call(this);
-	dojo.widget.HTMLWidget.call(this);
-
-
-	this.templatePath = "struts/widgets/DynArchCalendar.html";
-	this.widgetType = "DynArchCalendar";
-
-	var self = this;
-	
-	// default properties
-	
-	// the name of the global javascript variable to associate with this widget instance
-	this.id = "";
-		
-	// the text input box
-	this.inputField = null;
-	this.inputFieldStyle = "";
-	
-	this.controlsDiv = null;
-	
-	// the trigger button
-	this.button = null;
-	
-	// display the calendar as a flat control, or a popup control
-	this.flat = false;	
-	
-	var argNames = [
-		'inputField',
-		'displayArea',
-		'button',
-		'eventName',
-		'ifFormat',
-		'daFormat',
-		'singleClick',
-		'firstDay',
-		'align',
-		'range',
-		'weekNumbers',
-		'flat',
-		'date',
-		'showsTime',
-		'timeFormat',
-		'electric',
-		'step',
-		'position',
-		'cache',
-		'showOthers'
-	];
-	var functionArgs = [
-		'flatCallback',
-		'disableFunc',
-		'onSelect',
-		'onClose',
-		'onUpdate',
-	]
-	
-	this.fillInTemplate = function(args, frag) {
-
-		if (!Calendar) {
-			dojo.debug("DynArch Calendar Script not included");
-			return;
-		}
-
-		// expost this widget instance globally
-		if (self.id != "") window[self.id] = self;
-	
-		self.controlsDiv.id = struts.Util.nextId();
-	
-		var params = {};
-
-		if (self.flat) {
-			params.flat = self.controlsDiv;
-		}else{
-			self.inputField = document.createElement("input");
-			self.inputField.type = 'text';
-			self.inputField.id = struts.Util.nextId();
-			
-			self.button = document.createElement("input");
-			self.button.id = struts.Util.nextId();
-			self.button.type = 'button';
-			self.button.value = ' ... ';
-
-			self.controlsDiv.appendChild(self.inputField);
-			self.controlsDiv.appendChild(self.button);
-
-			if (self.inputFieldStyle != "")
-				self.inputField.style.cssText = self.inputFieldStyle;
-	
-			if (self.inputFieldClass != "")
-				self.inputField.className = self.inputFieldClass;
-		}
-		
-
-		struts.Util.copyProperties(self.extraArgs, params);
-	
-		// fix the case of args - since they are all made lowercase by the fragment parser
-		for (var i=0; i<argNames.length; i++) {
-			var n = argNames[i];
-			if (params[n.toLowerCase()])
-				params[n] = params[n.toLowerCase()];
-		}
-		
-		// build functions for the function args
-		for (var i=0; i<functionArgs.length; i++) {
-			var name = functionArgs[i];
-			var txt = self.extraArgs[name.toLowerCase()];
-			if (txt) {
-				params[name] = new Function(txt);
-			}
-		}
-
-		params.inputField = self.inputField;
-		params.button = self.button;
-		
-		Calendar.setup(params);
-
-	}
-	
-	
-	this.show = function() {
-		self.button.onclick();
-	}
-	
-}
-
-// is this needed as well as dojo.widget.Widget.call(this);
-dojo.inherits(struts.widgets.HTMLDynArchCalendar, dojo.widget.DomWidget);
-
-// make it a tag
-dojo.widget.tags.addParseTreeHandler("dojo:dynarchcalendar");
-
-// HACK - register this module as a widget package - to be replaced when dojo implements a propper widget namspace manager
-dojo.widget.manager.registerWidgetPackage('struts.widgets');
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/ToggleBindDiv.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/ToggleBindDiv.js
deleted file mode 100644
index 3549ab7..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/ToggleBindDiv.js
+++ /dev/null
@@ -1,58 +0,0 @@
-dojo.provide("struts.widgets.ToggleBindDiv");
-dojo.provide("struts.widgets.HTMLToggleBindDiv");
-
-dojo.require("dojo.io.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.xml.Parse");
-
-dojo.require("struts.Util");
-dojo.require("struts.widgets.HTMLBindDiv");
-
-/*
- * Component to do remote updating of a DOM tree.
- */
-
-struts.widgets.HTMLToggleBindDiv = function() {
-
-	struts.widgets.HTMLBindDiv.call(this);
-	var self = this;
-
-	this.widgetType = "ToggleBindDiv";
-
-	// support a toggelable div - each listenEvent will trigger a change in the display state
-	// the bind call will only happen when the remote div is displayed
-	this.toggle2 = false;
-
-	var super_fillInTemplate = this.fillInTemplate;
-	this.fillInTemplate = function(args, frag) {
-		super_fillInTemplate(args, frag);
-	
-	   	if (self.toggle2) {
-			dojo.event.kwConnect({
-				type: 'around',
-				srcObj: self,
-				srcFunc: "bind",
-				adviceObj: self,
-				adviceFunc: "__subclassToggleInterceptor"
-			});
-    	}
-
-	}
-	
-	this.__subclassToggleInterceptor = function(invocation) {
-		var hidden = self.contentDiv.style.display == 'none';
-		self.contentDiv.style.display = (hidden)?'':'none';
-		if (hidden) {
-			invocation.proceed();
-		}
-	}
-
-}
-dojo.inherits(struts.widgets.HTMLToggleBindDiv, struts.widgets.HTMLBindDiv);
-
-// make it a tag
-dojo.widget.tags.addParseTreeHandler("dojo:ToggleBindDiv");
-
-// HACK - register this module as a widget package - to be replaced when dojo implements a propper widget namspace manager
-dojo.widget.manager.registerWidgetPackage('struts.widgets');
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/__package__.js b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/__package__.js
deleted file mode 100644
index e8ca6e7..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/__package__.js
+++ /dev/null
@@ -1,12 +0,0 @@
-dojo.widget.manager.registerWidgetPackage(
-"struts.widgets"
-);
-dojo.hostenv.conditionalLoadModule({
-	browser: [
-		"struts.widgets.DropdownContainer",
-		"struts.widgets.DropDownDatePicker",
-		"struts.widgets.DropDownTimePicker", 
-		"struts.widgets.DateTimeUtil"
-	]
-});
-dojo.hostenv.moduleLoaded("struts.widgets.*");
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dateIcon.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dateIcon.gif
deleted file mode 100644
index dc1f31c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dateIcon.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.css b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.css
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.css
+++ /dev/null
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.html b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.html
deleted file mode 100644
index f22956c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-<div>
-	<input 	type="text" 
-			value="" 
-	 		style="vertical-align:middle;" 
-	 		dojoAttachPoint="valueInputNode" />
-	<img src="" 
-		 alt="" 
- 		 dojoAttachPoint="containerDropdownNode" 
-		 dojoAttachEvent="onclick: onDropdown;" 
-		 style="vertical-align:middle; cursor:pointer; cursor:hand;" />
-	<div dojoAttachPoint="subWidgetContainerNode" 
-	 	 style="display:none;position:absolute;width:12em;background-color:#fff;">
-		 	<div dojoAttachPoint="subWidgetNode" 
-	 		  	 class="subWidgetContainer">
-	 		</div>
-	</div>
-</div>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/timeIcon.gif b/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/timeIcon.gif
deleted file mode 100644
index dc1f31c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/timeIcon.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/layout.js b/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/layout.js
deleted file mode 100644
index a7048f3..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/layout.js
+++ /dev/null
@@ -1,13 +0,0 @@
-window.onload=function(){
-if(!NiftyCheck())
-    return;
-Rounded("div#header","bottom","#D6DEEC","#84B7FF","smooth");
-Rounded("div#header h1","bottom","#84B7FF","#657DA6","small smooth");
-Rounded("div#content","tl bottom","#D6DEEC","#FFF","smooth");
-Rounded("div#nav","tr bottom","#D6DEEC","#95B3DE","smooth");
-Rounded("div#sidenotes","all","#D6DEEC","#B1C0D5","smooth");
-Rounded("form","all","#D6DEEC","#B4CEF7","smooth");
-Rounded("blockquote","tr bl","#FFF","#CDFFAA","border #88D84F");
-Rounded("div#relax","all","#FFF","transparent");
-Rounded("div#footer","all","#D6DEEC","#CCCCCC","small border #fff");
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/nifty.js b/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/nifty.js
deleted file mode 100644
index ee6753e..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/nifty.js
+++ /dev/null
@@ -1,174 +0,0 @@
-function NiftyCheck(){
-if(!document.getElementById || !document.createElement)
-    return(false);
-isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
-if(Array.prototype.push==null){Array.prototype.push=function(){
-      this[this.length]=arguments[0]; return(this.length);}}
-return(true);
-}
-
-function Rounded(selector,wich,bk,color,opt){
-var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
-
-if(color=="transparent"){
-    cn=cn+"x";
-    ecolor=bk;
-    bk="transparent";
-    }
-else if(opt && opt.indexOf("border")>=0){
-    var optar=opt.split(" ");
-    for(i=0;i<optar.length;i++)
-        if(optar[i].indexOf("#")>=0) ecolor=optar[i];
-    if(ecolor=="") ecolor="#666";
-    cn+="e";
-    edges=true;
-    }
-else if(opt && opt.indexOf("smooth")>=0){
-    cn+="a";
-    ecolor=Mix(bk,color);
-    }
-if(opt && opt.indexOf("small")>=0) cn+="s";
-prefixt=cn;
-prefixb=cn;
-if(wich.indexOf("all")>=0){t=true;b=true}
-else if(wich.indexOf("top")>=0) t="true";
-else if(wich.indexOf("tl")>=0){
-    t="true";
-    if(wich.indexOf("tr")<0) prefixt+="l";
-    }
-else if(wich.indexOf("tr")>=0){
-    t="true";
-    prefixt+="r";
-    }
-if(wich.indexOf("bottom")>=0) b=true;
-else if(wich.indexOf("bl")>=0){
-    b="true";
-    if(wich.indexOf("br")<0) prefixb+="l";
-    }
-else if(wich.indexOf("br")>=0){
-    b="true";
-    prefixb+="r";
-    }
-var v=getElementsBySelector(selector);
-var l=v.length;
-for(i=0;i<l;i++){
-    if(edges) AddBorder(v[i],ecolor);
-    if(t) AddTop(v[i],bk,color,ecolor,prefixt);
-    if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
-    }
-}
-
-function AddBorder(el,bc){
-var i;
-if(!el.passed){
-    if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
-        var t=el.firstChild.nodeValue;
-        el.removeChild(el.lastChild);
-        var d=CreateEl("span");
-        d.style.display="block";
-        d.appendChild(document.createTextNode(t));
-        el.appendChild(d);
-        }
-    for(i=0;i<el.childNodes.length;i++){
-        if(el.childNodes[i].nodeType==1){
-            el.childNodes[i].style.borderLeft="1px solid "+bc;
-            el.childNodes[i].style.borderRight="1px solid "+bc;
-            }
-        }
-    }
-el.passed=true;
-}
-    
-function AddTop(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=1;i<=lim;i++){
-    var x=CreateEl("b");
-    x.className=cn + i;
-    x.style.backgroundColor=color;
-    if(bc) x.style.borderColor=bc;
-    d.appendChild(x);
-    }
-el.style.paddingTop=0;
-el.insertBefore(d,el.firstChild);
-}
-
-function AddBottom(el,bk,color,bc,cn){
-var i,lim=4,d=CreateEl("b");
-
-if(cn.indexOf("s")>=0) lim=2;
-if(bc) d.className="artop";
-else d.className="rtop";
-d.style.backgroundColor=bk;
-for(i=lim;i>0;i--){
-    var x=CreateEl("b");
-    x.className=cn + i;
-    x.style.backgroundColor=color;
-    if(bc) x.style.borderColor=bc;
-    d.appendChild(x);
-    }
-el.style.paddingBottom=0;
-el.appendChild(d);
-}
-
-function CreateEl(x){
-if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
-else return(document.createElement(x));
-}
-
-function getElementsBySelector(selector){
-var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
-
-if(selector.indexOf(" ")>0){  //descendant selector like "tag#id tag"
-    s=selector.split(" ");
-    var fs=s[0].split("#");
-    if(fs.length==1) return(objlist);
-    f=document.getElementById(fs[1]);
-    if(f) return(f.getElementsByTagName(s[1]));
-    return(objlist);
-    }
-if(selector.indexOf("#")>0){ //id selector like "tag#id"
-    s=selector.split("#");
-    tag=s[0];
-    selid=s[1];
-    }
-if(selid!=""){
-    f=document.getElementById(selid);
-    if(f) objlist.push(f);
-    return(objlist);
-    }
-if(selector.indexOf(".")>0){  //class selector like "tag.class"
-    s=selector.split(".");
-    tag=s[0];
-    selclass=s[1];
-    }
-var v=document.getElementsByTagName(tag);  // tag selector like "tag"
-if(selclass=="")
-    return(v);
-for(i=0;i<v.length;i++){
-    if(v[i].className.indexOf(selclass)>=0){
-        objlist.push(v[i]);
-        }
-    }
-return(objlist);
-}
-
-function Mix(c1,c2){
-var i,step1,step2,x,y,r=new Array(3);
-if(c1.length==4)step1=1;
-else step1=2;
-if(c2.length==4) step2=1;
-else step2=2;
-for(i=0;i<3;i++){
-    x=parseInt(c1.substr(1+step1*i,step1),16);
-    if(step1==1) x=16*x+x;
-    y=parseInt(c2.substr(1+step2*i,step2),16);
-    if(step2==1) y=16*y+y;
-    r[i]=Math.floor((x*50+y*50)/100);
-    }
-return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
-} 
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/niftyCorners.css b/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/niftyCorners.css
deleted file mode 100644
index e47fc12..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/niftyCorners.css
+++ /dev/null
@@ -1,21 +0,0 @@
-.rtop,.artop{display:block}
-.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
-.artop *{border-style: solid;border-width:0 1px}
-.r1,.rl1,.re1,.rel1{margin-left:5px}
-.r1,.rr1,.re1,.rer1{margin-right:5px}
-.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
-.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
-.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
-.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
-.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
-.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
-.rx1,.rxl1{border-left-width:5px}
-.rx1,.rxr1{border-right-width:5px}
-.rx2,.rxl2{border-left-width:3px}
-.rx2,.rxr2{border-right-width:3px}
-.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
-.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
-.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
-.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
-.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
-.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/niftyPrint.css b/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/niftyPrint.css
deleted file mode 100644
index 2a871e0..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/niftyPrint.css
+++ /dev/null
@@ -1,2 +0,0 @@
-.rtop,.artop{display: none}
-
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/niftylayout.css b/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/niftylayout.css
deleted file mode 100644
index 4afce1b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/niftycorners/niftylayout.css
+++ /dev/null
@@ -1,57 +0,0 @@
-/*typography*/
-body{font: 76% verdana,arial,sans-serif;text-align: center}
-h1,h2,h3{font-family: "Trebuchet MS",arial,sans-serif}
-h1{font-size: 200%}
-h2{font-size: 160%}
-h3{font-size:110%;text-transform:uppercase;letter-spacing:1px;margin:0 5px}
-h2,p{margin: 0 15px;padding:0}
-p{padding-bottom: 0.7em;line-height: 1.5}
-a{text-decoration: none}
-address{padding: 3px 15px;font-style:normal}
-div#relax p{font-size: 120%}
-
-
-/*layout*/
-html{height: 100%; margin-bottom: 1px}
-html,body{margin:0;padding:0 0 20px}
-div#container{width: 550px;margin: 0 auto;text-align: left}
-div#header{margin:0 0 10px;padding: 0 0 5px}
-div#header h1{margin:0 5px;padding:60px 0 2px}
-div#header a{margin-left: 10px}
-div#sidebar{float: right;width: 150px}
-div#sidebar div{padding: 5px 0;margin-bottom: 5px}
-div#sidebar div#menu{margin: 0 5px}
-div#nav ul,div#nav li{margin:0;padding:0;list-style-type:none;line-height: 1.5}
-div#nav a{margin-left:5px;padding-left:10px}
-div#sidebar p{margin: 0 5px;padding:0}
-div#sidebar p+p{margin-top: 0.7em}
-form{margin: 5px 0;padding: 5px 0}
-form h3{margin-bottom: 10px}
-form div{padding: 5px 0}
-form input#find{width: 90px;margin-left:10px}
-div#content{width:395px;padding:5px 0}
-blockquote{float:left;display:inline;width: 200px;margin: 0 10px 5px 15px;padding: 5px 0}
-blockquote p{margin:0;padding: 0 5px;text-align: center}
-div#relax{margin: 0 15px 10px;padding: 5px 0}
-div#relax p, div#relax h2{margin: 0 5px}
-div#footer{clear: right;margin-top: 10px}
-
-/*colors*/
-body{background: #D6DEEC}
-div#header{background: #84B7FF}
-div#header h1{background: #657DA6}
-h1 a{color: #C1E6FF}
-h1 a:hover{color: #fff}
-h2{color: #f60}
-h3{color: #B02A36}
-div#nav{background: #95B3DE}
-div#nav a{background: url(bullet.jpg) no-repeat center left;color: #2660B1}
-div#nav a:hover{color: #FFF}
-div#sidenotes{background:#B1C0D5}
-form{background: #B4CEF7}
-div#content{background: #FFF}
-blockquote{background: #CDFFAA}
-div#relax{background: url(relax.jpg)}
-div#relax h2{color: #F7DEB5}
-div#relax p{color: #fff}
-div#footer{background: #CCC;color: #333}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/optiontransferselect.js b/trunk/core/src/main/resources/org/apache/struts2/static/optiontransferselect.js
deleted file mode 100644
index 3f2d62b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/optiontransferselect.js
+++ /dev/null
@@ -1,163 +0,0 @@
-function moveSelectedOptions(objSourceElement, objTargetElement, toSort, notMove1, notMove2) {
-    var test1 = compile(notMove1);
-    var test2 = compile(notMove2);
-    moveOptions(objSourceElement, objTargetElement, toSort, 
-        function(opt) {
-            return (opt.selected && !test1(opt.value) && !test2(opt.value));
-        }
-    );
-}
-
-function moveAllOptions(objSourceElement, objTargetElement, toSort, notMove1, notMove2) {
-    var test1 = compile(notMove1);
-    var test2 = compile(notMove2);
-    moveOptions(objSourceElement, objTargetElement, toSort, 
-        function(opt) {
-            return (!test1(opt.value) && !test2(opt.value));
-        }
-    );
-}
-
-function compile(ptn) {
-    if (ptn != undefined) {
-    	if (ptn == '' || !window.RegExp) {
-            return function(val) { return val == ptn; }
-        } else {
-            var reg = new RegExp(ptn);
-            return function (val) { 
-                if (val == '') { // ignore empty option added by template 
-                	return true;
-                }
-            	return reg.test(val); }
-        }
-    }
-    return function(val) { return false; }
-}    
-
-function moveOptions(objSourceElement, objTargetElement, toSort, chooseFunc) {
-    var aryTempSourceOptions = new Array();
-    var aryTempTargetOptions = new Array();
-    var x = 0;
-
-    //looping through source element to find selected options
-    for (var i = 0; i < objSourceElement.length; i++) {
-        if (chooseFunc(objSourceElement.options[i])) {
-            //need to move this option to target element
-            var intTargetLen = objTargetElement.length++;
-            objTargetElement.options[intTargetLen].text =   objSourceElement.options[i].text;
-            objTargetElement.options[intTargetLen].value =  objSourceElement.options[i].value;
-        }
-        else {
-            //storing options that stay to recreate select element
-            var objTempValues = new Object();
-            objTempValues.text = objSourceElement.options[i].text;
-            objTempValues.value = objSourceElement.options[i].value;
-            aryTempSourceOptions[x] = objTempValues;
-            x++;
-        }
-    }
-
-    //sorting and refilling target list
-    for (var i = 0; i < objTargetElement.length; i++) {
-        var objTempValues = new Object();
-        objTempValues.text = objTargetElement.options[i].text;
-        objTempValues.value = objTargetElement.options[i].value;
-        aryTempTargetOptions[i] = objTempValues;
-    }
-    
-    if (toSort) {
-        aryTempTargetOptions.sort(sortByText);
-    }    
-    
-    for (var i = 0; i < objTargetElement.length; i++) {
-        objTargetElement.options[i].text = aryTempTargetOptions[i].text;
-        objTargetElement.options[i].value = aryTempTargetOptions[i].value;
-        objTargetElement.options[i].selected = false;
-    }   
-    
-    //resetting length of source
-    objSourceElement.length = aryTempSourceOptions.length;
-    //looping through temp array to recreate source select element
-    for (var i = 0; i < aryTempSourceOptions.length; i++) {
-        objSourceElement.options[i].text = aryTempSourceOptions[i].text;
-        objSourceElement.options[i].value = aryTempSourceOptions[i].value;
-        objSourceElement.options[i].selected = false;
-    }
-}
-
-function sortByText(a, b) {
-    if (a.text < b.text) {return -1}
-    if (a.text > b.text) {return 1}
-    return 0;
-}
-
-function selectAllOptionsExceptSome(objTargetElement, type, ptn) {
-    var test = compile(ptn);
-    for (var i = 0; i < objTargetElement.length; i++) {
-        var opt = objTargetElement.options[i];
-        if ((type == 'key' && !test(opt.value)) ||
-              (type == 'text' && !test(opt.text))) {
-            opt.selected = true;
-        } else {
-            opt.selected = false;
-        }    
-    }
-    return false;
-}
-
-function selectAllOptions(objTargetElement) {
-    for (var i = 0; i < objTargetElement.length; i++) {
-        if (objTargetElement.options[i].value != '') {
-            objTargetElement.options[i].selected = true;    
-        }    
-    }
-    return false;
-}
-
-function moveOptionUp(objTargetElement, type, ptn) {
-	var test = compile(ptn);
-	for (i=0; i<objTargetElement.length; i++) {
-		if (objTargetElement[i].selected) {
-			var v;
-			if (i != 0 && !objTargetElement[i-1].selected) {
-		    	if (type == 'key') {
-		    		v = objTargetElement[i-1].value
-		    	}
-		    	else {
-		    		v = objTargetElement[i-1].text;
-		    	}
-				if (!test(v)) {
-					swapOptions(objTargetElement,i,i-1);
-				}
-		    }
-		}
-	}
-}
-
-function moveOptionDown(objTargetElement, type, ptn) {
-	var test = compile(ptn);
-	for (i=(objTargetElement.length-1); i>= 0; i--) {
-		if (objTargetElement[i].selected) {
-			var v;
-			if ((i != (objTargetElement.length-1)) && !objTargetElement[i+1].selected) {
-		    	if (type == 'key') {
-		    		v = objTargetElement[i].value
-		    	}
-		    	else {
-		    		v = objTargetElement[i].text;
-		    	}
-				if (!test(v)) {
-					swapOptions(objTargetElement,i,i+1);
-				}
-		    }
-		}
-	}
-}
-
-function swapOptions(objTargetElement, first, second) {
-	var opt = objTargetElement.options;
-	var temp = new Option(opt[first].text, opt[first].value, opt[first].defaultSelected, opt[first].selected);
-	var temp2= new Option(opt[second].text, opt[second].value, opt[second].defaultSelected, opt[second].selected);
-	opt[first] = temp2;
-	opt[second] = temp;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/tabs.css b/trunk/core/src/main/resources/org/apache/struts2/static/tabs.css
deleted file mode 100644
index 4db96bb..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/tabs.css
+++ /dev/null
@@ -1,79 +0,0 @@
-.tab_header {
-	position: relative;
-	width: 100%;
-	height: 3em;
-	width: 30em; /* a width is required for Opera, older Mozilla browsers, and Konqueror browsers */
-}
-
-.tab_header_main {
-    list-style-type: none;
-	margin: 0;
-	padding: 0;
-	position: absolute;
-	bottom: -1px;
-	width: 45em; /* a width is required for Opera, older Mozilla browsers, and Konqueror browsers */
-}
-
-.tab_header_main a {
-    display:block;
-    text-decoration:none;
-    padding:2px 0 5px;
-    color: #FFFFFF
-}
-
-.tab_selected, .tab_unselected, .tab_unselected_over {
-	width: 8em;
-	display: block;
-	float: left;
-	padding: 4px 0;
-	list-style: none;
-	margin: 1px 2px 0 0;
-	text-align: center;
-	font-family: tahoma, verdana, sans-serif;
-	font-size: 85%;
-	text-decoration: none;
-	color: #333;
-}
-
-.tab_selected {
-/*	border: 1px solid #666; */
-	border-bottom: none;
-	background: #999999;
-	padding-bottom: 6px;
-	margin-top: 0;
-	font-weight:bold;
-}
-
-.tab_unselected, .tab_unselected_over {
-	background: #A5A5A5;
-/*	border: 1px solid #AAA; */
-	border-bottom: none;
-	font-weight:normal;
-}
-
-.tab_unselected_over {
-	margin-top: 0;
-/*	border-color: #666; */
-	background: #AAAAAA;
-	padding-bottom: 5px;
-	font-weight:normal;
-}
-
-.tab_contents_header {
-/*	border: 2px solid #666; */
-    display: block;
-	clear: both;
-	background: #999999;
-	padding: 2px;
-}
-
-.tab_contents {
-	padding: 1.5em;
-	display: block;
-	background: #DDDDDD;
-	min-height: 300px;
-}
-
-.tab_contents_hidden  {
-	display: none;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/tree.css b/trunk/core/src/main/resources/org/apache/struts2/static/tree.css
deleted file mode 100644
index 0af721d..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/tree.css
+++ /dev/null
@@ -1,29 +0,0 @@
-.dojoTree {
-	font: caption;
-	font-size: 11px;
-	font-weight: normal;
-	overflow: auto;
-}
-
-.dojoTreeNodeLabel {
-	padding: 1px 2px;
-	color: WindowText;
-	cursor: default;
-}
-
-.dojoTreeNodeLabel:hover {
-	text-decoration: underline;
-}
-
-.dojoTreeNodeLabelSelected {
-	background-color: Highlight;
-	color: HighlightText;
-}
-
-.dojoTree div {
-	white-space: nowrap;
-}
-
-.dojoTree img {
-	vertical-align: middle;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/static/validationClient.js b/trunk/core/src/main/resources/org/apache/struts2/static/validationClient.js
deleted file mode 100644
index 3ce1362..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/static/validationClient.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- *
- * Common code to interface with the validationServlet 
- *
- */
-
-function ValidationClient(servletUrl) {
-
-	this.servletUrl = servletUrl;
-
-	this.validate = function(input, namespace, actionName) {
-		var vc = this;
-		var form = input.form;
-		var params = new Object();
-	    for (var i = 0; i < form.elements.length; i++) {
-	        var e = form.elements[i];
-            if (e.name != null && e.name != '') {
-                params[e.name] = e.value;
-            }
-        }
-
-		validator.doPost(function(action) {
-            if (action) {
-                vc.onErrors(input, action);
-            }
-        }, namespace, actionName, params);
-    }
-    
-
-	// @param formObject - the form object that triggered the validate call
-	// @param errors - a javascript object representing the action errors and field errors
-	// client should overwrite this handler to display the new error messages
-	this.onErrors = function(inputObject, errors) {
-	}
-	
-	return this;
-}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/struts-messages.properties b/trunk/core/src/main/resources/org/apache/struts2/struts-messages.properties
deleted file mode 100644
index e96518f..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/struts-messages.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-struts.messages.invalid.token=The form has already been processed or no token was supplied, please try again.
-struts.internal.invalid.token=Form token {0} does not match the session token {1}.
-
-struts.messages.bypass.request=Bypassing {0}/ {1}
-struts.messages.current.file=File {0} {1} {2} {3}
-struts.messages.invalid.file=Could not find a Filename for {0}. Verify that a valid file was submitted.
-struts.messages.invalid.content.type=Could not find a Content-Type for {0}. Verify that a valid file was submitted.
-struts.messages.removing.file=Removing file {0} {1}
-struts.messages.error.uploading=Error uploading: {0}
-struts.messages.error.file.too.large=File too large: {0} "{1}" {2}
-struts.messages.error.content.type.not.allowed=Content-Type not allowed: {0} "{1}" {2}
-
-struts.messages.devmode.notification=Developer Notification (set struts.devMode to false to disable this message):\n{0} 
diff --git a/trunk/core/src/main/resources/org/apache/struts2/struts-messages_da.properties b/trunk/core/src/main/resources/org/apache/struts2/struts-messages_da.properties
deleted file mode 100644
index eb8202b..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/struts-messages_da.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-struts.messages.invalid.token=Denne form er allerede blevet behandlet eller der mangler en token, venligst pr�v igen.
-struts.internal.invalid.token=Form token {0} passer ikke med den token som findes i session {1}.
-
-struts.messages.bypass.request=Springer over {0}/ {1}
-struts.messages.current.file=Fil {0} {1} {2} {3}
-struts.messages.invalid.file=Kan ikke finde filen {0}. Unders�g om den angivne fil er gyldig.
-struts.messages.invalid.content.type=Kan ikke finde en Content-Type til {0}. Unders�g om den angivne fil er gyldig.
-struts.messages.removing.file=Sletter fil {0} {1}
-struts.messages.error.uploading=Fejl ved upload: {0}
-struts.messages.error.file.too.large=Filen er for stor: {0} "{1}" {2}
-struts.messages.error.content.type.not.allowed=Content-Type er ikke tilladt: {0} "{1}" {2}
-
-struts.messages.devmode.notification=Note til udvikler (ret struts.devMode til 'false' for at deaktivere denne meddelse):\n{0}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/struts-messages_de.properties b/trunk/core/src/main/resources/org/apache/struts2/struts-messages_de.properties
deleted file mode 100644
index 2afe49c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/struts-messages_de.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-struts.messages.invalid.token=Das Formular wurde bereits verarbeitet oder es wurde kein Token angegeben, bitte versuchen Sie es erneut.
-struts.internal.invalid.token=Formular Token {0} stimmt nicht mit dem Session token {1} überein.
-
-struts.messages.bypass.request=Überspringe {0}/ {1}
-struts.messages.current.file=Datei {0} {1} {2} {3}
-struts.messages.invalid.file=Es konnte kein Dateiname für {0} ermittelt werden. Überprüfen Sie ob eine gültige Datei übermittelt wurde.
-struts.messages.invalid.content.type=Konnte keinen Content-Type für {0} ermitteln. Überprüfen Sie ob eine gültige Datei übermittelt wurde.
-struts.messages.removing.file=Entferne Datei {0} {1}
-struts.messages.error.uploading=Fehler beim Upload: {0}
-struts.messages.error.file.too.large=Datei zu gross: {0} "{1}" {2}
-struts.messages.error.content.type.not.allowed=Content-Type nicht erlaubt: {0} "{1}" {2}
-
-struts.messages.devmode.notification=Entwickler Hinweis (Setzen Sie struts.devMode auf false um diese Nachricht zu deaktivieren):\n{0}
diff --git a/trunk/core/src/main/resources/org/apache/struts2/util/package.html b/trunk/core/src/main/resources/org/apache/struts2/util/package.html
deleted file mode 100644
index 91196fc..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/util/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Miscellaneous helper classes.</body>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/views/freemarker/package.html b/trunk/core/src/main/resources/org/apache/struts2/views/freemarker/package.html
deleted file mode 100644
index 328048c..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/views/freemarker/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Classes for views using FreeMarker.</body>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/views/jsp/iterator/package.html b/trunk/core/src/main/resources/org/apache/struts2/views/jsp/iterator/package.html
deleted file mode 100644
index f175d47..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/views/jsp/iterator/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Struts's JSP tag library for iterator handling.</body>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/views/jsp/ui/package.html b/trunk/core/src/main/resources/org/apache/struts2/views/jsp/ui/package.html
deleted file mode 100644
index 80662cf..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/views/jsp/ui/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Struts' JSP UI tags.</body>
diff --git a/trunk/core/src/main/resources/org/apache/struts2/views/jsp/ui/table/package.html b/trunk/core/src/main/resources/org/apache/struts2/views/jsp/ui/table/package.html
deleted file mode 100644
index 5755685..0000000
--- a/trunk/core/src/main/resources/org/apache/struts2/views/jsp/ui/table/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>JSP UI tags for modeling tables.</body>
diff --git a/trunk/core/src/main/resources/overview.html b/trunk/core/src/main/resources/overview.html
deleted file mode 100644
index 6573508..0000000
--- a/trunk/core/src/main/resources/overview.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<body>
-
-This document is the API specification for Struts - note, Struts is built on top of
-<a href="http://wiki.opensymphony.com/space/XWork" target="_blank">XWork</a>.
-
-</body>
diff --git a/trunk/core/src/main/resources/struts-2.0.dtd b/trunk/core/src/main/resources/struts-2.0.dtd
deleted file mode 100644
index 5612042..0000000
--- a/trunk/core/src/main/resources/struts-2.0.dtd
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- START SNIPPET: strutsDtd -->
-
-<!--
-   Struts configuration DTD.
-   Use the following DOCTYPE
-   
-   <!DOCTYPE struts PUBLIC 
-	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-	"http://struts.apache.org/dtds/struts-2.0.dtd">
--->
-
-<!ELEMENT struts (package|include)*>
-
-<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, global-results?, global-exception-mappings?, action*)>
-<!ATTLIST package
-    name CDATA #REQUIRED
-    extends CDATA #IMPLIED
-    namespace CDATA #IMPLIED
-    abstract CDATA #IMPLIED
-    externalReferenceResolver NMTOKEN #IMPLIED
->
-
-<!ELEMENT result-types (result-type+)>
-
-<!ELEMENT result-type (param*)>
-<!ATTLIST result-type
-    name CDATA #REQUIRED
-    class CDATA #REQUIRED
-    default (true|false) "false"
->
-
-<!ELEMENT interceptors (interceptor|interceptor-stack)+>
-
-<!ELEMENT interceptor (param*)>
-<!ATTLIST interceptor
-    name CDATA #REQUIRED
-    class CDATA #REQUIRED
->
-
-<!ELEMENT interceptor-stack (interceptor-ref+)>
-<!ATTLIST interceptor-stack
-    name CDATA #REQUIRED
->
-
-<!ELEMENT interceptor-ref (param*)>
-<!ATTLIST interceptor-ref
-    name CDATA #REQUIRED
->
-
-<!ELEMENT default-interceptor-ref (param*)>
-<!ATTLIST default-interceptor-ref
-    name CDATA #REQUIRED
->
-
-<!ELEMENT default-action-ref (param*)>
-<!ATTLIST default-action-ref
-    name CDATA #REQUIRED
->
-
-<!ELEMENT external-ref (#PCDATA)>
-<!ATTLIST external-ref
-    name NMTOKEN #REQUIRED
-    required (true|false) "true"
->
-
-<!ELEMENT global-results (result+)>
-
-<!ELEMENT global-exception-mappings (exception-mapping+)>
-
-<!ELEMENT action (param|result|interceptor-ref|exception-mapping|external-ref)*>
-<!ATTLIST action
-    name CDATA #REQUIRED
-    class CDATA #IMPLIED
-    method CDATA #IMPLIED
-    converter CDATA #IMPLIED
->
-
-<!ELEMENT param (#PCDATA)>
-<!ATTLIST param
-    name CDATA #REQUIRED
->
-
-<!ELEMENT result (#PCDATA|param)*>
-<!ATTLIST result
-    name CDATA #IMPLIED
-    type CDATA #IMPLIED
->
-
-<!ELEMENT exception-mapping (#PCDATA|param)*>
-<!ATTLIST exception-mapping
-    name CDATA #IMPLIED
-    exception CDATA #REQUIRED
-    result CDATA #REQUIRED
->
-
-<!ELEMENT include (#PCDATA)>
-<!ATTLIST include
-    file CDATA #REQUIRED
->
-
-<!-- END SNIPPET: strutsDtd -->
-
diff --git a/trunk/core/src/main/resources/struts-default.xml b/trunk/core/src/main/resources/struts-default.xml
deleted file mode 100644
index 576d0d5..0000000
--- a/trunk/core/src/main/resources/struts-default.xml
+++ /dev/null
@@ -1,186 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-    
-<struts>
-    <package name="struts-default">
-        <result-types>
-            <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
-            <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
-            <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
-            <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
-            <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
-            <result-type name="redirect-action" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
-            <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
-            <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
-            <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
-            <result-type name="plaintext" class="org.apache.struts2.dispatcher.PlainTextResult" />
-        </result-types>
-
-        <interceptors>
-            <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
-            <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
-            <interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>
-            <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>
-            <interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" />
-            <interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" />
-            <interceptor name="external-ref" class="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor"/>
-            <interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/>
-            <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>
-            <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
-            <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>
-            <interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/>
-            <interceptor name="model-driven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
-            <interceptor name="scoped-model-driven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>
-            <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
-            <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>
-            <interceptor name="static-params" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>
-            <interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/>
-            <interceptor name="servlet-config" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
-            <interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
-            <interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/>
-            <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>
-            <interceptor name="token-session" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>
-            <interceptor name="validation" class="com.opensymphony.xwork2.validator.ValidationInterceptor"/>
-            <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>
-            <interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" />
-            <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" />
-            <interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" />
-            
-            <!-- Basic stack -->
-            <interceptor-stack name="basicStack">
-                <interceptor-ref name="exception"/>
-                <interceptor-ref name="servlet-config"/>
-                <interceptor-ref name="prepare"/>
-                <interceptor-ref name="checkbox"/>
-                <interceptor-ref name="params"/>
-                <interceptor-ref name="conversionError"/>
-            </interceptor-stack>
-
-            <!-- Sample validation and workflow stack -->
-            <interceptor-stack name="validationWorkflowStack">
-                <interceptor-ref name="basicStack"/>
-                <interceptor-ref name="validation"/>
-                <interceptor-ref name="workflow"/>
-            </interceptor-stack>
-
-            <!-- Sample file upload stack -->
-            <interceptor-stack name="fileUploadStack">
-                <interceptor-ref name="fileUpload"/>
-                <interceptor-ref name="basicStack"/>
-            </interceptor-stack>
-
-            <!-- Sample model-driven stack  -->
-            <interceptor-stack name="modelDrivenStack">
-                <interceptor-ref name="model-driven"/>
-                <interceptor-ref name="basicStack"/>
-            </interceptor-stack>
-
-            <!-- Sample action chaining stack -->
-            <interceptor-stack name="chainStack">
-                <interceptor-ref name="chain"/>
-                <interceptor-ref name="basicStack"/>
-            </interceptor-stack>
-
-            <!-- Sample i18n stack -->
-            <interceptor-stack name="i18nStack">
-                <interceptor-ref name="i18n"/>
-                <interceptor-ref name="basicStack"/>
-            </interceptor-stack>
-
-            <!-- An example of the params-prepare-params trick. This stack
-                 is exactly the same as the defaultStack, except that it
-                 includes one extra interceptor before the prepare interceptor:
-                 the params interceptor.
-
-                 This is useful for when you wish to apply parameters directly
-                 to an object that you wish to load externally (such as a DAO
-                 or database or service layer), but can't load that object
-                 until at least the ID parameter has been loaded. By loading
-                 the parameters twice, you can retrieve the object in the
-                 prepare() method, allowing the second params interceptor to
-                 apply the values on the object. -->
-            <interceptor-stack name="paramsPrepareParamsStack">
-                <interceptor-ref name="exception"/>
-                <interceptor-ref name="alias"/>
-                <interceptor-ref name="params"/>
-                <interceptor-ref name="servlet-config"/>
-                <interceptor-ref name="prepare"/>
-                <interceptor-ref name="i18n"/>
-                <interceptor-ref name="chain"/>
-                <interceptor-ref name="model-driven"/>
-                <interceptor-ref name="fileUpload"/>
-                <interceptor-ref name="checkbox"/>
-                <interceptor-ref name="static-params"/>
-                <interceptor-ref name="params"/>
-                <interceptor-ref name="conversionError"/>
-                <interceptor-ref name="validation">
-                    <param name="excludeMethods">input,back,cancel</param>
-                </interceptor-ref>
-                <interceptor-ref name="workflow">
-                    <param name="excludeMethods">input,back,cancel</param>
-                </interceptor-ref>
-            </interceptor-stack>
-
-            <!-- A complete stack with all the common interceptors in place.
-                 Generally, this stack should be the one you use, though it
-                 may do more than you need. Also, the ordering can be
-                 switched around (ex: if you wish to have your servlet-related
-                 objects applied before prepare() is called, you'd need to move
-                 servlet-config interceptor up.
-
-                 This stack also excludes from the normal validation and workflow
-                 the method names input, back, and cancel. These typically are
-                 associated with requests that should not be validated.
-                 -->
-            <interceptor-stack name="defaultStack">
-                <interceptor-ref name="exception"/>
-                <interceptor-ref name="alias"/>
-                <interceptor-ref name="servlet-config"/>
-                <interceptor-ref name="prepare"/>
-                <interceptor-ref name="i18n"/>
-                <interceptor-ref name="chain"/>
-                <interceptor-ref name="debugging"/>
-                <interceptor-ref name="profiling"/>
-                <interceptor-ref name="scoped-model-driven"/>
-                <interceptor-ref name="model-driven"/>
-                <interceptor-ref name="fileUpload"/>
-                <interceptor-ref name="checkbox"/>
-                <interceptor-ref name="static-params"/>
-                <interceptor-ref name="params"/>
-                <interceptor-ref name="conversionError"/>
-                <interceptor-ref name="validation">
-                    <param name="excludeMethods">input,back,cancel,browse</param>
-                </interceptor-ref>
-                <interceptor-ref name="workflow">
-                    <param name="excludeMethods">input,back,cancel,browse</param>
-                </interceptor-ref>
-            </interceptor-stack>
-
-            <!-- The completeStack is here for backwards compatibility for
-                 applications that still refer to the defaultStack by the
-                 old name -->
-            <interceptor-stack name="completeStack">
-                <interceptor-ref name="defaultStack"/>
-            </interceptor-stack>
-
-            <!-- Sample execute and wait stack.
-                 Note: execAndWait should always be the *last* interceptor. -->
-            <interceptor-stack name="executeAndWaitStack">
-                <interceptor-ref name="execAndWait">
-                    <param name="excludeMethods">input,back,cancel</param>
-                </interceptor-ref>
-                <interceptor-ref name="defaultStack"/>
-                <interceptor-ref name="execAndWait">
-                    <param name="excludeMethods">input,back,cancel</param>
-                </interceptor-ref>
-            </interceptor-stack>
-            
-       </interceptors>
-        
-        <default-interceptor-ref name="defaultStack"/>
-    </package>
-
-</struts>
diff --git a/trunk/core/src/main/resources/struts-plugin-default.xml b/trunk/core/src/main/resources/struts-plugin-default.xml
deleted file mode 100644
index 1154ba7..0000000
--- a/trunk/core/src/main/resources/struts-plugin-default.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-    
-<struts>
-    <package name="struts-portlet-default" extends="struts-default">
-
-	   <result-types>
-			<result-type name="dispatcher" class="org.apache.struts2.portlet.result.PortletResult" default="true"/>
-			<result-type name="freemarker" class="org.apache.struts2.views.freemarker.PortletFreemarkerResult"/>
-			<result-type name="velocity" class="org.apache.struts2.portlet.result.PortletVelocityResult"/>
-	   </result-types>
-
-	   <action name="renderDirect" class="org.apache.struts2.portlet.dispatcher.DirectRenderFromEventAction">
-	   		<result name="success">${location}</result>
-	   </action>
-	   <action name="freemarkerDirect" class="org.apache.struts2.portlet.dispatcher.DirectRenderFromEventAction">
-	   		<result type="freemarker" name="success">${location}</result>
-	   </action>
-	   <action name="velocityDirect" class="org.apache.struts2.portlet.dispatcher.DirectRenderFromEventAction">
-	   		<result type="velocity" name="success">${location}</result>
-	   </action>
-	</package>
-</struts>
diff --git a/trunk/core/src/main/resources/struts.vm b/trunk/core/src/main/resources/struts.vm
deleted file mode 100644
index c908156..0000000
--- a/trunk/core/src/main/resources/struts.vm
+++ /dev/null
@@ -1,17 +0,0 @@
-#macro(bean $bean_name $name)
-   #set ($name = $struts.bean($bean_name))
-#end
-
-#macro(includeservlet $name)
-  $struts.include($name,$req,$res)
-#end
-
-#macro(url $name)
-   #set ($name = $struts.bean("org.apache.struts2.util.URLBean"))
-   $name.setRequest($req)
-   $name.setResponse($res)
-#end
-
-#macro(property $object $property)
-$!{ognl.findValue($property, $object)}
-#end
diff --git a/trunk/core/src/main/resources/template/ajax/a.ftl b/trunk/core/src/main/resources/template/ajax/a.ftl
deleted file mode 100644
index 1e21db8..0000000
--- a/trunk/core/src/main/resources/template/ajax/a.ftl
+++ /dev/null
@@ -1,33 +0,0 @@
-<a dojoType="BindAnchor" evalResult="true"<#rt/>
-<#if parameters.id?if_exists != "">
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.href?if_exists != "">
- href="${parameters.href}"<#rt/>
-</#if>
-<#if parameters.notifyTopics?exists>
- notifyTopics="${parameters.notifyTopics}"<#rt/>
-</#if>
-<#if parameters.errorText?if_exists != "">
- errorHtml="${parameters.errorText?html}"<#rt/>
-</#if>
-<#if parameters.showErrorTransportText?exists>
- showTransportError="true"<#rt/>
-</#if>
-<#if parameters.afterLoading?exists>
- onLoad="${parameters.afterLoading}"<#rt/>
-</#if>
-<#if parameters.preInvokeJS?exists>
- preInvokeJS="${parameters.preInvokeJS}"<#rt/>
-</#if>
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl"/>
->
diff --git a/trunk/core/src/main/resources/template/ajax/controlheader.ftl b/trunk/core/src/main/resources/template/ajax/controlheader.ftl
deleted file mode 100644
index 505348e..0000000
--- a/trunk/core/src/main/resources/template/ajax/controlheader.ftl
+++ /dev/null
@@ -1,11 +0,0 @@
-<#--include "/${parameters.templateDir}/xhtml/controlheader-core.ftl" /-->
-<#if parameters.form?exists && parameters.form.validate?default(false) == true>
-	<#-- can't mutate the data model in freemarker -->
-    <#if parameters.onblur?exists>
-        ${tag.addParameter('onblur', "validate(this);${parameters.onblur}")}
-    <#else>
-        ${tag.addParameter('onblur', "validate(this);")}
-    </#if>
-</#if>
-<#include "/${parameters.templateDir}/${themeProperties.parent}/controlheader.ftl" />
-    
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/template/ajax/div.ftl b/trunk/core/src/main/resources/template/ajax/div.ftl
deleted file mode 100644
index 2ab6f46..0000000
--- a/trunk/core/src/main/resources/template/ajax/div.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<div dojoType='BindDiv'
-	<#if parameters.id?if_exists != "">id="${parameters.id?html}"</#if>
-    <#if parameters.title?exists>title="${parameters.title?html}"</#if>
-    <#if parameters.name?exists>name="${parameters.name?html}"</#if>
-	<#if parameters.href?if_exists != "">href="${parameters.href}"</#if>
-	<#if parameters.loadingText?if_exists != "">loadingHtml="${parameters.loadingText?html}"</#if>
-	<#if parameters.errorText?if_exists != "">errorHtml="${parameters.errorText?html}"</#if>
-	<#if parameters.showErrorTransportText?exists>showTransportError='true'</#if>
-	<#if parameters.delay?exists>delay='${parameters.delay}'</#if>
-	<#if parameters.updateFreq?exists>refresh='${parameters.updateFreq}'</#if>
-	<#if parameters.listenTopics?exists>listenTopics='${parameters.listenTopics}'</#if>
-	<#if parameters.afterLoading?exists>onLoad='${parameters.afterLoading}'</#if>
-	<#if parameters.autoStart?exists>autoStart='${parameters.autoStart}'</#if>
-	
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
->
diff --git a/trunk/core/src/main/resources/template/ajax/dojoRequire.js b/trunk/core/src/main/resources/template/ajax/dojoRequire.js
deleted file mode 100644
index 30117a1..0000000
--- a/trunk/core/src/main/resources/template/ajax/dojoRequire.js
+++ /dev/null
@@ -1,13 +0,0 @@
-dojo.require("dojo.io.BrowserIO");
-dojo.require("dojo.event.topic");
-
-dojo.hostenv.setModulePrefix('struts', 'struts');
-dojo.require('dojo.widget.*');
-dojo.widget.manager.registerWidgetPackage('struts.widgets');
-
-dojo.require("struts.widgets.Bind");
-dojo.require("struts.widgets.BindDiv");
-dojo.require("struts.widgets.BindButton");
-dojo.require("struts.widgets.BindAnchor");
-dojo.require("dojo.widget.Editor");
-dojo.hostenv.writeIncludes(); // not needed, but allows the Venkman debugger to work with the includes
diff --git a/trunk/core/src/main/resources/template/ajax/form-close.ftl b/trunk/core/src/main/resources/template/ajax/form-close.ftl
deleted file mode 100644
index 99e553d..0000000
--- a/trunk/core/src/main/resources/template/ajax/form-close.ftl
+++ /dev/null
@@ -1,73 +0,0 @@
-
-<#if (parameters.customOnsubmitEnabled?default(false))>
-<script>
-<#-- 
-  Enable auto-select of optiontransferselect tag's entries upon containing form's 
-  submission.
--->
-dojo.require("dojo.event.connect");
-<#if (parameters.optiontransferselectIds?if_exists?size > 0)>
-	var containingForm = document.getElementById("${parameters.id}");
-	<#assign selectObjIds = parameters.optiontransferselectIds.keySet() />
-	<#list selectObjIds as selectObjectId>
-		dojo.event.connect(containingForm, "onsubmit", 
-			function(evt) {
-				var selectObj = document.getElementById("${selectObjectId}");
-				<#if parameters.optiontransferselectIds.get(selectObjectId)?exists>
-					<#assign selectTagHeaderKey = parameters.optiontransferselectIds.get(selectObjectId)/>
-					selectAllOptionsExceptSome(selectObj, "key", "${selectTagHeaderKey}");
-				<#else>
-					selectAllOptionsExceptSome(selectObj, "key", "");
-				</#if>
-			});
-	</#list>
-</#if>
-<#if (parameters.optiontransferselectDoubleIds?if_exists?size > 0)>
-	var containingForm = document.getElementById("${parameters.id}");
-	<#assign selectDoubleObjIds = parameters.optiontransferselectDoubleIds.keySet() />
-	<#list selectDoubleObjIds as selectObjId>
-		dojo.event.connect(containingForm, "onsubmit", 
-			function(evt) {
-				var selectObj = document.getElementById("${selectObjId}");
-				<#if parameters.optiontransferselectDoubleIds.get(selectObjId)?exists>
-					<#assign selectTagHeaderKey = parameters.optiontransferselectDoubleIds.get(selectObjId)/>
-					selectAllOptionsExceptSome(selectObj, "key", "${selectTagHeaderKey}");
-				<#else>
-					selectAllOptionsExceptSome(selectObj, "key", "");
-				</#if>
-			});
-	</#list>
-</#if>
-
-
-<#--
-	Enable auto-select of all elements of updownselect tag upon its containing form
-	submission
--->
-<#if (parameters.updownselectIds?if_exists?size > 0)>
-	var containingForm = document.getElementById("${parameters.id}");
-	<#assign tmpIds = parameters.updownselectIds.keySet() />
-	<#list tmpIds as tmpId>
-		dojo.event.connect(containingForm, "onsubmit", 
-			function(evt) {
-				var updownselectObj = document.getElementById("${tmpId}");
-				<#if parameters.updownselectIds.get(tmpId)?exists>
-					<#assign tmpHeaderKey = parameters.updownselectIds.get(tmpId) />
-					selectAllOptionsExceptSome(updownselectObj, "key", "${tmpHeaderKey}");
-				<#else>
-					selectAllOptionsExceptSome(updownselectObj, "key", "");
-				</#if>
-			});
-	</#list>
-</#if>
-</script>
-</#if>
-
-<#-- 
- Code that will add javascript needed for tooltips
---><#t/>
-	<#lt/><!-- javascript that is needed for tooltips -->
-	<#lt/><script language="JavaScript" type="text/javascript">dojo.require("dojo.widget.html.Tooltip");dojo.require("dojo.fx.html");</script>
-
-</table>
-</form>
diff --git a/trunk/core/src/main/resources/template/ajax/form.ftl b/trunk/core/src/main/resources/template/ajax/form.ftl
deleted file mode 100644
index 7ae5c00..0000000
--- a/trunk/core/src/main/resources/template/ajax/form.ftl
+++ /dev/null
@@ -1,48 +0,0 @@
-<#if parameters.validate?exists>
-<script src="${base}/struts/validationClient.js"></script>
-<script src="${base}/dwr/interface/validator.js"></script>
-<script src="${base}/dwr/engine.js"></script>
-<script src="${base}/struts/ajax/validation.js"></script>
-<script src="${base}/struts/${themeProperties.parent}/validation.js"></script>
-</#if>
-<form<#rt/>
-<#if parameters.namespace?exists>
- namespace="${parameters.namespace?html}"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.name?exists>
- name="${parameters.name?html}"<#rt/>
-</#if>
-<#if parameters.action?exists>
- action="${parameters.action?html}"<#rt/>
-</#if>
-<#if parameters.target?exists>
- target="${parameters.target?html}"<#rt/>
-</#if>
-<#if parameters.method?exists>
- method="${parameters.method?html}"<#rt/>
-</#if>
-<#if parameters.enctype?exists>
- enctype="${parameters.enctype?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.acceptcharset?exists>
- accept-charset="${parameters.acceptcharset?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
- ${tag.addParameter("ajaxSubmit", "true")}
- onSubmit="return isAjaxFormSubmit(this);"
->
-<#include "/${parameters.templateDir}/${themeProperties.parent}/control.ftl" />
-<#--
-<table class="${parameters.cssClass?default('wwFormTable')?html}"<#rt/>
-<#if parameters.cssStyle?exists> style="${parameters.cssStyle?html}"<#rt/>
-</#if>
->
--->
diff --git a/trunk/core/src/main/resources/template/ajax/head.ftl b/trunk/core/src/main/resources/template/ajax/head.ftl
deleted file mode 100644
index bd85e3b..0000000
--- a/trunk/core/src/main/resources/template/ajax/head.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-<#--include "/${parameters.templateDir}/xhtml/head.ftl" /-->
-<#include "/${parameters.templateDir}/${themeProperties.parent}/head.ftl" />
-<script language="JavaScript" type="text/javascript"
-        src="<@s.url value='/struts/ajax/dojoRequire.js' includeParams='none' encode='false'  />"></script>
-<script language="JavaScript" type="text/javascript"
-        src="<@s.url value='/struts/CommonFunctions.js' includeParams='none' encode='false'/>"></script>
diff --git a/trunk/core/src/main/resources/template/ajax/submit-ajax.ftl b/trunk/core/src/main/resources/template/ajax/submit-ajax.ftl
deleted file mode 100644
index 6eb25c2..0000000
--- a/trunk/core/src/main/resources/template/ajax/submit-ajax.ftl
+++ /dev/null
@@ -1,41 +0,0 @@
-<#--
-<tr>
-    <td colspan="2"><div <#rt/>
--->
-<#include "/${parameters.templateDir}/${themeProperties.parent}/controlheader.ftl" />
-<button type="submit" dojoType="BindButton"<#rt/>
-<#if parameters.form?exists && parameters.form.id?exists>
- formId="${parameters.form.id}"<#rt/>
-</#if>
-<#if parameters.name?exists>
- name="${parameters.name?html}"<#rt/>
-</#if>
-<#if parameters.nameValue?exists>
- value="<@s.property value="parameters.nameValue"/>"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.resultDivId?exists>
- targetDiv="${parameters.resultDivId}"<#rt/>
-</#if>
-<#if parameters.onLoadJS?exists>
- onLoad="${parameters.onLoadJS}"<#rt/>
-</#if>
-<#if parameters.preInvokeJS?exists>
- preInvokeJS="${parameters.preInvokeJS}"<#rt/>
-</#if>
-<#if parameters.notifyTopics?exists>
- notifyTopics="${parameters.notifyTopics}"<#rt/>
-</#if>
-<#if parameters.listenTopics?exists>
- listenTopics="${parameters.listenTopics}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl"/>
-><#if parameters.nameValue?exists><@s.property value="parameters.nameValue"/><#rt/></#if></button>
-<#--include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /-->
-<#include "/${parameters.templateDir}/${themeProperties.parent}/controlfooter.ftl" />
-
diff --git a/trunk/core/src/main/resources/template/ajax/submit.ftl b/trunk/core/src/main/resources/template/ajax/submit.ftl
deleted file mode 100644
index 7962d4f..0000000
--- a/trunk/core/src/main/resources/template/ajax/submit.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<#if parameters.resultDivId?exists || parameters.onLoadJS?exists>
-<#include "/${parameters.templateDir}/ajax/submit-ajax.ftl" />
-${tag.addFormParameter("ajaxSubmit", "false")}
-<#else>
-<#--include "/${parameters.templateDir}/xhtml/submit.ftl" /-->
-<#include "/${parameters.templateDir}/${themeProperties.parent}/submit.ftl" />
-</#if>
diff --git a/trunk/core/src/main/resources/template/ajax/tab-close.ftl b/trunk/core/src/main/resources/template/ajax/tab-close.ftl
deleted file mode 100644
index 3e2a4d1..0000000
--- a/trunk/core/src/main/resources/template/ajax/tab-close.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-    </div>
-    </div>
-
-    <script language="JavaScript" type="text/javascript">
-        var tabpanelc_${parameters.id} = new TabContent( "${parameters.id}", ${parameters.remote} );
-        dojo.event.topic.subscribe( "${parameters.subscribeTopicName}", tabpanelc_${parameters.id}, "updateVisibility" );
-    </script>
diff --git a/trunk/core/src/main/resources/template/ajax/tab.ftl b/trunk/core/src/main/resources/template/ajax/tab.ftl
deleted file mode 100644
index f36bd1b..0000000
--- a/trunk/core/src/main/resources/template/ajax/tab.ftl
+++ /dev/null
@@ -1,17 +0,0 @@
-<div class="tab_contents_hidden" id="tab_contents_${parameters.id}">
-    <div class="tab_contents"
-         id="tab_contents_update_${parameters.id}"
-    <#if parameters.remote?exists>
-            dojoType='BindDiv' 
-            <#if parameters.href?if_exists != "">href="${parameters.href}"</#if>
-        <#if parameters.loadingText?if_exists != "">loadingHtml="${parameters.loadingText?html}"</#if>
-            <#if parameters.errorText?if_exists != "">errorHtml="${parameters.errorText?html}"</#if>
-                <#if parameters.showErrorTransportText?exists>showTransportError='true'</#if>
-                     delay='1'
-                        <#if parameters.updateFreq?exists>refresh='${parameters.updateFreq}'</#if>
-                            <#if parameters.listenTopics?exists>listenTopics='${parameters.listenTopics}'</#if>
-                                <#if parameters.afterLoading?exists>onLoad='${parameters.afterLoading}'</#if>
-                                </#if>
-                                <#if parameters.cssStyle?exists>style="${parameters.cssStyle?html}"</#if>
-                                    <#if parameters.cssClass?exists>class="${parameters.cssClass?html}"</#if>
-                                        >
diff --git a/trunk/core/src/main/resources/template/ajax/textarea.ftl b/trunk/core/src/main/resources/template/ajax/textarea.ftl
deleted file mode 100644
index c5ea837..0000000
--- a/trunk/core/src/main/resources/template/ajax/textarea.ftl
+++ /dev/null
@@ -1,45 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-
-<textarea<#rt/>
- dojoType="Editor"
-<#if parameters.editorControls?exists>
- items="${parameters.editorControls?html}"<#rt/>
-<#else>
- items="linkGroup;|;textGroup;|;justifyGroup;|;listGroup;|;indentGroup;|;colorGroup"
-</#if>
- name="${parameters.name?default("")?html}"<#rt/>
- cols="${parameters.cols?default("")?html}"<#rt/>
- rows="${parameters.rows?default("")?html}"<#rt/>
-<#if parameters.wrap?exists>
- wrap="${parameters.wrap?html}"<#rt/>
-</#if>
-<#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-</#if>
-<#if parameters.readonly?default(false)>
- readonly="readonly"<#rt/>
-</#if>
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-><#rt/>
-<#if parameters.nameValue?exists>
-<@s.property value="parameters.nameValue"/><#t/>
-</#if>
-</textarea>
-
-<#--include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /-->
-<#include "/${parameters.templateDir}/${themeProperties.parent}/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/ajax/theme.properties b/trunk/core/src/main/resources/template/ajax/theme.properties
deleted file mode 100644
index 1b04afa..0000000
--- a/trunk/core/src/main/resources/template/ajax/theme.properties
+++ /dev/null
@@ -1 +0,0 @@
-parent=xhtml
diff --git a/trunk/core/src/main/resources/template/ajax/tree-close.ftl b/trunk/core/src/main/resources/template/ajax/tree-close.ftl
deleted file mode 100644
index 811591b..0000000
--- a/trunk/core/src/main/resources/template/ajax/tree-close.ftl
+++ /dev/null
@@ -1 +0,0 @@
-<#if parameters.label?exists></div></#if></div>
diff --git a/trunk/core/src/main/resources/template/ajax/tree.ftl b/trunk/core/src/main/resources/template/ajax/tree.ftl
deleted file mode 100644
index ee6fc92..0000000
--- a/trunk/core/src/main/resources/template/ajax/tree.ftl
+++ /dev/null
@@ -1,86 +0,0 @@
- <script language="JavaScript" type="text/javascript">
-        <!--
-        dojo.require("dojo.lang.*");
-        dojo.require("dojo.widget.*");
-        dojo.require("dojo.widget.Tree");
-        // dojo.hostenv.writeIncludes();
-        -->
- </script>
-<div dojoType="Tree"   
-	<#if parameters.blankIconSrc?exists>
-	gridIconSrcT="<@s.url value='${parameters.blankIconSrc}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.gridIconSrcL?exists>
-	gridIconSrcL="<@s.url value='${parameters.gridIconSrcL}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.gridIconSrcV?exists>
-	gridIconSrcV="<@s.url value='${parameters.gridIconSrcV}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.gridIconSrcP?exists>
-	gridIconSrcP="<@s.url value='${parameters.gridIconSrcP}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.gridIconSrcC?exists>
-	gridIconSrcC="<@s.url value='${parameters.gridIconSrcC}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.gridIconSrcX?exists>
-	gridIconSrcX="<@s.url value='${parameters.gridIconSrcX}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.gridIconSrcY?exists>
-	gridIconSrcY="<@s.url value='${parameters.gridIconSrcY}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.gridIconSrcZ?exists>
-	gridIconSrcZ="<@s.url value='${parameters.gridIconSrcZ}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.expandIconSrcPlus?exists>
-	expandIconSrcPlus="<@s.url value='${parameters.expandIconSrcPlus}' includeParams='none'/>"
-	</#if>
-	<#if parameters.expandIconSrcMinus?exists>
-	expandIconSrcMinus="<@s.url value='${parameters.expandIconSrcMinus?html}' includeParams='none'/>"
-	</#if>
-	<#if parameters.iconWidth?exists>
-	iconWidth="<@s.url value='${parameters.iconWidth?html}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.iconHeight?exists>
-	iconHeight="<@s.url value='${parameters.iconHeight?html}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.toggleDuration?exists>
-	toggleDuration=${parameters.toggleDuration?c}
-	</#if>
-	<#if parameters.templateCssPath?exists>
-	templateCssPath="<@s.url value='${parameters.templateCssPath}' encode="false" includeParams='none'/>"
-	</#if>
-	<#if parameters.showGrid?exists>
-	showGrid="${parameters.showGrid?default(true)?string}"
-	</#if>
-	<#if parameters.showRootGrid?exists>
-	showRootGrid="${parameters.showRootGrid?default(true)?string}"
-	</#if>
-    <#if parameters.id?exists>
-    id="${parameters.id?html}"
-    </#if>
-    <#if parameters.treeSelectedTopic?exists>
-    publishSelectionTopic="${parameters.treeSelectedTopic?html}"
-    </#if>
-    <#if parameters.treeExpandedTopic?exists>
-    publishExpandedTopic="${parameters.treeExpandedTopic?html}"
-    </#if>
-    <#if parameters.treeCollapsedTopic?exists>
-    publishCollapsedTopic="${parameters.treeCollapsedTopic?html}"
-    </#if>
-    <#if parameters.toggle?exists>
-    toggle="${parameters.toggle?html}"
-    </#if>
-    >
-    <#if parameters.label?exists>
-    <div dojoType="TreeNode" title="${parameters.label?html}"
-    <#if parameters.nodeIdProperty?exists>
-    id="${stack.findValue(parameters.nodeIdProperty)}"
-    <#else>
-    id="${parameters.id}_root"
-    </#if>
-    >
-    <#elseif parameters.rootNode?exists>
-    ${stack.push(parameters.rootNode)}
-    <#include "/${parameters.templateDir}/ajax/treenode-include.ftl" />
-    <#assign oldNode = stack.pop()/> <#-- pop the node off of the stack, but don't show it -->
-    </#if>
diff --git a/trunk/core/src/main/resources/template/ajax/treenode-close.ftl b/trunk/core/src/main/resources/template/ajax/treenode-close.ftl
deleted file mode 100644
index 04f5b84..0000000
--- a/trunk/core/src/main/resources/template/ajax/treenode-close.ftl
+++ /dev/null
@@ -1 +0,0 @@
-</div>
diff --git a/trunk/core/src/main/resources/template/ajax/treenode-include.ftl b/trunk/core/src/main/resources/template/ajax/treenode-include.ftl
deleted file mode 100644
index 02c2d1d..0000000
--- a/trunk/core/src/main/resources/template/ajax/treenode-include.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<div dojoType="TreeNode" title="${stack.findValue(parameters.nodeTitleProperty)}" id="${stack.findValue(parameters.nodeIdProperty)}">
-<#list stack.findValue(parameters.childCollectionProperty.toString()) as child>
-    ${stack.push(child)}
-    <#include "/${parameters.templateDir}/ajax/treenode-include.ftl" />
-    <#assign oldNode = stack.pop() /> <#-- pop the node off of the stack, but don't show it -->
-</#list>
-</div>
diff --git a/trunk/core/src/main/resources/template/ajax/treenode.ftl b/trunk/core/src/main/resources/template/ajax/treenode.ftl
deleted file mode 100644
index 858ed45..0000000
--- a/trunk/core/src/main/resources/template/ajax/treenode.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-<div dojoType="TreeNode" 
-	<#if parameters.childIconSrc?exists>
-	childIconSrc="<@s.url value='${parameters.childIconSrc}' includeParams='none' encode='false' />"
-	</#if>
-    <#if parameters.id?exists>id="${parameters.id?html}"</#if>
-    title="${parameters.label}">
diff --git a/trunk/core/src/main/resources/template/ajax/validation.js b/trunk/core/src/main/resources/template/ajax/validation.js
deleted file mode 100644
index c485aec..0000000
--- a/trunk/core/src/main/resources/template/ajax/validation.js
+++ /dev/null
@@ -1,26 +0,0 @@
-var strutsValidator = new ValidationClient("$!base/validation");
-strutsValidator.onErrors = function(input, errors) {
-
-	var form = input.form;
-
-	clearErrorMessages(form);
-	clearErrorLabels(form);
-
-    if (errors.fieldErrors) {
-        for (var fieldName in errors.fieldErrors) {
-            if (form.elements[fieldName].touched) {
-                for (var i = 0; i < errors.fieldErrors[fieldName].length; i++) {
-                    addError(form.elements[fieldName], errors.fieldErrors[fieldName][i]);
-                }
-            }
-        }
-    }
-}
-
-function validate(element) {
-    // mark the element as touch
-    element.touched = true;
-    var namespace = element.form.attributes['namespace'].nodeValue;
-    var actionName = element.form.attributes['name'].nodeValue;
-	strutsValidator.validate(element, namespace, actionName);
-}
diff --git a/trunk/core/src/main/resources/template/archive/ajax/a-close.vm b/trunk/core/src/main/resources/template/archive/ajax/a-close.vm
deleted file mode 100644
index 937be08..0000000
--- a/trunk/core/src/main/resources/template/archive/ajax/a-close.vm
+++ /dev/null
@@ -1 +0,0 @@
-</a>
diff --git a/trunk/core/src/main/resources/template/archive/ajax/a.vm b/trunk/core/src/main/resources/template/archive/ajax/a.vm
deleted file mode 100644
index 27b56b2..0000000
--- a/trunk/core/src/main/resources/template/archive/ajax/a.vm
+++ /dev/null
@@ -1,13 +0,0 @@
-<a dojoType="BindAnchor" evalResult="true"
-#if ($parameters.id) id="$!struts.htmlEncode($parameters.id)" #end
-#if ($parameters.href) href="$!struts.htmlEncode($parameters.href)" #end
-#if ($parameters.notifyTopics) notifyTopics="$!struts.htmlEncode($parameters.notifyTopics)" #end
-#if ($parameters.errorText) errorHtml="$!struts.htmlEncode($parameters.errorText)" #end
-#if ($parameters.showErrorTransportText)  showTransportError="true" #end
-#if ($parameters.afterLoading) onLoad="$!parameters.afterLoading" #end
-#if ($parameters.preInvokeJS) preInvokeJS="$!parameters.preInvokeJS" #end
-#if ($parameters.tabindex) tabindex="$!struts.htmlEncode($parameters.tabindex)" #end
-#if ($parameters.cssClass) class="$!struts.htmlEncode($parameters.cssClass)" #end
-#if ($parameters.cssStyle) style="$!struts.htmlEncode($parameters.cssStyle)" #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
->
diff --git a/trunk/core/src/main/resources/template/archive/ajax/div-close.vm b/trunk/core/src/main/resources/template/archive/ajax/div-close.vm
deleted file mode 100644
index 04f5b84..0000000
--- a/trunk/core/src/main/resources/template/archive/ajax/div-close.vm
+++ /dev/null
@@ -1 +0,0 @@
-</div>
diff --git a/trunk/core/src/main/resources/template/archive/ajax/div.vm b/trunk/core/src/main/resources/template/archive/ajax/div.vm
deleted file mode 100644
index 4f7f280..0000000
--- a/trunk/core/src/main/resources/template/archive/ajax/div.vm
+++ /dev/null
@@ -1,15 +0,0 @@
-<div dojoType='BindDiv'
-#if ($parameters.id) id="$!struts.htmlEncode($parameters.id)" #end
-#if ($parameters.href) href="$!parameters.href" #end
-#if ($parameters.loadingText) loadingHtml="$!struts.htmlEncode($parameters.loadingText)" #end
-#if ($parameters.errorText) errorHtml="$!struts.htmlEncode($parameters.errorText)" #end
-#if ($parameters.showErrorTransportText) showTransportError="true" #end
-#if ($parameters.delay) delay="$!parameters.delay" #end
-#if ($parameters.updateFreq) refresh="$!parameters.updateFreq" #end
-#if ($parameters.listenTopics) listenTopics="$!parameters.listenTopics" #end
-#if ($parameters.afterLoading) onLoad="$!parameters.afterLoading" #end
-#if ($parameters.tabindex) tabindex="$!struts.htmlEncode($parameters.tabindex)" #end
-#if ($parameters.cssClass) class="$!struts.htmlEncode($parameters.cssClass)" #end
-#if ($parameters.cssStyle) style="$!struts.htmlEncode($parameters.cssStyle)" #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
->
diff --git a/trunk/core/src/main/resources/template/archive/ajax/form-close.vm b/trunk/core/src/main/resources/template/archive/ajax/form-close.vm
deleted file mode 100644
index fec0774..0000000
--- a/trunk/core/src/main/resources/template/archive/ajax/form-close.vm
+++ /dev/null
@@ -1,2 +0,0 @@
-</table>
-</form>
diff --git a/trunk/core/src/main/resources/template/archive/ajax/form.vm b/trunk/core/src/main/resources/template/archive/ajax/form.vm
deleted file mode 100644
index 487b0c1..0000000
--- a/trunk/core/src/main/resources/template/archive/ajax/form.vm
+++ /dev/null
@@ -1,19 +0,0 @@
-#if ($parameters.validate)
-<script src="$!base/struts/validationClient.js"></script>
-<script src="$!base/dwr/interface/validator.js"></script>
-<script src="$!base/dwr/engine.js"></script>
-<script src="$!base/struts/template/xhtml/validation.js"></script>
-#end
-<form
-#if ($parameters.namespace) namespace="$!struts.htmlEncode($parameters.namespace)" #end
-#if ($parameters.id) id="$!struts.htmlEncode($parameters.id)" #end
-#if ($parameters.name) name="$!struts.htmlEncode($parameters.name)" #end
-#if ($parameters.action) action="$!struts.htmlEncode($parameters.action)" #end
-#if ($parameters.target) target="$!struts.htmlEncode($parameters.target)" #end
-#if ($parameters.method) method="$!struts.htmlEncode($parameters.method)" #end
-#if ($parameters.enctype) enctype="$!struts.htmlEncode($parameters.enctype)" #end
-#if ($parameters.cssClass) class="$!struts.htmlEncode($parameters.cssClass)" #end
-#if ($parameters.cssStyle) style="$!struts.htmlEncode($parameters.cssStyle)" #end
-onSubmit="return false;"
->
-<table class="wwFormTable">
diff --git a/trunk/core/src/main/resources/template/archive/ajax/submit.vm b/trunk/core/src/main/resources/template/archive/ajax/submit.vm
deleted file mode 100644
index ebdce82..0000000
--- a/trunk/core/src/main/resources/template/archive/ajax/submit.vm
+++ /dev/null
@@ -1,13 +0,0 @@
-<button type="submit" dojoType="BindButton"<#rt/>
-#if ($parameters.form && $parameters.form.id)  formId="$parameters.form.id" #end
-#if ($parameters.name) name="$!struts.htmlEncode($parameters.name)" #end
-#if ($parameters.nameValue) value="$!struts.htmlEncode($parameters.nameValue)" #end
-#if ($parameters.cssClass) class="$!struts.htmlEncode($parameters.cssClass)" #end
-#if ($parameters.cssStyle) style="$!struts.htmlEncode($parameters.cssStyle)" #end
-#if ($parameters.resultDivId) targetDiv="$!struts.htmlEncode($parameters.resultDivId)" #end
-#if ($parameters.onLoadJS) onLoad="$!parameters.onLoadJS" #end
-#if ($parameters.preInvokeJS) preInvokeJS="$!parameters.preInvokeJS" #end
-#if ($parameters.notifyTopics) notifyTopics="$!struts.htmlEncode($parameters.notifyTopics)" #end
-#if ($parameters.listenTopics) listenTopics="$!struts.htmlEncode($parameters.listenTopics)" #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/trunk/core/src/main/resources/template/archive/ajax/tab-close.vm b/trunk/core/src/main/resources/template/archive/ajax/tab-close.vm
deleted file mode 100644
index 3a2e84b..0000000
--- a/trunk/core/src/main/resources/template/archive/ajax/tab-close.vm
+++ /dev/null
@@ -1,7 +0,0 @@
-    </div>
-    </div>
-
-    <script language="JavaScript" type="text/javascript">
-        var tabpanelc_$!parameters.id = new TabContent( "$!parameters.id", $!parameters.remote );
-        dojo.event.topic.subscribe( "$!parameters.subscribeTopicName", tabpanelc_$!parameters.id, "updateVisibility" );
-    </script>
diff --git a/trunk/core/src/main/resources/template/archive/ajax/tab.vm b/trunk/core/src/main/resources/template/archive/ajax/tab.vm
deleted file mode 100644
index 9e76f4c..0000000
--- a/trunk/core/src/main/resources/template/archive/ajax/tab.vm
+++ /dev/null
@@ -1,17 +0,0 @@
-<div class="tab_contents_header" id="tab_contents_${parameters.id}">
-    <div class="tab_contents"
-         id="tab_contents_update_${parameters.id}"
-	 #if ($parameters.remote)
-	      dojoType='BindDiv'
-	      #if ($parameters.href) href="$!struts.htmlEncode($parameters.href)" #end
-	      #if ($parameters.loadingText) loadingHtml="$!struts.htmlEncode($parameters.loadingText)" #end
-	      #if ($parameters.errorText) errorHtml="$!struts.htmlEncode($parameters.errorText)" #end
-	      #if ($parameters.showErrorTransportText) showTransportError="true" #end
-	      #if ($parameters.delay) delay="$!parameters.delay" #end
-	      #if ($parameters.updateFreq) refresh="$!parameters.updateFreq" #end
-	      #if ($parameters.listenTopics) listenTopics="$!struts.htmlEncode($parameters.listenTopics)" #end
-	      #if ($parameters.afterLoading) onLoad="$!struts.htmlEncode($parameters.afterLoading)" #end
-     #end
- 	 #if ($parameters.cssClass) class="$!struts.htmlEncode($parameters.cssClass)" #end
-	 #if ($parameters.cssStyle) style="$!struts.htmlEncode($parameters.cssStyle)" #end
-      >
diff --git a/trunk/core/src/main/resources/template/archive/simple/checkbox.vm b/trunk/core/src/main/resources/template/archive/simple/checkbox.vm
deleted file mode 100644
index 59a5856..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/checkbox.vm
+++ /dev/null
@@ -1,10 +0,0 @@
-<input type="checkbox" name="$!struts.htmlEncode($parameters.name)" value="$!struts.htmlEncode($parameters.fieldValue)"
-#if ($parameters.nameValue)        checked="checked"                                        #end
-#if ($parameters.disabled && $parameters.disabled == true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)"    #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/trunk/core/src/main/resources/template/archive/simple/checkboxlist.vm b/trunk/core/src/main/resources/template/archive/simple/checkboxlist.vm
deleted file mode 100644
index a4e7178..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/checkboxlist.vm
+++ /dev/null
@@ -1,25 +0,0 @@
-#set( $items = $parameters.list )
-#if( $items )
-    #set( $itemCount = 0 )
-    #foreach( $item in $items )
-        #set( $itemCount = $itemCount + 1)
-        $stack.push($item)
-        #if( $parameters.listKey )
-            #set( $itemKey = $stack.findValue($parameters.listKey) )
-        #else
-            #set( $itemKey = $item )
-        #end
-        #if( $parameters.listValue )
-            #set( $itemValue  = $stack.findValue($parameters.listValue) )
-        #else
-            #set( $itemValue = $item )
-        #end
-        <input type="checkbox" name="$!struts.htmlEncode($parameters.name)" value="$!struts.htmlEncode($itemKey)"
-        #parse("/$parameters.templateDir/simple/scripting-events.vm")
-        id="$!struts.htmlEncode($parameters.name)-$itemCount" #if( $tag.contains($parameters.nameValue, $itemKey) ) checked="checked" #end/>
-        <label for="$!struts.htmlEncode($parameters.name)-$itemCount" class="checkboxLabel">$!struts.htmlEncode($itemValue)</label><br />
-        #set ($trash = $stack.pop())
-    #end
-#else
-  &nbsp;
-#end
diff --git a/trunk/core/src/main/resources/template/archive/simple/combobox.vm b/trunk/core/src/main/resources/template/archive/simple/combobox.vm
deleted file mode 100644
index 7012c48..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/combobox.vm
+++ /dev/null
@@ -1,23 +0,0 @@
-<input type="text"
-                                   name="$!struts.htmlEncode($parameters.name)"
-#if ($parameters.size)             size="$!struts.htmlEncode($parameters.size)"            #end
-#if ($parameters.maxlength)        maxlength="$!struts.htmlEncode($parameters.maxlength)"  #end
-#if ($parameters.nameValue)        value="$!struts.htmlEncode($parameters.nameValue)"      #end
-#if ($parameters.disabled && $parameters.disabled == true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.readonly)         readonly="readonly"                                      #end
-#if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)"    #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/><br/>
-
-#if ($parameters.list)
-<select onChange="this.form.elements['$!struts.htmlEncode($parameters.name)'].value=this.options[this.selectedIndex].value"
-     #if ($parameters.disabled == true) disabled="disabled" #end
->
-#foreach ($param in $parameters.list)
-    <option value="$!struts.htmlEncode($param)"#if ($parameters.name == $param) selected="selected"#end>$!struts.htmlEncode($param)</option>
-#end
-</select>#end
diff --git a/trunk/core/src/main/resources/template/archive/simple/debug.vm b/trunk/core/src/main/resources/template/archive/simple/debug.vm
deleted file mode 100644
index 127d946..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/debug.vm
+++ /dev/null
@@ -1,65 +0,0 @@
-<script language="JavaScript" type="text/javascript">
-<!--
-    function toggleDebug(debugId) {
-        var debugDiv = document.getElementById(debugId);
-        if (debugDiv) {
-            var display = debugDiv.style.display;
-            if (display == 'none') {
-                debugDiv.style.display = 'block';
-            } else if (display == 'block') {
-                debugDiv.style.display = 'none';
-            }
-        }
-    }
--->
-</script>
-<p/>
-
-#set ($id = $parameters.id)
-#if ($id) #else #set ($id = 'debug') #end
-<a href="#" onclick="toggleDebug('$id');return false;">[Debug]</a>
-<div style="display:none" id="$id">
-<h2>Struts ValueStack Debug</h2>
-<p/>
-
-#set($contextMap = $stack.context)
-
-<h3>Value Stack Contents</h3>
-#set ($stackContents = $parameters.stackValues)
-<table border="0" cellpadding="5" cellspacing="0" width="100%" bgcolor="#DDDDDD">
-    <tr><th>Object</th><th>Property Name</th><th>Property Value</th></tr>
-
-    #set ($index = 1)
-    #foreach ($stackObject in $stackContents)
-    <tr>
-        <td rowspan="$stackObject.value.size()">$stackObject.key</td>
-        #set ($renderRow = false)
-        #set ($propertyMap = $stackObject.value)
-        #foreach ($propertyName in $propertyMap.keySet())
-            #if ($renderRow == true)<tr>#else #set ($renderRow = true) #end
-        <td bgcolor="#if (($index % 2) == 0)#BBBBBB#else#CCCCCC#end">$propertyName</td>
-        <td bgcolor="#if (($index % 2) == 0)#BBBBBB#else#CCCCCC#end">$propertyMap.get($propertyName)</td>
-    </tr>
-            #set ($index = $index + 1)
-        #end
-    #end
-</table>
-
-<h3>Stack Context</h3>
-<i>These items are available using the #key notation</i>
-<table border="0" cellpadding="5" cellspacing="0" width="100%" bgcolor="#DDDDDD">
-    <tr>
-        <th>Key</th><th>Value</th>
-    </tr>
-
-    #set ($index = 1)
-    #foreach ($contextKey in $contextMap.keySet())
-    <tr bgcolor="#if (($index % 2) == 0)#BBBBBB#else#CCCCCC#end">
-        <td>$contextKey</td><td>$contextMap.get($contextKey)</td>
-    </tr>
-    #set ($index = $index + 1)
-    #end
-</table>
-<p/>
-
-</div>
diff --git a/trunk/core/src/main/resources/template/archive/simple/doubleselect.vm b/trunk/core/src/main/resources/template/archive/simple/doubleselect.vm
deleted file mode 100644
index 47873e8..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/doubleselect.vm
+++ /dev/null
@@ -1,88 +0,0 @@
-`#parse("/$parameters.templateDir/simple/select.vm")
-#set ( $startCount = 0)
-#if ($parameters.headerKey && $parameters.headerValue)
-    #set ( $startCount = $startCount + 1)
-#end
-#if ($parameters.emptyOption)
-    #set ( $startCount = $startCount + 1)
-#end
-
-<br/>
-<select name="$!struts.htmlEncode($parameters.doubleName)"
-    #if ($parameters.disabled)         disabled="disabled"                                         #end
-    #if ($parameters.doubleTabindex)   tabindex="$!struts.htmlEncode($parameters.doubleTabindex)" #end
-    #if ($parameters.doubleId)         id="$!struts.htmlEncode($parameters.doubleId)"             #end
-    #if ($parameters.multiple)         multiple="multiple"                                         #end
-    #if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"          #end
-    #if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"          #end
->
-</select>
-<script type="text/javascript">
-#set( $itemCount = $startCount )
-var $!struts.htmlEncode($parameters.name)Group = new Array($!{parameters.listSize} + $startCount);
-for (i = 0; i < ($!{parameters.listSize} + $startCount); i++)
-$!struts.htmlEncode($parameters.name)Group[i] = new Array();
-#foreach( $item in $items )
-    $stack.push($item)
-    #if( $parameters.listKey )
-        #set( $itemKey = $stack.findValue($parameters.listKey) )
-    #else
-        #set( $itemKey = $item )
-    #end
-    #if( $parameters.listValue )
-        #set( $itemValue  = $stack.findValue($parameters.listValue) )
-    #else
-        #set( $itemValue = $item )
-    #end
-    #set( $doubleItems = $stack.findValue($parameters.doubleList) )
-    #set( $doubleItemCount = 0 )
-    #if( $doubleItems )
-        #foreach( $doubleItem in $doubleItems )
-            $stack.push($doubleItem)
-            #if( $parameters.doubleListKey )
-                #set( $doubleItemKey = $stack.findValue($parameters.doubleListKey) )
-            #else
-                #set( $doubleItemKey = $doubleItem )
-            #end
-            #if( $parameters.doubleListValue )
-                #set( $doubleItemValue  = $stack.findValue($parameters.doubleListValue) )
-            #else
-                #set( $doubleItemValue = $doubleItem )
-            #end
-            $!struts.htmlEncode($parameters.name)Group[$itemCount][$doubleItemCount] = new Option("$doubleItemKey", "$doubleItemValue");
-            #set( $doubleItemCount = $doubleItemCount + 1 )
-            #set ($trash = $stack.pop())
-        #end
-        #set( $itemCount = $itemCount + 1 )
-    #end
-    #set ($trash = $stack.pop())
-#end
-var $!struts.htmlEncode($parameters.name)Temp = document.$!struts.htmlEncode(${parameters.formName}).$!struts.htmlEncode(${parameters.doubleName});
-#set( $itemCount = $startCount )
-#set( $redirectTo = 0 )
-#foreach( $item in $items )
-    $stack.push($item)
-    #if( $parameters.listValue )
-        #set( $itemValue  = $stack.findValue($parameters.listValue) )
-    #else
-        #set( $itemValue = $item )
-    #end
-    #if( $tag.contains($parameters.nameValue, $itemKey) )
-        #set( $redirectTo = $itemCount )
-    #end
-    #set( $itemCount = $itemCount + 1 )
-    #set ($trash = $stack.pop())
-#end
-$!{struts.htmlEncode($parameters.name)}Redirect($redirectTo);
-function $!{struts.htmlEncode($parameters.name)}Redirect(x) {
-    for (m = $!{struts.htmlEncode($parameters.name)}Temp.options.length - 1; m >= 0; m--)
-        $!{struts.htmlEncode($parameters.name)}Temp.options[m] = null;
-
-    for (i = 0; i < $!{parameters.name}Group[x].length; i++) {
-        $!{struts.htmlEncode($parameters.name)}Temp.options[i] = new Option($!{struts.htmlEncode($parameters.name)}Group[x][i].text, $!{struts.htmlEncode($parameters.name)}Group[x][i].value);
-    }
-
-    if ($!{parameters.name}Temp.options.length > 0)
-        $!{struts.htmlEncode($parameters.name)}Temp.options[0].selected = true;
-}
-</script>
diff --git a/trunk/core/src/main/resources/template/archive/simple/empty.vm b/trunk/core/src/main/resources/template/archive/simple/empty.vm
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/empty.vm
+++ /dev/null
diff --git a/trunk/core/src/main/resources/template/archive/simple/file.vm b/trunk/core/src/main/resources/template/archive/simple/file.vm
deleted file mode 100644
index 2f081de..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/file.vm
+++ /dev/null
@@ -1,12 +0,0 @@
-<input type="file"
-                                   name="$!struts.htmlEncode($parameters.name)"
-#if ($parameters.size)             size="$!struts.htmlEncode($parameters.size)"            #end
-#if ($parameters.nameValue)        value="$!struts.htmlEncode($parameters.nameValue)"      #end
-#if ($parameters.disabled && $parameters.disabled == true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.accept)           accept="$!struts.htmlEncode($parameters.accept)"        #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/trunk/core/src/main/resources/template/archive/simple/form-close.vm b/trunk/core/src/main/resources/template/archive/simple/form-close.vm
deleted file mode 100644
index 5582354..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/form-close.vm
+++ /dev/null
@@ -1 +0,0 @@
-</form>
diff --git a/trunk/core/src/main/resources/template/archive/simple/form.vm b/trunk/core/src/main/resources/template/archive/simple/form.vm
deleted file mode 100644
index 9d27628..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/form.vm
+++ /dev/null
@@ -1,12 +0,0 @@
-<form
-#if ($parameters.namespace) namespace="$!parameters.namespace"                  #end
-#if ($parameters.id)        id="$!struts.htmlEncode($parameters.id)"           #end
-#if ($parameters.name)      name="$!struts.htmlEncode($parameters.name)"       #end
-#if ($parameters.action)    action="$!struts.htmlEncode($parameters.action)"   #end
-#if ($parameters.target)    target="$!struts.htmlEncode($parameters.target)"   #end
-#if ($parameters.method)    method="$!struts.htmlEncode($parameters.method)"   #end
-#if ($parameters.enctype)   enctype="$!struts.htmlEncode($parameters.enctype)" #end
-#if ($parameters.cssClass)  class="$!struts.htmlEncode($parameters.cssClass)"  #end
-#if ($parameters.cssStyle)  style="$!struts.htmlEncode($parameters.cssStyle)"  #end
->
-
diff --git a/trunk/core/src/main/resources/template/archive/simple/hidden.vm b/trunk/core/src/main/resources/template/archive/simple/hidden.vm
deleted file mode 100644
index b996520..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/hidden.vm
+++ /dev/null
@@ -1,8 +0,0 @@
-<input
-    type="hidden"
-    #if ($parameters.name)      name="$!struts.htmlEncode($parameters.name)"       #end
-    #if ($parameters.nameValue) value="$!struts.htmlEncode($parameters.nameValue)" #end
-    #if ($parameters.cssClass)  class="$!struts.htmlEncode($parameters.cssClass)"  #end
-    #if ($parameters.cssStyle)  style="$!struts.htmlEncode($parameters.cssStyle)"  #end
-    #if ($parameters.id)        id="$!struts.htmlEncode($parameters.id)"           #end
-/>
diff --git a/trunk/core/src/main/resources/template/archive/simple/label.vm b/trunk/core/src/main/resources/template/archive/simple/label.vm
deleted file mode 100644
index d5fabe5..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/label.vm
+++ /dev/null
@@ -1,6 +0,0 @@
-<label
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#if ($parameters.for)              for="$!struts.htmlEncode($parameters.for)"              #end
->#if ($parameters.nameValue)$!struts.htmlEncode($parameters.nameValue)#end</label>
diff --git a/trunk/core/src/main/resources/template/archive/simple/password.vm b/trunk/core/src/main/resources/template/archive/simple/password.vm
deleted file mode 100644
index 20bbd5c..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/password.vm
+++ /dev/null
@@ -1,14 +0,0 @@
-<input type="password"
-                                   name="$!struts.htmlEncode($parameters.name)"
-#if ($parameters.size)             size="$!struts.htmlEncode($parameters.size)"            #end
-#if ($parameters.maxlength)        maxlength="$!struts.htmlEncode($parameters.maxlength)"  #end
-#if ($parameters.nameValue && $parameters.showPassword && $parameters.showPassword == true)
-                                   value="$!struts.htmlEncode($parameters.nameValue)"      #end
-#if ($parameters.disabled && $parameters.disabled == true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.readonly)         readonly="readonly"                                      #end
-#if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)"    #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/trunk/core/src/main/resources/template/archive/simple/radiomap.vm b/trunk/core/src/main/resources/template/archive/simple/radiomap.vm
deleted file mode 100644
index e518f15..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/radiomap.vm
+++ /dev/null
@@ -1,35 +0,0 @@
-#set( $items = $parameters.list )
-#if( $items )
-    #foreach( $item in $items )
-        $stack.push($item)
-
-        #if( $parameters.listKey )
-            #set( $itemKey = $stack.findValue($parameters.listKey) )
-        #else
-            #set( $itemKey = $item )
-        #end
-
-        #if( $parameters.listValue )
-            #set( $itemValue  = $stack.findValue($parameters.listValue) )
-        #else
-            #set( $itemValue = $item )
-        #end
-
-        <input
-            type="radio"
-            #if( $tag.contains($parameters.nameValue, $itemKey) )checked="checked"#end
-            #if ($parameters.name)
-                                        name="$!struts.htmlEncode($parameters.name)"
-                                        id="$!struts.htmlEncode($parameters.name)$!struts.htmlEncode($itemKey)"
-            #end
-            #if ($itemKey)              value="$!struts.htmlEncode($itemKey)"                #end
-            #if ($parameters.disabled)  disabled="disabled"                                   #end
-            #if ($parameters.tabindex)  tabindex="$!struts.htmlEncode($parameters.tabindex)" #end
-            #if ($parameters.cssClass)  class="$!struts.htmlEncode($parameters.cssClass)"    #end
-            #if ($parameters.cssStyle)  style="$!struts.htmlEncode($parameters.cssStyle)"    #end
-            #parse("/$parameters.templateDir/simple/scripting-events.vm")
-        /><label for="$!struts.htmlEncode($parameters.name)$!struts.htmlEncode($itemKey)">$!itemValue</label>
-
-        #set ($trash = $stack.pop())
-    #end
-#end
diff --git a/trunk/core/src/main/resources/template/archive/simple/scripting-events.vm b/trunk/core/src/main/resources/template/archive/simple/scripting-events.vm
deleted file mode 100644
index 6378a64..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/scripting-events.vm
+++ /dev/null
@@ -1,14 +0,0 @@
-#if ($parameters.onclick)     onclick="$!struts.htmlEncode($parameters.onclick)"         #end
-#if ($parameters.ondblclick)  ondblclick="$!struts.htmlEncode($parameters.ondblclick)"   #end
-#if ($parameters.onmousedown) onmousedown="$!struts.htmlEncode($parameters.onmousedown)" #end
-#if ($parameters.onmouseup)   onmouseup="$!struts.htmlEncode($parameters.onmouseup)"     #end
-#if ($parameters.onmouseover) onmouseover="$!struts.htmlEncode($parameters.onmouseover)" #end
-#if ($parameters.onmousemove) onmousemove="$!struts.htmlEncode($parameters.onmousemove)" #end
-#if ($parameters.onmouseout)  onmouseout="$!struts.htmlEncode($parameters.onmouseout)"   #end
-#if ($parameters.onfocus)     onfocus="$!struts.htmlEncode($parameters.onfocus)"         #end
-#if ($parameters.onblur)      onblur="$!struts.htmlEncode($parameters.onblur)"           #end
-#if ($parameters.onkeypress)  onkeypress="$!struts.htmlEncode($parameters.onkeypress)"   #end
-#if ($parameters.onkeydown)   onkeydown="$!struts.htmlEncode($parameters.onkeydown)"     #end
-#if ($parameters.onkeyup)     onkeyup="$!struts.htmlEncode($parameters.onkeyup)"         #end
-#if ($parameters.onselect)    onselect="$!struts.htmlEncode($parameters.onselect)"       #end
-#if ($parameters.onchange)    onchange="$!struts.htmlEncode($parameters.onchange)"       #end
diff --git a/trunk/core/src/main/resources/template/archive/simple/select.vm b/trunk/core/src/main/resources/template/archive/simple/select.vm
deleted file mode 100644
index ed73488..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/select.vm
+++ /dev/null
@@ -1,43 +0,0 @@
-<select name="$!struts.htmlEncode($parameters.name)"
-    #if ($parameters.size)             size="$!struts.htmlEncode($parameters.size)"         #end
-    #if ($parameters.disabled)         disabled="disabled"                                   #end
-    #if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)" #end
-    #if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"             #end
-    #if ($parameters.multiple)         multiple="multiple"                                   #end
-    #if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"    #end
-    #if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"    #end
-    #parse("/$parameters.templateDir/simple/scripting-events.vm")
->
-
-#if ($parameters.headerKey && $parameters.headerValue)
-    <option value="$!struts.htmlEncode($parameters.headerKey)">$!struts.htmlEncode($parameters.headerValue)</option>
-#end
-
-#if ($parameters.emptyOption)
-    <option value=""></option>
-#end
-
-#set( $items = $parameters.list )
-#if( $items )
-    #foreach( $item in $items )
-        $stack.push($item)
-
-        #if( $parameters.listKey )
-            #set( $itemKey = $stack.findValue($parameters.listKey) )
-        #else
-            #set( $itemKey = $item )
-        #end
-
-        #if( $parameters.listValue )
-            #set( $itemValue = $stack.findValue($parameters.listValue) )
-        #else
-            #set( $itemValue = $item )
-        #end
-
-        <option value="$!struts.htmlEncode($itemKey)"#if( $tag.contains($parameters.nameValue, $itemKey) ) selected="selected"#end>$!struts.htmlEncode($itemValue)</option>
-
-        #set ($trash = $stack.pop())
-    #end
-#end
-
-</select>
diff --git a/trunk/core/src/main/resources/template/archive/simple/submit.vm b/trunk/core/src/main/resources/template/archive/simple/submit.vm
deleted file mode 100644
index 0101b39..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/submit.vm
+++ /dev/null
@@ -1,7 +0,0 @@
-<input type="submit"
-#if ($parameters.name)       name="$!struts.htmlEncode($parameters.name)"           #end
-#if ($parameters.nameValue)  value="$!struts.htmlEncode($parameters.nameValue)"     #end
-#if ($parameters.cssClass)   class="$!struts.htmlEncode($parameters.cssClass)"      #end
-#if ($parameters.cssStyle)   style="$!struts.htmlEncode($parameters.cssStyle)"      #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/trunk/core/src/main/resources/template/archive/simple/table.vm b/trunk/core/src/main/resources/template/archive/simple/table.vm
deleted file mode 100644
index 2ab7c15..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/table.vm
+++ /dev/null
@@ -1,81 +0,0 @@
-#set($webTable=$tag)
-#set($tableModel=$webTable.Model)
-
-
-#if($tableModel)
-		<p align="center">
-			<table bgcolor="white" border="0" cellpadding="1" cellspacing="0" >
-				<tr>
-					<td>
-						<table  border="0" cellpadding="2" cellspacing="1">
-
-                            <tr bgcolor="yellow">
-
-                            #*
-                                Show the visible column names.  Use the display name that can
-                                be set in the jsp.
-                            *#
-                            #foreach($curColumn in $webTable.Columns)
-                                #if($curColumn.isVisible())
-                                        <th>
-
-                                            #if($webTable.isSortable())
-                                                <table border="0" cellspacing="0" cellpadding="0">
-												<tr>
-												    <td>
-												        $curColumn.DisplayName
-												    </td>
-												    <td>
-												        <table border="0" cellspacing="0" cellpadding="0">
-												            <tr>
-                                                                <td align="bottom">
-
-                                                                    #if(($webTable.sortColumn == $curColumn.offset) && ($webTable.sortOrder == 'ASC'))
-                                                                        <img src="#tag( URL "value='/images/sorted_asc.gif'")" border="0" align="bottom"/>                                                                    #else
-                                                                        <a href="#bodytag( URL )
-                                                                                    #param( $webTable.sortColumnLinkName $curColumn.offset)
-                                                                                    #param( $webTable.sortOrderLinkName 'ASC')
-                                                                                 #end">
-                                                                       <img src="#tag( URL "value='/images/unsorted_asc.gif'")" border="0" align="bottom"/></a>
-                                                                    #end
-                                                                </td>
-												            </tr>
-												            <tr>
-
-                                                                <td align="top">
-                                                                    #if(($webTable.sortColumn == $curColumn.offset) && ($webTable.sortOrder == 'DESC'))
-                                                                        <img src="#tag( URL "value='/images/sorted_desc.gif'")" border="0" align="top"/>
-                                                                    #else
-                                                                        <a href="#bodytag( URL )
-                                                                                    #param( $webTable.sortColumnLinkName $curColumn.offset)
-                                                                                    #param( $webTable.sortOrderLinkName 'DESC')
-                                                                                  #end"><img src="#tag( URL "value='/images/unsorted_desc.gif'")" border="0" align="top"/></a>
-                                                                    #end
-                                                                </td>
-                                                            </tr>
-												        </table>
-
-												    </td>
-												</tr>
-												</table>
-                                            #else
-                                                $curColumn.DisplayName
-                                            #end
-                                        </th>
-                                #end
-                            #end
-                            </tr>
-                             #foreach($curRow in $webTable.RowIterator)
-                                <tr #if($velocityCount % 2 == 1) bgcolor="EEEEFF" #else bgcolor="FFFFFF" #end/>
-                                #foreach($curColumn in $curRow)
-                                <td>$curColumn</td>
-
-                                #end
-                             #end
-						</table>
-					</td>
-				</tr>
-			</table>
-		</p>
-
-#end
diff --git a/trunk/core/src/main/resources/template/archive/simple/text.vm b/trunk/core/src/main/resources/template/archive/simple/text.vm
deleted file mode 100644
index 3a42444..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/text.vm
+++ /dev/null
@@ -1,14 +0,0 @@
-<input type="text"
-                                   name="$!struts.htmlEncode($parameters.name)"
-#if ($parameters.size)             size="$!struts.htmlEncode($parameters.size)"            #end
-#if ($parameters.maxlength)        maxlength="$!struts.htmlEncode($parameters.maxlength)"  #end
-#if ($parameters.nameValue)        value="$!struts.htmlEncode($parameters.nameValue)"      #end
-#if ($parameters.disabled && $parameters.disabled == true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.readonly)         readonly="readonly"                                      #end
-#if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)"    #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/trunk/core/src/main/resources/template/archive/simple/textarea.vm b/trunk/core/src/main/resources/template/archive/simple/textarea.vm
deleted file mode 100644
index 4b15042..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/textarea.vm
+++ /dev/null
@@ -1,13 +0,0 @@
-<textarea name="$!struts.htmlEncode($parameters.name)"
-          cols="$!struts.htmlEncode($parameters.cols)"
-          rows="$!struts.htmlEncode($parameters.rows)"
-#if ($parameters.wrap)             wrap="$!struts.htmlEncode($parameters.wrap)"            #end
-#if ($parameters.disabled && $parameters.disabled== true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.readonly)         readonly="readonly"                                      #end
-#if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)"    #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
->#if ($parameters.nameValue)$!struts.htmlEncode($parameters.nameValue)#end</textarea>
diff --git a/trunk/core/src/main/resources/template/archive/simple/token.vm b/trunk/core/src/main/resources/template/archive/simple/token.vm
deleted file mode 100644
index 6b1a429..0000000
--- a/trunk/core/src/main/resources/template/archive/simple/token.vm
+++ /dev/null
@@ -1,2 +0,0 @@
-<input type="hidden" name="$!{parameters.tokenNameField}" value="$struts.htmlEncode($!parameters.name)"/>
-<input type="hidden" name="$!parameters.name" value="$struts.htmlEncode($!parameters.token)"/>
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/checkbox.vm b/trunk/core/src/main/resources/template/archive/xhtml/checkbox.vm
deleted file mode 100644
index 090d3b4..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/checkbox.vm
+++ /dev/null
@@ -1,19 +0,0 @@
-#if( $fieldErrors.get($parameters.name) )
-  #set ($hasFieldErrors = $fieldErrors.get($parameters.name))
-  #foreach ($error in $fieldErrors.get($parameters.name))
-    <tr>
-        <td align="left" valign="top" colspan="2"><span class="errorMessage">$!error</span></td>
-    </tr>
-  #end
-#end
-
-<tr>
-    <td valign="top" colspan="2">
-#* Use an extra table so that the checkbox doesn't align with the other columns. *#
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
-    <tr>
-        <td valign="middle">#parse("$!{tag.templateDir}/simple/checkbox.vm")</td>
-        <td width="100%" valign="middle"><label #if ($parameters.id) for="$!struts.htmlEncode($parameters.id)"#end#if ($hasFieldErrors) class="checkboxErrorLabel"#else class="checkboxLabel"#end>$!struts.htmlEncode($parameters.label)</label></td>
-    </tr>
-</table>
-#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/checkboxlist.vm b/trunk/core/src/main/resources/template/archive/xhtml/checkboxlist.vm
deleted file mode 100644
index d97021c..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/checkboxlist.vm
+++ /dev/null
@@ -1,3 +0,0 @@
-#parse( "/$parameters.templateDir/xhtml/controlheader.vm" )
-#parse( "/$parameters.templateDir/simple/checkboxlist.vm" )
-#parse( "/$parameters.templateDir/xhtml/controlfooter.vm" )
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/combobox.vm b/trunk/core/src/main/resources/template/archive/xhtml/combobox.vm
deleted file mode 100644
index a56c5b0..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/combobox.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/combobox.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/controlfooter.vm b/trunk/core/src/main/resources/template/archive/xhtml/controlfooter.vm
deleted file mode 100644
index 4af2dd7..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/controlfooter.vm
+++ /dev/null
@@ -1,2 +0,0 @@
-$!{parameters.after}</td>
-</tr>
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/controlheader.vm b/trunk/core/src/main/resources/template/archive/xhtml/controlheader.vm
deleted file mode 100644
index 0e33bb7..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/controlheader.vm
+++ /dev/null
@@ -1,27 +0,0 @@
-## Only show message if errors are available.
-## This will be done if ActionSupport is used.
-#if( $fieldErrors.get($parameters.name) )
-  #set ($hasFieldErrors = $fieldErrors.get($parameters.name))
-  #foreach ($error in $fieldErrors.get($parameters.name))
-    <tr errorFor="$parameters.id">
-        #if ($parameters.labelposition == 'top')<td align="left" valign="top" colspan="2">#else<td align="center" valign="top" colspan="2">#end<span class="errorMessage">$!struts.htmlEncode($error)</span></td>
-    </tr>
-  #end
-#end
-## if the label position is top,
-## then give the label it's own row in the table
-<tr>
-#if ($parameters.labelposition && $parameters.labelposition == 'top')<td align="left" valign="top" colspan="2">#else<td align="right" valign="top">#end#if ($parameters.label)<label #if ($parameters.id) for="$!struts.htmlEncode($parameters.id)"#end#if ($hasFieldErrors) class="errorLabel"#else class="label"#end>#if ($parameters.required)<span class="required">*</span>#end$!struts.htmlEncode($parameters.label):</label>#end</td>
-## add the extra row
-#if ($parameters.labelposition && $parameters.labelposition == 'top')
-</tr>
-<tr>
-#end
-#if ($parameters.form.validate && $parameters.form.validate == true)
-    #if ($parameters.onblur)
-        #set ($parameters.onblur = "validate(this);${parameters.onblur}")
-    #else
-        #set ($parameters.onblur = "validate(this)")
-    #end
-#end
-    <td>
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/debug.vm b/trunk/core/src/main/resources/template/archive/xhtml/debug.vm
deleted file mode 100644
index 94ebc5a..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/debug.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/debug.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/doubleselect.vm b/trunk/core/src/main/resources/template/archive/xhtml/doubleselect.vm
deleted file mode 100644
index 231b653..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/doubleselect.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/doubleselect.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/empty.vm b/trunk/core/src/main/resources/template/archive/xhtml/empty.vm
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/empty.vm
+++ /dev/null
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/file.vm b/trunk/core/src/main/resources/template/archive/xhtml/file.vm
deleted file mode 100644
index cd6d6e5..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/file.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/file.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/form-close.vm b/trunk/core/src/main/resources/template/archive/xhtml/form-close.vm
deleted file mode 100644
index bcd446c..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/form-close.vm
+++ /dev/null
@@ -1,2 +0,0 @@
-</table>
-#parse("/$parameters.templateDir/simple/form-close.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/form.vm b/trunk/core/src/main/resources/template/archive/xhtml/form.vm
deleted file mode 100644
index 1fcfd09..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/form.vm
+++ /dev/null
@@ -1,8 +0,0 @@
-#if ($parameters.validate && $parameters.validate == true)
-<script src="${base}/struts/validationClient.js"></script>
-<script src="${base}/dwr/interface/validator.js"></script>
-<script src="${base}/dwr/engine.js"></script>
-<script src="${base}/struts/template/xhtml/validation.js"></script>
-#end
-#parse("/$parameters.templateDir/simple/form.vm")
-<table class="wwFormTable">
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/hidden.vm b/trunk/core/src/main/resources/template/archive/xhtml/hidden.vm
deleted file mode 100644
index 4cbaa07..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/hidden.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/simple/hidden.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/label.vm b/trunk/core/src/main/resources/template/archive/xhtml/label.vm
deleted file mode 100644
index 3d32ecf..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/label.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/label.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/password.vm b/trunk/core/src/main/resources/template/archive/xhtml/password.vm
deleted file mode 100644
index 2d81e8d..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/password.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/password.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/radiomap.vm b/trunk/core/src/main/resources/template/archive/xhtml/radiomap.vm
deleted file mode 100644
index 0c20eb1..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/radiomap.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/radiomap.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/select.vm b/trunk/core/src/main/resources/template/archive/xhtml/select.vm
deleted file mode 100644
index fb7d82f..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/select.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/select.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/submit.vm b/trunk/core/src/main/resources/template/archive/xhtml/submit.vm
deleted file mode 100644
index d7f7753..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/submit.vm
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div #if ($parameters.align) align="$!struts.htmlEncode($parameters.align)" #end
->#parse("/$parameters.templateDir/simple/submit.vm")</div>#parse( "/$parameters.templateDir/xhtml/controlfooter.vm" )
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/table.vm b/trunk/core/src/main/resources/template/archive/xhtml/table.vm
deleted file mode 100644
index e03c58b..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/table.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/simple/table.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/text.vm b/trunk/core/src/main/resources/template/archive/xhtml/text.vm
deleted file mode 100644
index c50c7b4..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/text.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/text.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/textarea.vm b/trunk/core/src/main/resources/template/archive/xhtml/textarea.vm
deleted file mode 100644
index 060376b..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/textarea.vm
+++ /dev/null
@@ -1,2 +0,0 @@
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/textarea.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
-
diff --git a/trunk/core/src/main/resources/template/archive/xhtml/token.vm b/trunk/core/src/main/resources/template/archive/xhtml/token.vm
deleted file mode 100644
index e30f12c..0000000
--- a/trunk/core/src/main/resources/template/archive/xhtml/token.vm
+++ /dev/null
@@ -1 +0,0 @@
-#parse("/$parameters.templateDir/simple/token.vm")
diff --git a/trunk/core/src/main/resources/template/css_xhtml/checkbox.ftl b/trunk/core/src/main/resources/template/css_xhtml/checkbox.ftl
deleted file mode 100644
index 4001215..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/checkbox.ftl
+++ /dev/null
@@ -1,58 +0,0 @@
-<#--
-NOTE: The 'header' stuff that follows is in this one file for checkbox due to the fact
-that for checkboxes we do not want the label field to show up as checkboxes handle their own
-lables
--->
-<#assign hasFieldErrors = fieldErrors?exists && fieldErrors[parameters.name]?exists/>
-<div <#rt/><#if parameters.id?exists>id="wwgrp_${parameters.id}"<#rt/></#if> class="wwgrp">
-
-<#if hasFieldErrors>
-<div <#rt/><#if parameters.id?exists>id="wwerr_${parameters.id}"<#rt/></#if> class="wwerr">
-<#list fieldErrors[parameters.name] as error>
-    <div<#rt/>
-    <#if parameters.id?exists>
-     errorFor="${parameters.id}"<#rt/>
-    </#if>
-    class="errorMessage">
-             ${error?html}
-    </div><#t/>
-</#list>
-</div><#t/>
-</#if>
-
-<#if parameters.labelposition?default("top") == 'top'>
-<div <#rt/>
-<#else>
-<span <#rt/>
-</#if>
-<#if parameters.id?exists>id="wwctrl_${parameters.id}"<#rt/></#if> class="wwctrl">
-
-<#if parameters.required?default(false)>
-        <span class="required">*</span><#t/>
-</#if>
-
-<#include "/${parameters.templateDir}/simple/checkbox.ftl" />
-<#if parameters.labelposition?default("top") == 'top'>
-</div> <#rt/>
-<#else>
-</span>  <#rt/>
-</#if>
-<#if parameters.label?exists> 
-<#if parameters.labelposition?default("top") == 'top'>
-<div <#rt/>
-<#else>
-<span <#rt/>
-</#if>
-<#if parameters.id?exists>id="wwlbl_${parameters.id}"<#rt/></#if> class="wwlbl">
-<label<#t/>
-<#if parameters.id?exists>
- for="${parameters.id?html}"<#rt/>
-</#if>
-<#if hasFieldErrors>
- class="checkboxErrorLabel"<#rt/>
-<#else>
- class="checkboxLabel"<#rt/>
-</#if>
->${parameters.label?html}</label><#rt/>
-</#if>
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/css_xhtml/checkboxlist.ftl b/trunk/core/src/main/resources/template/css_xhtml/checkboxlist.ftl
deleted file mode 100644
index 87dddf4..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/checkboxlist.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/checkboxlist.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/css_xhtml/combobox.ftl b/trunk/core/src/main/resources/template/css_xhtml/combobox.ftl
deleted file mode 100644
index e905e05..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/combobox.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/combobox.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/css_xhtml/control-close.ftl b/trunk/core/src/main/resources/template/css_xhtml/control-close.ftl
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/control-close.ftl
+++ /dev/null
diff --git a/trunk/core/src/main/resources/template/css_xhtml/control.ftl b/trunk/core/src/main/resources/template/css_xhtml/control.ftl
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/control.ftl
+++ /dev/null
diff --git a/trunk/core/src/main/resources/template/css_xhtml/controlfooter.ftl b/trunk/core/src/main/resources/template/css_xhtml/controlfooter.ftl
deleted file mode 100644
index 4dc84ac..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/controlfooter.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-${parameters.after?if_exists}<#t/>
-    <#lt/>
-<#if parameters.labelposition?default("top") == 'top'>
-</div> <#rt/>
-<#else>
-</span> <#rt/>
-</#if>
-</div>
diff --git a/trunk/core/src/main/resources/template/css_xhtml/controlheader-core.ftl b/trunk/core/src/main/resources/template/css_xhtml/controlheader-core.ftl
deleted file mode 100644
index ee3c8bb..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/controlheader-core.ftl
+++ /dev/null
@@ -1,50 +0,0 @@
-<#--
-	Only show message if errors are available.
-	This will be done if ActionSupport is used.
--->
-<#assign hasFieldErrors = parameters.name?exists && fieldErrors?exists && fieldErrors[parameters.name]?exists/> 
-<div <#rt/><#if parameters.id?exists>id="wwgrp_${parameters.id}"<#rt/></#if> class="wwgrp">
-	
-<#if hasFieldErrors>
-<div <#rt/><#if parameters.id?exists>id="wwerr_${parameters.id}"<#rt/></#if> class="wwerr">
-<#list fieldErrors[parameters.name] as error>
-    <div<#rt/>
-    <#if parameters.id?exists>
-     errorFor="${parameters.id}"<#rt/>
-    </#if>
-    class="errorMessage">
-             ${error?html}
-    </div><#t/>
-</#list>
-</div><#t/>
-</#if>
-
-<#if parameters.label?exists>
-<#if parameters.labelposition?default("top") == 'top'>
-<div <#rt/>
-<#else>
-<span <#rt/>
-</#if>
-<#if parameters.id?exists>id="wwlbl_${parameters.id}"<#rt/></#if> class="wwlbl">
-    <label <#t/>
-<#if parameters.id?exists>
-        for="${parameters.id?html}" <#t/>
-</#if>
-<#if hasFieldErrors>
-        class="errorLabel"<#t/>
-<#else>
-        class="label"<#t/>
-</#if>
-    ><#t/>
-<#if parameters.required?default(false)>
-        <span class="required">*</span><#t/>
-</#if>
-        ${parameters.label?html}:
-<#include "/${parameters.templateDir}/xhtml/tooltip.ftl" />
-	</label><#t/>
-<#if parameters.labelposition?default("top") == 'top'>
-</div> <br/><#rt/>
-<#else>
-</span> <#rt/>
-</#if>
-</#if>
diff --git a/trunk/core/src/main/resources/template/css_xhtml/controlheader.ftl b/trunk/core/src/main/resources/template/css_xhtml/controlheader.ftl
deleted file mode 100644
index d564d49..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/controlheader.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-<#include "/${parameters.templateDir}/css_xhtml/controlheader-core.ftl">
-<#if parameters.labelposition?default("top") == 'top'>
-<div <#rt/>
-<#else>
-<span <#rt/>
-</#if>
-<#if parameters.id?exists>id="wwctrl_${parameters.id}"<#rt/></#if> class="wwctrl">
-    
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/template/css_xhtml/datepicker.ftl b/trunk/core/src/main/resources/template/css_xhtml/datepicker.ftl
deleted file mode 100644
index a9815e5..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/datepicker.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/datepicker.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/debug.ftl b/trunk/core/src/main/resources/template/css_xhtml/debug.ftl
deleted file mode 100644
index 99bc91a..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/debug.ftl
+++ /dev/null
@@ -1 +0,0 @@
-<#include "/${parameters.templateDir}/simple/debug.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/doubleselect.ftl b/trunk/core/src/main/resources/template/css_xhtml/doubleselect.ftl
deleted file mode 100644
index 51f2053..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/doubleselect.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/doubleselect.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/css_xhtml/file.ftl b/trunk/core/src/main/resources/template/css_xhtml/file.ftl
deleted file mode 100644
index 3397474..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/file.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/file.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/form-close.ftl b/trunk/core/src/main/resources/template/css_xhtml/form-close.ftl
deleted file mode 100644
index 7876b5c..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/form-close.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/css_xhtml/control-close.ftl" />
-<#include "/${parameters.templateDir}/simple/form-close.ftl" />
-<#include "/${parameters.templateDir}/xhtml/form-close-validate.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/form-validate.ftl b/trunk/core/src/main/resources/template/css_xhtml/form-validate.ftl
deleted file mode 100644
index 27e1e7d..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/form-validate.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-<#if parameters.validate?default(false) == true>
-<script src="${base}/struts/css_xhtml/validation.js" type="text/javascript"></script>
-    <#if parameters.onsubmit?exists>
-        ${tag.addParameter('onsubmit', "${parameters.onsubmit}; return validateForm_${parameters.id}();")}
-    <#else>
-        ${tag.addParameter('onsubmit', "return validateForm_${parameters.id}();")}
-    </#if>
-</#if>
diff --git a/trunk/core/src/main/resources/template/css_xhtml/form.ftl b/trunk/core/src/main/resources/template/css_xhtml/form.ftl
deleted file mode 100644
index d07d86f..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/form.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/css_xhtml/form-validate.ftl" />
-<#include "/${parameters.templateDir}/simple/form.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/control.ftl">
diff --git a/trunk/core/src/main/resources/template/css_xhtml/head.ftl b/trunk/core/src/main/resources/template/css_xhtml/head.ftl
deleted file mode 100644
index 9043cf6..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/head.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-<link rel="stylesheet" href="<@s.url value='/struts/css_xhtml/styles.css' includeParams='none' encode='false' />" type="text/css"/>
-<#include "/${parameters.templateDir}/simple/head.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/label.ftl b/trunk/core/src/main/resources/template/css_xhtml/label.ftl
deleted file mode 100644
index 9b08a66..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/label.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<label<#rt/>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.for?exists>
- for="${parameters.for?html}"<#rt/>
-</#if>
-><#rt/>
-<#if parameters.nameValue?exists>
-<@s.property value="parameters.nameValue"/><#t/>
-</#if>
-&nbsp;
-</label>
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/optiontransferselect.ftl b/trunk/core/src/main/resources/template/css_xhtml/optiontransferselect.ftl
deleted file mode 100644
index 6330f01..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/optiontransferselect.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/optiontransferselect.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/password.ftl b/trunk/core/src/main/resources/template/css_xhtml/password.ftl
deleted file mode 100644
index 5ef91d3..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/password.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/password.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/radiomap.ftl b/trunk/core/src/main/resources/template/css_xhtml/radiomap.ftl
deleted file mode 100644
index 6ee4092..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/radiomap.ftl
+++ /dev/null
@@ -1,5 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/radiomap.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
-<#nt/>
diff --git a/trunk/core/src/main/resources/template/css_xhtml/reset.ftl b/trunk/core/src/main/resources/template/css_xhtml/reset.ftl
deleted file mode 100644
index 4c853b7..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/reset.ftl
+++ /dev/null
@@ -1,19 +0,0 @@
-<#if parameters.labelposition?default("top") == 'top'>
-<div <#rt/>
-<#else>
-<span <#rt/>
-</#if>
-<#if parameters.align?exists>
-    align="${parameters.align?html}"<#t/>
-</#if>
-<#if parameters.id?exists>
-    id="wwctrl_${parameters.id}"<#rt/>
-</#if>
-><#t/>
-<#include "/${parameters.templateDir}/simple/reset.ftl" />
-<#if parameters.labelposition?default("top") == 'top'>
-</div> <#t/>
-<#else>
-</span> <#t/>
-</#if>
-
diff --git a/trunk/core/src/main/resources/template/css_xhtml/select.ftl b/trunk/core/src/main/resources/template/css_xhtml/select.ftl
deleted file mode 100644
index 17c7fcc..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/select.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/select.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/styles.css b/trunk/core/src/main/resources/template/css_xhtml/styles.css
deleted file mode 100644
index 168514d..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/styles.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.wwFormTable {}
-.label {
-    font-style:italic;
-    float:left;
-    width:30%
-}
-.errorLabel {font-style:italic; color:red; }
-.errorMessage {font-weight:bold; text-align: center; color:red; }
-.checkboxLabel {}
-.checkboxErrorLabel {color:red; }
-.required {color:red;}
diff --git a/trunk/core/src/main/resources/template/css_xhtml/submit.ftl b/trunk/core/src/main/resources/template/css_xhtml/submit.ftl
deleted file mode 100644
index 0a67bf7..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/submit.ftl
+++ /dev/null
@@ -1,18 +0,0 @@
-<#if parameters.labelposition?default("top") == 'top'>
-<div <#rt/>
-<#else>
-<span <#rt/>
-</#if>
-<#if parameters.align?exists>
-    align="${parameters.align?html}"<#t/>
-</#if>
-<#if parameters.id?exists>
-    id="wwctrl_${parameters.id}"<#rt/>
-</#if>
-><#t/>
-<#include "/${parameters.templateDir}/simple/submit.ftl" />
-<#if parameters.labelposition?default("top") == 'top'>
-</div> <#t/>
-<#else>
-</span> <#t/>
-</#if>
diff --git a/trunk/core/src/main/resources/template/css_xhtml/text.ftl b/trunk/core/src/main/resources/template/css_xhtml/text.ftl
deleted file mode 100644
index e163af3..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/text.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" / -->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/text.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/textarea.ftl b/trunk/core/src/main/resources/template/css_xhtml/textarea.ftl
deleted file mode 100644
index fc84928..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/textarea.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/textarea.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/theme.properties b/trunk/core/src/main/resources/template/css_xhtml/theme.properties
deleted file mode 100644
index 0a9fb9e..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/theme.properties
+++ /dev/null
@@ -1 +0,0 @@
-parent = xhtml
diff --git a/trunk/core/src/main/resources/template/css_xhtml/updownselect.ftl b/trunk/core/src/main/resources/template/css_xhtml/updownselect.ftl
deleted file mode 100644
index 1b080c8..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/updownselect.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/updownselect.ftl" />
-<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/css_xhtml/validation.js b/trunk/core/src/main/resources/template/css_xhtml/validation.js
deleted file mode 100644
index d1c99ba..0000000
--- a/trunk/core/src/main/resources/template/css_xhtml/validation.js
+++ /dev/null
@@ -1,69 +0,0 @@
-function clearErrorMessages(form) {
-	// clear out any rows with an "errorFor" attribute
-	var divs = form.getElementsByTagName("div");
-    var paragraphsToDelete = new Array();
-
-    for(var i = 0; i < divs.length; i++) {
-        var p = divs[i];
-        if (p.getAttribute("errorFor")) {
-            paragraphsToDelete.push(p);
-        }
-    }
-
-    // now delete the paragraphsToDelete
-    for (var i = 0; i < paragraphsToDelete.length; i++) {
-        var r = paragraphsToDelete[i];
-        var parent = r.parentNode;
-        parent.removeChild(r);
-    }
-}
-
-function clearErrorLabels(form) {
-    // set all labels back to the normal class
-    var labels = form.getElementsByTagName("label");
-    for (var i = 0; i < labels.length; i++) {
-        var label = labels[i];
-        if (label) {
-            if(label.getAttribute("class") == "errorLabel"){
-                label.setAttribute("class", "label");//standard way.. works for ie mozilla
-                label.setAttribute("className", "label"); //ie hack cause ie does not support setAttribute
-            }
-        }
-    }
-
-}
-
-function addError(e, errorText) {
-    try {
-        var ctrlDiv = e.parentNode; // wwctrl_ div or span
-        var enclosingDiv = ctrlDiv.parentNode; // wwgrp_ div
-
-		if (!ctrlDiv || (ctrlDiv.nodeName != "DIV" && ctrlDiv.nodeName != "SPAN") || !enclosingDiv || enclosingDiv.nodeName != "DIV") {
-			alert("do not validate:" + e.id);
-			return;
-		}
-		
-        var label = enclosingDiv.getElementsByTagName("label")[0];
-		if (label) {
-	        label.setAttribute("class", "errorLabel"); //standard way.. works for ie mozilla
-	        label.setAttribute("className", "errorLabel"); //ie hack cause ie does not support setAttribute
-	    }
-
-		var firstDiv = enclosingDiv.getElementsByTagName("div")[0]; // either wwctrl_ or wwlbl_
-		if (!firstDiv) {
-			firstDiv = enclosingDiv.getElementsByTagName("span")[0];
-		}
-        var error = document.createTextNode(errorText);
-        var errorDiv = document.createElement("div");
-
-        errorDiv.setAttribute("class", "errorMessage");//standard way.. works for ie mozilla
-        errorDiv.setAttribute("className", "errorMessage");//ie hack cause ie does not support setAttribute
-        errorDiv.setAttribute("errorFor", e.id);;
-        errorDiv.appendChild(error);
-        enclosingDiv.insertBefore(errorDiv, firstDiv);
-    } catch (e) {
-        alert(e);
-    }
-}
-
-
diff --git a/trunk/core/src/main/resources/template/simple/a-close.ftl b/trunk/core/src/main/resources/template/simple/a-close.ftl
deleted file mode 100644
index 937be08..0000000
--- a/trunk/core/src/main/resources/template/simple/a-close.ftl
+++ /dev/null
@@ -1 +0,0 @@
-</a>
diff --git a/trunk/core/src/main/resources/template/simple/a.ftl b/trunk/core/src/main/resources/template/simple/a.ftl
deleted file mode 100644
index af653c2..0000000
--- a/trunk/core/src/main/resources/template/simple/a.ftl
+++ /dev/null
@@ -1,19 +0,0 @@
-<a
-	<#if parameters.id?if_exists != "">id="${parameters.id?html}"</#if>
-	<#if parameters.href?if_exists != "">href="${parameters.href}"</#if>
-
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
->
diff --git a/trunk/core/src/main/resources/template/simple/actionerror.ftl b/trunk/core/src/main/resources/template/simple/actionerror.ftl
deleted file mode 100644
index 74c3136..0000000
--- a/trunk/core/src/main/resources/template/simple/actionerror.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<#if (actionErrors?exists && actionErrors?size > 0)>
-	<ul>
-	<#list actionErrors as error>
-		<li><span class="errorMessage">${error}</span></li>
-	</#list>
-	</ul>
-</#if>
diff --git a/trunk/core/src/main/resources/template/simple/actionmessage.ftl b/trunk/core/src/main/resources/template/simple/actionmessage.ftl
deleted file mode 100644
index 384b755..0000000
--- a/trunk/core/src/main/resources/template/simple/actionmessage.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<#if (actionMessages?exists && actionMessages?size > 0)>
-	<ul>
-		<#list actionMessages as message>
-			<li><span class="actionMessage">${message}</span></li>
-		</#list>
-	</ul>
-</#if>
diff --git a/trunk/core/src/main/resources/template/simple/checkbox.ftl b/trunk/core/src/main/resources/template/simple/checkbox.ftl
deleted file mode 100644
index d8e4a0f..0000000
--- a/trunk/core/src/main/resources/template/simple/checkbox.ftl
+++ /dev/null
@@ -1,29 +0,0 @@
-<input type="checkbox" name="${parameters.name?html}" value="${parameters.fieldValue?html}"<#rt/>
-<#if parameters.nameValue?exists && parameters.nameValue>
- checked="checked"<#rt/>
-</#if>
-<#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-</#if>
-<#if parameters.readonly?default(false)>
- readonly="readonly"<#rt/>
-</#if>
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-/>
-<input type="hidden" name="__checkbox_${parameters.name?html}" value="${parameters.fieldValue?html}"/>
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/template/simple/checkboxlist.ftl b/trunk/core/src/main/resources/template/simple/checkboxlist.ftl
deleted file mode 100644
index c198941..0000000
--- a/trunk/core/src/main/resources/template/simple/checkboxlist.ftl
+++ /dev/null
@@ -1,33 +0,0 @@
-<#assign itemCount = 0/>
-<#if parameters.list?exists>
-    <@s.iterator value="parameters.list">
-        <#assign itemCount = itemCount + 1/>
-        <#if parameters.listKey?exists>
-            <#assign itemKey = stack.findValue(parameters.listKey)/>
-        <#else>
-            <#assign itemKey = stack.findValue('top')/>
-        </#if>
-        <#if parameters.listValue?exists>
-            <#assign itemValue = stack.findString(parameters.listValue)/>
-        <#else>
-            <#assign itemValue = stack.findString('top')/>
-        </#if>
-<#assign itemKeyStr=itemKey.toString() />
-<input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/>
-        <#if tag.contains(parameters.nameValue, itemKey)>
- checked="checked"<#rt/>
-        </#if>
-        <#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-        </#if>
-        <#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-        </#if>
-        <#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-        <#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-/>
-<label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label>
-    </@s.iterator>
-<#else>
-  &nbsp;
-</#if>
diff --git a/trunk/core/src/main/resources/template/simple/combobox.ftl b/trunk/core/src/main/resources/template/simple/combobox.ftl
deleted file mode 100644
index e60fbcd..0000000
--- a/trunk/core/src/main/resources/template/simple/combobox.ftl
+++ /dev/null
@@ -1,50 +0,0 @@
-<script>
-	function autoPopulate_${parameters.name?html}(targetElement) {
-		<#if parameters.headerKey?exists && parameters.headerValue?exists>
-		if (targetElement.options[targetElement.selectedIndex].value == '${parameters.headerKey?html}') {
-			return;
-		}			
-		</#if>
-		<#if parameters.emptyOption?default(false)>
-		if (targetElement.options[targetElement.selectedIndex].value == '') {
-		    return;
-		}
-		</#if>
-		targetElement.form.elements['${parameters.name?html}'].value=targetElement.options[targetElement.selectedIndex].value;
-	}
-</script>
-<#include "/${parameters.templateDir}/simple/text.ftl" />
-<br/>
-<#if parameters.list?exists>
-<select onChange="autoPopulate_${parameters.name?html}(this);"<#rt/>
-    <#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-    </#if>
->
-	<#if (parameters.headerKey?exists && parameters.headerValue?exists)>
-		<option value="${parameters.headerKey?html}">${parameters.headerValue?html}</option>
-	</#if>
-	<#if parameters.emptyOption?default(false)>
-	    <option value=""></option>
-	</#if>
-    <@s.iterator value="parameters.list">
-    <#if parameters.listKey?exists>
-    	<#assign tmpListKey = stack.findString(parameters.listKey) />
-    <#else>
-    	<#assign tmpListKey = stack.findString('top') />
-    </#if>
-    <#if parameters.listValue?exists>
-    	<#assign tmpListValue = stack.findString(parameters.listValue) />
-    <#else>
-    	<#assign tmpListValue = stack.findString('top') />
-    </#if>
-    <option value="${tmpListKey?html}"<#rt/>
-        <#if (parameters.nameValue == tmpListKey)>
- selected="selected"<#rt/>
-        </#if>
-    ><#t/>
-            ${tmpListValue?html}<#t/>
-    </option><#lt/>
-    </@s.iterator>
-</select>
-</#if>
diff --git a/trunk/core/src/main/resources/template/simple/common-attributes.ftl b/trunk/core/src/main/resources/template/simple/common-attributes.ftl
deleted file mode 100644
index 1a04d8a..0000000
--- a/trunk/core/src/main/resources/template/simple/common-attributes.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#if parameters.accesskey?exists>
- accesskey="${parameters.accesskey?html}" 
-</#if>
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/template/simple/controlfooter.ftl b/trunk/core/src/main/resources/template/simple/controlfooter.ftl
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/main/resources/template/simple/controlfooter.ftl
+++ /dev/null
diff --git a/trunk/core/src/main/resources/template/simple/controlheader.ftl b/trunk/core/src/main/resources/template/simple/controlheader.ftl
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/main/resources/template/simple/controlheader.ftl
+++ /dev/null
diff --git a/trunk/core/src/main/resources/template/simple/datepicker.ftl b/trunk/core/src/main/resources/template/simple/datepicker.ftl
deleted file mode 100644
index 8d86570..0000000
--- a/trunk/core/src/main/resources/template/simple/datepicker.ftl
+++ /dev/null
@@ -1,58 +0,0 @@
-<script type="text/javascript">
-    dojo.require("dojo.widget.html.DatePicker");
-    dojo.require("struts.widgets.*");
-</script>
-
-<#if parameters.readonly?default(false)>
-    <#include "/${parameters.templateDir}/simple/text.ftl" />
-<#else>
-<#--
-    <div dojoType="dropdowncontainer"
-        dateIconPath="<@s.url includeParams='none' value='/struts/dojo/struts/widgets/dateIcon.gif' encode='false'/>"
-        <#if parameters.format?exists>
-            dateFormat="${parameters.format}"
-        </#if>
-        <#if parameters.dateIconPath?exists>
-            dateIconPath="${parameters.dateIconPath}"
-        </#if>
-        <#if parameters.currentDate?exists>
-            currentDate="${parameters.currentDate}"
-        </#if>
-        <#if parameters.currentDate?exists>
-            templatePath="${parameters.templatePath}"
-        </#if>
-        <#if parameters.templateCssPath?exists>
-            templateCssPath="${parameters.templateCssPath}"
-        </#if>
-        <#if parameters.get("size")?exists>
-             inputWidth="${parameters.get("size")?html}"
-        </#if>
-    >
-        <#include "/${parameters.templateDir}/simple/text.ftl" />
-    </div>
--->
-	<div dojoType="dropdowndatepicker"
-        <#if parameters.format?exists>
-            dateFormat="${parameters.format}"
-        </#if>
-        <#if parameters.dateIconPath?exists>
-            iconPath="${parameters.dateIconPath}"
-        <#else>
-        	iconPath="<@s.url includeParams='none' value='/struts/dojo/struts/widgets/dateIcon.gif' encode='false' includeParams="none" />"
-        </#if>
-        <#if parameters.nameValue?exists>
-        	value="${parameters.nameValue?html}"
-        </#if>
-        <#if parameters.templatePath?exists>
-            templatePath="${parameters.templatePath}"
-        </#if>
-        <#if parameters.templateCssPath?exists>
-            templateCssPath="${parameters.templateCssPath}"
-        </#if>
-        <#if parameters.get("size")?exists>
-             inputWidth="${parameters.get("size")?string?html}"
-        </#if>
-    >
-        <#include "/${parameters.templateDir}/simple/text.ftl" />
-    </div>
-</#if>
diff --git a/trunk/core/src/main/resources/template/simple/debug.ftl b/trunk/core/src/main/resources/template/simple/debug.ftl
deleted file mode 100644
index 8ce409d..0000000
--- a/trunk/core/src/main/resources/template/simple/debug.ftl
+++ /dev/null
@@ -1,59 +0,0 @@
-<script language="JavaScript" type="text/javascript">
-<!--
-    function toggleDebug(debugId) {
-        var debugDiv = document.getElementById(debugId);
-        if (debugDiv) {
-            var display = debugDiv.style.display;
-            if (display == 'none') {
-                debugDiv.style.display = 'block';
-            } else if (display == 'block') {
-                debugDiv.style.display = 'none';
-            }
-        }
-    }
--->
-</script>
-<p/>
-
-<a href="#" onclick="toggleDebug('<#if parameters.id?if_exists != "">${parameters.id?html}<#else>debug</#if>');return false;">[Debug]</a>
-<div style="display:none" id="<#if parameters.id?if_exists != "">${parameters.id?html}<#else>debug</#if>">
-<h2>Struts ValueStack Debug</h2>
-<p/>
-
-<h3>Value Stack Contents</h3>
-<table border="0" cellpadding="2" cellspacing="0" width="400" bgcolor="#DDDDDD">
-    <tr><th>Object</th><th>Property Name</th><th>Property Value</th></tr>
-
-    <#assign index=1>
-    <#list parameters.stackValues as stackObject>
-    <tr>
-        <td rowspan="${stackObject.value.size()}">${stackObject.key}</td>
-
-        <#assign renderRow=false>
-        <#list stackObject.value.keySet() as propertyName>
-            <#if renderRow==true><tr><#else> <#assign renderRow=false> </#if>
-            <td bgcolor="<#if (index % 2) == 0>#BBBBBB<#else>#CCCCCC</#if>">${propertyName}</td>
-            <td bgcolor="<#if (index % 2) == 0>#BBBBBB<#else>#CCCCCC</#if>"><#if stackObject.value.get(propertyName)?exists>${stackObject.value.get(propertyName).toString()}<#else>null</#if></td>
-    </tr>
-            <#assign index= index + 1>
-        </#list>
-    </#list>
-</table>
-<p/>
-
-<h3>Stack Context</h3>
-<i>These items are available using the #key notation</i>
-<table border="0" cellpadding="2" cellspacing="0" width="400" bgcolor="#DDDDDD">
-    <tr>
-        <th>Key</th><th>Value</th>
-    </tr>
-
-    <#assign index=1>
-    <#list stack.context.keySet() as contextKey>
-    <tr bgcolor="<#if (index % 2) == 0>#BBBBBB<#else>#CCCCCC</#if>">
-        <td>${contextKey}</td><td><#if stack.context.get(contextKey)?exists>${stack.context.get(contextKey).toString()}<#else>null</#if></td>
-    </tr>
-        <#assign index= index + 1>
-    </#list>
-</table>
-</div>
diff --git a/trunk/core/src/main/resources/template/simple/div-close.ftl b/trunk/core/src/main/resources/template/simple/div-close.ftl
deleted file mode 100644
index 04f5b84..0000000
--- a/trunk/core/src/main/resources/template/simple/div-close.ftl
+++ /dev/null
@@ -1 +0,0 @@
-</div>
diff --git a/trunk/core/src/main/resources/template/simple/div.ftl b/trunk/core/src/main/resources/template/simple/div.ftl
deleted file mode 100644
index caaba59..0000000
--- a/trunk/core/src/main/resources/template/simple/div.ftl
+++ /dev/null
@@ -1,10 +0,0 @@
-<div
-    <#if parameters.id?exists>               id="${parameters.id?html}"         </#if>
-    <#if parameters.name?exists>             name="${parameters.name?html}"         </#if>
-    <#if parameters.cssClass?exists>         class="${parameters.cssClass?html}"    </#if>
-    <#if parameters.cssStyle?exists>         style="${parameters.cssStyle?html}"    </#if>
-    <#if parameters.title?exists>            title="${parameters.title?html}"<#rt/>
-        </#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
->
diff --git a/trunk/core/src/main/resources/template/simple/dojoRequire.js b/trunk/core/src/main/resources/template/simple/dojoRequire.js
deleted file mode 100644
index 2409ca9..0000000
--- a/trunk/core/src/main/resources/template/simple/dojoRequire.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.hostenv.writeIncludes(); // not needed, but allows the Venkman debugger to work with the includes
-
diff --git a/trunk/core/src/main/resources/template/simple/doubleselect.ftl b/trunk/core/src/main/resources/template/simple/doubleselect.ftl
deleted file mode 100644
index d3c17fa..0000000
--- a/trunk/core/src/main/resources/template/simple/doubleselect.ftl
+++ /dev/null
@@ -1,108 +0,0 @@
-<#include "/${parameters.templateDir}/simple/select.ftl" />
-<#assign startCount = 0/>
-<#if parameters.headerKey?exists && parameters.headerValue?exists>
-    <#assign startCount = startCount + 1/>
-</#if>
-<#if parameters.emptyOption?exists>
-    <#assign startCount = startCount + 1/>
-</#if>
-
-<br/>
-<select<#rt/>
- name="${parameters.doubleName?default("")?html}"<#rt/>
-<#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-</#if>
-<#if parameters.doubleTabindex?exists>
- tabindex="${parameters.doubleTabindex?html}"<#rt/>
-</#if>
-<#if parameters.doubleId?exists>
- id="${parameters.doubleId?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#if parameters.multiple?default(false)>
- multiple="multiple"<#rt/>
-</#if>
->
-</select>
-<script type="text/javascript">
-<#assign itemCount = startCount/>
-    var ${parameters.name}Group = new Array(${parameters.listSize} + ${startCount});
-    for (i = 0; i < (${parameters.listSize} + ${startCount}); i++)
-    ${parameters.name}Group[i] = new Array();
-
-<@s.iterator value="parameters.list">
-    <#if parameters.listKey?exists>
-        <#assign itemKey = stack.findValue(parameters.listKey)/>
-    <#else>
-        <#assign itemKey = stack.findValue('top')/>
-    </#if>
-    <#if parameters.listValue?exists>
-        <#assign itemValue = stack.findString(parameters.listValue)/>
-    <#else>
-        <#assign itemValue = stack.findString('top')/>
-    </#if>
-    <#assign doubleItemCount = 0/>
-    <@s.iterator value="${parameters.doubleList}">
-        <#if parameters.doubleListKey?exists>
-            <#assign doubleItemKey = stack.findValue(parameters.doubleListKey)/>
-        <#else>
-            <#assign doubleItemKey = stack.findValue('top')/>
-        </#if>
-        <#assign doubleItemKeyStr = doubleItemKey.toString() />
-        <#if parameters.doubleListValue?exists>
-            <#assign doubleItemValue = stack.findString(parameters.doubleListValue)/>
-        <#else>
-            <#assign doubleItemValue = stack.findString('top')/>
-        </#if>
-    ${parameters.name}Group[${itemCount}][${doubleItemCount}] = new Option("${doubleItemValue}", "${doubleItemKeyStr}");
-
-        <#assign doubleItemCount = doubleItemCount + 1/>
-    </@s.iterator>
-    <#assign itemCount = itemCount + 1/>
-</@s.iterator>
-
-    var ${parameters.name}Temp = document.${parameters.formName}.${parameters.doubleName};
-<#assign itemCount = startCount/>
-<#assign redirectTo = 0/>
-<@s.iterator value="parameters.list">
-    <#if parameters.listKey?exists>
-        <#assign itemKey = stack.findValue(parameters.listKey)/>
-    <#else>
-        <#assign itemKey = stack.findValue('top')/>
-    </#if>
-    <#if tag.contains(parameters.nameValue, itemKey)>
-        <#assign redirectTo = itemCount/>
-    </#if>
-    <#assign itemCount = itemCount + 1/>
-</@s.iterator>
-    ${parameters.name}Redirect(${redirectTo});
-    function ${parameters.name}Redirect(x) {
-    	var selected = false;
-        for (m = ${parameters.name}Temp.options.length - 1; m >= 0; m--) {
-            ${parameters.name}Temp.options[m] = null;
-        }
-
-        for (i = 0; i < ${parameters.name}Group[x].length; i++) {
-            ${parameters.name}Temp.options[i] = new Option(${parameters.name}Group[x][i].text, ${parameters.name}Group[x][i].value);
-            <#if parameters.doubleNameValue?exists>
-            	if (${parameters.name}Temp.options[i].value == '${parameters.doubleNameValue}') {
-            		${parameters.name}Temp.options[i].selected = true;
-            		selected = true;
-            	}
-            </#if>
-        }
-
-        if ((${parameters.name}Temp.options.length > 0) && (! selected)) {
-           	${parameters.name}Temp.options[0].selected = true;
-        }
-    }
-</script>
diff --git a/trunk/core/src/main/resources/template/simple/empty.ftl b/trunk/core/src/main/resources/template/simple/empty.ftl
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/main/resources/template/simple/empty.ftl
+++ /dev/null
diff --git a/trunk/core/src/main/resources/template/simple/fielderror.ftl b/trunk/core/src/main/resources/template/simple/fielderror.ftl
deleted file mode 100644
index 9b24c6f..0000000
--- a/trunk/core/src/main/resources/template/simple/fielderror.ftl
+++ /dev/null
@@ -1,39 +0,0 @@
-<#if fieldErrors?exists><#t/>
-<#assign eKeys = fieldErrors.keySet()><#t/>
-<#assign eKeysSize = eKeys.size()><#t/>
-<#assign doneStartUlTag=false><#t/>
-<#assign doneEndUlTag=false><#t/>
-<#assign haveMatchedErrorField=false><#t/>
-<#if (fieldErrorFieldNames?size > 0) ><#t/>
-	<#list fieldErrorFieldNames as fieldErrorFieldName><#t/>
-		<#list eKeys as eKey><#t/>
-		<#if (eKey = fieldErrorFieldName)><#t/>
-			<#assign haveMatchedErrorField=true><#t/>
-			<#assign eValue = fieldErrors[fieldErrorFieldName]><#t/>
-			<#if (haveMatchedErrorField && (!doneStartUlTag))><#t/>
-				<ul>
-				<#assign doneStartUlTag=true><#t/>
-			</#if><#t/>
-			<#list eValue as eEachValue><#t/>
-				<li><span class="errorMessage">${eEachValue}</span></li>
-			</#list><#t/>			
-		</#if><#t/>
-		</#list><#t/>
-	</#list><#t/>
-	<#if (haveMatchedErrorField && (!doneEndUlTag))><#t/>
-		</ul>
-		<#assign doneEndUlTag=true><#t/>
-	</#if><#t/>
-<#else><#t/>	
-	<#if (eKeysSize > 0)><#t/>
-		<ul>
-			<#list eKeys as eKey><#t/>
-				<#assign eValue = fieldErrors[eKey]><#t/>
-				<#list eValue as eEachValue><#t/>
-					<li><span class="errorMessage">${eEachValue}</span></li>
-				</#list><#t/>
-			</#list><#t/>
-		</ul>
-	</#if><#t/>
-</#if><#t/>
-</#if><#t/>
diff --git a/trunk/core/src/main/resources/template/simple/file.ftl b/trunk/core/src/main/resources/template/simple/file.ftl
deleted file mode 100644
index 02cf84c..0000000
--- a/trunk/core/src/main/resources/template/simple/file.ftl
+++ /dev/null
@@ -1,32 +0,0 @@
-<input type="file"<#rt/>
- name="${parameters.name?default("")?html}"<#rt/>
-<#if parameters.get("size")?exists>
- size="${parameters.get("size")?html}"<#rt/>
-</#if>
-<#if parameters.nameValue?exists>
- value="<@s.property value="parameters.nameValue"/>"<#rt/>
-</#if>
-<#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-</#if>
-<#if parameters.accept?exists>
- accept="${parameters.accept?html}"<#rt/>
-</#if>
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-/>
diff --git a/trunk/core/src/main/resources/template/simple/form-close.ftl b/trunk/core/src/main/resources/template/simple/form-close.ftl
deleted file mode 100644
index 4340c3b..0000000
--- a/trunk/core/src/main/resources/template/simple/form-close.ftl
+++ /dev/null
@@ -1,74 +0,0 @@
-</form>
-
-<#if (parameters.customOnsubmitEnabled?if_exists)>
-<script>
-<#-- 
-  Enable auto-select of optiontransferselect tag's entries upon containing form's 
-  submission.
--->
-dojo.require("dojo.event.connect");
-<#if (parameters.optiontransferselectIds?if_exists?size > 0)>
-	var containingForm = document.getElementById("${parameters.id}");
-	<#assign selectObjIds = parameters.optiontransferselectIds.keySet() />
-	<#list selectObjIds as selectObjectId>
-		dojo.event.connect(containingForm, "onsubmit", 
-			function(evt) {
-				var selectObj = document.getElementById("${selectObjectId}");
-				<#if parameters.optiontransferselectIds.get(selectObjectId)?exists>
-					<#assign selectTagHeaderKey = parameters.optiontransferselectIds.get(selectObjectId)/>
-					selectAllOptionsExceptSome(selectObj, "key", "${selectTagHeaderKey}");
-				<#else>
-					selectAllOptionsExceptSome(selectObj, "key", "");
-				</#if>
-			});
-	</#list>
-</#if>
-<#if (parameters.optiontransferselectDoubleIds?if_exists?size > 0)>
-	var containingForm = document.getElementById("${parameters.id}");
-	<#assign selectDoubleObjIds = parameters.optiontransferselectDoubleIds.keySet() />
-	<#list selectDoubleObjIds as selectObjId>
-		dojo.event.connect(containingForm, "onsubmit", 
-			function(evt) {
-				var selectObj = document.getElementById("${selectObjId}");
-				<#if parameters.optiontransferselectDoubleIds.get(selectObjId)?exists>
-					<#assign selectTagHeaderKey = parameters.optiontransferselectDoubleIds.get(selectObjId)/>
-					selectAllOptionsExceptSome(selectObj, "key", "${selectTagHeaderKey}");
-				<#else>
-					selectAllOptionsExceptSome(selectObj, "key", "");
-				</#if>
-			});
-	</#list>
-</#if>
-
-
-<#--
-	Enable auto-select of all elements of updownselect tag upon its containing form
-	submission
--->
-<#if (parameters.updownselectIds?if_exists?size > 0)>
-	var containingForm = document.getElementById("${parameters.id}");
-	<#assign tmpIds = parameters.updownselectIds.keySet() />
-	<#list tmpIds as tmpId>
-		dojo.event.connect(containingForm, "onsubmit", 
-			function(evt) {
-				var updownselectObj = document.getElementById("${tmpId}");
-				<#if parameters.updownselectIds.get(tmpId)?exists>
-					<#assign tmpHeaderKey = parameters.updownselectIds.get(tmpId) />
-					selectAllOptionsExceptSome(updownselectObj, "key", "${tmpHeaderKey}");
-				<#else>
-					selectAllOptionsExceptSome(updownselectObj, "key", "");
-				</#if>
-			});
-	</#list>
-</#if>
-</script>
-</#if>
-
-
-<#-- 
- Code that will add javascript needed for tooltips
---><#t/>
-<#if (parameters.hasTooltip?default(false))><#t/>
-	<#lt/><!-- javascript that is needed for tooltips -->
-	<#lt/><script language="JavaScript" type="text/javascript">dojo.require("dojo.widget.html.Tooltip");dojo.require("dojo.fx.html");</script>
-</#if><#t/>
diff --git a/trunk/core/src/main/resources/template/simple/form.ftl b/trunk/core/src/main/resources/template/simple/form.ftl
deleted file mode 100644
index 1182817..0000000
--- a/trunk/core/src/main/resources/template/simple/form.ftl
+++ /dev/null
@@ -1,47 +0,0 @@
-<#if (parameters.validate?default(false) == false)><#rt/>
-	<#if parameters.onsubmit?exists><#rt/>
-		${tag.addParameter('onsubmit', "${parameters.onsubmit}; return true;") }
-	<#else>
-		${tag.addParameter('onsubmit', "return true;") }	
-	</#if>
-</#if>
-<form<#rt/>
-<#if parameters.namespace?exists && parameters.validate?exists>
- namespace="${parameters.namespace?html}"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.name?exists>
- name="${parameters.name?html}"<#rt/>
-</#if>
-<#if parameters.onsubmit?exists>
- onsubmit="${parameters.onsubmit?html}"<#rt/>
-</#if>
-<#if parameters.action?exists>
- action="${parameters.action?html}"<#rt/>
-</#if>
-<#if parameters.target?exists>
- target="${parameters.target?html}"<#rt/>
-</#if>
-<#if parameters.method?exists>
- method="${parameters.method?html}"<#rt/>
-<#else>
- method="POST"<#rt/>
-</#if>
-<#if parameters.enctype?exists>
- enctype="${parameters.enctype?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#if parameters.acceptcharset?exists>
- accept-charset="${parameters.acceptcharset?html}"<#rt/>
-</#if>
->
diff --git a/trunk/core/src/main/resources/template/simple/head.ftl b/trunk/core/src/main/resources/template/simple/head.ftl
deleted file mode 100644
index 91c05dc..0000000
--- a/trunk/core/src/main/resources/template/simple/head.ftl
+++ /dev/null
@@ -1,13 +0,0 @@
-<script language="JavaScript" type="text/javascript">
-    // Dojo configuration
-    djConfig = {
-        baseRelativePath: "<@s.url includeParams='none' value='/struts/dojo' includeParams="none" encode='false'/>",
-        isDebug: ${parameters.debug?default(false)},
-        bindEncoding: "${parameters.encoding}",
-        debugAtAllCosts: true // not needed, but allows the Venkman debugger to work with the includes
-    };
-</script>
-<script language="JavaScript" type="text/javascript"
-        src="<@s.url includeParams='none' value='/struts/dojo/dojo.js' includeParams="none" encode='false'/>"></script>
-<script language="JavaScript" type="text/javascript"
-        src="<@s.url includeParams='none' value='/struts/simple/dojoRequire.js' includeParams="none" encode='false'/>"></script>
diff --git a/trunk/core/src/main/resources/template/simple/hidden.ftl b/trunk/core/src/main/resources/template/simple/hidden.ftl
deleted file mode 100644
index 2755cb3..0000000
--- a/trunk/core/src/main/resources/template/simple/hidden.ftl
+++ /dev/null
@@ -1,15 +0,0 @@
-<input type="hidden"<#rt/>
- name="${parameters.name?default("")?html}"<#rt/>
-<#if parameters.nameValue?exists>
- value="<@s.property value="parameters.nameValue"/>"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-/>
diff --git a/trunk/core/src/main/resources/template/simple/label.ftl b/trunk/core/src/main/resources/template/simple/label.ftl
deleted file mode 100644
index 8917632..0000000
--- a/trunk/core/src/main/resources/template/simple/label.ftl
+++ /dev/null
@@ -1,22 +0,0 @@
-<label<#rt/>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#if parameters.for?exists>
- for="${parameters.for?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-><#rt/>
-<#if parameters.nameValue?exists>
-<@s.property value="parameters.nameValue"/><#t/>
-</#if>
-</label>
diff --git a/trunk/core/src/main/resources/template/simple/optgroup.ftl b/trunk/core/src/main/resources/template/simple/optgroup.ftl
deleted file mode 100644
index dac0855..0000000
--- a/trunk/core/src/main/resources/template/simple/optgroup.ftl
+++ /dev/null
@@ -1,27 +0,0 @@
-<#if parameters.optGroupInternalListUiBeanList?exists>
-<#assign optGroupInternalListUiBeans=parameters.optGroupInternalListUiBeanList />
-<#list optGroupInternalListUiBeans as optGroupInternalListUiBean>
-<optgroup 
-	<#if optGroupInternalListUiBean.parameters.label?exists>
-	label="${optGroupInternalListUiBean.parameters.label}"
-	</#if>
-	<#if optGroupInternalListUiBean.parameters.disabled?default(false)>
-	disabled="disabled"
-	</#if>
->
-
-<#list optGroupInternalListUiBean.parameters.list as optGroupBean>
-<#assign trash=stack.push(optGroupBean) />
-	<#assign tmpKey=stack.findValue(optGroupInternalListUiBean.parameters.listKey) />
-	<#assign tmpValue=stack.findValue(optGroupInternalListUiBean.parameters.listValue) />
-	<option value="${tmpKey}"
-	<#if tag.contains(parameters.nameValue, tmpKey) == true>
-	selected="selected"
-	</#if>
-	>${tmpValue}
-	</option>
-<#assign trash=stack.pop() />
-</#list>
-</optgroup>
-</#list>
-</#if>
diff --git a/trunk/core/src/main/resources/template/simple/optiontransferselect.ftl b/trunk/core/src/main/resources/template/simple/optiontransferselect.ftl
deleted file mode 100644
index 612fdd6..0000000
--- a/trunk/core/src/main/resources/template/simple/optiontransferselect.ftl
+++ /dev/null
@@ -1,286 +0,0 @@
-<#if !stack.findValue("#optiontransferselect_js_included")?exists><#t/>
-	<script language="javascript" src="<@s.url value="/struts/optiontransferselect.js" encode='false' includeParams='none'/>"></script>
-	<#assign temporaryVariable = stack.setValue("#optiontransferselect_js_included", "true") /><#t/>
-</#if><#t/>
-<table border="0">
-<tr>
-<td>
-<#if parameters.leftTitle?exists><#t/>
-	<label for="leftTitle">${parameters.leftTitle}</label><br/>
-</#if><#t/>
-<#include "/${parameters.templateDir}/simple/select.ftl" /> 
-<#if parameters.allowUpDownOnLeft?default(true)>
-<input type="button" 
-<#if parameters.headerKey?exists>
-	onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');"
-<#else>
-	onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '');"
-</#if>
-<#if parameters.leftDownLabel?exists>
-	value="${parameters.leftDownLabel?html}"
-</#if>
-/>
-<input type="button"
-<#if parameters.headerKey?exists>
-	onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');"
-<#else>
-	onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '');"
-</#if>	
-<#if parameters.leftUpLabel?exists>
-	value="${parameters.leftUpLabel?html}"
-</#if>
-/>
-</#if>
-
-</td>
-<td valign="middle" align="center">
-	<#if parameters.allowAddToLeft?default(true)><#t/>
-		<#assign addToLeftLabel = parameters.addToLeftLabel?default("<-")?html/><#t/>
-		<#if parameters.doubleHeaderKey?exists><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${addToLeftLabel}" onclick="moveSelectedOptions(document.getElementById('${parameters.doubleId?html}'), document.getElementById('${parameters.id?html}'), false, '${parameters.doubleHeaderKey}', '')" /><br/><br/>
-		<#else><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${addToLeftLabel}" onclick="moveSelectedOptions(document.getElementById('${parameters.doubleId?html}'), document.getElementById('${parameters.id?html}'), false, '')" /><br/><br/>
-		</#if><#t/>
-	</#if><#t/>
-	<#if parameters.allowAddToRight?default(true)><#t/>
-		<#assign addToRightLabel=parameters.addToRightLabel?default("->")?html /><#t/>
-		<#if parameters.headerKey?exists><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${addToRightLabel}" onclick="moveSelectedOptions(document.getElementById('${parameters.id?html}'), document.getElementById('${parameters.doubleId?html}'), false, '${parameters.headerKey}', '')" /><br/><br/>
-		<#else><#t/>
-			<input type="button"
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${addToRightLabel}" onclick="moveSelectedOptions(document.getElementById('${parameters.id?html}'), document.getElementById('${parameters.doubleId?html}'), false, '')" /><br/><br/>
-		</#if><#t/>
-	</#if><#t/>
-	<#if parameters.allowAddAllToLeft?default(true)><#t/>
-		<#assign addAllToLeftLabel=parameters.addAllToLeftLabel?default("<<--")?html /><#t/>
-		<#if parameters.doubleHeaderKey?exists><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass}"
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle}"
-			</#if><#t/>
-			 value="${addAllToLeftLabel}" onclick="moveAllOptions(document.getElementById('${parameters.doubleId?html}'), document.getElementById('${parameters.id?html}'), false, '${parameters.doubleHeaderKey}', '')" /><br/><br/>
-		<#else><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${addAllToLeftLabel}" onclick="moveAllOptions(document.getElementById('${parameters.doubleId?html}'), document.getElementById('${parameters.id?html}'), false, '')" /><br/><br/>
-		</#if><#t/>
-	</#if><#t/>
-	<#if parameters.allowAddAllToRight?default(true)><#t/>
-		<#assign addAllToRightLabel=parameters.addAllToRightLabel?default("-->>")?html /><#t/>
-		<#if parameters.headerKey?exists><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${addAllToRightLabel}" onclick="moveAllOptions(document.getElementById('${parameters.id?html}'), document.getElementById('${parameters.doubleId?html}'), false, '${parameters.headerKey}', '')" /><br/><br/>	
-		<#else><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${addAllToRightLabel}" onclick="moveAllOptions(document.getElementById('${parameters.id?html}'), document.getElementById('${parameters.doubleId?html}'), false, '')" /><br/><br/>	
-		</#if><#t/>
-	</#if><#t/>
-	<#if parameters.allowSelectAll?default(true)><#t/>
-		<#assign selectAllLabel=parameters.selectAllLabel?default("<*>")?html /><#t/>
-		<#if parameters.headerKey?exists && parameters.doubleHeaderKey?exists><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${selectAllLabel}" onclick="selectAllOptionsExceptSome(document.getElementById('${parameters.id?html}'), 'key', '${parameters.headerKey}');selectAllOptionsExceptSome(document.getElementById('${parameters.doubleId?html}'), 'key', '${parameters.doubleHeaderKey}');" /><br/><br/>
-		<#elseif parameters.headerKey?exists><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${selectAllLabel}" onclick="selectAllOptionsExceptSome(document.getElementById('${parameters.id?html}'), 'key', '${parameters.headerKey}');selectAllOptions(document.getElementById('${parameters.doubleId?html}'));" /><br/><br/>
-		<#elseif parameters.doubleHeaderKey?exists><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${selectAllLabel}" onclick="selectAllOptions(document.getElementById('${parameters.id?html}'));selectAllOptionsExceptSome(document.getElementById('${parameters.doubleId?html}'), 'key', '${parameters.doubleHeaderKey}');" /><br/><br/>
-		<#else><#t/>
-			<input type="button" 
-			<#if parameters.buttonCssClass?exists><#t/>
-			 class="${parameters.buttonCssClass?html}" 
-			</#if><#t/>
-			<#if parameters.buttonCssStyle?exists><#t/>
-			 style="${parameters.buttonCssStyle?html}"
-			</#if><#t/>
-			 value="${selectAllLabel}" onclick="selectAllOptions(document.getElementById('${parameters.id?html}'));selectAllOptions(document.getElementById('${parameters.doubleId?html}'));" /><br/><br/>
-		</#if><#t/>
-	</#if><#t/>
-</td>
-<td>
-<#if parameters.rightTitle?exists><#t/>
-	<label for="rightTitle">${parameters.rightTitle}</label><br/>
-</#if><#t/>
-<select 
-	name="${parameters.doubleName?default("")?html}"
-	<#if parameters.get("doubleSize")?exists><#t/>
-	size="${parameters.get("size")?html}"		
-	</#if><#t/>
-	<#if parameters.doubleDisabled?default(false)><#t/>
-	disabled="disabled"
-	</#if><#t/>
-	<#if parameters.doubleMultiple?default(false)><#t/>
-	multiple="multiple"
-	</#if><#t/>
-	<#if parameters.doubleTabindex?exists><#t/>
-	tabindex="${parameters.tabindex?html}"
-	</#if><#t/>
-	<#if parameters.doubleId?exists><#t/>
-	id="${parameters.doubleId?html}"
-	</#if><#t/>
-	<#if parameters.doubleCssClass?exists><#t/>
-	class="${parameters.doubleCssClass?html}"
-	</#if><#t/>
-	<#if parameters.doubleCssStyle?exists><#t/>
-	style="${parameters.doubleCssStyle?html}"
-	</#if><#t/>
-    <#if parameters.doubleOnclick?exists><#t/>
-    onclick="${parameters.doubleOnclick?html}"
-    </#if><#t/>
-    <#if parameters.doubleOndblclick?exists><#t/>
-    ondblclick="${parameters.doubleOndblclick?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnmousedown?exists><#t/>
-    onmousedown="${parameters.doubleOnmousedown?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnmouseup?exists><#t/>
-    onmouseup="${parameters.doubleMnmouseup?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnmousemove?exists><#t/>
-    onmousemove="${parameters.doubleOnmousemove?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnmouseout?exists><#t/>
-    onmouseout="${parameters.doubleOnmouseout?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnfocus?exists><#t/>
-    onfocus="${parameters.doubleOnfocus?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnblur?exists><#t/>
-    onblur="${parameters.doubleOnblur?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnkeypress?exists><#t/>
-    onkeypress="${parameters.doubleOnkeypress?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnKeydown?exists><#t/>
-    onkeydown="${parameters.doubleOnkeydown?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnkeyup?exists><#t/>
-    onkeyup="${parameters.doubleOnkeyup?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnselect?exists><#t/>
-    onselect="${parameters.doubleOnselect?html}"
-    </#if><#t/>
-    <#if parameters.doubleOnchange?exists><#t/>
-    onchange="${parameters.doubleOnchange?html}"
-    </#if><#t/>
-    <#if parameters.doubleAccesskey?exists><#t/>
-    accesskey="${parameters.doubleAccesskey?html}"
-    </#if>
->
-	<#if parameters.doubleHeaderKey?exists && parameters.doubleHeaderValue?exists><#t/>
-    <option value="${parameters.doubleHeaderKey?html}">${parameters.doubleHeaderValue?html}</option>
-	</#if><#t/>
-	<#if parameters.doubleEmptyOption?default(false)><#t/>
-    <option value=""></option>
-	</#if><#t/>
-	<@s.iterator value="parameters.doubleList"><#t/>
-        <#if parameters.doubleListKey?exists><#t/>
-            <#assign doubleItemKey = stack.findValue(parameters.doubleListKey) /><#t/>
-        <#else><#t/>
-            <#assign doubleItemKey = stack.findValue('top') /><#t/>
-        </#if><#t/>
-        <#assign doubleItemKeyStr = doubleItemKey.toString() /><#t/>
-        <#if parameters.doubleListValue?exists><#t/>
-            <#assign doubleItemValue = stack.findString(parameters.doubleListValue) /><#t/>
-        <#else><#t/>
-            <#assign doubleItemValue = stack.findString('top') /><#t/>
-        </#if><#t/>
-    	<option value="${doubleItemKeyStr?html}"<#rt/>
-        <#if tag.contains(parameters.doubleNameValue, doubleItemKey)><#t/>
- 		selected="selected"<#rt/>
-        </#if><#t/>
-    	>${doubleItemValue?html}</option><#lt/>
-	</@s.iterator><#t/>
-</select>
-<#if parameters.allowUpDownOnRight?default(true)>
-<input type="button" 
-<#if parameters.doubleHeaderKey?exists>
-	onclick="moveOptionDown(document.getElementById('${parameters.doubleId}'), 'key', '${parameters.doubleHeaderKey}');"
-<#else>
-	onclick="moveOptionDown(document.getElementById('${parameters.doubleId}'), 'key', '');"
-</#if>
-<#if parameters.rightDownLabel?exists>
-	value="${parameters.rightDownLabel?html}"
-</#if>
-/>
-<input type="button" 
-<#if parameters.doubleHeaderKey?exists>
-	onclick="moveOptionUp(document.getElementById('${parameters.doubleId}'), 'key', '${parameters.doubleHeaderKey}');"
-<#else>
-	onclick="moveOptionUp(document.getElementById('${parameters.doubleId}'), 'key', '');"
-</#if>
-<#if parameters.rightUpLabel?exists>
-	value="${parameters.rightUpLabel?html}"
-</#if>
-/>
-</#if>
-</td>
-</tr>
-</table>
-
diff --git a/trunk/core/src/main/resources/template/simple/password.ftl b/trunk/core/src/main/resources/template/simple/password.ftl
deleted file mode 100644
index c054702..0000000
--- a/trunk/core/src/main/resources/template/simple/password.ftl
+++ /dev/null
@@ -1,35 +0,0 @@
-<input type="password"<#rt/>
- name="${parameters.name?default("")?html}"<#rt/>
-<#if parameters.get("size")?exists>
- size="${parameters.get("size")?html}"<#rt/>
-</#if>
-<#if parameters.maxlength?exists>
- maxlength="${parameters.maxlength?html}"<#rt/>
-</#if>
-<#if parameters.nameValue?exists && parameters.showPassword?default(false)>
- value="<@s.property value="parameters.nameValue"/>"<#rt/>
-</#if>
-<#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-</#if>
-<#if parameters.readonly?default(false)>
- readonly="readonly"<#rt/>
-</#if>
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-/>
diff --git a/trunk/core/src/main/resources/template/simple/radiomap.ftl b/trunk/core/src/main/resources/template/simple/radiomap.ftl
deleted file mode 100644
index 22c3d94..0000000
--- a/trunk/core/src/main/resources/template/simple/radiomap.ftl
+++ /dev/null
@@ -1,41 +0,0 @@
-<@s.iterator value="parameters.list">
-    <#if parameters.listKey?exists>
-        <#assign itemKey = stack.findValue(parameters.listKey)/>
-    <#else>
-        <#assign itemKey = stack.findValue('top')/>
-    </#if>
-    <#assign itemKeyStr = itemKey.toString() />
-    <#if parameters.listValue?exists>
-        <#assign itemValue = stack.findString(parameters.listValue)/>
-    <#else>
-        <#assign itemValue = stack.findString('top')/>
-    </#if>
-<input type="radio" name="${parameters.name?html}" id="${parameters.id?html}${itemKeyStr?html}"<#rt/>
-<#if tag.contains(parameters.nameValue, itemKeyStr)>
- checked="checked"<#rt/>
-</#if>
-<#if itemKey?exists>
- value="${itemKeyStr?html}"<#rt/>
-</#if>
-<#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-</#if>
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-/><#rt/>
-<label for="${parameters.id?html}${itemKeyStr?html}"><#rt/>
-    ${itemValue}<#t/>
-</label>
-</@s.iterator>
diff --git a/trunk/core/src/main/resources/template/simple/reset.ftl b/trunk/core/src/main/resources/template/simple/reset.ftl
deleted file mode 100644
index cfa034d..0000000
--- a/trunk/core/src/main/resources/template/simple/reset.ftl
+++ /dev/null
@@ -1,38 +0,0 @@
-<#if parameters.type?exists && parameters.type=="button">
-<button type="reset"<#rt/>
-<#if parameters.name?exists>
- name="${parameters.name?html}"<#rt/>
-</#if>
-<#if parameters.nameValue?exists>
- value="<@s.property value="parameters.nameValue"/>"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl"/>
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-><#if parameters.label?exists><@s.property value="parameters.label"/><#rt/></#if></button>
-<#else>
-<input type="reset"<#rt/>
-<#if parameters.name?exists>
- name="${parameters.name?html}"<#rt/>
-</#if>
-<#if parameters.nameValue?exists>
- value="<@s.property value="parameters.nameValue"/>"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-/>
-</#if>
diff --git a/trunk/core/src/main/resources/template/simple/scripting-events.ftl b/trunk/core/src/main/resources/template/simple/scripting-events.ftl
deleted file mode 100644
index b483740..0000000
--- a/trunk/core/src/main/resources/template/simple/scripting-events.ftl
+++ /dev/null
@@ -1,42 +0,0 @@
-<#if parameters.onclick?exists>
- onclick="${parameters.onclick?html}"<#rt/>
-</#if>
-<#if parameters.ondblclick?exists>
- ondblclick="${parameters.ondblclick?html}"<#rt/>
-</#if>
-<#if parameters.onmousedown?exists>
- onmousedown="${parameters.onmousedown?html}"<#rt/>
-</#if>
-<#if parameters.onmouseup?exists>
- onmouseup="${parameters.onmouseup?html}"<#rt/>
-</#if>
-<#if parameters.onmouseover?exists>
- onmouseover="${parameters.onmouseover?html}"<#rt/>
-</#if>
-<#if parameters.onmousemove?exists>
- onmousemove="${parameters.onmousemove?html}"<#rt/>
-</#if>
-<#if parameters.onmouseout?exists>
- onmouseout="${parameters.onmouseout?html}"<#rt/>
-</#if>
-<#if parameters.onfocus?exists>
- onfocus="${parameters.onfocus?html}"<#rt/>
-</#if>
-<#if parameters.onblur?exists>
- onblur="${parameters.onblur?html}"<#rt/>
-</#if>
-<#if parameters.onkeypress?exists>
- onkeypress="${parameters.onkeypress?html}"<#rt/>
-</#if>
-<#if parameters.onkeydown?exists>
- onkeydown="${parameters.onkeydown?html}"<#rt/>
-</#if>
-<#if parameters.onkeyup?exists>
- onkeyup="${parameters.onkeyup?html}"<#rt/>
-</#if>
-<#if parameters.onselect?exists>
- onselect="${parameters.onselect?html}"<#rt/>
-</#if>
-<#if parameters.onchange?exists>
- onchange="${parameters.onchange?html}"<#rt/>
-</#if>
diff --git a/trunk/core/src/main/resources/template/simple/select.ftl b/trunk/core/src/main/resources/template/simple/select.ftl
deleted file mode 100644
index c04c6f1..0000000
--- a/trunk/core/src/main/resources/template/simple/select.ftl
+++ /dev/null
@@ -1,61 +0,0 @@
-<select<#rt/>
- name="${parameters.name?default("")?html}"<#rt/>
-<#if parameters.get("size")?exists>
- size="${parameters.get("size")?html}"<#rt/>
-</#if>
-<#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-</#if>
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#if parameters.multiple?default(false)>
- multiple="multiple"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
->
-<#if parameters.headerKey?exists && parameters.headerValue?exists>
-    <option value="${parameters.headerKey?html}"
-    <#if tag.contains(parameters.nameValue, parameters.headerKey) == true>
-    selected="selected"
-    </#if>
-    >${parameters.headerValue?html}</option>
-</#if>
-<#if parameters.emptyOption?default(false)>
-    <option value=""></option>
-</#if>
-<@s.iterator value="parameters.list">
-        <#if parameters.listKey?exists>
-            <#assign itemKey = stack.findValue(parameters.listKey)/>
-        <#else>
-            <#assign itemKey = stack.findValue('top')/>
-        </#if>
-        <#assign itemKeyStr = itemKey.toString() />
-        <#if parameters.listValue?exists>
-            <#assign itemValue = stack.findString(parameters.listValue)/>
-        <#else>
-            <#assign itemValue = stack.findString('top')/>
-        </#if>
-    <option value="${itemKeyStr?html}"<#rt/>
-        <#if tag.contains(parameters.nameValue, itemKey) == true>
- selected="selected"<#rt/>
-        </#if>
-    >${itemValue?html}</option><#lt/>
-</@s.iterator>
-
-<#include "/${parameters.templateDir}/simple/optgroup.ftl" />
-
-</select>
diff --git a/trunk/core/src/main/resources/template/simple/submit.ftl b/trunk/core/src/main/resources/template/simple/submit.ftl
deleted file mode 100644
index b20d771..0000000
--- a/trunk/core/src/main/resources/template/simple/submit.ftl
+++ /dev/null
@@ -1,54 +0,0 @@
-<#if parameters.type?exists && parameters.type=="button">
-<button type="submit"<#rt/>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.name?exists>
- name="${parameters.name?html}"<#rt/>
-</#if>
-<#if parameters.nameValue?exists>
- value="<@s.property value="parameters.nameValue"/>"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl"/>
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-><#if parameters.label?exists><@s.property value="parameters.label"/><#rt/></#if></button>
-<#else>
-<#if parameters.type?exists && parameters.type=="image">
-<input type="image"<#rt/>
-<#if parameters.label?exists>
- alt="${parameters.label?html}"<#rt/>
-</#if>
-<#if parameters.src?exists>
- src="${parameters.src?html}"<#rt/>
-</#if>
-<#else>
-<input type="submit"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.name?exists>
- name="${parameters.name?html}"<#rt/>
-</#if>
-<#if parameters.nameValue?exists>
- value="<@s.property value="parameters.nameValue"/>"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-/>
-</#if>
diff --git a/trunk/core/src/main/resources/template/simple/tab-close.ftl b/trunk/core/src/main/resources/template/simple/tab-close.ftl
deleted file mode 100644
index c82e141..0000000
--- a/trunk/core/src/main/resources/template/simple/tab-close.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-    </div>
-    </div>
-
-    <script language="JavaScript" type="text/javascript">
-        var tabpanelc_${parameters.id} = new TabContent( "${parameters.id}", false );
-        dojo.event.topic.subscribe( "${parameters.subscribeTopicName}", tabpanelc_${parameters.id}, "updateVisibility" );
-    </script>
diff --git a/trunk/core/src/main/resources/template/simple/tab.ftl b/trunk/core/src/main/resources/template/simple/tab.ftl
deleted file mode 100644
index fc9dfd4..0000000
--- a/trunk/core/src/main/resources/template/simple/tab.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="tab_contents_header" id="tab_contents_${parameters.id}" >
-<div class="tab_contents"
-    id="tab_contents_update_${parameters.id}"
-    <#if parameters.cssStyle?exists>style="${parameters.cssStyle?html}"</#if>
-    <#if parameters.cssClass?exists>class="${parameters.cssClass?html}"</#if>
-    <#if parameters.title?exists>title="${parameters.title?html}"</#if>
->
diff --git a/trunk/core/src/main/resources/template/simple/tabbedpanel-close.ftl b/trunk/core/src/main/resources/template/simple/tabbedpanel-close.ftl
deleted file mode 100644
index 95fdafd..0000000
--- a/trunk/core/src/main/resources/template/simple/tabbedpanel-close.ftl
+++ /dev/null
@@ -1,14 +0,0 @@
-<#assign topic = parameters.topicName />
-<#assign tpid = parameters.id />
-<script language="JavaScript" type="text/javascript">
-    var headerDiv_${parameters.id} = document.getElementById("tab_header_${parameters.id}");
-    var content_${parameters.id} = "        <ul class='tab_header_main' id='tab_header_main${parameters.id}'>\n";
-    <@s.iterator value="parameters.tabs">
-        content_${tpid} = content_${tpid} + "        <li onmouseover='mouseIn(this)' onmouseout='mouseOut(this)' class ='tab_default tab_unselected'  id='tab_header_${top.id}'>";
-        content_${tpid} = content_${tpid} + "        <a href='#' onclick='dojo.event.topic.publish(\"${topic}\", \"${top.id}\");return false;'>${top.tabName}</a>";
-        content_${tpid} = content_${tpid} + "        </li>\n";
-    </@s.iterator>
-    content_${parameters.id} = content_${parameters.id} + "        </ul>\n";
-    headerDiv_${parameters.id}.innerHTML = content_${parameters.id};
-    dojo.event.topic.publish('${parameters.topicName}', '${parameters.tabs[0].id}');
-</script>
diff --git a/trunk/core/src/main/resources/template/simple/tabbedpanel.ftl b/trunk/core/src/main/resources/template/simple/tabbedpanel.ftl
deleted file mode 100644
index 996ee7c..0000000
--- a/trunk/core/src/main/resources/template/simple/tabbedpanel.ftl
+++ /dev/null
@@ -1 +0,0 @@
-<div class="tab_header" id="tab_header_${parameters.id}" ></div>
diff --git a/trunk/core/src/main/resources/template/simple/table.ftl b/trunk/core/src/main/resources/template/simple/table.ftl
deleted file mode 100644
index 4ca2382..0000000
--- a/trunk/core/src/main/resources/template/simple/table.ftl
+++ /dev/null
@@ -1,54 +0,0 @@
-<#assign webTable = tag/>
-<#assign tableModel = webTable.model/>
-
-<#if tableModel?exists>
-<p align="center">
-<table bgcolor="white" border="0" cellpadding="1" cellspacing="0" >
-    <tr>
-        <td>
-            <table  border="0" cellpadding="2" cellspacing="1">
-                <tr bgcolor="yellow">
-<#list webTable.columns as curColumn>
-<#if curColumn.visible>
-                    <th>
-<#if webTable.sortable>
-                        <table border="0" cellspacing="0" cellpadding="0">
-                            <tr>
-                                <td>${curColumn.displayName}</td>
-                                <td>
-                                    <table border="0" cellspacing="0" cellpadding="0">
-                                        <tr>
-                                            <td align="bottom">
-<#if false>
-                                                 <img src="images/sorted_asc.gif" border="0" align="bottom"/>
-<#else>
-                                                <a href="<@s.url><@s.param name="${webTable.sortColumnLinkName}" value="${curColumn.offset}"/><@s.param name="${webTable.sortOrderLinkName}" value="ASC"/></@s.url>"><img src="images/unsorted_asc.gif" border="0" align="bottom"/></a>
-</#if>
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td align="top"></td>
-                                        </tr>
-                                    </table>
-                                </td>
-                            </tr>
-                        </table>
-<#else>
-                        ${curColumn.displayName}
-</#if>
-                    </th>
-</#if>
-</#list>
-                </tr>
-<#list webTable.rowIterator as curRow>
-                <tr>
-<#list curRow as curColumn>
-                    <td>${curColumn}</td>
-</#list>
-                </tr>
-</#list>
-            </table>
-        </td>
-    </tr>
-</table>
-</#if>
diff --git a/trunk/core/src/main/resources/template/simple/text.ftl b/trunk/core/src/main/resources/template/simple/text.ftl
deleted file mode 100644
index b9762af..0000000
--- a/trunk/core/src/main/resources/template/simple/text.ftl
+++ /dev/null
@@ -1,35 +0,0 @@
-<input type="text"<#rt/>
- name="${parameters.name?default("")?html}"<#rt/>
-<#if parameters.get("size")?exists>
- size="${parameters.get("size")?html}"<#rt/>
-</#if>
-<#if parameters.maxlength?exists>
- maxlength="${parameters.maxlength?html}"<#rt/>
-</#if>
-<#if parameters.nameValue?exists>
- value="<@s.property value="parameters.nameValue"/>"<#rt/>
-</#if>
-<#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-</#if>
-<#if parameters.readonly?default(false)>
- readonly="readonly"<#rt/>
-</#if>
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-/>
diff --git a/trunk/core/src/main/resources/template/simple/textarea.ftl b/trunk/core/src/main/resources/template/simple/textarea.ftl
deleted file mode 100644
index 6f87e9b..0000000
--- a/trunk/core/src/main/resources/template/simple/textarea.ftl
+++ /dev/null
@@ -1,35 +0,0 @@
-<textarea<#rt/>
- name="${parameters.name?default("")?html}"<#rt/>
- cols="${parameters.cols?default("")?html}"<#rt/>
- rows="${parameters.rows?default("")?html}"<#rt/>
-<#if parameters.wrap?exists>
- wrap="${parameters.wrap?html}"<#rt/>
-</#if>
-<#if parameters.disabled?default(false)>
- disabled="disabled"<#rt/>
-</#if>
-<#if parameters.readonly?default(false)>
- readonly="readonly"<#rt/>
-</#if>
-<#if parameters.tabindex?exists>
- tabindex="${parameters.tabindex?html}"<#rt/>
-</#if>
-<#if parameters.id?exists>
- id="${parameters.id?html}"<#rt/>
-</#if>
-<#if parameters.cssClass?exists>
- class="${parameters.cssClass?html}"<#rt/>
-</#if>
-<#if parameters.cssStyle?exists>
- style="${parameters.cssStyle?html}"<#rt/>
-</#if>
-<#if parameters.title?exists>
- title="${parameters.title?html}"<#rt/>
-</#if>
-<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
-<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
-><#rt/>
-<#if parameters.nameValue?exists>
-<@s.property value="parameters.nameValue"/><#t/>
-</#if>
-</textarea>
diff --git a/trunk/core/src/main/resources/template/simple/timepicker.ftl b/trunk/core/src/main/resources/template/simple/timepicker.ftl
deleted file mode 100644
index 2338508..0000000
--- a/trunk/core/src/main/resources/template/simple/timepicker.ftl
+++ /dev/null
@@ -1,33 +0,0 @@
-<script type="text/javascript">
-    dojo.require("struts.widgets.*");
-</script>
-
-<#if parameters.readonly?default(false)>
-    <#include "/${parameters.templateDir}/simple/text.ftl" />
-<#else>
-	<div dojoType="dropdowntimepicker"
-		useDefaultTime="false"
-        <#if parameters.format?exists>
-            timeFormat="${parameters.format}"
-        </#if>
-        <#if parameters.nameValue?exists>
-        	value="${parameters.nameValue?html}"
-        </#if>
-        <#if parameters.timeIconPath?exists>
-            iconPath="${parameters.timeIconPath}"
-        <#else>
-        	iconPath="<@s.url includeParams='none' value='/struts/dojo/struts/widgets/timeIcon.gif' encode='false' includeParams="none" />"
-        </#if>
-        <#if parameters.templatePath?exists>
-            templatePath="${parameters.templatePath}"
-        </#if>
-        <#if parameters.templateCssPath?exists>
-            templateCssPath="${parameters.templateCssPath}"
-        </#if>
-        <#if parameters.get("size")?exists>
-             inputWidth="${parameters.get("size")?string?html}"
-        </#if>
-    >
-        <#include "/${parameters.templateDir}/simple/text.ftl" />
-    </div>
-</#if>
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/template/simple/token.ftl b/trunk/core/src/main/resources/template/simple/token.ftl
deleted file mode 100644
index d7db076..0000000
--- a/trunk/core/src/main/resources/template/simple/token.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-<input type="hidden" name="${parameters.tokenNameField?default("")}" value="${parameters.name?default("")?html}"/>
-<input type="hidden" name="${parameters.name?default("")}" value="${parameters.token?default("")?html}"/>
diff --git a/trunk/core/src/main/resources/template/simple/updownselect.ftl b/trunk/core/src/main/resources/template/simple/updownselect.ftl
deleted file mode 100644
index c52a401..0000000
--- a/trunk/core/src/main/resources/template/simple/updownselect.ftl
+++ /dev/null
@@ -1,35 +0,0 @@
-<#if !stack.findValue("#optiontransferselect_js_included")?exists><#t/>
-	<script language="javascript" src="<@s.url value="/struts/optiontransferselect.js" encode='false' includeParams='none'/>"></script>
-	<#assign temporaryVariable = stack.setValue("#optiontransferselect_js_included", "true") /><#t/>
-</#if><#t/>
-<table>
-<tr><td>
-<#include "/${templateDir}/simple/select.ftl" /><#t/>
-</td></tr>
-<tr><td>
-<#if parameters.allowMoveUp?default(true)><#t/>
-	<#assign defMoveUpLabel="${parameters.moveUpLabel?default('^')}" /><#t/>
-	<#if parameters.headerKey?exists><#t/>
-		&nbsp;<input type="button" value="${defMoveUpLabel}" onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />&nbsp;
-	<#else><#t/>
-		&nbsp;<input type="button" value="${defMoveUpLabel}" onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '');" />&nbsp;
-	</#if><#t/>
-</#if><#t/>
-<#if parameters.allowMoveDown?default(true)><#t/>
-	<#assign defMoveDownLabel="${parameters.moveDownLabel?default('v')}" /><#t/>
-	<#if parameters.headerKey?exists><#t/>
-		&nbsp;<input type="button" value="${defMoveDownLabel}" onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />&nbsp;
-	<#else><#t/>
-		&nbsp;<input type="button" value="${defMoveDownLabel}" onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '');" />&nbsp;
-	</#if><#t/>
-</#if><#t/>
-<#if parameters.allowSelectAll?default(true)><#t/>
-	<#assign defSelectAllLabel="${parameters.selectAllLabel?default('*')}" /><#t/>
-	<#if parameters.headerKey?exists><#t/>
-		&nbsp;<input type="button" value="${defSelectAllLabel}" onclick="selectAllOptionsExceptSome(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');" />&nbsp;
-	<#else><#t/>
-		&nbsp;<input type="button" value="${defSelectAllLabel}" onclick="selectAllOptions(document.getElementById('${parameters.id}'), 'key', '');" />&nbsp;
-	</#if><#t/>
-</#if><#t/>
-</td></tr>
-</table>
diff --git a/trunk/core/src/main/resources/template/xhtml/checkbox.ftl b/trunk/core/src/main/resources/template/xhtml/checkbox.ftl
deleted file mode 100644
index 795ffac..0000000
--- a/trunk/core/src/main/resources/template/xhtml/checkbox.ftl
+++ /dev/null
@@ -1,102 +0,0 @@
-<#assign hasFieldErrors = fieldErrors?exists && fieldErrors[parameters.name]?exists/>
-<#if hasFieldErrors>
-<#list fieldErrors[parameters.name] as error>
-<tr<#rt/>
-<#if parameters.id?exists>
- errorFor="${parameters.id}"<#rt/>
-</#if>
->
-    <td align="left" valign="top" colspan="2"><#rt/>
-        <span class="errorMessage">${error?html}</span><#t/>
-    </td><#lt/>
-</tr>
-</#list>
-</#if>
-<#if parameters.labelposition?default("") == 'top'>
-<tr>
-    <td colspan="2">
-<#if parameters.label?exists> <label<#t/>
-<#if parameters.id?exists>
- for="${parameters.id?html}"<#rt/>
-</#if>
-<#if hasFieldErrors>
- class="checkboxErrorLabel"<#rt/>
-<#else>
- class="checkboxLabel"<#rt/>
-</#if>
->
-<#if parameters.required?default(false) && parameters.requiredposition?default("right") != 'right'>
-        <span class="required">*</span><#t/>
-</#if>
-${parameters.label?html}<#t/>
-<#if parameters.required?default(false) && parameters.requiredposition?default("right") == 'right'>
- <span class="required">*</span><#t/>
-</#if>
-:<#t/>
-<#if parameters.tooltip?exists>
-    <#include "/${parameters.templateDir}/xhtml/tooltip.ftl" />
-</#if>
-</label><#t/>
-</#if>
-    </td>
-</tr>
-<tr>
-    <td colspan="2">
-        <#include "/${parameters.templateDir}/simple/checkbox.ftl" />
-<#else>
-<tr>
-	<td valign="top" align="right">
-<#if parameters.labelposition?default("") == 'left'>
-<#if parameters.label?exists> <label<#t/>
-<#if parameters.id?exists>
- for="${parameters.id?html}"<#rt/>
-</#if>
-<#if hasFieldErrors>
- class="checkboxErrorLabel"<#rt/>
-<#else>
- class="checkboxLabel"<#rt/>
-</#if>
->
-<#if parameters.required?default(false) && parameters.requiredposition?default("right") != 'right'>
-        <span class="required">*</span><#t/>
-</#if>
-${parameters.label?html}<#t/>
-<#if parameters.required?default(false) && parameters.requiredposition?default("right") == 'right'>
- <span class="required">*</span><#t/>
-</#if>
-:<#t/>
-<#if parameters.tooltip?exists>
-    <img src='<@s.url value="/struts/tooltip/tooltip.gif" includeParams="none" encode="false"/>' alt="${parameters.tooltip}" title="${parameters.tooltip}" onmouseover="return escape('${parameters.tooltip?js_string}');" />
-</#if>
-</label><#t/>
-</#if>
-</#if>
-<#if parameters.labelposition?default("") == 'right'>
-    <#if parameters.required?default(false)>
-        <span class="required">*</span><#t/>
-    </#if>
-    <#if parameters.tooltip?exists>
-        <img src='<@s.url value="/struts/tooltip/tooltip.gif" includeParams="none" encode="false"/>' alt="${parameters.tooltip}" title="${parameters.tooltip}" onmouseover="return escape('${parameters.tooltip?js_string}');" />
-    </#if>
-</#if>
-    </td>
-    <td valign="top" align="left">
-
-<#if parameters.labelposition?default("") != 'top'>
-                	<#include "/${parameters.templateDir}/simple/checkbox.ftl" />
-</#if>                    
-<#if parameters.labelposition?default("") != 'top' && parameters.labelposition?default("") != 'left'>
-<#if parameters.label?exists> <label<#t/>
-<#if parameters.id?exists>
- for="${parameters.id?html}"<#rt/>
-</#if>
-<#if hasFieldErrors>
- class="checkboxErrorLabel"<#rt/>
-<#else>
- class="checkboxLabel"<#rt/>
-</#if>
->${parameters.label?html}</label><#rt/>
-</#if>
-</#if>
-</#if>
- <#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/xhtml/checkboxlist.ftl b/trunk/core/src/main/resources/template/xhtml/checkboxlist.ftl
deleted file mode 100644
index 816dc50..0000000
--- a/trunk/core/src/main/resources/template/xhtml/checkboxlist.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-
-<#include "/${parameters.templateDir}/simple/checkboxlist.ftl" />
-    <#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/xhtml/combobox.ftl b/trunk/core/src/main/resources/template/xhtml/combobox.ftl
deleted file mode 100644
index cf23a20..0000000
--- a/trunk/core/src/main/resources/template/xhtml/combobox.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-
-<#include "/${parameters.templateDir}/simple/combobox.ftl" />
-    <#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/xhtml/control-close.ftl b/trunk/core/src/main/resources/template/xhtml/control-close.ftl
deleted file mode 100644
index 94eb82e..0000000
--- a/trunk/core/src/main/resources/template/xhtml/control-close.ftl
+++ /dev/null
@@ -1 +0,0 @@
-</table>
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/template/xhtml/control.ftl b/trunk/core/src/main/resources/template/xhtml/control.ftl
deleted file mode 100644
index 2afb564..0000000
--- a/trunk/core/src/main/resources/template/xhtml/control.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<table class="${parameters.cssClass?default('wwFormTable')?html}"<#rt/>
-<#if parameters.cssStyle?exists> style="${parameters.cssStyle?html}"<#rt/>
-</#if>
->
\ No newline at end of file
diff --git a/trunk/core/src/main/resources/template/xhtml/controlfooter.ftl b/trunk/core/src/main/resources/template/xhtml/controlfooter.ftl
deleted file mode 100644
index e356955..0000000
--- a/trunk/core/src/main/resources/template/xhtml/controlfooter.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-${parameters.after?if_exists}<#t/>
-    </td><#lt/>
-</tr>
diff --git a/trunk/core/src/main/resources/template/xhtml/controlheader-core.ftl b/trunk/core/src/main/resources/template/xhtml/controlheader-core.ftl
deleted file mode 100644
index 6e1fbed..0000000
--- a/trunk/core/src/main/resources/template/xhtml/controlheader-core.ftl
+++ /dev/null
@@ -1,56 +0,0 @@
-<#--
-	Only show message if errors are available.
-	This will be done if ActionSupport is used.
--->
-<#assign hasFieldErrors = parameters.name?exists && fieldErrors?exists && fieldErrors[parameters.name]?exists/>
-<#if hasFieldErrors>
-<#list fieldErrors[parameters.name] as error>
-<tr errorFor="${parameters.id}">
-<#if parameters.labelposition?default("") == 'top'>
-    <td align="left" valign="top" colspan="2"><#rt/>
-<#else>
-    <td align="center" valign="top" colspan="2"><#rt/>
-</#if>
-        <span class="errorMessage">${error?html}</span><#t/>
-    </td><#lt/>
-</tr>
-</#list>
-</#if>
-<#--
-	if the label position is top,
-	then give the label it's own row in the table
--->
-<tr>
-<#if parameters.labelposition?default("") == 'top'>
-    <td align="left" valign="top" colspan="2"><#rt/>
-<#else>
-    <td class="tdLabel"><#rt/>
-</#if>
-<#if parameters.label?exists>
-    <label <#t/>
-<#if parameters.id?exists>
-        for="${parameters.id?html}" <#t/>
-</#if>
-<#if hasFieldErrors>
-        class="errorLabel"<#t/>
-<#else>
-        class="label"<#t/>
-</#if>
-    ><#t/>
-<#if parameters.required?default(false) && parameters.requiredposition?default("right") != 'right'>
-        <span class="required">*</span><#t/>
-</#if>
-${parameters.label?html}<#t/>
-<#if parameters.required?default(false) && parameters.requiredposition?default("right") == 'right'>
- <span class="required">*</span><#t/>
-</#if>
-:<#t/>
-<#include "/${parameters.templateDir}/xhtml/tooltip.ftl" /> 
-</label><#t/>
-</#if>
-    </td><#lt/>
-<#-- add the extra row -->
-<#if parameters.labelposition?default("") == 'top'>
-</tr>
-<tr>
-</#if>
diff --git a/trunk/core/src/main/resources/template/xhtml/controlheader.ftl b/trunk/core/src/main/resources/template/xhtml/controlheader.ftl
deleted file mode 100644
index acdf2d9..0000000
--- a/trunk/core/src/main/resources/template/xhtml/controlheader.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-<#include "/${parameters.templateDir}/xhtml/controlheader-core.ftl" />
-    <td
-<#if parameters.align?exists>
-    align="${parameters.align?html}"<#t/>
-</#if>
-><#t/>
diff --git a/trunk/core/src/main/resources/template/xhtml/datepicker.ftl b/trunk/core/src/main/resources/template/xhtml/datepicker.ftl
deleted file mode 100644
index 3f32c16..0000000
--- a/trunk/core/src/main/resources/template/xhtml/datepicker.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/datepicker.ftl" />
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/debug.ftl b/trunk/core/src/main/resources/template/xhtml/debug.ftl
deleted file mode 100644
index 99bc91a..0000000
--- a/trunk/core/src/main/resources/template/xhtml/debug.ftl
+++ /dev/null
@@ -1 +0,0 @@
-<#include "/${parameters.templateDir}/simple/debug.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/doubleselect.ftl b/trunk/core/src/main/resources/template/xhtml/doubleselect.ftl
deleted file mode 100644
index e4999cc..0000000
--- a/trunk/core/src/main/resources/template/xhtml/doubleselect.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-
-<#include "/${parameters.templateDir}/simple/doubleselect.ftl" />
-    <#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/xhtml/file.ftl b/trunk/core/src/main/resources/template/xhtml/file.ftl
deleted file mode 100644
index 823949b..0000000
--- a/trunk/core/src/main/resources/template/xhtml/file.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/file.ftl" />
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/form-close-validate.ftl b/trunk/core/src/main/resources/template/xhtml/form-close-validate.ftl
deleted file mode 100644
index 2c8da8d..0000000
--- a/trunk/core/src/main/resources/template/xhtml/form-close-validate.ftl
+++ /dev/null
@@ -1,99 +0,0 @@
-<#--
-START SNIPPET: supported-validators
-Only the following validators are supported:
-* required validator
-* requiredstring validator
-* stringlength validator
-* regex validator
-* email validator
-* url validator
-* int validator
-* double validator
-END SNIPPET: supported-validators
--->
-<#if ((parameters.validate?default(false) == true) && (parameters.performValidation?default(false) == true))>
-<script>
-    function validateForm_${parameters.id}() {
-        form = document.getElementById("${parameters.id}");
-        clearErrorMessages(form);
-        clearErrorLabels(form);
-
-        var errors = false;
-    <#list parameters.tagNames as tagName>
-        <#list tag.getValidators("${tagName}") as validator>
-        // field name: ${validator.fieldName}
-        // validator name: ${validator.validatorType}
-        if (form.elements['${validator.fieldName}']) {
-            field = form.elements['${validator.fieldName}'];
-            var error = "${validator.getMessage(action)?js_string}";
-            <#if validator.validatorType = "required">
-            if (field.value == "") {
-                addError(field, error);
-                errors = true;
-            }
-            <#elseif validator.validatorType = "requiredstring">
-            if (field.value != null && (field.value == "" || field.value.replace(/^\s+|\s+$/g,"").length == 0)) {
-                addError(field, error);
-                errors = true;
-            }
-            <#elseif validator.validatorType = "stringlength">
-            if (field.value != null) {
-                var value = field.value;
-                <#if validator.trim>
-                    //trim field value
-                    while (value.substring(0,1) == ' ')
-                        value = value.substring(1, value.length);
-                    while (value.substring(value.length-1, value.length) == ' ')
-                        value = value.substring(0, value.length-1);
-                </#if>
-                if((${validator.minLength} > -1 && value.length < ${validator.minLength}) ||
-                        (${validator.maxLength} > -1 && value.length > ${validator.maxLength})) {
-                    addError(field, error);
-                    errors = true;
-                }
-            }
-            <#elseif validator.validatorType = "regex">
-            if (field.value != null && !field.value.match("${validator.expression?js_string}")) {
-                addError(field, error);
-                errors = true;
-            }
-            <#elseif validator.validatorType = "email">
-            if (field.value != null && field.value.length > 0 && field.value.match(/\b(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\.[A-Za-z0-9-]+)*((\.[A-Za-z0-9]{2,})|(\.[A-Za-z0-9]{2,}\.[A-Za-z0-9]{2,}))$)\b/gi)==null) {
-                addError(field, error);
-                errors = true;
-            }
-            <#elseif validator.validatorType = "url">
-            if (field.value != null && field.value.length > 0 && field.value.match(/(^(ftp|http|https):\/\/(\.[_A-Za-z0-9-]+)*(@?([A-Za-z0-9-])+)?(\.[A-Za-z0-9-]+)*((\.[A-Za-z0-9]{2,})|(\.[A-Za-z0-9]{2,}\.[A-Za-z0-9]{2,}))(:[0-9]+)?([/A-Za-z0-9?#_-]*)?$)/gi)==null) { 
-                addError(field, error);
-                errors = true;
-            }
-            <#elseif validator.validatorType = "int">
-            if (field.value != null) {
-                if (<#if validator.min?exists>parseInt(field.value) <
-                     ${validator.min}<#else>false</#if> ||
-                        <#if validator.max?exists>parseInt(field.value) >
-                           ${validator.max}<#else>false</#if>) {
-                    addError(field, error);
-                    errors = true;
-                }
-            }
-            <#elseif validator.validatorType = "double">
-            if (field.value != null) {
-                var value = parseFloat(field.value);
-                if (<#if validator.minInclusive?exists>value < ${validator.minInclusive}<#else>false</#if> ||
-                        <#if validator.maxInclusive?exists>value > ${validator.maxInclusive}<#else>false</#if> ||
-                        <#if validator.minExclusive?exists>value <= ${validator.minExclusive}<#else>false</#if> ||
-                        <#if validator.maxExclusive?exists>value >= ${validator.maxExclusive}<#else>false</#if>) {
-                    addError(field, error);
-                    errors = true;
-                }
-            }
-            </#if>
-        }
-        </#list>
-    </#list>
-
-        return !errors;
-    }
-</script>
-</#if>
diff --git a/trunk/core/src/main/resources/template/xhtml/form-close.ftl b/trunk/core/src/main/resources/template/xhtml/form-close.ftl
deleted file mode 100644
index 61a53dd..0000000
--- a/trunk/core/src/main/resources/template/xhtml/form-close.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/xhtml/control-close.ftl" />
-<#include "/${parameters.templateDir}/simple/form-close.ftl" />
-<#include "/${parameters.templateDir}/xhtml/form-close-validate.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/form-validate.ftl b/trunk/core/src/main/resources/template/xhtml/form-validate.ftl
deleted file mode 100644
index 3f506b0..0000000
--- a/trunk/core/src/main/resources/template/xhtml/form-validate.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-<#if parameters.validate?default(false) == true>
-	<script src="${base}/struts/xhtml/validation.js"></script>
-	<#if parameters.onsubmit?exists>
-		${tag.addParameter('onsubmit', "${parameters.onsubmit}; return validateForm_${parameters.id}();")}
-	<#else>
-		${tag.addParameter('onsubmit', "return validateForm_${parameters.id}();")}
-	</#if>
-</#if>
diff --git a/trunk/core/src/main/resources/template/xhtml/form.ftl b/trunk/core/src/main/resources/template/xhtml/form.ftl
deleted file mode 100644
index ceca516..0000000
--- a/trunk/core/src/main/resources/template/xhtml/form.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/xhtml/form-validate.ftl" />
-<#include "/${parameters.templateDir}/simple/form.ftl" />
-<#include "/${parameters.templateDir}/xhtml/control.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/head.ftl b/trunk/core/src/main/resources/template/xhtml/head.ftl
deleted file mode 100644
index a3adae8..0000000
--- a/trunk/core/src/main/resources/template/xhtml/head.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-<link rel="stylesheet" href="<@s.url value='/struts/xhtml/styles.css' includeParams='none' encode='false' />" type="text/css"/>
-<#include "/${parameters.templateDir}/simple/head.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/label.ftl b/trunk/core/src/main/resources/template/xhtml/label.ftl
deleted file mode 100644
index bae45a5..0000000
--- a/trunk/core/src/main/resources/template/xhtml/label.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/label.ftl" />
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/optiontransferselect.ftl b/trunk/core/src/main/resources/template/xhtml/optiontransferselect.ftl
deleted file mode 100644
index 5d46582..0000000
--- a/trunk/core/src/main/resources/template/xhtml/optiontransferselect.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/optiontransferselect.ftl" />
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/xhtml/password.ftl b/trunk/core/src/main/resources/template/xhtml/password.ftl
deleted file mode 100644
index db5daaa..0000000
--- a/trunk/core/src/main/resources/template/xhtml/password.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/password.ftl" />
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/radiomap.ftl b/trunk/core/src/main/resources/template/xhtml/radiomap.ftl
deleted file mode 100644
index 8ea4cd8..0000000
--- a/trunk/core/src/main/resources/template/xhtml/radiomap.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-
-<#include "/${parameters.templateDir}/simple/radiomap.ftl" />
-    <#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/xhtml/reset.ftl b/trunk/core/src/main/resources/template/xhtml/reset.ftl
deleted file mode 100644
index ebb6b2f..0000000
--- a/trunk/core/src/main/resources/template/xhtml/reset.ftl
+++ /dev/null
@@ -1,9 +0,0 @@
-<tr>
-    <td colspan="2"><div <#rt/>
-<#if parameters.align?exists>
-    align="${parameters.align?html}"<#t/>
-</#if>
-><#t/>
-<#include "/${parameters.templateDir}/simple/reset.ftl" />
-</div><#t/>
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/select.ftl b/trunk/core/src/main/resources/template/xhtml/select.ftl
deleted file mode 100644
index 4271776..0000000
--- a/trunk/core/src/main/resources/template/xhtml/select.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/select.ftl" />
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/styles.css b/trunk/core/src/main/resources/template/xhtml/styles.css
deleted file mode 100644
index a2c44e9..0000000
--- a/trunk/core/src/main/resources/template/xhtml/styles.css
+++ /dev/null
@@ -1,8 +0,0 @@
-.wwFormTable {}
-.label {font-style:italic; }
-.errorLabel {font-style:italic; color:red; }
-.errorMessage {font-weight:bold; text-align: center; color:red; }
-.checkboxLabel {}
-.checkboxErrorLabel {color:red; }
-.required {color:red;}
-.tdLabel {text-align:right; vertical-align:top; } 
diff --git a/trunk/core/src/main/resources/template/xhtml/submit.ftl b/trunk/core/src/main/resources/template/xhtml/submit.ftl
deleted file mode 100644
index e27727d..0000000
--- a/trunk/core/src/main/resources/template/xhtml/submit.ftl
+++ /dev/null
@@ -1,9 +0,0 @@
-<tr>
-    <td colspan="2"><div <#rt/>
-<#if parameters.align?exists>
-    align="${parameters.align?html}"<#t/>
-</#if>
-><#t/>
-<#include "/${parameters.templateDir}/simple/submit.ftl" />
-</div><#t/>
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/text.ftl b/trunk/core/src/main/resources/template/xhtml/text.ftl
deleted file mode 100644
index fef7058..0000000
--- a/trunk/core/src/main/resources/template/xhtml/text.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/text.ftl" />
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/textarea.ftl b/trunk/core/src/main/resources/template/xhtml/textarea.ftl
deleted file mode 100644
index e3b4cb6..0000000
--- a/trunk/core/src/main/resources/template/xhtml/textarea.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/textarea.ftl" />
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/theme.properties b/trunk/core/src/main/resources/template/xhtml/theme.properties
deleted file mode 100644
index adf79b1..0000000
--- a/trunk/core/src/main/resources/template/xhtml/theme.properties
+++ /dev/null
@@ -1 +0,0 @@
-parent = simple
diff --git a/trunk/core/src/main/resources/template/xhtml/timepicker.ftl b/trunk/core/src/main/resources/template/xhtml/timepicker.ftl
deleted file mode 100644
index 62bd8a3..0000000
--- a/trunk/core/src/main/resources/template/xhtml/timepicker.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/timepicker.ftl" />
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
diff --git a/trunk/core/src/main/resources/template/xhtml/tooltip.ftl b/trunk/core/src/main/resources/template/xhtml/tooltip.ftl
deleted file mode 100644
index 5029c56..0000000
--- a/trunk/core/src/main/resources/template/xhtml/tooltip.ftl
+++ /dev/null
@@ -1,24 +0,0 @@
-<#if parameters.tooltip?exists><#t/>
-	  <#assign tooltipHashCode=parameters.tooltip.hashCode() />
-      <img id="_tt${tooltipHashCode?string('#')}"
-      <#if parameters.tooltipIcon?exists><#t/>
-      	src='<@s.url value="${parameters.tooltipIcon}" includeParams="none" encode="false" />'
-      <#else><#t/>
-      	src='<@s.url value="/struts/dojo/struts/tooltip.gif" includeParams="none" encode="false" />'
-      </#if><#t/>
-      	alt="${parameters.tooltip?html}" 
-      	title="${parameters.tooltip?html}" />
-      <#if parameters.jsTooltipEnabled?default('false') == 'true'>
-      <span dojoType="tooltip" connectId="_tt${tooltipHashCode?string('#')}"
-          <#if parameters.tooltipToggle?exists><#t/>
-        	<#t/>toggle="${parameters.tooltipToggle}"<#t/>
-          </#if><#t/>
-          <#if parameters.tooltipToggleDuration?exists><#t/>
-        	<#t/>toggleDuration="${parameters.tooltipToggleDuration}"<#t/>
-          </#if><#t/>
-          <#if parameters.tooltipDelay?exists><#t/>
-          	<#t/>delay="${parameters.tooltipDelay}"<#t/>
-          </#if><#t/>
-          caption="${parameters.tooltip}"></span>
-     </#if>
-</#if><#t/>
diff --git a/trunk/core/src/main/resources/template/xhtml/updownselect.ftl b/trunk/core/src/main/resources/template/xhtml/updownselect.ftl
deleted file mode 100644
index 4d5a1fb..0000000
--- a/trunk/core/src/main/resources/template/xhtml/updownselect.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/updownselect.ftl" />
-<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /><#nt/>
diff --git a/trunk/core/src/main/resources/template/xhtml/validation.js b/trunk/core/src/main/resources/template/xhtml/validation.js
deleted file mode 100644
index 1673a01..0000000
--- a/trunk/core/src/main/resources/template/xhtml/validation.js
+++ /dev/null
@@ -1,74 +0,0 @@
-function clearErrorMessages(form) {
-
-    var table = form.childNodes[1];
-    if( typeof table == "undefined" ) {
-        table = form.childNodes[0];
-    }
-
-    // clear out any rows with an "errorFor" attribute
-    var rows = table.rows;
-    var rowsToDelete = new Array();
-    if (rows == null){
-        return;
-    }
-
-    for(var i = 0; i < rows.length; i++) {
-        var r = rows[i];
-        if (r.getAttribute("errorFor")) {
-            rowsToDelete.push(r);
-        }
-    }
-
-    // now delete the rows
-    for (var i = 0; i < rowsToDelete.length; i++) {
-        var r = rowsToDelete[i];
-        table.deleteRow(r.rowIndex);
-        //table.removeChild(rowsToDelete[i]); 
-    }
-}
-
-function clearErrorLabels(form) {
-    // set all labels back to the normal class
-    var elements = form.elements;
-    for (var i = 0; i < elements.length; i++) {
-        var e = elements[i];
-        var cells = e.parentNode.parentNode.cells;
-        if (cells && cells.length >= 2) {
-            var label = cells[0].getElementsByTagName("label")[0];
-            if (label) {
-                label.setAttribute("class", "label");
-                label.setAttribute("className", "label"); //ie hack cause ie does not support setAttribute
-            }
-        }
-    }
-
-}
-
-function addError(e, errorText) {
-    try {
-        // clear out any rows with an "errorFor" of e.id
-        var row = e.parentNode.parentNode;
-        var table = row.parentNode;
-        var error = document.createTextNode(errorText);
-        var tr = document.createElement("tr");
-        var td = document.createElement("td");
-        var span = document.createElement("span");
-        td.align = "center";
-        td.valign = "top";
-        td.colSpan = 2;
-        span.setAttribute("class", "errorMessage");
-        span.setAttribute("className", "errorMessage"); //ie hack cause ie does not support setAttribute
-        span.appendChild(error);
-        td.appendChild(span);
-        tr.appendChild(td);
-        tr.setAttribute("errorFor", e.id);;
-        table.insertBefore(tr, row);
-
-        // updat the label too
-        var label = row.cells[0].getElementsByTagName("label")[0];
-        label.setAttribute("class", "errorLabel");
-        label.setAttribute("className", "errorLabel"); //ie hack cause ie does not support setAttribute
-    } catch (e) {
-        alert(e);
-    }
-}
diff --git a/trunk/core/src/main/xdt/Readme-tagdoclet.txt b/trunk/core/src/main/xdt/Readme-tagdoclet.txt
deleted file mode 100644
index 825b57d..0000000
--- a/trunk/core/src/main/xdt/Readme-tagdoclet.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-Struts Custom Tagdoclet
-================================
-
-The provided xdoclet templates are based on original xdoclet distribution templates for tld generation.
-
-The annotations may be used for classes extending TagSupport or oa.struts2.components.Component. If used in component
-classes, you will also need a TagSupport wrapper class to generate valid tld (see @a2:tag#tld-tag-class).
-
-Following a description of the provided tags and their parameters:
-
-@a2.tag (Class javadoc)
------------------------
-Mark annotated class as end user tag provider
-
-Parameters       | Required/Default   | Description
----------------------------------------------------------------------------------------------------------
-name             | true/-             | Tag name
-tld-body-content | false/"JSP"        | body-content param for tld
-tld-tag-class    | */current Class    | TagSupport class (*required if current class is not)
-description      | false/""           | Tag description. If not provided, javadoc content is used.
-
-
-@a2.tagattribute (Setter method javadoc)
-----------------------------------------
-Mark annotated setter as tag attribute, usable for end user tag provider class and each superclass
-
-Parameters       | Required/Default   | Description
----------------------------------------------------------------------------------------------------------
-required         | no/"false"         | Whether attribute is required
-default          | no/""              | Default value if not supplied
-type             | no/"String/Object" | DESCRIPTIVE Type, for documentation
-tld-type         | no/""              | ACTUAL JAVA TYPE, if explicitely needed for <type> element in tld
-description      | no/""              | Tag attribute description. If not provided, javadoc content is used.
diff --git a/trunk/core/src/main/xdt/tagdoc-toc.xdt b/trunk/core/src/main/xdt/tagdoc-toc.xdt
deleted file mode 100644
index b5a7b7f..0000000
--- a/trunk/core/src/main/xdt/tagdoc-toc.xdt
+++ /dev/null
@@ -1,40 +0,0 @@
-<html>
-<head>
-<title>Struts <XDtConfig:configParameterValue paramName="Taglibversion"/> Taglib Index</title>
-</head>
-
-<body>
-
-<h1>Struts <XDtConfig:configParameterValue paramName="Taglibversion"/> Taglib Index</h1>
-<p>
-<table width="100%">
-
-
-<XDtClass:forAllClasses>
-
-<XDtClass:ifHasClassTag tagName="a2:tag">
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="<XDtClass:className/>.html">&lt;<XDtClass:classTagValue tagName="a2:tag" paramName="name"/> /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-<XDtClass:ifHasClassTag tagName="a2:tag" paramName="description">
-<XDtClass:classTagValue tagName="a2:tag" paramName="description"/>
-</XDtClass:ifHasClassTag>
-<XDtClass:ifDoesntHaveClassTag tagName="a2:tag" paramName="description">
-<b>No Description</b>
-</XDtClass:ifDoesntHaveClassTag>
-</td>
-</tr>
-
-</XDtClass:ifHasClassTag>
-
-</XDtClass:forAllClasses>
-
-</table>
-
-</p>
-
-</body>
-</html>
diff --git a/trunk/core/src/main/xdt/tagdoc.xdt b/trunk/core/src/main/xdt/tagdoc.xdt
deleted file mode 100644
index 0152aca..0000000
--- a/trunk/core/src/main/xdt/tagdoc.xdt
+++ /dev/null
@@ -1,78 +0,0 @@
-<XDtClass:ifHasClassTag tagName="a2:tag">
-
-<html>
-<head>
-<title>&lt;a2:<XDtClass:classTagValue tagName="a2:tag" paramName="name"/> /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:<XDtClass:classTagValue tagName="a2:tag" paramName="name"/> /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-<XDtClass:ifHasClassTag tagName="a2:tag" paramName="description">
-<XDtClass:classTagValue tagName="a2:tag" paramName="description"/>
-</XDtClass:ifHasClassTag>
-
-<XDtClass:ifDoesntHaveClassTag tagName="a2:tag" paramName="description">
-<b>No Description</b>
-</XDtClass:ifDoesntHaveClassTag>
-
-</p>
-
-<p>
-<XDtClass:classCommentText no-comment-signs="true"/>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<XDtMethod:forAllMethods>
-
-<XDtMethod:ifHasMethodTag tagName="a2:tagattribute">
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top"><XDtMethod:propertyName/></td>
-
-<!-- Required -->
-<td align="left" valign="top"><XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="required"><XDtMethod:ifMethodTagValueEquals tagName="a2:tagattribute" paramName="required" value="true"><b><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="required"/></b></XDtMethod:ifMethodTagValueEquals><XDtMethod:ifMethodTagValueNotEquals tagName="a2:tagattribute" paramName="required" value="true"><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="required"/></XDtMethod:ifMethodTagValueNotEquals></XDtMethod:ifHasMethodTag><XDtMethod:ifDoesntHaveMethodTag tagName="a2:tagattribute" paramName="required">false</XDtMethod:ifDoesntHaveMethodTag></td>
-
-<!-- Default -->
-<td align="left" valign="top"><XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="default"><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="default"/></XDtMethod:ifHasMethodTag><XDtMethod:ifDoesntHaveMethodTag tagName="a2:tagattribute" paramName="default">&nbsp;</XDtMethod:ifDoesntHaveMethodTag></td>
-
-<!-- Type -->
-<td align="left" valign="top"><XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="type"><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="type"/></XDtMethod:ifHasMethodTag><XDtMethod:ifDoesntHaveMethodTag tagName="a2:tagattribute" paramName="type">Object/String</XDtMethod:ifDoesntHaveMethodTag></td>
-
-<!-- Description -->
-<td align="left" valign="top"><XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="description"><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="description"/></XDtMethod:ifHasMethodTag><XDtMethod:ifDoesntHaveMethodTag tagName="a2:tagattribute" paramName="description"><XDtMethod:methodComment no-comment-signs="true"/></XDtMethod:ifDoesntHaveMethodTag></td>
-
-</tr>
-</XDtMethod:ifHasMethodTag>
-
-</XDtMethod:forAllMethods>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
-</XDtClass:ifHasClassTag>
diff --git a/trunk/core/src/main/xdt/tags_tld.xdt b/trunk/core/src/main/xdt/tags_tld.xdt
deleted file mode 100644
index 977f1ff..0000000
--- a/trunk/core/src/main/xdt/tags_tld.xdt
+++ /dev/null
@@ -1,264 +0,0 @@
-<?xml version="1.0" encoding="<XDtConfig:configParameterValue paramName='Xmlencoding'/>"?>
-<XDtConfig:ifConfigParamNotGreaterOrEquals paramName="Jspversion" value="2.0">
-<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-<taglib>
-</XDtConfig:ifConfigParamNotGreaterOrEquals>
-
- <XDtMerge:merge file="taglib-settings.xml">
-  <XDtConfig:ifConfigParamEquals paramName="Jspversion" value="1.1">
-   <tlibversion><XDtConfig:configParameterValue paramName="Taglibversion"/></tlibversion>
-   <jspversion><XDtConfig:configParameterValue paramName="Jspversion"/></jspversion>
-   <shortname><XDtConfig:configParameterValue paramName="Shortname"/></shortname>
-  </XDtConfig:ifConfigParamEquals>
-  <XDtConfig:ifConfigParamEquals paramName="Jspversion" value="1.2">
-   <tlib-version><XDtConfig:configParameterValue paramName="Taglibversion"/></tlib-version>
-   <jsp-version><XDtConfig:configParameterValue paramName="Jspversion"/></jsp-version>
-   <short-name><XDtConfig:configParameterValue paramName="Shortname"/></short-name>
-  </XDtConfig:ifConfigParamEquals>
-  <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="2.0">
-   <tlib-version><XDtConfig:configParameterValue paramName="Taglibversion"/></tlib-version>
-   <short-name><XDtConfig:configParameterValue paramName="Shortname"/></short-name>
-  </XDtConfig:ifConfigParamGreaterOrEquals>
-
-  <XDtConfig:ifConfigParamNotEquals paramName="Uri" value="">
-   <uri><XDtConfig:configParameterValue paramName="Uri"/></uri>
-  </XDtConfig:ifConfigParamNotEquals>
-
-  <XDtConfig:ifConfigParamEquals paramName="Jspversion" value="1.1">
-  <XDtConfig:ifConfigParamNotEquals paramName="Description" value="">
-   <info><![CDATA[<XDtConfig:configParameterValue paramName="Description"/>]]></info>
-  </XDtConfig:ifConfigParamNotEquals>
-  </XDtConfig:ifConfigParamEquals>
-  <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="1.2">
-  <XDtConfig:ifConfigParamNotEquals paramName="Displayname" value="">
-   <display-name><XDtConfig:configParameterValue paramName="Displayname"/></display-name>
-  </XDtConfig:ifConfigParamNotEquals>
-  <XDtConfig:ifConfigParamNotEquals paramName="Smallicon" value="">
-   <small-icon><XDtConfig:configParameterValue paramName="Smallicon"/></small-icon>
-  </XDtConfig:ifConfigParamNotEquals>
-  <XDtConfig:ifConfigParamNotEquals paramName="Largeicon" value="">
-   <large-icon><XDtConfig:configParameterValue paramName="Largeicon"/></large-icon>
-  </XDtConfig:ifConfigParamNotEquals>
-  <XDtConfig:ifConfigParamNotEquals paramName="Description" value="">
-   <description><![CDATA[<XDtConfig:configParameterValue paramName="Description"/>]]></description>
-  </XDtConfig:ifConfigParamNotEquals>
-  </XDtConfig:ifConfigParamGreaterOrEquals>
- </XDtMerge:merge>
-
-  <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="1.2">
-  <XDtMerge:merge file="taglib-validator.xml">
-  <XDtClass:forAllClasses type="javax.servlet.jsp.tagext.TagLibraryValidator" abstract="false">
-   <validator>
-      <validator-class><XDtClass:fullClassName/></validator-class>
-     <XDtClass:forAllClassTags tagName="jsp:validator-init-param">
-      <init-param>
-         <param-name><XDtClass:classTagValue tagName="jsp:validator-init-param" paramName="name"/></param-name>
-         <param-value><XDtClass:classTagValue tagName="jsp:validator-init-param" paramName="value"/></param-value>
-        <XDtClass:ifHasClassTag tagName="jsp:validator-init-param" paramName="description">
-         <description><![CDATA[<XDtClass:classTagValue tagName="jsp:validator-init-param" paramName="description"/>]]></description>
-        </XDtClass:ifHasClassTag>
-      </init-param>
-     </XDtClass:forAllClassTags>
-      <description><![CDATA[<XDtClass:firstSentenceDescription/>]]></description>
-   </validator>
-  </XDtClass:forAllClasses>
-  </XDtMerge:merge>
-
-  <XDtClass:forAllClasses type="javax.servlet.http.HttpSessionActivationListener,javax.servlet.http.HttpSessionAttributeListener,javax.servlet.http.HttpSessionBindingListener,javax.servlet.http.HttpSessionListener,javax.servlet.ServletContextAttributeListener,javax.servlet.ServletContextListener" abstract="false">
-   <listener>
-      <listener-class><XDtClass:fullClassName/></listener-class>
-   </listener>
-  </XDtClass:forAllClasses>
-
-  <XDtMerge:merge file="taglib-listener.xml">
-  </XDtMerge:merge>
-  </XDtConfig:ifConfigParamGreaterOrEquals>
-
-  <XDtClass:forAllClasses type="javax.servlet.jsp.tagext.Tag,javax.servlet.jsp.tagext.TagSupport,javax.servlet.jsp.tagext.SimpleTagSupport,org.apache.struts2.components.Component" abstract="false">
-   <XDtClass:ifHasClassTag tagName="a2:tag">
-   <tag>
-
-    <XDtConfig:ifConfigParamEquals paramName="Jspversion" value="1.1">
-      <name><XDtClass:classTagValue tagName="a2:tag" paramName="name"/></name>
-      <tagclass><XDtClass:fullClassName/></tagclass>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="tei-class">
-      <teiclass><XDtClass:classTagValue tagName="a2:tag" paramName="tei-class"/></teiclass>
-     </XDtClass:ifHasClassTag>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="tld-body-content" values="JSP,empty,tagdependent">
-      <bodycontent><XDtClass:classTagValue tagName="a2:tag" paramName="tld-body-content"/></bodycontent>
-     </XDtClass:ifHasClassTag>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="description">
-      <info><![CDATA[<XDtClass:classTagValue tagName="a2:tag" paramName="description"/>]]></info>
-     </XDtClass:ifHasClassTag>
-    </XDtConfig:ifConfigParamEquals>
-    <XDtConfig:ifConfigParamEquals paramName="Jspversion" value="1.2">
-      <name><XDtClass:classTagValue tagName="a2:tag" paramName="name"/></name>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="tld-tag-class">
-      <tag-class><XDtClass:classTagValue tagName="a2:tag" paramName="tld-tag-class"/></tag-class>
-     </XDtClass:ifHasClassTag>
-     <XDtClass:ifDoesntHaveClassTag  tagName="a2:tag" paramName="tld-tag-class">
-      <tag-class><XDtClass:fullClassName/></tag-class>
-     </XDtClass:ifDoesntHaveClassTag>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="tei-class">
-      <tei-class><XDtClass:classTagValue tagName="a2:tag" paramName="tei-class"/></tei-class>
-     </XDtClass:ifHasClassTag>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="tld-body-content" values="JSP,empty,tagdependent">
-      <body-content><XDtClass:classTagValue tagName="a2:tag" paramName="tld-body-content"/></body-content>
-     </XDtClass:ifHasClassTag>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="display-name">
-      <display-name><XDtClass:classTagValue tagName="a2:tag" paramName="display-name"/></display-name>
-     </XDtClass:ifHasClassTag>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="small-icon">
-      <small-icon><XDtClass:classTagValue tagName="a2:tag" paramName="small-icon"/></small-icon>
-     </XDtClass:ifHasClassTag>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="large-icon">
-      <large-icon><XDtClass:classTagValue tagName="a2:tag" paramName="large-icon"/></large-icon>
-     </XDtClass:ifHasClassTag>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="description">
-      <description><![CDATA[<XDtClass:classTagValue tagName="a2:tag" paramName="description"/>]]></description>
-     </XDtClass:ifHasClassTag>
-    </XDtConfig:ifConfigParamEquals>
-    <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="2.0">
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="description">
-      <description><XDtClass:classTagValue tagName="a2:tag" paramName="description"/></description>
-     </XDtClass:ifHasClassTag>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="display-name">
-      <display-name><XDtClass:classTagValue tagName="a2:tag" paramName="display-name"/></display-name>
-     </XDtClass:ifHasClassTag>   
-      <icon>    
-        <XDtClass:ifHasClassTag tagName="a2:tag" paramName="small-icon">
-         <small-icon><XDtClass:classTagValue tagName="a2:tag" paramName="small-icon"/></small-icon>
-        </XDtClass:ifHasClassTag>
-        <XDtClass:ifHasClassTag tagName="a2:tag" paramName="large-icon">
-         <large-icon><XDtClass:classTagValue tagName="a2:tag" paramName="large-icon"/></large-icon>
-        </XDtClass:ifHasClassTag>
-      </icon>
-      <name><XDtClass:classTagValue tagName="a2:tag" paramName="name"/></name>
-      <tag-class><XDtClass:fullClassName/></tag-class>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="tei-class">
-      <tei-class><XDtClass:classTagValue tagName="a2:tag" paramName="tei-class"/></tei-class>
-     </XDtClass:ifHasClassTag>
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="tld-body-content" values="JSP,empty,tagdependent,scriptless" error="ERROR: Paramete 'tld-body-content' is mandatory">
-      <body-content><XDtClass:classTagValue tagName="a2:tag" paramName="tld-body-content"/></body-content>
-     </XDtClass:ifHasClassTag>     
-    </XDtConfig:ifConfigParamGreaterOrEquals>
-
-
-
-    <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="1.2">
-     <XDtClass:forAllClassTags tagName="jsp:variable">
-      <variable>
-       <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="2.0">
-        <XDtClass:ifHasClassTag tagName="a2:tag" paramName="description">
-         <description><XDtClass:classTagValue tagName="a2:tag" paramName="description"/></description>
-        </XDtClass:ifHasClassTag>
-       </XDtConfig:ifConfigParamGreaterOrEquals>  
-       <XDtClass:ifHasClassTag tagName="jsp:variable" paramName="name-given">
-         <name-given><XDtClass:classTagValue tagName="jsp:variable" paramName="name-given"/></name-given>
-       </XDtClass:ifHasClassTag>
-       <XDtClass:ifDoesntHaveClassTag tagName="jsp:variable" paramName="name-given">
-        <XDtClass:ifHasClassTag tagName="jsp:variable" paramName="name-from-attribute">
-         <name-from-attribute><XDtClass:classTagValue tagName="jsp:variable" paramName="name-from-attribute"/></name-from-attribute>
-        </XDtClass:ifHasClassTag>
-       </XDtClass:ifDoesntHaveClassTag>
-       <XDtClass:ifHasClassTag tagName="jsp:variable" paramName="class">
-         <variable-class><XDtClass:classTagValue tagName="jsp:variable" paramName="class"/></variable-class>
-       </XDtClass:ifHasClassTag>
-       <XDtClass:ifHasClassTag tagName="jsp:variable" paramName="declare">
-         <declare><XDtClass:classTagValue tagName="jsp:variable" paramName="declare" values="true,false,yes,no"/></declare>
-       </XDtClass:ifHasClassTag>
-       <XDtClass:ifHasClassTag tagName="jsp:variable" paramName="scope">
-         <scope><XDtClass:classTagValue tagName="jsp:variable" paramName="scope" values="NESTED,AT_BEGIN,AT_END"/></scope>
-       </XDtClass:ifHasClassTag>
-       <XDtConfig:ifConfigParamEquals paramName="Jspversion" value="1.2">
-        <XDtClass:ifHasClassTag tagName="jsp:variable" paramName="description">
-         <description><![CDATA[<XDtClass:classTagValue tagName="jsp:variable" paramName="description"/>]]></description>
-        </XDtClass:ifHasClassTag>
-       </XDtConfig:ifConfigParamEquals>
-      </variable>
-     </XDtClass:forAllClassTags>
-   </XDtConfig:ifConfigParamGreaterOrEquals>
-
-    <XDtMethod:forAllMethods>
-     <XDtMethod:ifHasMethodTag tagName="a2:tagattribute">
-      <attribute>
-        <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="2.0">
-        <XDtMethod:ifHasMethodTag tagName="a2.tagattribute" paramName="description">
-         <description><![CDATA[<XDtMethod:methodTagValue tagName="a2.tagattribute" paramName="description"/>]]></description>
-        </XDtMethod:ifHasMethodTag>
-        <XDtMethod:ifDoesntHaveMethodTag tagName="a2.tagattribute" paramName="description">
-         <description><![CDATA[<XDtMethod:methodComment no-comment-signs="true"/>]]></description>
-        </XDtMethod:ifDoesntHaveMethodTag>
-        </XDtConfig:ifConfigParamGreaterOrEquals>
-         <name><XDtMethod:propertyName/></name>
-        <XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="required">
-         <required><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="required" values="true,false,yes,no"/></required>
-        </XDtMethod:ifHasMethodTag>
-        <XDtConfig:ifConfigParamNotGreaterOrEquals paramName="Jspversion" value="2.0">
-        <XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="rtexprvalue">
-         <rtexprvalue><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="rtexprvalue" values="true,false,yes,no"/></rtexprvalue>
-        </XDtMethod:ifHasMethodTag>
-        <XDtMethod:ifDoesntHaveMethodTag tagName="a2:tagattribute" paramName="rtexprvalue">
-         <rtexprvalue>true</rtexprvalue>
-        </XDtMethod:ifDoesntHaveMethodTag>
-        </XDtConfig:ifConfigParamNotGreaterOrEquals>
-
-        <XDtConfig:ifConfigParamEquals paramName="Jspversion" value="1.2">
-          <XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="tld-type">
-           <type><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="type"/></type>
-          </XDtMethod:ifHasMethodTag>
-          <XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="description">
-           <description><![CDATA[<XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="description"/>]]></description>
-          </XDtMethod:ifHasMethodTag>
-          <XDtMethod:ifDoesntHaveMethodTag tagName="a2.tagattribute" paramName="description">
-           <description><![CDATA[<XDtMethod:methodComment no-comment-signs="true"/>]]></description>
-          </XDtMethod:ifDoesntHaveMethodTag>
-        </XDtConfig:ifConfigParamEquals>
-
-        <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="2.0">
-          <XDtMethod:ifDoesntHaveMethodTag tagName="a2:tagattribute" paramName="fragment">
-          <XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="rtexprvalue">
-           <rtexprvalue><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="rtexprvalue" values="true,false,yes,no"/></rtexprvalue>
-          </XDtMethod:ifHasMethodTag>
-          <XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="type">
-           <type><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="type"/></type>
-          </XDtMethod:ifHasMethodTag>
-          </XDtMethod:ifDoesntHaveMethodTag>
-          <XDtMethod:ifHasMethodTag tagName="a2:tagattribute" paramName="fragment">
-           <rtexprvalue><XDtMethod:methodTagValue tagName="a2:tagattribute" paramName="fragment" values="true,false,yes,no"/></rtexprvalue>
-          </XDtMethod:ifHasMethodTag>
-        </XDtConfig:ifConfigParamGreaterOrEquals>
-
-      </attribute>
-     </XDtMethod:ifHasMethodTag>
-    </XDtMethod:forAllMethods>
-
-    <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="2.0">
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="dynamic-attributes">
-      <dynamic-attributes><XDtClass:classTagValue tagName="a2:tag" paramName="dynamic-attributes" values="true,false,yes,no"/></dynamic-attributes>
-     </XDtClass:ifHasClassTag>
-    </XDtConfig:ifConfigParamGreaterOrEquals>
-    <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="1.2">
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="example">
-      <example><![CDATA[<XDtClass:classTagValue tagName="a2.tag" paramName="example"/>]]></example>
-     </XDtClass:ifHasClassTag>
-    </XDtConfig:ifConfigParamGreaterOrEquals>
-    <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="2.0">
-     <XDtClass:ifHasClassTag tagName="a2:tag" paramName="tag-extension">
-      <!-- Sorry! This template does not support the 'tag-extension' element at the moment -->
-     </XDtClass:ifHasClassTag>
-    </XDtConfig:ifConfigParamGreaterOrEquals>
-
-   </tag>
-  </XDtClass:ifHasClassTag>
-  </XDtClass:forAllClasses>
-
-  <XDtMerge:merge file="taglib-tag.xml">
-  </XDtMerge:merge>
-  
-  <XDtConfig:ifConfigParamGreaterOrEquals paramName="Jspversion" value="2.0">
-   <XDtMerge:merge file="taglib-functions.ent">
-   </XDtMerge:merge>
-  </XDtConfig:ifConfigParamGreaterOrEquals>  
-
-</taglib>
diff --git a/trunk/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java b/trunk/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java
deleted file mode 100644
index 7b4b8f7..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-
-/**
- * ExecutionCountTestAction
- */
-public class ExecutionCountTestAction extends ActionSupport {
-
-	private static final long serialVersionUID = -2954211394678430609L;
-
-
-	private static final Log LOG = LogFactory.getLog(ExecutionCountTestAction.class);
-
-
-    private int executionCount = 0;
-
-
-    public int getExecutionCount() {
-        return executionCount;
-    }
-
-    public String execute() throws Exception {
-        executionCount++;
-        LOG.info("executing ExecutionCountTestAction. Current count is " + executionCount);
-
-        return SUCCESS;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/RequestUtilsTest.java b/trunk/core/src/test/java/org/apache/struts2/RequestUtilsTest.java
deleted file mode 100644
index 6ab4480..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/RequestUtilsTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-/**
- * <code>RequestUtilsTest</code>
- *
- */
-import javax.servlet.http.HttpServletRequest;
-
-import junit.framework.TestCase;
-
-import org.easymock.MockControl;
-
-public class RequestUtilsTest extends TestCase {
-
-    private MockControl control;
-    private HttpServletRequest requestMock;
-
-    public void testGetServletPathWithServletPathSet() throws Exception {
-        control.expectAndReturn(requestMock.getServletPath(), "/mycontext/");
-        control.replay();
-        assertEquals("/mycontext/", RequestUtils.getServletPath(requestMock));
-        control.verify();
-    }
-
-    public void testGetServletPathWithRequestURIAndEmptyContextPath() throws Exception {
-        control.expectAndReturn(requestMock.getServletPath(), null);
-        control.expectAndReturn(requestMock.getRequestURI(), "/mycontext/test.jsp");
-        control.expectAndReturn(requestMock.getContextPath(), "");
-        control.expectAndReturn(requestMock.getPathInfo(), "test.jsp");
-        control.expectAndReturn(requestMock.getPathInfo(), "test.jsp");
-        control.replay();
-        assertEquals("/mycontext/", RequestUtils.getServletPath(requestMock));
-        control.verify();
-    }
-
-    public void testGetServletPathWithRequestURIAndContextPathSet() throws Exception {
-        control.expectAndReturn(requestMock.getServletPath(), null);
-        control.expectAndReturn(requestMock.getRequestURI(), "/servlet/mycontext/test.jsp");
-        control.expectAndReturn(requestMock.getContextPath(), "/servlet");
-        control.expectAndReturn(requestMock.getContextPath(), "/servlet");
-        control.expectAndReturn(requestMock.getPathInfo(), "test.jsp");
-        control.expectAndReturn(requestMock.getPathInfo(), "test.jsp");
-        control.replay();
-        assertEquals("/mycontext/", RequestUtils.getServletPath(requestMock));
-        control.verify();
-    }
-
-    public void testGetServletPathWithRequestURIAndContextPathSetButNoPatchInfo() throws Exception {
-        control.expectAndReturn(requestMock.getServletPath(), null);
-        control.expectAndReturn(requestMock.getRequestURI(), "/servlet/mycontext/");
-        control.expectAndReturn(requestMock.getContextPath(), "/servlet");
-        control.expectAndReturn(requestMock.getContextPath(), "/servlet");
-        control.expectAndReturn(requestMock.getPathInfo(), null);
-        control.replay();
-        assertEquals("/mycontext/", RequestUtils.getServletPath(requestMock));
-        control.verify();
-    }
-
-    protected void setUp() {
-        control = MockControl.createControl(HttpServletRequest.class);
-        requestMock = (HttpServletRequest) control.getMock();
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/ServletActionContextTest.java b/trunk/core/src/test/java/org/apache/struts2/ServletActionContextTest.java
deleted file mode 100644
index d3f1b90..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/ServletActionContextTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import junit.framework.TestCase;
-
-import com.mockobjects.servlet.MockHttpServletRequest;
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockServletContext;
-import com.opensymphony.xwork2.ActionContext;
-
-
-/**
- * Unit test for ServletActionContext. Based loosly on Jason's ActionContextTest.
- * My first attempt at unit testing. Please hack away as needed.
- *
- */
-public class ServletActionContextTest extends TestCase implements StrutsStatics {
-
-    ActionContext actionContext;
-    ServletActionContext servletActionContext;
-    private HttpServletRequest request;
-    private HttpServletResponse response;
-    private MockServletContext servletContext;
-
-
-    public void setUp() {
-        Map extraContext = new HashMap();
-
-        request = new MockHttpServletRequest();
-        response = new MockHttpServletResponse();
-        servletContext = new MockServletContext();
-
-        extraContext.put(HTTP_REQUEST, request);
-        extraContext.put(HTTP_RESPONSE, response);
-        extraContext.put(SERVLET_CONTEXT, servletContext);
-
-        actionContext = new ActionContext(extraContext);
-        ServletActionContext.setContext(actionContext);
-    }
-
-    public void testContextParams() {
-        assertEquals(ServletActionContext.getRequest(), request);
-        assertEquals(ServletActionContext.getResponse(), response);
-        assertEquals(ServletActionContext.getServletContext(), servletContext);
-    }
-
-    public void testGetContext() {
-        ActionContext threadContext = ServletActionContext.getContext();
-        assertEquals(actionContext, threadContext);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/TestAction.java b/trunk/core/src/test/java/org/apache/struts2/TestAction.java
deleted file mode 100644
index ac43943..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/TestAction.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.views.jsp.ui.User;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-
-/**
- */
-public class TestAction extends ActionSupport {
-
-	private static final long serialVersionUID = -8891365561914451494L;
-	
-	private Collection collection;
-    private Collection collection2;
-    private Map map;
-    private String foo;
-    private String result;
-    private User user;
-    private String[] array;
-    private String[][] list;
-    private List list2;
-    private List list3;
-
-    public Collection getCollection() {
-        return collection;
-    }
-
-    public void setCollection(Collection collection) {
-        this.collection = collection;
-    }
-
-    public Map getMap() {
-        return map;
-    }
-
-    public void setMap(Map map) {
-        this.map = map;
-    }
-
-    public String getFoo() {
-        return foo;
-    }
-
-    public void setFoo(String foo) {
-        this.foo = foo;
-    }
-
-    public String getResult() {
-        return result;
-    }
-
-    public void setResult(String result) {
-        this.result = result;
-    }
-
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-
-    public String[] getArray() {
-        return array;
-    }
-
-    public void setArray(String[] array) {
-        this.array = array;
-    }
-
-    public String[][] getList() {
-        return list;
-    }
-
-    public void setList(String[][] list) {
-        this.list = list;
-    }
-
-    public List getList2() {
-        return list2;
-    }
-
-    public void setList2(List list2) {
-        this.list2 = list2;
-    }
-
-    public void setList3(List list) {
-    	this.list3 = list;
-    }
-    
-    public List getList3() {
-    	return this.list3;
-    }
-    
-    public Collection getCollection2() {
-    	return this.collection2;
-    }
-    
-    public void setCollection2(Collection collection) {
-    	this.collection2 = collection;
-    }
-    
-    public String execute() throws Exception {
-        if (result == null) {
-            result = Action.SUCCESS;
-        }
-
-        return result;
-    }
-
-    public String doInput() throws Exception {
-        return INPUT;
-    }
-    
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/TestActionTagResult.java b/trunk/core/src/test/java/org/apache/struts2/TestActionTagResult.java
deleted file mode 100644
index b5bbe7c..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/TestActionTagResult.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Result;
-
-public class TestActionTagResult implements Result {
-
-	private static final long serialVersionUID = 5245516954875657626L;
-	
-	private boolean _isExecuted;
-	
-	public void execute(ActionInvocation invocation) throws Exception {
-		_isExecuted = true;
-	}
-	
-	public boolean isExecuted() {
-		return _isExecuted;
-	}
-
-	public void reset() {
-		_isExecuted = false;
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java b/trunk/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java
deleted file mode 100644
index d3a4aae..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.dispatcher.ServletDispatcherResult;
-import org.apache.struts2.interceptor.TokenInterceptor;
-import org.apache.struts2.interceptor.TokenSessionStoreInterceptor;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionChainResult;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationProvider;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.InterceptorMapping;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.interceptor.ParametersInterceptor;
-import com.opensymphony.xwork2.mock.MockResult;
-
-
-/**
- * TestConfigurationProvider provides a simple configuration class without the need for xml files, etc. for simple testing.
- *
- */
-public class TestConfigurationProvider implements ConfigurationProvider {
-
-    public static final String TEST_ACTION_NAME = "testAction";
-    public static final String EXECUTION_COUNT_ACTION_NAME = "executionCountAction";
-    public static final String TOKEN_ACTION_NAME = "tokenAction";
-    public static final String TOKEN_SESSION_ACTION_NAME = "tokenSessionAction";
-    public static final String TEST_NAMESPACE = "/testNamespace";
-    public static final String TEST_NAMESPACE_ACTION = "testNamespaceAction";
-
-
-    /**
-     * Allows the configuration to clean up any resources used
-     */
-    public void destroy() {
-    }
-
-    /**
-     * Initializes the configuration object.
-     */
-    public void init(Configuration configurationManager) {
-        PackageConfig defaultPackageConfig = new PackageConfig("");
-
-        HashMap results = new HashMap();
-
-        HashMap successParams = new HashMap();
-        successParams.put("propertyName", "executionCount");
-        successParams.put("expectedValue", "1");
-
-        ResultConfig successConfig = new ResultConfig(Action.SUCCESS, TestResult.class.getName(), successParams);
-
-        results.put(Action.SUCCESS, successConfig);
-
-        List interceptors = new ArrayList();
-
-        ActionConfig executionCountActionConfig = new ActionConfig(null, ExecutionCountTestAction.class, null, results, interceptors);
-        defaultPackageConfig.addActionConfig(EXECUTION_COUNT_ACTION_NAME, executionCountActionConfig);
-
-        results = new HashMap();
-
-        successParams = new HashMap();
-        successParams.put("location", "success.jsp");
-
-        successConfig = new ResultConfig(Action.SUCCESS, ServletDispatcherResult.class.getName(), successParams);
-
-        results.put(Action.SUCCESS, successConfig);
-
-        interceptors.add(new InterceptorMapping("params", new ParametersInterceptor()));
-
-        ActionConfig testActionConfig = new ActionConfig(null, TestAction.class, null, results, interceptors);
-        defaultPackageConfig.addActionConfig(TEST_ACTION_NAME, testActionConfig);
-
-        interceptors = new ArrayList();
-        interceptors.add(new InterceptorMapping("token", new TokenInterceptor()));
-
-        results = new HashMap();
-
-        ActionConfig tokenActionConfig = new ActionConfig(null, TestAction.class, null, results, interceptors);
-        tokenActionConfig.addResultConfig(new ResultConfig("invalid.token", MockResult.class.getName()));
-        tokenActionConfig.addResultConfig(new ResultConfig("success", MockResult.class.getName()));
-        defaultPackageConfig.addActionConfig(TOKEN_ACTION_NAME, tokenActionConfig);
-
-        interceptors = new ArrayList();
-        interceptors.add(new InterceptorMapping("token-session", new TokenSessionStoreInterceptor()));
-
-        results = new HashMap();
-
-        successParams = new HashMap();
-        successParams.put("actionName", EXECUTION_COUNT_ACTION_NAME);
-
-        successConfig = new ResultConfig(Action.SUCCESS, ActionChainResult.class.getName(), successParams);
-
-        results.put(Action.SUCCESS, successConfig);
-
-        // empty results for token session unit test
-        results = new HashMap();
-        ActionConfig tokenSessionActionConfig = new ActionConfig(null, TestAction.class, null, results, interceptors);
-        tokenSessionActionConfig.addResultConfig(new ResultConfig("invalid.token", MockResult.class.getName()));
-        tokenSessionActionConfig.addResultConfig(new ResultConfig("success", MockResult.class.getName()));
-        defaultPackageConfig.addActionConfig(TOKEN_SESSION_ACTION_NAME, tokenSessionActionConfig);
-
-        configurationManager.addPackageConfig("", defaultPackageConfig);
-
-        Map testActionTagResults = new HashMap();
-        testActionTagResults.put(Action.SUCCESS, new ResultConfig(Action.SUCCESS, TestActionTagResult.class.getName(), new HashMap()));
-        testActionTagResults.put(Action.INPUT, new ResultConfig(Action.INPUT, TestActionTagResult.class.getName(), new HashMap()));
-        ActionConfig testActionTagActionConfig = new ActionConfig((String) null, TestAction.class, (Map) null, testActionTagResults, new ArrayList());
-        defaultPackageConfig.addActionConfig("testActionTagAction", testActionTagActionConfig);
-
-        PackageConfig namespacePackageConfig = new PackageConfig("namespacePackage");
-        namespacePackageConfig.setNamespace(TEST_NAMESPACE);
-        namespacePackageConfig.addParent(defaultPackageConfig);
-
-        ActionConfig namespaceAction = new ActionConfig(null, TestAction.class, null, null, null);
-        namespacePackageConfig.addActionConfig(TEST_NAMESPACE_ACTION, namespaceAction);
-
-        configurationManager.addPackageConfig("namespacePackage", namespacePackageConfig);
-    }
-
-    /**
-     * Tells whether the ConfigurationProvider should reload its configuration
-     *
-     * @return
-     */
-    public boolean needsReload() {
-        return false;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/TestResult.java b/trunk/core/src/test/java/org/apache/struts2/TestResult.java
deleted file mode 100644
index fb7e231..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/TestResult.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.Assert;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * TestResult
- *
- */
-public class TestResult implements Result {
-
-	private static final long serialVersionUID = -4429258122011663164L;
-
-
-	private static final Log LOG = LogFactory.getLog(TestResult.class);
-
-
-    private List expectedValues = new ArrayList();
-    private List propertyNames = new ArrayList();
-
-
-    public void setExpectedValue(int index, String value) {
-        expectedValues.set(index, value);
-    }
-
-    public void setExpectedValue(String value) {
-        expectedValues.add(value);
-    }
-
-    public List getExpectedValues() {
-        return expectedValues;
-    }
-
-    public void setPropertyName(int index, String propertyName) {
-        propertyNames.set(index, propertyName);
-    }
-
-    public void setPropertyName(String propertyName) {
-        propertyNames.add(propertyName);
-    }
-
-    public List getPropertyNames() {
-        return propertyNames;
-    }
-
-    public void execute(ActionInvocation invocation) throws Exception {
-        LOG.info("executing TestResult.");
-
-        if ((expectedValues != null) && (expectedValues.size() > 0) && (propertyNames != null) && (propertyNames.size() > 0))
-        {
-            ValueStack stack = ActionContext.getContext().getValueStack();
-
-            for (int i = 0; i < propertyNames.size(); i++) {
-                String propertyName = (String) propertyNames.get(i);
-                String expectedValue = null;
-
-                if (i < expectedValues.size()) {
-                    expectedValue = (String) expectedValues.get(i);
-                }
-
-                String value = (String) stack.findValue(propertyName, String.class);
-                Assert.assertEquals(expectedValue, value);
-            }
-        } else {
-            LOG.error("One of expectedValues = " + expectedValues + " and propertyNames = " + propertyNames + " was null or empty.");
-            Assert.fail();
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/components/ComponentTest.java b/trunk/core/src/test/java/org/apache/struts2/components/ComponentTest.java
deleted file mode 100644
index e911c71..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/components/ComponentTest.java
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Stack;
-
-import javax.servlet.jsp.tagext.TagSupport;
-
-import org.apache.struts2.views.jsp.AbstractTagTest;
-import org.apache.struts2.views.jsp.BeanTag;
-import org.apache.struts2.views.jsp.ElseIfTag;
-import org.apache.struts2.views.jsp.ElseTag;
-import org.apache.struts2.views.jsp.I18nTag;
-import org.apache.struts2.views.jsp.IfTag;
-import org.apache.struts2.views.jsp.IteratorTag;
-import org.apache.struts2.views.jsp.PropertyTag;
-import org.apache.struts2.views.jsp.PushTag;
-import org.apache.struts2.views.jsp.SetTag;
-import org.apache.struts2.views.jsp.TextTag;
-import org.apache.struts2.views.jsp.URLTag;
-import org.apache.struts2.views.jsp.iterator.AppendIteratorTag;
-import org.apache.struts2.views.jsp.iterator.MergeIteratorTag;
-import org.apache.struts2.views.jsp.ui.TextFieldTag;
-import org.apache.struts2.views.jsp.ui.UpDownSelectTag;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-
-/**
- * Test case for method findAncestor(Class) in Component and some commons
- * test cases for Component in general.
- * 
- */
-public class ComponentTest extends AbstractTagTest {
-
-	public void testFindAncestorTest() throws Exception {
-    	Property property = new Property(stack);
-    	Form form = new Form(stack, request, response);
-    	ActionComponent actionComponent = new ActionComponent(stack, request, response);
-    	Anchor anchor = new Anchor(stack, request, response);
-    	Form form2 = new Form(stack, request, response);
-    	TextField textField = new TextField(stack, request, response);
-    	
-    	
-    	Stack stack = property.getComponentStack();
-		Iterator i = stack.iterator();
-
-    	
-    	try {
-    		// component stack
-    		assertEquals(property.getComponentStack().size(), 6);
-    		assertEquals(i.next(), property);
-    		assertEquals(i.next(), form);
-    		assertEquals(i.next(), actionComponent);
-    		assertEquals(i.next(), anchor);
-    		assertEquals(i.next(), form2);
-    		assertEquals(i.next(), textField);
-    		
-    		
-    		// property
-    		assertNull(property.findAncestor(Component.class));
-    		
-    		// form
-    		assertEquals(form.findAncestor(Component.class), property);
-    		assertEquals(form.findAncestor(Property.class), property);
-    		
-    		// action
-    		assertEquals(actionComponent.findAncestor(Component.class), form);
-    		assertEquals(actionComponent.findAncestor(Property.class), property);
-    		assertEquals(actionComponent.findAncestor(Form.class), form);
-    		
-    		// anchor
-    		assertEquals(anchor.findAncestor(Component.class), actionComponent);
-    		assertEquals(anchor.findAncestor(ActionComponent.class), actionComponent);
-    		assertEquals(anchor.findAncestor(Form.class), form);
-    		assertEquals(anchor.findAncestor(Property.class), property);
-    		
-    		// form2
-    		assertEquals(form2.findAncestor(Component.class), anchor);
-    		assertEquals(form2.findAncestor(Anchor.class), anchor);
-    		assertEquals(form2.findAncestor(ActionComponent.class), actionComponent);
-    		assertEquals(form2.findAncestor(Form.class), form);
-    		assertEquals(form2.findAncestor(Property.class), property);
-    		
-    		// textField
-    		assertEquals(textField.findAncestor(Component.class), form2);
-    		assertEquals(textField.findAncestor(Form.class), form2);
-    		assertEquals(textField.findAncestor(Anchor.class), anchor);
-    		assertEquals(textField.findAncestor(ActionComponent.class), actionComponent);
-    		assertEquals(textField.findAncestor(Property.class), property);
-    	}
-    	finally {
-    		property.getComponentStack().pop();
-    		property.getComponentStack().pop();
-    		property.getComponentStack().pop();
-    		property.getComponentStack().pop();
-    		property.getComponentStack().pop();
-    	}
-    }
-	
-	// Action Component
-	/*
-	public void testActionComponentDisposeItselfFromComponentStack() throws Exception {
-		ConfigurationManager.clearConfigurationProviders();
-        ConfigurationManager.addConfigurationProvider(new TestConfigurationProvider());
-        ConfigurationManager.getConfiguration().reload();
-
-        ActionContext actionContext = new ActionContext(context);
-        actionContext.setValueStack(stack);
-        ActionContext.setContext(actionContext);
-        
-		request.setupGetServletPath(TestConfigurationProvider.TEST_NAMESPACE + "/" + "foo.action");
-		try {
-			TextFieldTag t = new TextFieldTag();
-			t.setName("textFieldName");
-			t.setPageContext(pageContext);
-			t.doStartTag();
-		
-			ActionTag tag = new ActionTag();
-			tag.setPageContext(pageContext);
-			tag.setName(TestConfigurationProvider.TEST_NAMESPACE_ACTION);
-			tag.setId(TestConfigurationProvider.TEST_NAMESPACE_ACTION);
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-		
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	*/
-	
-	
-	// AppendInterator
-	public void testAppendIteratorDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		AppendIteratorTag tag = new AppendIteratorTag();
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	// Bean 
-	public void testBeanComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		BeanTag tag = new BeanTag();
-		tag.setName("org.apache.struts2.util.Counter");
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail();
-		}
-	}
-	
-	
-	// ElseIf
-	public void testElseIfComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		ElseIfTag tag = new ElseIfTag();
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	// Else
-	public void testElseComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		ElseTag tag = new ElseTag();
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	// If
-	public void testIfComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		IfTag tag = new IfTag();
-		tag.setTest("false");
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	// Iterator
-	public void testIteratorComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		IteratorTag tag = new IteratorTag();
-		tag.setValue("{1,2}");
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			int endIt = tag.doAfterBody();
-			while(TagSupport.EVAL_BODY_AGAIN == endIt) {
-				assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-				endIt = tag.doAfterBody();
-			}
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	// MergeIterator
-	public void testMergeIteratorComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		MergeIteratorTag tag = new MergeIteratorTag();
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	// Property
-	public void testPropertyComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		PropertyTag tag = new PropertyTag();
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	// Push
-	public void testPushComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		PushTag tag = new PushTag();
-		tag.setValue("'aaaa'");
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	// Set
-	public void testSetComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		SetTag tag = new SetTag();
-		tag.setName("name");
-		tag.setValue("'value'");
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	// Text
-	public void testTextComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		TextTag tag = new TextTag();
-		tag.setName("some.i18n.key");
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	public void testI18nComponentDisposeItselfFromComponentStack() throws Exception {
-		stack.getContext().put(ActionContext.LOCALE, Locale.getDefault());
-		
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		LocalizedTextUtil.addDefaultResourceBundle("org.apache.struts2.components.temp");
-		
-		I18nTag tag = new I18nTag();
-		tag.setName("org.apache.struts2.components.tempo");
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	// URL
-	public void testURLComponentDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		URLTag tag = new URLTag();
-		tag.setPageContext(pageContext);
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-	
-	
-	// updownselect
-	public void testUpDownSelectDisposeItselfFromComponentStack() throws Exception {
-		TextFieldTag t = new TextFieldTag();
-		t.setPageContext(pageContext);
-		t.setName("textFieldName");
-		
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setId("myId");
-		tag.setPageContext(pageContext);
-		tag.setName("updownselectName");
-		tag.setList("{}");
-		
-		try {
-			t.doStartTag();
-			tag.doStartTag();
-			assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-			tag.doEndTag();
-			assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-			t.doEndTag();
-		}
-		catch(Exception e) {
-			e.printStackTrace();
-			fail(e.toString());
-		}
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java b/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java
deleted file mode 100644
index 47f6a1f..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import org.apache.struts2.StrutsTestCase;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-/**
- * 
- * @version $Date$ $Id$
- */
-public class FormButtonTest extends StrutsTestCase {
-	
-	public void testPopulateComponentHtmlId1() throws Exception {
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		
-		Form form = new Form(stack, req, res);
-		form.getParameters().put("id", "formId");
-		
-		Submit submit = new Submit(stack, req, res);
-		submit.setId("submitId");
-		
-		submit.populateComponentHtmlId(form);
-		
-		assertEquals("submitId", submit.getParameters().get("id"));
-	}
-	
-	public void testPopulateComponentHtmlId2() throws Exception {
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		
-		Form form = new Form(stack, req, res);
-		form.getParameters().put("id", "formId");
-		
-		Submit submit = new Submit(stack, req, res);
-		submit.setName("submitName");
-		
-		submit.populateComponentHtmlId(form);
-		
-		assertEquals("formId_submitName", submit.getParameters().get("id"));
-	}
-	
-	public void testPopulateComponentHtmlId3() throws Exception {
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		
-		Form form = new Form(stack, req, res);
-		form.getParameters().put("id", "formId");
-		
-		Submit submit = new Submit(stack, req, res);
-		submit.setAction("submitAction");
-		submit.setMethod("submitMethod");
-		
-		submit.populateComponentHtmlId(form);
-		
-		assertEquals("formId_submitAction_submitMethod", submit.getParameters().get("id"));
-	}
-	
-	public void testPopulateComponentHtmlId4() throws Exception {
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		
-		Submit submit = new Submit(stack, req, res);
-		submit.setId("submitId");
-		
-		submit.populateComponentHtmlId(null);
-		
-		assertEquals("submitId", submit.getParameters().get("id"));
-	}
-	
-	public void testPopulateComponentHtmlId5() throws Exception {
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		
-		Submit submit = new Submit(stack, req, res);
-		submit.setName("submitName");
-		
-		submit.populateComponentHtmlId(null);
-		
-		assertEquals("submitName", submit.getParameters().get("id"));
-	}
-	
-	public void testPopulateComponentHtmlId6() throws Exception {
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		
-		Submit submit = new Submit(stack, req, res);
-		submit.setAction("submitAction");
-		submit.setMethod("submitMethod");
-		
-		submit.populateComponentHtmlId(null);
-		
-		assertEquals("submitAction_submitMethod", submit.getParameters().get("id"));
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/components/FormTest.java b/trunk/core/src/test/java/org/apache/struts2/components/FormTest.java
deleted file mode 100644
index f39387e..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/components/FormTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.util.List;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-import com.opensymphony.xwork2.validator.validators.RequiredFieldValidator;
-
-/**
- * <code>FormTest</code>
- *
- */
-public class FormTest extends AbstractUITagTest {
-
-
-    public void testTestFormGetValidators() {
-        Form form = new Form(stack, request, response);
-        form.getParameters().put("actionClass", TestAction.class);
-        List v = form.getValidators("foo");
-        assertEquals(1, v.size());
-        assertEquals(RequiredFieldValidator.class, v.get(0).getClass());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/components/PropertyTest.java b/trunk/core/src/test/java/org/apache/struts2/components/PropertyTest.java
deleted file mode 100644
index 000f9b2..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/components/PropertyTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import java.io.StringWriter;
-import java.util.Map;
-
-import junit.framework.TestCase;
-import ognl.Ognl;
-
-import org.apache.struts2.util.StrutsTypeConverter;
-
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-import com.opensymphony.xwork2.util.XWorkConverter;
- 
-/**
- *
- */
-public class PropertyTest extends TestCase {
-    public void testNormalBehaviour() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.push(new FooBar("foo-value", "bar-value"));
-        final Property property = new Property(stack);
-        property.setDefault("default");
-        property.setValue("foo");
-        assertPropertyOutput("foo-value", property);
-    }
- 
-    public void testDefaultShouldBeOutputIfBeanNotAvailable() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        final Property property = new Property(stack);
-        property.setDefault("default");
-        property.setValue("foo");
-        assertPropertyOutput("default", property);
-    }
- 
-    public void testDefaultShouldBeOutputIfPropertyIsNull() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.push(new FooBar(null, "bar-value"));
-        final Property property = new Property(stack);
-        property.setDefault("default");
-        property.setValue("foo");
-        assertPropertyOutput("default", property);
-    }
- 
-    public void testTopValueShouldReturnTopOfValueStack() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.push(new FooBar("foo-value", "bar-value"));
-        final Property property = new Property(stack);
-        property.setDefault("default");
-        property.setValue("top");
-        assertPropertyOutput("foo-value/bar-value", property);
-    }
- 
-    public void testTypeConverterShouldBeUsed() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        Ognl.setTypeConverter(stack.getContext(), new TestDefaultConverter());
- 
-        stack.push(new FooBar("foo-value", "bar-value"));
-        final Property property = new Property(stack);
-        property.setDefault("default");
-        property.setValue("top");
-        assertPropertyOutput("*foo-value + bar-value*", property);
-    }
- 
-    public void testTypeConverterReturningNullShouldLeadToDisplayOfDefaultValue() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        Ognl.setTypeConverter(stack.getContext(), new TestDefaultConverter());
- 
-        stack.push(new FooBar("foo-value", null));
-        final Property property = new Property(stack);
-        property.setDefault("default");
-        property.setValue("top");
-        assertPropertyOutput("default", property);
-    }
- 
-    private static void assertPropertyOutput(String expectedOutput, Property property) {
-        final StringWriter out = new StringWriter();
-        assertTrue(property.start(out));
-        assertEquals(expectedOutput, out.getBuffer().toString());
-    }
- 
-    private final class FooBar {
-        private String foo;
-        private String bar;
- 
-        public FooBar(String foo, String bar) {
-            this.foo = foo;
-            this.bar = bar;
-        }
- 
-        public String getFoo() {
-            return foo;
-        }
- 
-        public String getBar() {
-            return bar;
-        }
- 
-        public String toString() {
-            return foo + "/" + bar;
-        }
-    }
- 
-    private final class FooBarConverter extends StrutsTypeConverter {
-        public Object convertFromString(Map context, String[] values, Class toClass) {
-            return null;
-        }
- 
-        public String convertToString(Map context, Object o) {
-            FooBar fooBar = (FooBar) o;
-            if (fooBar.getBar() == null) {
-                return null;
-            } else {
-                return "*" + fooBar.getFoo() + " + " + fooBar.getBar() + "*";
-            }
-        }
-    }
- 
-    /** a simple hack to simply register a custom converter in our test */
-    private final class TestDefaultConverter extends XWorkConverter {
-        protected TestDefaultConverter() {
-            super();
-            registerConverter("org.apache.struts2.components.PropertyTest$FooBar", new FooBarConverter());
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java b/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java
deleted file mode 100644
index 80d8ca4..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import org.apache.struts2.StrutsTestCase;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-/**
- * 
- * @version $Date$ $Id$
- */
-public class UIBeanTest extends StrutsTestCase {
-	
-	public void testPopulateComponentHtmlId1() throws Exception {
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		
-		Form form = new Form(stack, req, res);
-		form.getParameters().put("id", "formId");
-		
-		TextField txtFld = new TextField(stack, req, res);
-		txtFld.setId("txtFldId");
-		
-		txtFld.populateComponentHtmlId(form);
-		
-		assertEquals("txtFldId", txtFld.getParameters().get("id"));
-	}
-	
-	public void testPopulateComponentHtmlId2() throws Exception {
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		
-		Form form = new Form(stack, req, res);
-		form.getParameters().put("id", "formId");
-		
-		TextField txtFld = new TextField(stack, req, res);
-		txtFld.setName("txtFldName");
-		
-		txtFld.populateComponentHtmlId(form);
-		
-		assertEquals("formId_txtFldName", txtFld.getParameters().get("id"));
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/components/UIComponentTest.java b/trunk/core/src/test/java/org/apache/struts2/components/UIComponentTest.java
deleted file mode 100644
index b30647e..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/components/UIComponentTest.java
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components;
-
-import org.apache.struts2.TestConfigurationProvider;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-import org.apache.struts2.views.jsp.ui.ActionErrorTag;
-import org.apache.struts2.views.jsp.ui.ActionMessageTag;
-import org.apache.struts2.views.jsp.ui.AnchorTag;
-import org.apache.struts2.views.jsp.ui.CheckboxTag;
-import org.apache.struts2.views.jsp.ui.ComboBoxTag;
-import org.apache.struts2.views.jsp.ui.DivTag;
-import org.apache.struts2.views.jsp.ui.DoubleSelectTag;
-import org.apache.struts2.views.jsp.ui.FieldErrorTag;
-import org.apache.struts2.views.jsp.ui.FileTag;
-import org.apache.struts2.views.jsp.ui.FormTag;
-import org.apache.struts2.views.jsp.ui.HiddenTag;
-import org.apache.struts2.views.jsp.ui.LabelTag;
-import org.apache.struts2.views.jsp.ui.OptionTransferSelectTag;
-import org.apache.struts2.views.jsp.ui.PasswordTag;
-import org.apache.struts2.views.jsp.ui.RadioTag;
-import org.apache.struts2.views.jsp.ui.SelectTag;
-import org.apache.struts2.views.jsp.ui.SubmitTag;
-import org.apache.struts2.views.jsp.ui.TextFieldTag;
-import org.apache.struts2.views.jsp.ui.TextareaTag;
-import org.apache.struts2.views.jsp.ui.TokenTag;
-
-import com.opensymphony.xwork2.ActionContext;
-
-
-/**
- * Test case common for all UI component in general.
- */
-public class UIComponentTest extends AbstractUITagTest {
-
-    // actionError
-    public void testActionErrorComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionMessageTag t = new ActionMessageTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            ActionErrorTag tag = new ActionErrorTag();
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-
-    }
-
-    // actionMessage
-    public void testActionMessageDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            ActionMessageTag tag = new ActionMessageTag();
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    //	 Anchor
-    public void testAnchorComponentDisposeItselfFromComponentStack() throws Exception {
-
-        TextFieldTag t = new TextFieldTag();
-        t.setPageContext(pageContext);
-        t.setName("textFieldName");
-
-        AnchorTag tag = new AnchorTag();
-        tag.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // checkbox
-    public void testCheckboxDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            CheckboxTag tag = new CheckboxTag();
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // combobox
-    public void testComboboxDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            ComboBoxTag tag = new ComboBoxTag();
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setList("{'aaa','bbb','ccc'}");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // div
-    public void testDivComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            DivTag tag = new DivTag();
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // doubleselect
-    public void testDoubleselectComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            DoubleSelectTag tag = new DoubleSelectTag();
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setList("#{1:'one',2:'two'}");
-            tag.setDoubleName("doubleName");
-            tag.setDoubleList("1?({'aa','bb'}:{'cc','dd'}");
-            tag.setFormName("formName");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // fieldError
-    public void testFielderrorComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            FieldErrorTag tag = new FieldErrorTag();
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // file
-    public void testFileDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            FileTag tag = new FileTag();
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // form
-    public void testFormComponentDisposeItselfFromComponentStack() throws Exception {
-        configurationManager.clearConfigurationProviders();
-        configurationManager.addConfigurationProvider(new TestConfigurationProvider());
-        ActionContext.getContext().setValueStack(stack);
-
-        request.setupGetServletPath("/testAction");
-
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            FormTag tag = new FormTag();
-            tag.setName("myForm");
-            tag.setMethod("POST");
-            tag.setAction("myAction");
-            tag.setEnctype("myEncType");
-            tag.setTitle("mytitle");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // hidden
-    public void testHiddenComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            HiddenTag tag = new HiddenTag();
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // label
-    public void testLabelComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            LabelTag tag = new LabelTag();
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // optiontransferselect
-    public void testOptiontransferselectComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            OptionTransferSelectTag tag = new OptionTransferSelectTag();
-            tag.setId("myId");
-            tag.setDoubleId("myDoubleId");
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setList("{}");
-            tag.setDoubleList("{}");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // password
-    public void testPasswordComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            PasswordTag tag = new PasswordTag();
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // radio
-    public void testRadioComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            RadioTag tag = new RadioTag();
-            tag.setList("{}");
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // select
-    public void testSelectComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            SelectTag tag = new SelectTag();
-            tag.setList("{}");
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // submit
-    public void testSubmitDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            SubmitTag tag = new SubmitTag();
-            tag.setName("name");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // textarea
-    public void testTextareaComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            TextareaTag tag = new TextareaTag();
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // textfield
-    public void testTextfieldComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            TextFieldTag tag = new TextFieldTag();
-            tag.setName("name");
-            tag.setLabel("label");
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-
-    // token
-    public void testTokenComponentDisposeItselfFromComponentStack() throws Exception {
-        ActionErrorTag t = new ActionErrorTag();
-        t.setPageContext(pageContext);
-
-        try {
-            t.doStartTag();
-            TokenTag tag = new TokenTag();
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
-            tag.doEndTag();
-            assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
-
-            t.doEndTag();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            fail(e.toString());
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java b/trunk/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java
deleted file mode 100644
index a58dc91..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.components.template;
-
-import java.io.File;
-import java.net.URL;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-/**
- * Test case for BaseTemplateEngine
- */
-public class BaseTemplateEngineTest extends TestCase {
-
-public void testGetThemePropsThroughFileSystem() throws Exception {
-		
-		URL dummyResourceUrl = getClass().getResource("dummy.properties");
-		File dummyResourceFile = new File(dummyResourceUrl.getFile());
-		String themePropertiesDir = dummyResourceFile.getParent();
-		
-		System.out.println("dummy resource url="+dummyResourceUrl);
-		System.out.println("resource file="+dummyResourceFile);
-		System.out.println("theme properties dir="+themePropertiesDir);
-		
-		assertTrue(dummyResourceFile.exists());
-		assertNotNull(themePropertiesDir);
-		
-		Template template = new Template(themePropertiesDir, "theme1", "template1");
-		
-		TemplateEngine templateEngine = new InnerBaseTemplateEngine("themeThroughFileSystem.properties");
-		Map propertiesMap = templateEngine.getThemeProps(template);
-		
-		assertNotNull(propertiesMap);
-		assertTrue(propertiesMap.size() > 0);
-		
-	}
-	
-	public void testGetThemePropsThroughClasspath() throws Exception {
-		
-		Template template = new Template("org/apache/struts2/components/template", "theme1", "template2");
-		TemplateEngine templateEngine = new InnerBaseTemplateEngine("themeThroughClassPath.properties");
-		Map propertiesMap = templateEngine.getThemeProps(template);
-		
-		assertNotNull(propertiesMap);
-		assertTrue(propertiesMap.size() > 0);
-	}
-	
-	public class InnerBaseTemplateEngine extends BaseTemplateEngine {
-		
-		private String themePropertiesFileName;
-		
-		public InnerBaseTemplateEngine(String themePropertiesFileName) {
-			this.themePropertiesFileName = themePropertiesFileName;
-		}
-		
-		protected String getSuffix() {
-			return "ftl";
-		}
-
-		public void renderTemplate(TemplateRenderingContext templateContext) throws Exception {
-		}
-		
-		protected String getThemePropertiesFileName() {
-			return this.themePropertiesFileName;
-		}
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/config/SettingsTest.java b/trunk/core/src/test/java/org/apache/struts2/config/SettingsTest.java
deleted file mode 100644
index 7abc6bc..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/config/SettingsTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config;
-
-import java.util.Iterator;
-import java.util.Locale;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsTestCase;
-
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-
-
-/**
- * Unit test for {@link SettingsTest}.
- *
- */
-public class SettingsTest extends StrutsTestCase {
-
-    public void testSettings() {
-        assertEquals("get", Settings.get(StrutsConstants.STRUTS_URL_INCLUDEPARAMS));
-        assertEquals("12345", Settings.get(StrutsConstants.STRUTS_MULTIPART_MAXSIZE));
-        assertEquals("\temp", Settings.get(StrutsConstants.STRUTS_MULTIPART_SAVEDIR));
-
-        assertEquals("test,org/apache/struts2/othertest", Settings.get( StrutsConstants.STRUTS_CUSTOM_PROPERTIES));
-        assertEquals("testvalue", Settings.get("testkey"));
-        assertEquals("othertestvalue", Settings.get("othertestkey"));
-
-        Locale locale = Settings.getLocale();
-        assertEquals("de", locale.getLanguage());
-
-        int count = getKeyCount();
-        assertEquals(31, count);
-    }
-
-    public void testDefaultResourceBundlesLoaded() {
-        assertEquals("testmessages,testmessages2", Settings.get(StrutsConstants.STRUTS_CUSTOM_I18N_RESOURCES));
-        assertEquals("This is a test message", LocalizedTextUtil.findDefaultText("default.testmessage", Locale.getDefault()));
-        assertEquals("This is another test message", LocalizedTextUtil.findDefaultText("default.testmessage2", Locale.getDefault()));
-    }
-
-    public void testReplaceDefaultMessages() {
-        Locale.setDefault(Locale.US); // force to US locale as we also have _de and _da properties
-        
-        LocalizedTextUtil.clearDefaultResourceBundles();
-        LocalizedTextUtil.addDefaultResourceBundle("org/apache/struts2/struts-messages");
-        assertEquals("The form has already been processed or no token was supplied, please try again.", LocalizedTextUtil.findDefaultText("struts.messages.invalid.token", Locale.getDefault()));
-        Settings.reset();
-
-        assertEquals("testmessages,testmessages2", Settings.get(StrutsConstants.STRUTS_CUSTOM_I18N_RESOURCES));
-        assertEquals("Replaced message for token tag", LocalizedTextUtil.findDefaultText("struts.messages.invalid.token", Locale.getDefault()));
-    }
-
-    public void testSetSettings() {
-        Settings.setInstance(new TestSettings());
-        
-        String keyName = "a.long.property.key.name";
-        assertEquals(keyName, Settings.get(keyName));
-        assertEquals(2, getKeyCount());
-    }
-
-    private int getKeyCount() {
-        int count = 0;
-        Iterator keyNames = Settings.list();
-
-        while (keyNames.hasNext()) {
-        	keyNames.next();
-            count++;
-        }
-
-        return count;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/config/TestSettings.java b/trunk/core/src/test/java/org/apache/struts2/config/TestSettings.java
deleted file mode 100644
index fc97177..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/config/TestSettings.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-
-/**
- * TestSettings
- *
- */
-public class TestSettings extends Settings {
-
-    /**
-     * Get a named setting.
-     *
-     * @throws IllegalArgumentException if there is no settings parameter with the given name.
-     */
-    public String getImpl(String aName) throws IllegalArgumentException {
-        return aName;
-    }
-
-    /**
-     * List setting names
-     */
-    public Iterator listImpl() {
-        List testList = new ArrayList();
-        testList.add("123");
-        testList.add("testValue");
-
-        return testList.iterator();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
deleted file mode 100644
index 5e490b2..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.util.Locale;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.config.Settings;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-
-import com.opensymphony.xwork2.util.LocalizedTextUtil;
-
-/**
- * Test case for Dispatcher.
- * 
- */
-public class DispatcherTest extends StrutsTestCase {
-
-	public void testDefaultResurceBundlePropertyLoaded() throws Exception {
-        Locale.setDefault(Locale.US); // force to US locale as we also have _de and _da properties
-		
-		// some i18n messages from xwork-messages.properties
-		assertEquals(
-				LocalizedTextUtil.findDefaultText("xwork.error.action.execution", Locale.US), 
-				"Error during Action invocation");
-		
-		// some i18n messages from struts-messages.properties
-		assertEquals(
-				LocalizedTextUtil.findDefaultText("struts.messages.error.uploading", Locale.US, 
-						new Object[] { "some error messages" }), 
-				"Error uploading: some error messages");
-	}
-	
-	public void testPrepareSetEncodingProperly() throws Exception {
-		HttpServletRequest req = new MockHttpServletRequest();
-		HttpServletResponse res = new MockHttpServletResponse();
-		
-		Settings.set(StrutsConstants.STRUTS_I18N_ENCODING, "utf-8");
-		
-		
-		Dispatcher du = Dispatcher.getInstance();
-		du.prepare(req, res);
-		
-		assertEquals(req.getCharacterEncoding(), "utf-8");
-	}
-	
-	public void testPrepareSetEncodingPropertyWithMultipartRequest() throws Exception {
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		
-		req.setContentType("multipart/form-data");
-		Settings.set(StrutsConstants.STRUTS_I18N_ENCODING, "utf-8");
-		
-		
-		Dispatcher du = Dispatcher.getInstance();
-		du.prepare(req, res);
-		
-		assertEquals(req.getCharacterEncoding(), "utf-8");
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
deleted file mode 100644
index 06f536a..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.mapper.ActionMapper;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-import org.apache.struts2.util.ObjectFactoryDestroyable;
-import org.apache.struts2.util.ObjectFactoryInitializable;
-import org.apache.struts2.util.ObjectFactoryLifecycle;
-import org.springframework.mock.web.MockFilterConfig;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.mock.web.MockServletContext;
-
-import com.mockobjects.servlet.MockFilterChain;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
-
-/**
- * FilterDispatcher TestCase.
- *
- */
-public class FilterDispatcherTest extends StrutsTestCase {
-
-
-    public void testParsePackages() throws Exception {
-        FilterDispatcher filterDispatcher = new FilterDispatcher();
-        String[] result1 = filterDispatcher.parse("foo.bar.package1 foo.bar.package2 foo.bar.package3");
-        String[] result2 = filterDispatcher.parse("foo.bar.package1\tfoo.bar.package2\tfoo.bar.package3");
-        String[] result3 = filterDispatcher.parse("foo.bar.package1,foo.bar.package2,foo.bar.package3");
-        String[] result4 = filterDispatcher.parse("foo.bar.package1    foo.bar.package2  \t foo.bar.package3   , foo.bar.package4");
-
-        assertEquals(result1[0], "foo/bar/package1/");
-        assertEquals(result1[1], "foo/bar/package2/");
-        assertEquals(result1[2], "foo/bar/package3/");
-
-        assertEquals(result2[0], "foo/bar/package1/");
-        assertEquals(result2[1], "foo/bar/package2/");
-        assertEquals(result2[2], "foo/bar/package3/");
-
-        assertEquals(result3[0], "foo/bar/package1/");
-        assertEquals(result3[1], "foo/bar/package2/");
-        assertEquals(result3[2], "foo/bar/package3/");
-
-        assertEquals(result4[0], "foo/bar/package1/");
-        assertEquals(result4[1], "foo/bar/package2/");
-        assertEquals(result4[2], "foo/bar/package3/");
-        assertEquals(result4[3], "foo/bar/package4/");
-    }
-
-    public void testObjectFactoryDestroy() throws Exception {
-
-        FilterDispatcher filterDispatcher = new FilterDispatcher();
-        filterDispatcher.init(new MockFilterConfig((ServletContext) null));
-        InnerDestroyableObjectFactory destroyedObjectFactory = new InnerDestroyableObjectFactory();
-        ObjectFactory.setObjectFactory(destroyedObjectFactory);
-
-        assertFalse(destroyedObjectFactory.destroyed);
-        filterDispatcher.destroy();
-        assertTrue(destroyedObjectFactory.destroyed);
-    }
-
-
-    public void testObjectFactoryInitializable() throws Exception {
-
-        Map configMap = new HashMap();
-        configMap.put(StrutsConstants.STRUTS_OBJECTFACTORY, "org.apache.struts2.dispatcher.FilterDispatcherTest$InnerInitializableObjectFactory");
-        configMap.put(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD, "false");
-        Settings.setInstance(new InnerConfiguration(configMap));
-
-        MockServletContext servletContext = new MockServletContext();
-        MockFilterConfig filterConfig = new MockFilterConfig(servletContext);
-
-
-        FilterDispatcher filterDispatcher = new FilterDispatcher();
-        filterDispatcher.init(filterConfig);
-
-        assertTrue(ObjectFactory.getObjectFactory() instanceof InnerInitializableObjectFactory);
-        assertTrue(((InnerInitializableObjectFactory) ObjectFactory.getObjectFactory()).initializable);
-    }
-
-    public void testObjectFactoryLifecycle() throws Exception {
-
-        Map configMap = new HashMap();
-        configMap.put(StrutsConstants.STRUTS_OBJECTFACTORY, "org.apache.struts2.dispatcher.FilterDispatcherTest$InnerInitailizableDestroyableObjectFactory");
-        configMap.put(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD, "false");
-        Settings.setInstance(new InnerConfiguration(configMap));
-
-        MockServletContext servletContext = new MockServletContext();
-        MockFilterConfig filterConfig = new MockFilterConfig(servletContext);
-
-
-        FilterDispatcher filterDispatcher = new FilterDispatcher();
-        filterDispatcher.init(filterConfig);
-
-        assertTrue(ObjectFactory.getObjectFactory() instanceof InnerInitailizableDestroyableObjectFactory);
-        assertTrue(((InnerInitailizableDestroyableObjectFactory) ObjectFactory.getObjectFactory()).initializable);
-
-        assertFalse(((InnerInitailizableDestroyableObjectFactory) ObjectFactory.getObjectFactory()).destroyable);
-        filterDispatcher.destroy();
-        assertTrue(((InnerInitailizableDestroyableObjectFactory) ObjectFactory.getObjectFactory()).destroyable);
-    }
-    
-    public void testIfActionMapperIsNullDontServiceAction() throws Exception {
-    	try {
-    		MockServletContext servletContext = new MockServletContext();
-    		MockFilterConfig filterConfig = new MockFilterConfig(servletContext);
-    		MockHttpServletRequest req = new MockHttpServletRequest(servletContext);
-    		MockHttpServletResponse res = new MockHttpServletResponse();
-    		MockFilterChain chain = new MockFilterChain();
-    		final NoOpDispatcher dispatcher = new NoOpDispatcher(servletContext);
-    		Dispatcher.setInstance(null);
-
-    		ConfigurationManager confManager = new ConfigurationManager();
-    		confManager.setConfiguration(new DefaultConfiguration());
-    		dispatcher.setConfigurationManager(confManager);
-    		
-    		
-    		ObjectFactory.setObjectFactory(new InnerObjectFactory());
-    		
-    		Map settings = new HashMap();
-    		settings.put(StrutsConstants.STRUTS_MAPPER_CLASS, "org.apache.struts2.dispatcher.FilterDispatcherTest$NullActionMapper");
-    		Settings.setInstance(new InnerConfiguration(settings));
-    	
-    		FilterDispatcher filter = new FilterDispatcher() {
-    			protected Dispatcher createDispatcher() {
-    				return dispatcher;
-    			}
-    		};
-    		filter.init(filterConfig);
-    		filter.doFilter(req, res, chain);
-    	
-    		assertFalse(dispatcher.serviceRequest);
-    	}
-    	finally {
-    		Settings.reset();
-    	}
-    }
-    
-    public void testCharacterEncodingSetBeforeRequestWrappingAndActionService() throws Exception { 
-    	try {
-    		MockServletContext servletContext = new MockServletContext();
-    		MockFilterConfig filterConfig = new MockFilterConfig(servletContext);
-    		MockHttpServletRequest req = new MockHttpServletRequest(servletContext);
-    		MockHttpServletResponse res = new MockHttpServletResponse();
-    		MockFilterChain chain = new MockFilterChain();
-    		final InnerDispatcher dispatcher = new InnerDispatcher(servletContext);
-    		Dispatcher.setInstance(null);
-
-    		ConfigurationManager confManager = new ConfigurationManager();
-    		confManager.setConfiguration(new DefaultConfiguration());
-    		dispatcher.setConfigurationManager(confManager);
-    		
-    		
-    		ObjectFactory.setObjectFactory(new InnerObjectFactory());
-    		
-    		Map settings = new HashMap();
-    		settings.put(StrutsConstants.STRUTS_I18N_ENCODING, "UTF-16_DUMMY");
-    		settings.put(StrutsConstants.STRUTS_MAPPER_CLASS, "org.apache.struts2.dispatcher.FilterDispatcherTest$InnerActionMapper");
-    		Settings.setInstance(new InnerConfiguration(settings));
-    	
-    		FilterDispatcher filter = new FilterDispatcher() {
-    			protected Dispatcher createDispatcher() {
-    				return dispatcher;
-    			}
-    		};
-    		filter.init(filterConfig);
-    		filter.doFilter(req, res, chain);
-    	
-    		assertTrue(dispatcher.wrappedRequest);
-    		assertTrue(dispatcher.serviceRequest);
-    	}
-    	finally {
-    		Settings.reset();
-    	}
-    }
-
-
-    // === inner class ========
-    public static class InnerObjectFactory extends ObjectFactory {
-    	
-    }
-    
-    public static class NoOpDispatcher extends Dispatcher {
-    	protected boolean wrappedRequest = false;
-    	protected boolean serviceRequest = false;
-
-		public NoOpDispatcher(ServletContext servletContext) {
-			super(servletContext);
-		}
-
-		public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
-			wrappedRequest = true;
-			return request;
-		}
-		
-		public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException {
-			serviceRequest = true;
-		}
-    }
-    
-    public static class InnerDispatcher extends Dispatcher {
-    	
-    	protected boolean wrappedRequest = false;
-    	protected boolean serviceRequest = false;
-
-		public InnerDispatcher(ServletContext servletContext) {
-			super(servletContext);
-		}
-
-		public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
-			wrappedRequest = true;
-			// if we set the chracter encoding AFTER we do wrap request, we will get
-			// a failing test
-			assertNotNull(request.getCharacterEncoding());
-			assertEquals(request.getCharacterEncoding(), "UTF-16_DUMMY");
-			
-			return request;
-		}
-		
-		public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException {
-			serviceRequest = true;
-			// if we set the chracter encoding AFTER we do wrap request, we will get
-			// a failing test
-			assertNotNull(request.getCharacterEncoding());
-			assertEquals(request.getCharacterEncoding(), "UTF-16_DUMMY");
-		}
-    }
-    
-    public static class InnerActionMapper implements ActionMapper {
-
-		public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager config) {
-			return new ActionMapping();
-		}
-
-		public String getUriFromActionMapping(ActionMapping mapping) {
-			return null;
-		}
-    }
-    
-    public static class NullActionMapper implements ActionMapper {
-    	public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager config) {
-			return null;
-		}
-
-		public String getUriFromActionMapping(ActionMapping mapping) {
-			return null;
-		}
-    }
-    
-    
-    public static class InnerConfiguration extends Settings {
-        Map<String,String> m;
-
-        public InnerConfiguration(Map configMap) {
-            m = configMap;
-        }
-
-        public boolean isSetImpl(String name) {
-            if (!m.containsKey(name))
-                return super.isSetImpl(name);
-            else
-                return true;
-        }
-
-        public String getImpl(String aName) throws IllegalArgumentException {
-            if (!m.containsKey(aName))
-                return super.getImpl(aName);
-            else
-                return m.get(aName);
-        }
-    }
-
-    public static class InnerDestroyableObjectFactory extends ObjectFactory implements ObjectFactoryDestroyable {
-        public boolean destroyed = false;
-
-        public void destroy() {
-            destroyed = true;
-        }
-    }
-
-    public static class InnerInitializableObjectFactory extends ObjectFactory implements ObjectFactoryInitializable {
-        public boolean initializable = false;
-
-        public void init(ServletContext servletContext) {
-            initializable = true;
-        }
-    }
-
-    public static class InnerInitailizableDestroyableObjectFactory extends ObjectFactory implements ObjectFactoryLifecycle {
-        public boolean initializable = false;
-        public boolean destroyable = false;
-
-        public void init(ServletContext servletContext) {
-            initializable = true;
-        }
-
-        public void destroy() {
-            destroyable = true;
-        }
-    }
-
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java
deleted file mode 100644
index 098e598..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-
-import com.mockobjects.dynamic.C;
-import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.util.OgnlUtil;
-
-
-/**
- * HttpHeaderResultTest
- *
- */
-public class HttpHeaderResultTest extends StrutsTestCase {
-
-    ActionInvocation invocation;
-    HttpHeaderResult result;
-    HttpServletResponse response;
-    Mock responseMock;
-
-
-    public void testHeaderValuesAreNotParsedWhenParseIsFalse() throws Exception {
-        Map params = new HashMap();
-        params.put("headers.foo", "${bar}");
-        params.put("headers.baz", "baz");
-
-        Map values = new HashMap();
-        values.put("bar", "abc");
-        ActionContext.getContext().getValueStack().push(values);
-
-        OgnlUtil.setProperties(params, result);
-
-        responseMock.expect("addHeader", C.args(C.eq("foo"), C.eq("${bar}")));
-        responseMock.expect("addHeader", C.args(C.eq("baz"), C.eq("baz")));
-        result.setParse(false);
-        result.execute(invocation);
-        responseMock.verify();
-    }
-
-    public void testHeaderValuesAreParsedAndSet() throws Exception {
-        Map params = new HashMap();
-        params.put("headers.foo", "${bar}");
-        params.put("headers.baz", "baz");
-
-        Map values = new HashMap();
-        values.put("bar", "abc");
-        ActionContext.getContext().getValueStack().push(values);
-
-        OgnlUtil.setProperties(params, result);
-
-        responseMock.expect("addHeader", C.args(C.eq("foo"), C.eq("abc")));
-        responseMock.expect("addHeader", C.args(C.eq("baz"), C.eq("baz")));
-        result.execute(invocation);
-        responseMock.verify();
-    }
-
-    public void testStatusIsSet() throws Exception {
-        responseMock.expect("setStatus", C.eq(123));
-        result.setStatus(123);
-        result.execute(invocation);
-        responseMock.verify();
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        result = new HttpHeaderResult();
-        responseMock = new Mock(HttpServletResponse.class);
-        response = (HttpServletResponse) responseMock.proxy();
-        invocation = (ActionInvocation) new Mock(ActionInvocation.class).proxy();
-        ServletActionContext.setResponse(response);
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        ServletActionContext.setResponse(null);
-        ActionContext.setContext(null);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java
deleted file mode 100644
index bbdf620..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts2.dispatcher.mapper.ActionMapper;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-
-import com.opensymphony.xwork2.config.ConfigurationManager;
-
-
-/**
- * ActionMapper for testing FilterDispatcher (used in FilterDispaatcherTest)
- */
-public class NullActionMapper implements ActionMapper {
-
-		private static ActionMapping _actionMapping;
-	
-		public NullActionMapper() {}
-		
-		public static void setActionMapping(ActionMapping actionMappingToBeRetrned) {
-			_actionMapping = actionMappingToBeRetrned;
-		}
-		
-		public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager config) {
-			return _actionMapping;
-		}
-
-		public String getUriFromActionMapping(ActionMapping mapping) {
-			throw new UnsupportedOperationException("operation not supported");
-		}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/PlainTextResultTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/PlainTextResultTest.java
deleted file mode 100644
index 70be164..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/PlainTextResultTest.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import junit.framework.TestCase;
-
-import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-import org.apache.struts2.views.jsp.StrutsMockHttpServletResponse;
-import org.apache.struts2.views.jsp.StrutsMockServletContext;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.mock.MockActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * Test case for PlainTextResult.
- * 
- */
-public class PlainTextResultTest extends TestCase {
-	
-	ValueStack stack;
-	MockActionInvocation invocation;
-	ActionContext context;
-	StrutsMockHttpServletResponse response;
-	PrintWriter writer;
-	StringWriter stringWriter;
-	StrutsMockServletContext servletContext;
-	
-
-	public void testPlainText() throws Exception {
-		PlainTextResult result = new PlainTextResult();
-		result.setLocation("/someJspFile.jsp");
-		
-		response.setExpectedContentType("text/plain");
-		response.setExpectedHeader("Content-Disposition", "inline");
-		InputStream jspResourceInputStream = 
-			ClassLoaderUtil.getResourceAsStream(
-				"org/apache/struts2/dispatcher/someJspFile.jsp",
-				PlainTextResultTest.class);
-		
-		
-		try {
-			servletContext.setResourceAsStream(jspResourceInputStream);
-			result.execute(invocation);
-			
-			String r = AbstractUITagTest.normalize(stringWriter.getBuffer().toString(), true);
-			String e = AbstractUITagTest.normalize(
-					readAsString("org/apache/struts2/dispatcher/someJspFile.jsp"), true);
-			assertEquals(r, e);
-		}
-		finally {
-			jspResourceInputStream.close();
-		}
-	}
-	
-	public void testPlainTextWithEncoding() throws Exception {
-		PlainTextResult result = new PlainTextResult();
-		result.setLocation("/someJspFile.jsp");
-		result.setCharSet("UTF-8");
-		
-		response.setExpectedContentType("text/plain; charset=UTF-8");
-		response.setExpectedHeader("Content-Disposition", "inline");
-		InputStream jspResourceInputStream = 
-			ClassLoaderUtil.getResourceAsStream(
-				"org/apache/struts2/dispatcher/someJspFile.jsp",
-				PlainTextResultTest.class);
-		
-		
-		try {
-			servletContext.setResourceAsStream(jspResourceInputStream);
-			result.execute(invocation);
-			
-			String r = AbstractUITagTest.normalize(stringWriter.getBuffer().toString(), true);
-			String e = AbstractUITagTest.normalize(
-					readAsString("org/apache/struts2/dispatcher/someJspFile.jsp"), true);
-			assertEquals(r, e);
-		}
-		finally {
-			jspResourceInputStream.close();
-		}
-	}
-	
-	protected String readAsString(String resource) throws Exception {
-		InputStream is = null;
-		try {
-			is = ClassLoaderUtil.getResourceAsStream(resource, PlainTextResultTest.class);
-			int sizeRead = 0;
-			byte[] buffer = new byte[1024];
-			StringBuffer stringBuffer = new StringBuffer();
-			while((sizeRead = is.read(buffer)) != -1) {
-				stringBuffer.append(new String(buffer, 0, sizeRead));
-			}
-			return stringBuffer.toString();
-		}
-		finally {
-			if (is != null) 
-				is.close();
-		}
-	
-	}
-	
-	
-	protected void setUp() throws Exception {
-		super.setUp();
-		
-		stringWriter = new StringWriter();
-		writer = new PrintWriter(stringWriter);
-		response = new StrutsMockHttpServletResponse();
-		response.setWriter(writer);
-		servletContext = new StrutsMockServletContext();
-		stack = ValueStackFactory.getFactory().createValueStack();
-		context = new ActionContext(stack.getContext());
-		context.put(StrutsStatics.HTTP_RESPONSE, response);
-		context.put(StrutsStatics.SERVLET_CONTEXT, servletContext);
-		invocation = new MockActionInvocation();
-		invocation.setStack(stack);
-		invocation.setInvocationContext(context);
-	}
-	
-	
-	protected void tearDown() throws Exception {
-		stack = null;
-		invocation = null;
-		context = null;
-		response = null;
-		writer = null;
-		stringWriter = null;
-		servletContext = null;
-		
-		super.tearDown();
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletActionRedirectResultTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletActionRedirectResultTest.java
deleted file mode 100644
index 9db513f..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletActionRedirectResultTest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-import org.easymock.EasyMock;
-import org.easymock.IMocksControl;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.util.ValueStack;
-
-
-/**
- * @version $Date$ $Id$
- */
-public class ServletActionRedirectResultTest extends StrutsTestCase {
-	
-	public void testIncludeParameterInResultWithConditionParseOn() throws Exception {
-		
-		ResultConfig resultConfig = new ResultConfig();
-		resultConfig.addParam("actionName", "someActionName");
-		resultConfig.addParam("namespace", "someNamespace");
-		resultConfig.addParam("encode", "true");
-		resultConfig.addParam("parse", "true");
-		resultConfig.addParam("location", "someLocation");
-		resultConfig.addParam("prependServletContext", "true");
-		resultConfig.addParam("method", "someMethod");
-		resultConfig.addParam("param1", "${#value1}");
-		resultConfig.addParam("param2", "${#value2}");
-		resultConfig.addParam("param3", "${#value3}");
-		
-		
-		
-		ActionContext context = ActionContext.getContext();
-		ValueStack stack = context.getValueStack();
-		context.getContextMap().put("value1", "value 1");
-		context.getContextMap().put("value2", "value 2");
-		context.getContextMap().put("value3", "value 3");
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		context.put(ServletActionContext.HTTP_REQUEST, req);
-		context.put(ServletActionContext.HTTP_RESPONSE, res);
-		
-		
-		Map<String, ResultConfig> results=  new HashMap<String, ResultConfig>();
-		results.put("myResult", resultConfig);
-		
-		ActionConfig actionConfig = new ActionConfig();
-		actionConfig.setResults(results);
-		
-		ServletActionRedirectResult result = new ServletActionRedirectResult();
-		result.setActionName("myAction");
-		result.setNamespace("/myNamespace");
-		result.setParse(true);
-		result.setEncode(false);
-		result.setPrependServletContext(false);
-		
-		IMocksControl control = EasyMock.createControl();
-		ActionProxy mockActionProxy = control.createMock(ActionProxy.class);
-		ActionInvocation mockInvocation = control.createMock(ActionInvocation.class);
-		mockInvocation.getProxy();
-		control.andReturn(mockActionProxy);
-		mockInvocation.getResultCode();
-		control.andReturn("myResult");
-		mockActionProxy.getConfig();
-		control.andReturn(actionConfig);
-		mockInvocation.getInvocationContext();
-		control.andReturn(context);
-		mockInvocation.getStack();
-		control.andReturn(stack);
-		control.anyTimes();
-		
-		control.replay();
-		
-		result.execute(mockInvocation);
-		assertEquals("/myNamespace/myAction.action?param2=value+2&param1=value+1&param3=value+3", res.getRedirectedUrl());
-		
-		control.verify();
-	}
-	
-	public void testIncludeParameterInResult() throws Exception {
-		
-		ResultConfig resultConfig = new ResultConfig();
-		resultConfig.addParam("actionName", "someActionName");
-		resultConfig.addParam("namespace", "someNamespace");
-		resultConfig.addParam("encode", "true");
-		resultConfig.addParam("parse", "true");
-		resultConfig.addParam("location", "someLocation");
-		resultConfig.addParam("prependServletContext", "true");
-		resultConfig.addParam("method", "someMethod");
-		resultConfig.addParam("param1", "value 1");
-		resultConfig.addParam("param2", "value 2");
-		resultConfig.addParam("param3", "value 3");
-		
-		ActionContext context = ActionContext.getContext();
-		MockHttpServletRequest req = new MockHttpServletRequest();
-		MockHttpServletResponse res = new MockHttpServletResponse();
-		context.put(ServletActionContext.HTTP_REQUEST, req);
-		context.put(ServletActionContext.HTTP_RESPONSE, res);
-		
-		
-		Map<String, ResultConfig> results=  new HashMap<String, ResultConfig>();
-		results.put("myResult", resultConfig);
-		
-		ActionConfig actionConfig = new ActionConfig();
-		actionConfig.setResults(results);
-		
-		ServletActionRedirectResult result = new ServletActionRedirectResult();
-		result.setActionName("myAction");
-		result.setNamespace("/myNamespace");
-		result.setParse(false);
-		result.setEncode(false);
-		result.setPrependServletContext(false);
-		
-		IMocksControl control = EasyMock.createControl();
-		ActionProxy mockActionProxy = control.createMock(ActionProxy.class);
-		ActionInvocation mockInvocation = control.createMock(ActionInvocation.class);
-		mockInvocation.getProxy();
-		control.andReturn(mockActionProxy);
-		mockInvocation.getResultCode();
-		control.andReturn("myResult");
-		mockActionProxy.getConfig();
-		control.andReturn(actionConfig);
-		mockInvocation.getInvocationContext();
-		control.andReturn(context);
-		
-		control.replay();
-		
-		result.execute(mockInvocation);
-		assertEquals("/myNamespace/myAction.action?param2=value+2&param1=value+1&param3=value+3", res.getRedirectedUrl());
-		
-		control.verify();
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatchedTestAssertInterceptor.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatchedTestAssertInterceptor.java
deleted file mode 100644
index e5aa351..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatchedTestAssertInterceptor.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import junit.framework.Assert;
-
-import org.apache.struts2.TestAction;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-
-
-/**
- */
-public class ServletDispatchedTestAssertInterceptor implements Interceptor {
-	
-	private static final long serialVersionUID = 1980347231443329805L;
-
-	public ServletDispatchedTestAssertInterceptor() {
-        super();
-    }
-
-    public void destroy() {
-    }
-
-    public void init() {
-    }
-
-    public String intercept(ActionInvocation invocation) throws Exception {
-        Assert.assertTrue(invocation.getAction() instanceof TestAction);
-
-        TestAction testAction = (TestAction) invocation.getAction();
-
-        Assert.assertEquals("bar", testAction.getFoo());
-
-        String result = invocation.invoke();
-
-        return result;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatcherResultTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatcherResultTest.java
deleted file mode 100644
index 8e4f59b..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatcherResultTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import ognl.Ognl;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.StrutsTestCase;
-
-import com.mockobjects.dynamic.C;
-import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.ActionContext;
-
-
-/**
- *
- */
-public class ServletDispatcherResultTest extends StrutsTestCase implements StrutsStatics {
-
-    public void testInclude() {
-        ServletDispatcherResult view = new ServletDispatcherResult();
-        view.setLocation("foo.jsp");
-
-        Mock dispatcherMock = new Mock(RequestDispatcher.class);
-        dispatcherMock.expect("include", C.ANY_ARGS);
-
-        Mock requestMock = new Mock(HttpServletRequest.class);
-        requestMock.expectAndReturn("getRequestDispatcher", C.args(C.eq("foo.jsp")), dispatcherMock.proxy());
-
-        Mock responseMock = new Mock(HttpServletResponse.class);
-        responseMock.expectAndReturn("isCommitted", Boolean.TRUE);
-
-        ActionContext ac = new ActionContext(Ognl.createDefaultContext(null));
-        ActionContext.setContext(ac);
-        ServletActionContext.setRequest((HttpServletRequest) requestMock.proxy());
-        ServletActionContext.setResponse((HttpServletResponse) responseMock.proxy());
-
-        try {
-            view.execute(null);
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        dispatcherMock.verify();
-        requestMock.verify();
-        dispatcherMock.verify();
-    }
-
-    public void testSimple() {
-        ServletDispatcherResult view = new ServletDispatcherResult();
-        view.setLocation("foo.jsp");
-
-        Mock dispatcherMock = new Mock(RequestDispatcher.class);
-        dispatcherMock.expect("forward", C.ANY_ARGS);
-
-        Mock requestMock = new Mock(HttpServletRequest.class);
-        requestMock.expectAndReturn("getAttribute", "javax.servlet.include.servlet_path", null);
-        requestMock.expectAndReturn("getRequestDispatcher", C.args(C.eq("foo.jsp")), dispatcherMock.proxy());
-        requestMock.expect("setAttribute", C.ANY_ARGS); // this is a bad mock, but it works
-        requestMock.expect("setAttribute", C.ANY_ARGS); // this is a bad mock, but it works
-        requestMock.matchAndReturn("getRequestURI", "foo.jsp");
-
-        Mock responseMock = new Mock(HttpServletResponse.class);
-        responseMock.expectAndReturn("isCommitted", Boolean.FALSE);
-
-        ActionContext ac = new ActionContext(Ognl.createDefaultContext(null));
-        ActionContext.setContext(ac);
-        ServletActionContext.setRequest((HttpServletRequest) requestMock.proxy());
-        ServletActionContext.setResponse((HttpServletResponse) responseMock.proxy());
-
-        try {
-            view.execute(null);
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        dispatcherMock.verify();
-        requestMock.verify();
-        dispatcherMock.verify();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java
deleted file mode 100644
index a9f9c76..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.util.HashMap;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import ognl.Ognl;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.config.StrutsXmlConfigurationProvider;
-import org.springframework.mock.web.MockServletContext;
-
-import com.mockobjects.dynamic.C;
-import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.mock.MockActionInvocation;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- */
-public class ServletRedirectResultTest extends StrutsTestCase implements StrutsStatics {
-
-    protected ServletRedirectResult view;
-    private Mock requestMock;
-    private Mock responseMock;
-    protected ActionInvocation ai;
-
-
-    public void testAbsoluteRedirect() {
-        view.setLocation("/bar/foo.jsp");
-        responseMock.expectAndReturn("encodeRedirectURL", "/context/bar/foo.jsp", "/context/bar/foo.jsp");
-        responseMock.expect("sendRedirect", C.args(C.eq("/context/bar/foo.jsp")));
-
-        try {
-            view.execute(ai);
-            requestMock.verify();
-            responseMock.verify();
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    public void testPrependServletContextFalse() {
-        view.setLocation("/bar/foo.jsp");
-        view.setPrependServletContext(false);
-        responseMock.expectAndReturn("encodeRedirectURL", "/bar/foo.jsp", "/bar/foo.jsp");
-        responseMock.expect("sendRedirect", C.args(C.eq("/bar/foo.jsp")));
-
-        try {
-            view.execute(ai);
-            requestMock.verify();
-            responseMock.verify();
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    public void testRelativeRedirect() throws Exception {
-        view.setLocation("foo.jsp");
-        requestMock.expectAndReturn("getParameterMap", new HashMap());
-        requestMock.expectAndReturn("getServletPath", "/namespace/some.action");
-        requestMock.expectAndReturn("getAttribute", C.ANY_ARGS, null);
-        responseMock.expectAndReturn("encodeRedirectURL", "/context/namespace/foo.jsp", "/context/namespace/foo.jsp");
-        responseMock.expect("sendRedirect", C.args(C.eq("/context/namespace/foo.jsp")));
-
-        view.execute(ai);
-
-        requestMock.verify();
-        responseMock.verify();
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        Dispatcher du = new Dispatcher(new MockServletContext());
-        Dispatcher.setInstance(du);
-        ConfigurationManager cm = new ConfigurationManager();
-        cm.addConfigurationProvider(new StrutsXmlConfigurationProvider("struts.xml", false));
-        du.setConfigurationManager(cm);
-        du.getConfigurationManager().getConfiguration().
-            addPackageConfig("foo", new PackageConfig("foo", "/namespace", false, null));
-        
-
-        view = new ServletRedirectResult();
-
-        responseMock = new Mock(HttpServletResponse.class);
-
-        requestMock = new Mock(HttpServletRequest.class);
-        requestMock.matchAndReturn("getContextPath", "/context");
-
-        ActionContext ac = new ActionContext(Ognl.createDefaultContext(null));
-        ac.put(ServletActionContext.HTTP_REQUEST, requestMock.proxy());
-        ac.put(ServletActionContext.HTTP_RESPONSE, responseMock.proxy());
-        MockActionInvocation ai = new MockActionInvocation();
-        ai.setInvocationContext(ac);
-        this.ai = ai;
-        ai.setStack(ValueStackFactory.getFactory().createValueStack());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java
deleted file mode 100644
index e32c0c6..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import junit.framework.TestCase;
-
-import com.mockobjects.constraint.Constraint;
-import com.mockobjects.constraint.IsAnything;
-import com.mockobjects.constraint.IsEqual;
-import com.mockobjects.dynamic.Mock;
-
-
-/**
- */
-public class SessionMapTest extends TestCase {
-
-    private Mock requestMock;
-    private Mock sessionMock;
-
-
-    public void testClearInvalidatesTheSession() throws Exception {
-    	List<String> attributeNames = new ArrayList<String>();
-    	attributeNames.add("test");
-    	attributeNames.add("anotherTest");
-    	Enumeration attributeNamesEnum = Collections.enumeration(attributeNames);
-    	
-        MockSessionMap sessionMap = new MockSessionMap((HttpServletRequest) requestMock.proxy());
-        sessionMock.expect("setAttribute", 
-        		new Constraint[] {
-        			new IsEqual("test"), new IsEqual("test value")
-        		});
-        sessionMock.expect("setAttribute", 
-        		new Constraint[] {
-        			new IsEqual("anotherTest"), new IsEqual("another test value")
-        		});
-        sessionMock.expectAndReturn("getAttributeNames", attributeNamesEnum);
-        sessionMock.expect("removeAttribute", 
-        		new Constraint[]{
-        			new IsEqual("test")
-        		});
-        sessionMock.expect("removeAttribute", 
-        		new Constraint[]{
-        			new IsEqual("anotherTest")
-        		});
-        sessionMap.put("test", "test value");
-        sessionMap.put("anotherTest", "another test value");
-        sessionMap.clear();
-        assertNull(sessionMap.get("test"));
-        assertNull(sessionMap.get("anotherTest"));
-        sessionMock.verify();
-    }
-
-    public void testGetOnSessionMapUsesWrappedSessionsGetAttribute() throws Exception {
-        Object value = new Object();
-        sessionMock.expectAndReturn("getAttribute", new Constraint[]{
-                new IsEqual("KEY")
-        }, value);
-
-        SessionMap sessionMap = new SessionMap((HttpServletRequest) requestMock.proxy());
-        assertEquals("Expected the get using KEY to return the value object setup in the mockSession", value, sessionMap.get("KEY"));
-        sessionMock.verify();
-    }
-
-    public void testPutOnSessionMapUsesWrappedSessionsSetsAttribute() throws Exception {
-        Object value = new Object();
-        sessionMock.expect("getAttribute", new Constraint[]{new IsAnything()});
-        sessionMock.expect("setAttribute", new Constraint[]{
-                new IsEqual("KEY"), new IsEqual(value)
-        });
-
-        SessionMap sessionMap = new SessionMap((HttpServletRequest) requestMock.proxy());
-        sessionMap.put("KEY", value);
-        sessionMock.verify();
-    }
-
-    public void testPuttingObjectInMapReturnsNullForPreviouslyUnusedKey() throws Exception {
-        Object value = new Object();
-        sessionMock.expectAndReturn("getAttribute", new Constraint[]{
-                new IsEqual("KEY")
-        }, null);
-        sessionMock.expect("setAttribute", new Constraint[]{
-                new IsEqual("KEY"), new IsEqual(value)
-        });
-
-        SessionMap sessionMap = new SessionMap((HttpServletRequest) requestMock.proxy());
-        assertNull("should be null, as the contract for Map says that put returns the previous value in the map for the key", sessionMap.put("KEY", value));
-        sessionMock.verify();
-    }
-
-    public void testPuttingObjectInMapReturnsPreviousValueForKey() throws Exception {
-        Object originalValue = new Object();
-        Object value = new Object();
-        sessionMock.expectAndReturn("getAttribute", new Constraint[]{
-                new IsEqual("KEY")
-        }, null);
-        sessionMock.expect("setAttribute", new Constraint[]{
-                new IsEqual("KEY"), new IsEqual(originalValue)
-        });
-        sessionMock.expectAndReturn("getAttribute", new Constraint[]{
-                new IsEqual("KEY")
-        }, originalValue);
-        sessionMock.expect("setAttribute", new Constraint[]{
-                new IsEqual("KEY"), new IsEqual(value)
-        });
-
-        SessionMap sessionMap = new SessionMap((HttpServletRequest) requestMock.proxy());
-        sessionMap.put("KEY", originalValue);
-        assertEquals("should be the OriginalValue, as the contract for Map says that put returns the previous value in the map for the key", originalValue, sessionMap.put("KEY", value));
-        sessionMock.verify();
-    }
-
-    public void testRemovePassThroughCallToRemoveAttribute() throws Exception {
-        Object value = new Object();
-        sessionMock.expectAndReturn("getAttribute", new Constraint[]{
-                new IsEqual("KEY")
-        }, value);
-        sessionMock.expect("removeAttribute", new Constraint[]{
-                new IsEqual("KEY")
-        });
-
-        SessionMap sessionMap = new SessionMap((HttpServletRequest) requestMock.proxy());
-        assertEquals(value, sessionMap.remove("KEY"));
-        sessionMock.verify();
-    }
-
-    protected void setUp() throws Exception {
-        sessionMock = new Mock(HttpSession.class);
-        requestMock = new Mock(HttpServletRequest.class);
-        requestMock.matchAndReturn("getSession", new Constraint[]{new IsEqual(Boolean.FALSE)}, sessionMock.proxy());
-    }
-
-
-    /**
-     * class that extends session map, making the values available in a local map -- useful
-     * for confirming put and get calls in the superclass. ie useful for testing that the get is done before
-     * putting new data into the map.
-     */
-    private class MockSessionMap extends SessionMap {
-    	
-		private static final long serialVersionUID = 8783604360786273764L;
-		
-		private Map map = new HashMap();
-
-        public MockSessionMap(HttpServletRequest request) {
-            super(request);
-        }
-
-        public Object get(Object key) {
-            return map.get(key);
-        }
-
-        public Object put(Object key, Object value) {
-            Object originalValue = super.put(key, value);
-            map.put(key, value); //put the value into our map after putting it in the superclass map to avoid polluting the get call.
-
-            return originalValue;
-        }
-        
-        public void clear() {
-        	super.clear();
-        	map.clear();
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/StreamResultTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/StreamResultTest.java
deleted file mode 100644
index 66475ac..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/StreamResultTest.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URL;
-
-import junit.framework.TestCase;
-
-import org.apache.struts2.ServletActionContext;
-import org.springframework.mock.web.MockHttpServletResponse;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.mock.MockActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * Unit test for {@link StreamResult}.
- *
- */
-public class StreamResultTest extends TestCase {
-
-    private StreamResult result;
-    private MockHttpServletResponse response;
-
-    private MockActionInvocation mai;
-    private ValueStack stack;
-    private int contentLength = 0;
-
-    public void testStreamResultNoInputName() throws Exception {
-        result.setParse(false);
-        result.setInputName(null);
-
-        try {
-            result.doExecute("helloworld", mai);
-            fail("Should have thrown an IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            // success
-        }
-    }
-
-    public void testStreamResultParseNoInputName() throws Exception {
-        result.setParse(true);
-        result.setInputName("${top}");
-
-        try {
-            result.doExecute("helloworld", mai);
-            fail("Should have thrown an IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            // success
-        }
-    }
-
-    public void testStreamResultDefault() throws Exception {
-        result.setInputName("streamForImage");
-
-        result.doExecute("helloworld", mai);
-
-        assertEquals(null, result.getContentLength());
-        assertEquals("text/plain", result.getContentType());
-        assertEquals("streamForImage", result.getInputName());
-        assertEquals(1024, result.getBufferSize()); // 1024 is default
-        assertEquals("inline", result.getContentDisposition());
-
-        assertEquals("text/plain", response.getContentType());
-        assertEquals(0, response.getContentLength());
-        assertEquals("inline", response.getHeader("Content-disposition"));
-    }
-
-    public void testStreamResultNoDefault() throws Exception {
-        // it's not easy to test using easymock as we use getOutputStream on HttpServletResponse.
-        result.setParse(false);
-        result.setInputName("streamForImage");
-        result.setBufferSize(128);
-        result.setContentLength(String.valueOf(contentLength));
-        result.setContentDisposition("filename=\"logo.png\"");
-        result.setContentType("image/jpeg");
-
-        result.doExecute("helloworld", mai);
-
-        assertEquals(String.valueOf(contentLength), result.getContentLength());
-        assertEquals("image/jpeg", result.getContentType());
-        assertEquals("streamForImage", result.getInputName());
-        assertEquals(128, result.getBufferSize());
-        assertEquals("filename=\"logo.png\"", result.getContentDisposition());
-
-        assertEquals("image/jpeg", response.getContentType());
-        assertEquals(contentLength, response.getContentLength());
-        assertEquals("filename=\"logo.png\"", response.getHeader("Content-disposition"));
-    }
-
-    public void testStreamResultParse1() throws Exception {
-    	///////////////////
-        result.setParse(true);
-        // ${...} conditionalParse of Result, returns String, 
-        // which gets evaluated to the stack, that's how it works.
-        // We use ${streamForImageAsString} that returns "streamForImage"
-        // which is a property that returns an InputStream object.
-        result.setInputName("${streamForImageAsString}");
-        result.setBufferSize(128);
-        result.setContentLength(String.valueOf(contentLength));
-        result.setContentDisposition("filename=\"logo.png\"");
-        result.setContentType("image/jpeg");
-
-        result.doExecute("helloworld", mai);
-
-        assertEquals(String.valueOf(contentLength), result.getContentLength());
-        assertEquals("image/jpeg", result.getContentType());
-        assertEquals("${streamForImageAsString}", result.getInputName());
-        assertEquals(128, result.getBufferSize());
-        assertEquals("filename=\"logo.png\"", result.getContentDisposition());
-
-        assertEquals("image/jpeg", response.getContentType());
-        assertEquals(contentLength, response.getContentLength());
-        assertEquals("filename=\"logo.png\"", response.getHeader("Content-disposition"));
-    }
-    
-    public void testStreamResultParse2() throws Exception {
-    	///////////////////
-        result.setParse(true);
-        // This time we dun use ${...}, so streamForImage will
-        // be evaluated to the stack, which should reaturn an
-        // InputStream object, cause there's such a property in 
-        // the action object itself.
-        result.setInputName("streamForImage");
-        result.setBufferSize(128);
-        result.setContentLength(String.valueOf(contentLength));
-        result.setContentDisposition("filename=\"logo.png\"");
-        result.setContentType("image/jpeg");
-
-        result.doExecute("helloworld", mai);
-
-        assertEquals(String.valueOf(contentLength), result.getContentLength());
-        assertEquals("image/jpeg", result.getContentType());
-        assertEquals("streamForImage", result.getInputName());
-        assertEquals(128, result.getBufferSize());
-        assertEquals("filename=\"logo.png\"", result.getContentDisposition());
-
-        assertEquals("image/jpeg", response.getContentType());
-        assertEquals(contentLength, response.getContentLength());
-        assertEquals("filename=\"logo.png\"", response.getHeader("Content-disposition"));
-    }
-
-    protected void setUp() throws Exception {
-        response = new MockHttpServletResponse();
-
-        result = new StreamResult();
-        stack = ValueStackFactory.getFactory().createValueStack();
-        ActionContext.getContext().setValueStack(stack);
-
-        MyImageAction action = new MyImageAction();
-        contentLength = (int) action.getContentLength();
-
-        mai = new com.opensymphony.xwork2.mock.MockActionInvocation();
-        mai.setAction(action);
-        mai.setStack(stack);
-        mai.setInvocationContext(ActionContext.getContext());
-        stack.push(action);
-
-        ActionContext.getContext().put(ServletActionContext.HTTP_RESPONSE, response);
-    }
-    
-    
-
-    protected void tearDown() {
-        response = null;
-        result = null;
-        stack = null;
-        contentLength = 0;
-        mai = null;
-    }
-
-    public class MyImageAction implements Action {
-
-        public InputStream getStreamForImage() throws Exception {
-            // just use src/test/log4j.properties as test file 
-            URL url = ClassLoaderUtil.getResource("log4j.properties", StreamResultTest.class);
-            File file = new File(new URI(url.toString()));
-            FileInputStream fis = new FileInputStream(file);
-            return fis;
-        }
-
-        public String execute() throws Exception {
-            return SUCCESS;
-        }
-
-        public long getContentLength() throws Exception {
-            URL url = ClassLoaderUtil.getResource("log4j.properties", StreamResultTest.class);
-            File file = new File(new URI(url.toString()));
-            return file.length();
-        }
-        
-        public String getStreamForImageAsString() {
-        	return "streamForImage";
-        }
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/StrutsResultSupportTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/StrutsResultSupportTest.java
deleted file mode 100644
index a370a58..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/StrutsResultSupportTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import org.apache.struts2.StrutsTestCase;
-import org.easymock.EasyMock;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-/**
- * Test case for StrutsResultSupport.
- */
-public class StrutsResultSupportTest extends StrutsTestCase {
-
-	
-	public void testParse() throws Exception {
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		stack.push(new ActionSupport() {
-			public String getMyLocation() {
-				return "ThisIsMyLocation";
-			}
-		});
-		
-		ActionInvocation mockActionInvocation = EasyMock.createNiceMock(ActionInvocation.class);
-		mockActionInvocation.getStack();
-		EasyMock.expectLastCall().andReturn(stack);
-		EasyMock.replay(mockActionInvocation);
-		
-		InternalStrutsResultSupport result = new InternalStrutsResultSupport();
-		result.setParse(true);
-		result.setEncode(false);
-		result.setLocation("/pages/myJsp.jsp?location=${myLocation}");
-		
-		result.execute(mockActionInvocation);
-		
-		assertNotNull(result.getInternalLocation());
-		assertEquals("/pages/myJsp.jsp?location=ThisIsMyLocation", result.getInternalLocation());
-		EasyMock.verify(mockActionInvocation);
-	}
-	
-	public void testParseAndEncode() throws Exception {
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		stack.push(new ActionSupport() {
-			public String getMyLocation() {
-				return "/myPage?param=value&param1=value1";
-			}
-		});
-		
-		ActionInvocation mockActionInvocation = EasyMock.createNiceMock(ActionInvocation.class);
-		mockActionInvocation.getStack();
-		EasyMock.expectLastCall().andReturn(stack);
-		EasyMock.replay(mockActionInvocation);
-		
-		InternalStrutsResultSupport result = new InternalStrutsResultSupport();
-		result.setParse(true);
-		result.setEncode(true);
-		result.setLocation("/pages/myJsp.jsp?location=${myLocation}");
-		
-		result.execute(mockActionInvocation);
-		
-		assertNotNull(result.getInternalLocation());
-		assertEquals("/pages/myJsp.jsp?location=%2FmyPage%3Fparam%3Dvalue%26param1%3Dvalue1", result.getInternalLocation());
-		EasyMock.verify(mockActionInvocation);
-	}
-	
-	
-	public void testNoParseAndEncode() throws Exception {
-		ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-		stack.push(new ActionSupport() {
-			public String getMyLocation() {
-				return "myLocation.jsp";
-			}
-		});
-		
-		ActionInvocation mockActionInvocation = EasyMock.createNiceMock(ActionInvocation.class);
-		EasyMock.replay(mockActionInvocation);
-		
-		InternalStrutsResultSupport result = new InternalStrutsResultSupport();
-		result.setParse(false);
-		result.setEncode(false); // don't really need this, as encode is only valid when parse is true.
-		result.setLocation("/pages/myJsp.jsp?location=${myLocation}");
-		
-		result.execute(mockActionInvocation);
-		
-		assertNotNull(result.getInternalLocation());
-		assertEquals("/pages/myJsp.jsp?location=${myLocation}", result.getInternalLocation());
-		EasyMock.verify(mockActionInvocation);
-	}
-	
-	
-	public static class InternalStrutsResultSupport extends StrutsResultSupport {
-		private String _internalLocation = null;
-		
-		protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
-			_internalLocation = finalLocation;
-		}
-		
-		public String getInternalLocation() {
-			return _internalLocation;
-		}
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/VelocityResultTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/VelocityResultTest.java
deleted file mode 100644
index bbc18c0..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/VelocityResultTest.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import junit.framework.TestCase;
-
-import org.apache.velocity.Template;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.exception.ParseErrorException;
-import org.apache.velocity.exception.ResourceNotFoundException;
-
-import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- * 
- */
-public class VelocityResultTest extends TestCase {
-
-    ActionInvocation actionInvocation;
-    Mock mockActionProxy;
-    ValueStack stack;
-    String namespace;
-    TestVelocityEngine velocity;
-    VelocityResult result;
-
-
-    public void testCanResolveLocationUsingOgnl() throws Exception {
-        TestResult result = new TestResult();
-
-        String location = "/myaction.action";
-        Bean bean = new Bean();
-        bean.setLocation(location);
-
-        ValueStack stack = ActionContext.getContext().getValueStack();
-        stack.push(bean);
-
-        assertEquals(location, stack.findValue("location"));
-
-        result.setLocation("${location}");
-        result.execute(actionInvocation);
-        assertEquals(location, result.finalLocation);
-    }
-
-    public void testCanResolveLocationUsingStaticExpression() throws Exception {
-        TestResult result = new TestResult();
-        String location = "/any.action";
-        result.setLocation("${'" + location + "'}");
-        result.execute(actionInvocation);
-        assertEquals(location, result.finalLocation);
-    }
-
-    public void testResourcesFoundUsingAbsolutePath() throws Exception {
-        String location = "/WEB-INF/views/registration.vm";
-
-        Template template = result.getTemplate(stack, velocity, actionInvocation, location, "UTF-8");
-        assertNotNull(template);
-        assertEquals("expect absolute locations to be handled as is", location, velocity.templateName);
-    }
-
-    public void testResourcesFoundUsingNames() throws Exception {
-        String location = "Registration.vm";
-        String expectedTemplateName = namespace + "/" + location;
-
-        Template template = result.getTemplate(stack, velocity, actionInvocation, location, "UTF-8");
-        assertNotNull(template);
-        assertEquals("expect the prefix to be appended to the path when the location is not absolute", expectedTemplateName, velocity.templateName);
-    }
-
-    protected void setUp() throws Exception {
-        namespace = "/html";
-        result = new VelocityResult();
-        stack = ValueStackFactory.getFactory().createValueStack();
-        ActionContext.getContext().setValueStack(stack);
-        velocity = new TestVelocityEngine();
-        mockActionProxy = new Mock(ActionProxy.class);
-        mockActionProxy.expectAndReturn("getNamespace", "/html");
-
-        Mock mockActionInvocation = new Mock(ActionInvocation.class);
-        mockActionInvocation.expectAndReturn("getProxy", mockActionProxy.proxy());
-        mockActionInvocation.expectAndReturn("getStack", stack);
-        actionInvocation = (ActionInvocation) mockActionInvocation.proxy();
-    }
-
-
-    class Bean {
-        private String location;
-
-        public void setLocation(String location) {
-            this.location = location;
-        }
-
-        public String getLocation() {
-            return location;
-        }
-    }
-
-    class TestResult extends StrutsResultSupport {
-    	
-		private static final long serialVersionUID = -1512206785088317315L;
-		
-		public String finalLocation;
-
-        protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
-            this.finalLocation = finalLocation;
-        }
-    }
-
-    class TestVelocityEngine extends VelocityEngine {
-        public String templateName;
-
-        public Template getTemplate(String templateName) throws ResourceNotFoundException, ParseErrorException, Exception {
-            this.templateName = templateName;
-
-            return new Template();
-        }
-
-        public Template getTemplate(String templateName, String charSet) throws ResourceNotFoundException, ParseErrorException, Exception {
-            this.templateName = templateName;
-
-            return new Template();
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
deleted file mode 100644
index ff0dd57..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.mapper;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.dispatcher.ServletRedirectResult;
-import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest;
-
-import com.mockobjects.servlet.MockHttpServletRequest;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
-
-/**
- * DefaultActionMapper test case.
- *
- */
-public class DefaultActionMapperTest extends StrutsTestCase {
-
-    private MockHttpServletRequest req;
-    private ConfigurationManager configManager;
-    private Configuration config;
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        req = new MockHttpServletRequest();
-        req.setupGetParameterMap(new HashMap());
-        req.setupGetContextPath("/my/namespace");
-        
-        config = new DefaultConfiguration();
-        PackageConfig pkg = new PackageConfig("myns", "/my/namespace", false, null);
-        PackageConfig pkg2 = new PackageConfig("my", "/my", false, null);
-        config.addPackageConfig("mvns", pkg);
-        config.addPackageConfig("my", pkg2);
-        configManager = new ConfigurationManager() {
-            public Configuration getConfiguration() {
-                return config;
-            }
-        };
-    }
-
-    public void testGetMapping() throws Exception {
-        setUp();
-        req.setupGetRequestURI("/my/namespace/actionName.action");
-        req.setupGetServletPath("/my/namespace/actionName.action");
-        req.setupGetAttribute(null);
-        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
-
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping mapping = mapper.getMapping(req, configManager);
-
-        assertEquals("/my/namespace", mapping.getNamespace());
-        assertEquals("actionName", mapping.getName());
-        assertNull(mapping.getMethod());
-    }
-
-    public void testGetMappingWithMethod() throws Exception {
-        req.setupGetParameterMap(new HashMap());
-        req.setupGetRequestURI("/my/namespace/actionName!add.action");
-        req.setupGetServletPath("/my/namespace/actionName!add.action");
-        req.setupGetAttribute(null);
-        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
-
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping mapping = mapper.getMapping(req, configManager);
-
-        assertEquals("/my/namespace", mapping.getNamespace());
-        assertEquals("actionName", mapping.getName());
-        assertEquals("add", mapping.getMethod());
-    }
-    
-    public void testGetMappingWithSlashedName() throws Exception {
-        setUp();
-        req.setupGetRequestURI("/my/foo/actionName.action");
-        req.setupGetServletPath("/my/foo/actionName.action");
-        req.setupGetAttribute(null);
-        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
-
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping mapping = mapper.getMapping(req, configManager);
-
-        assertEquals("/my", mapping.getNamespace());
-        assertEquals("foo/actionName", mapping.getName());
-        assertNull(mapping.getMethod());
-    }
-    
-    public void testGetMappingWithUnknownNamespace() throws Exception {
-        setUp();
-        req.setupGetRequestURI("/bo/foo/actionName.action");
-        req.setupGetServletPath("/bo/foo/actionName.action");
-        req.setupGetAttribute(null);
-        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
-
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping mapping = mapper.getMapping(req, configManager);
-
-        assertEquals("", mapping.getNamespace());
-        assertEquals("bo/foo/actionName", mapping.getName());
-        assertNull(mapping.getMethod());
-    }
-
-    public void testGetUri() throws Exception {
-        req.setupGetParameterMap(new HashMap());
-        req.setupGetRequestURI("/my/namespace/actionName.action");
-        req.setupGetServletPath("/my/namespace/actionName.action");
-        req.setupGetAttribute(null);
-        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
-
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping mapping = mapper.getMapping(req, configManager);
-        assertEquals("/my/namespace/actionName.action", mapper.getUriFromActionMapping(mapping));
-    }
-
-    public void testGetUriWithMethod() throws Exception {
-        req.setupGetParameterMap(new HashMap());
-        req.setupGetRequestURI("/my/namespace/actionName!add.action");
-        req.setupGetServletPath("/my/namespace/actionName!add.action");
-        req.setupGetAttribute(null);
-        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
-
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping mapping = mapper.getMapping(req, configManager);
-
-        assertEquals("/my/namespace/actionName!add.action", mapper.getUriFromActionMapping(mapping));
-    }
-
-    public void testGetMappingWithNoExtension() throws Exception {
-        String old = org.apache.struts2.config.Settings.get(StrutsConstants.STRUTS_ACTION_EXTENSION);
-        org.apache.struts2.config.Settings.set(StrutsConstants.STRUTS_ACTION_EXTENSION, "");
-        try {
-            req.setupGetParameterMap(new HashMap());
-            req.setupGetRequestURI("/my/namespace/actionName");
-            req.setupGetServletPath("/my/namespace/actionName");
-            req.setupGetAttribute(null);
-            req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
-
-            DefaultActionMapper mapper = new DefaultActionMapper();
-            ActionMapping mapping = mapper.getMapping(req, configManager);
-
-            assertEquals("/my/namespace", mapping.getNamespace());
-            assertEquals("actionName", mapping.getName());
-            assertNull(mapping.getMethod());
-        }
-        finally {
-            org.apache.struts2.config.Settings.set(StrutsConstants.STRUTS_ACTION_EXTENSION, old);
-        }
-    }
-    
-    // =============================
-    // === test name & namespace ===
-    // =============================
-
-    public void testParseNameAndNamespace1() throws Exception {
-        ActionMapping actionMapping = new ActionMapping();
-
-        DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
-        defaultActionMapper.parseNameAndNamespace("someAction", actionMapping, config);
-
-        assertEquals(actionMapping.getName(), "someAction");
-        assertEquals(actionMapping.getNamespace(), "");
-    }
-
-    public void testParseNameAndNamespace2() throws Exception {
-        ActionMapping actionMapping = new ActionMapping();
-
-        DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
-        defaultActionMapper.parseNameAndNamespace("/someAction", actionMapping, config);
-
-        assertEquals(actionMapping.getName(), "someAction");
-        assertEquals(actionMapping.getNamespace(), "/");
-    }
-
-    public void testParseNameAndNamespace3() throws Exception {
-        ActionMapping actionMapping = new ActionMapping();
-
-        DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
-        defaultActionMapper.parseNameAndNamespace("/my/someAction", actionMapping, config);
-
-        assertEquals(actionMapping.getName(), "someAction");
-        assertEquals(actionMapping.getNamespace(), "/my");
-    }
-
-
-    // ===========================
-    // === test special prefix ===
-    // ===========================
-
-    public void testActionPrefix() throws Exception {
-        Map parameterMap = new HashMap();
-        parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction", "");
-
-        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-        request.setParameterMap(parameterMap);
-        request.setupGetServletPath("/someServletPath.action");
-
-        DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
-        ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
-
-        assertEquals(actionMapping.getName(), "myAction");
-    }
-
-    public void testRedirectPrefix() throws Exception {
-        Map parameterMap = new HashMap();
-        parameterMap.put(DefaultActionMapper.REDIRECT_PREFIX + "www.google.com", "");
-
-        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-        request.setupGetServletPath("/someServletPath.action");
-        request.setParameterMap(parameterMap);
-
-        DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
-        ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
-
-        Result result = actionMapping.getResult();
-        assertNotNull(result);
-        assertTrue(result instanceof ServletRedirectResult);
-
-        //TODO: need to test location but there's noaccess to the property/method, unless we use reflection
-    }
-
-    public void testRedirectActionPrefix() throws Exception {
-        Map parameterMap = new HashMap();
-        parameterMap.put(DefaultActionMapper.REDIRECT_ACTION_PREFIX + "myAction", "");
-
-        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-        request.setupGetServletPath("/someServletPath.action");
-        request.setParameterMap(parameterMap);
-
-        DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
-        ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
-
-        Result result = actionMapping.getResult();
-        assertNotNull(result);
-        assertTrue(result instanceof ServletRedirectResult);
-
-        // TODO: need to test location but there's noaccess to the property/method, unless we use reflection
-    }
-    
-    public void testDropExtension() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        String name = mapper.dropExtension("foo.action");
-        assertTrue("Name not right: "+name, "foo".equals(name));
-        
-        name = mapper.dropExtension("foo.action.action");
-        assertTrue("Name not right: "+name, "foo.action".equals(name));
-        
-    }
-
-    public void testGetUriFromActionMapper1() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setMethod("myMethod");
-        actionMapping.setName("myActionName");
-        actionMapping.setNamespace("/myNamespace");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myNamespace/myActionName!myMethod.action", uri);
-    }
-
-    public void testGetUriFromActionMapper2() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setMethod("myMethod");
-        actionMapping.setName("myActionName");
-        actionMapping.setNamespace("/");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myActionName!myMethod.action", uri);
-    }
-
-    public void testGetUriFromActionMapper3() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setMethod("myMethod");
-        actionMapping.setName("myActionName");
-        actionMapping.setNamespace("");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myActionName!myMethod.action", uri);
-    }
-
-
-    public void testGetUriFromActionMapper4() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setName("myActionName");
-        actionMapping.setNamespace("");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myActionName.action", uri);
-    }
-
-    public void testGetUriFromActionMapper5() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setName("myActionName");
-        actionMapping.setNamespace("/");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myActionName.action", uri);
-    }
-
-    //
-    public void testGetUriFromActionMapper6() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setMethod("myMethod");
-        actionMapping.setName("myActionName?test=bla");
-        actionMapping.setNamespace("/myNamespace");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myNamespace/myActionName!myMethod.action?test=bla", uri);
-    }
-
-    public void testGetUriFromActionMapper7() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setMethod("myMethod");
-        actionMapping.setName("myActionName?test=bla");
-        actionMapping.setNamespace("/");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myActionName!myMethod.action?test=bla", uri);
-    }
-
-    public void testGetUriFromActionMapper8() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setMethod("myMethod");
-        actionMapping.setName("myActionName?test=bla");
-        actionMapping.setNamespace("");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myActionName!myMethod.action?test=bla", uri);
-    }
-
-
-    public void testGetUriFromActionMapper9() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setName("myActionName?test=bla");
-        actionMapping.setNamespace("");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myActionName.action?test=bla", uri);
-    }
-
-    public void testGetUriFromActionMapper10() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setName("myActionName?test=bla");
-        actionMapping.setNamespace("/");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myActionName.action?test=bla", uri);
-    }
-    
-    public void testGetUriFromActionMapper11() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setName("myActionName.action");
-        actionMapping.setNamespace("/");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myActionName.action", uri);
-    }
-    
-    public void testGetUriFromActionMapper12() throws Exception {
-        DefaultActionMapper mapper = new DefaultActionMapper();
-        ActionMapping actionMapping = new ActionMapping();
-        actionMapping.setName("myActionName.action");
-        actionMapping.setNamespace("/");
-        String uri = mapper.getUriFromActionMapping(actionMapping);
-
-        assertEquals("/myActionName.action", uri);
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapperTest.java b/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapperTest.java
deleted file mode 100644
index 6e95c2d..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapperTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.mapper;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest;
-
-/**
- * Unit test for {@link RestfulActionMapper}.
- *
- */
-public class RestfulActionMapperTest extends TestCase {
-
-    private RestfulActionMapper mapper;
-
-    public void testGetUri() {
-        ActionMapping am = new ActionMapping();
-        am.setName("view");
-        am.setNamespace("secure");
-        am.setParams(Collections.EMPTY_MAP);
-
-        assertEquals("secureview", mapper.getUriFromActionMapping(am));
-    }
-
-    public void testGetUriParam() {
-        Map param = new HashMap();
-        param.put("article", "123");
-        ActionMapping am = new ActionMapping();
-        am.setName("view");
-        am.setNamespace("secure");
-        am.setParams(param);
-
-        assertEquals("secureview", mapper.getUriFromActionMapping(am));
-    }
-
-    public void testGetUriParamId() {
-        Map param = new HashMap();
-        param.put("article", "123");
-        param.put("viewId", "456");
-        ActionMapping am = new ActionMapping();
-        am.setName("view");
-        am.setNamespace("secure");
-        am.setParams(param);
-
-        assertEquals("secureview/456", mapper.getUriFromActionMapping(am));
-    }
-
-    public void testGetMappingNoSlash() throws Exception {
-        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-        request.setupGetServletPath("noslash");
-
-        assertNull(mapper.getMapping(request, null));
-    }
-
-    public void testGetMapping() throws Exception {
-        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-        request.setupGetServletPath("/myapp/view/12");
-
-        ActionMapping am = mapper.getMapping(request, null);
-        assertEquals("myapp", am.getName());
-        assertEquals(1, am.getParams().size());
-        assertEquals("12", am.getParams().get("view"));
-    }
-
-    public void testGetMapping2() throws Exception {
-        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-        request.setupGetServletPath("/myapp/12/region/europe");
-
-        ActionMapping am = mapper.getMapping(request, null);
-        assertEquals("myapp", am.getName());
-        assertEquals(2, am.getParams().size());
-        assertEquals("12", am.getParams().get("myappId"));
-        assertEquals("europe", am.getParams().get("region"));
-    }
-
-    public void testGetMapping3() throws Exception {
-        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-        request.setupGetServletPath("/myapp/view/12/region/europe");
-
-        ActionMapping am = mapper.getMapping(request, null);
-        assertEquals("myapp", am.getName());
-        assertEquals(2, am.getParams().size());
-        assertEquals("12", am.getParams().get("view"));
-        assertEquals("europe", am.getParams().get("region"));
-    }
-
-    protected void setUp() throws Exception {
-        mapper = new RestfulActionMapper();
-    }
-
-    protected void tearDown() throws Exception {
-        mapper = null;
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/impl/MessagesTest.java b/trunk/core/src/test/java/org/apache/struts2/impl/MessagesTest.java
deleted file mode 100644
index d92b5dd..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/impl/MessagesTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import junit.framework.TestCase;
-
-import org.apache.struts2.Messages;
-
-public class MessagesTest extends TestCase {
-
-    public void testForField() {
-        Messages messages = new MessagesImpl();
-        Messages fieldMessages = messages.forField("foo");
-        fieldMessages.addError("foo");
-        assertFalse(fieldMessages.getErrors().isEmpty());
-        assertTrue(messages.hasErrors());
-    }
-
-    public void testHasMessagesForSeverity() {
-        for (Messages.Severity severity : Messages.Severity.values()) {
-            Messages messages = new MessagesImpl();
-            messages.add(severity, "foo");
-
-            assertFalse(messages.isEmpty(severity));
-
-            for (Messages.Severity other : Messages.Severity.values())
-                if (other != severity)
-                    assertTrue(messages.isEmpty(other));
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/impl/RequestContextTest.java b/trunk/core/src/test/java/org/apache/struts2/impl/RequestContextTest.java
deleted file mode 100644
index ec8cc9a..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/impl/RequestContextTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2006 Google Inc. All Rights Reserved.
-
-package org.apache.struts2.impl;
-
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.Callable;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-
-import junit.framework.TestCase;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-
-public class RequestContextTest extends TestCase {
-
-    public void testFindCookiesForName() {
-        final HttpServletRequest servletRequest = createMock(HttpServletRequest.class);
-        Cookie one = new Cookie("foo", "one");
-        Cookie two = new Cookie("foo", "two");
-        Cookie three = new Cookie("bar", "three");
-        Cookie[] cookies = { one, two, three };
-        expect(servletRequest.getCookies()).andReturn(cookies);
-
-        replay(servletRequest);
-
-        RequestContextImpl requestContext = new RequestContextImpl(null) {
-            public HttpServletRequest getServletRequest() {
-                return servletRequest;
-            }
-        };
-
-        List<Cookie> fooCookies = Arrays.asList(one, two);
-        assertEquals(fooCookies, requestContext.findCookiesForName("foo"));
-    }
-
-    public void testInitialCallInContext() throws Exception {
-        final ActionInvocation invocation = createMock(ActionInvocation.class);
-        final ActionContext actionContext = new ActionContext(new HashMap());
-        expect(invocation.getInvocationContext()).andReturn(actionContext);
-
-        final boolean[] called = new boolean[1];
-        Callable<String> callable = new Callable<String>() {
-            public String call() throws Exception {
-                RequestContextImpl requestContext = RequestContextImpl.get();
-                assertSame(actionContext, requestContext.xworkContext);
-                assertSame(invocation,
-                        ((ActionContextImpl) requestContext.getActionContext()).invocation);
-                called[0] = true;
-                return "foo";
-            }
-        };
-
-        replay(invocation);
-
-        assertEquals("foo", RequestContextImpl.callInContext(invocation, callable));
-        assertTrue(called[0]);
-        assertNull(RequestContextImpl.threadLocalRequestContext.get()[0]);
-    }
-
-    public void testNestedCallInContext() throws Exception {
-        // TODO: After we implement ActionContext.getNext(), getPrevious().
-    }
-}
-
diff --git a/trunk/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java b/trunk/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java
deleted file mode 100644
index d8602d5..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-import org.jmock.Mock;
-import org.jmock.core.constraint.IsEqual;
-import org.jmock.core.matcher.InvokeOnceMatcher;
-
-import com.opensymphony.xwork2.mock.MockActionInvocation;
-
-/**
- * Test case for CreateSessionInterceptor.
- * 
- */
-public class CreateSessionInterceptorTest extends StrutsTestCase {
-
-	public void testCreateSession() throws Exception {
-		Mock httpServletRequestMock = new Mock(HttpServletRequest.class);
-		httpServletRequestMock.expects(new InvokeOnceMatcher()).method("getSession").with(new IsEqual(Boolean.TRUE));
-		HttpServletRequest request = (HttpServletRequest) httpServletRequestMock.proxy();
-
-		ServletActionContext.setRequest(request);
-
-		CreateSessionInterceptor interceptor = new CreateSessionInterceptor();
-		interceptor.intercept(new MockActionInvocation());
-
-		httpServletRequestMock.verify();
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/interceptor/ExecuteAndWaitDelayAction.java b/trunk/core/src/test/java/org/apache/struts2/interceptor/ExecuteAndWaitDelayAction.java
deleted file mode 100644
index 0dde3ab..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/interceptor/ExecuteAndWaitDelayAction.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import com.opensymphony.xwork2.Action;
-
-/**
- * Used by ExecuteAndWaitInterceptorTest.
- *
- */
-public class ExecuteAndWaitDelayAction implements Action {
-
-    public String execute() throws Exception {
-        Thread.sleep(500);
-        return SUCCESS;
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptorTest.java b/trunk/core/src/test/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptorTest.java
deleted file mode 100644
index 19d71de..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptorTest.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpSession;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest;
-import org.apache.struts2.views.jsp.StrutsMockHttpSession;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ActionProxyFactory;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.ConfigurationProvider;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.InterceptorMapping;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.interceptor.ParametersInterceptor;
-import com.opensymphony.xwork2.mock.MockResult;
-
-/**
- * Test case for ExecuteAndWaitInterceptor.
- */
-public class ExecuteAndWaitInterceptorTest extends StrutsTestCase {
-
-    private StrutsMockHttpServletRequest request;
-    private HttpSession httpSession;
-    private Map context;
-    private Map params;
-    private Map session;
-    private ExecuteAndWaitInterceptor waitInterceptor;
-
-    public void _testOneWait() throws Exception {
-        waitInterceptor.setDelay(0);
-        waitInterceptor.setDelaySleepInterval(0);
-
-        ActionProxy proxy = buildProxy("action1");
-        String result = proxy.execute();
-        assertEquals("wait", result);
-
-        Thread.sleep(1000);
-
-        ActionProxy proxy2 = buildProxy("action1");
-        String result2 = proxy2.execute();
-        assertEquals("success", result2);
-    }
-
-    public void _testTwoWait() throws Exception {
-        waitInterceptor.setDelay(0);
-        waitInterceptor.setDelaySleepInterval(0);
-
-        ActionProxy proxy = buildProxy("action1");
-        String result = proxy.execute();
-        assertEquals("wait", result);
-
-        Thread.sleep(300);
-
-        ActionProxy proxy2 = buildProxy("action1");
-        String result2 = proxy2.execute();
-        assertEquals("wait", result2);
-
-        Thread.sleep(300);
-
-        ActionProxy proxy3 = buildProxy("action1");
-        String result3 = proxy3.execute();
-        assertEquals("success", result3);
-    }
-
-    public void _testOneWaitWithDelay() throws Exception {
-        waitInterceptor.setDelay(200);
-        waitInterceptor.setDelaySleepInterval(100);
-
-        ActionProxy proxy = buildProxy("action1");
-        long before = System.currentTimeMillis();
-        String result = proxy.execute();
-        long after = System.currentTimeMillis();
-        assertEquals("wait", result);
-        assertTrue("delay should be ca. 200 millis", (after - before) >= 190);
-
-        Thread.sleep(400);
-
-        ActionProxy proxy2 = buildProxy("action1");
-        String result2 = proxy2.execute();
-        assertEquals("success", result2);
-    }
-
-    public void _testTwoWaitWithDelay() throws Exception {
-        waitInterceptor.setDelay(100);
-        waitInterceptor.setDelaySleepInterval(100);
-
-        ActionProxy proxy = buildProxy("action1");
-        long before = System.currentTimeMillis();
-        String result = proxy.execute();
-        long after = System.currentTimeMillis();
-        assertEquals("wait", result);
-        assertTrue("delay should be ca. 100 millis", (after - before) >= 90);
-
-        Thread.sleep(100);
-
-        ActionProxy proxy2 = buildProxy("action1");
-        long before2 = System.currentTimeMillis();
-        String result2 = proxy2.execute();
-        long after2 = System.currentTimeMillis();
-        assertEquals("wait", result2);
-        assertTrue("there should be no delay", (after2 - before2) < 110);
-
-        Thread.sleep(400);
-
-        ActionProxy proxy3 = buildProxy("action1");
-        String result3 = proxy3.execute();
-        assertEquals("success", result3);
-    }
-
-    public void testWaitDelayAndJobAlreadyDone() throws Exception {
-        waitInterceptor.setDelay(1500);
-        waitInterceptor.setDelaySleepInterval(100);
-
-        ActionProxy proxy = buildProxy("action1");
-        long before = System.currentTimeMillis();
-        String result = proxy.execute();
-        long diff = System.currentTimeMillis() - before;
-        assertEquals("success", result);
-        assertTrue("Job done already after 500 so there should not be such long delay", diff <= 750);
-    }
-
-    public void testWaitDelayAndJobAlreadyDone2() throws Exception {
-        waitInterceptor.setDelay(1500);
-        waitInterceptor.setDelaySleepInterval(200); // just takes a little longer to find out job is done
-
-        ActionProxy proxy = buildProxy("action1");
-        long before = System.currentTimeMillis();
-        String result = proxy.execute();
-        long diff = System.currentTimeMillis() - before;
-        assertEquals("success", result);
-        assertTrue("Job done already after 500 so there should not be such long delay", diff <= 750);
-    }
-
-    protected ActionProxy buildProxy(String actionName) throws Exception {
-        return ActionProxyFactory.getFactory().createActionProxy(
-                configurationManager.getConfiguration(), "", actionName, context);
-    }
-
-    protected void setUp() throws Exception {
-        configurationManager.clearConfigurationProviders();
-        configurationManager.addConfigurationProvider(new WaitConfigurationProvider());
-        configurationManager.reload();
-
-        session = new HashMap();
-        params = new HashMap();
-        context = new HashMap();
-        context.put(ActionContext.SESSION, session);
-        context.put(ActionContext.PARAMETERS, params);
-
-        request = new StrutsMockHttpServletRequest();
-        httpSession = new StrutsMockHttpSession();
-        request.setSession(httpSession);
-        request.setParameterMap(params);
-        context.put(ServletActionContext.HTTP_REQUEST, request);
-    }
-
-    protected void tearDown() throws Exception {
-        configurationManager.clearConfigurationProviders();
-        configurationManager.destroyConfiguration();
-        ActionContext.setContext(null);
-    }
-
-    private class WaitConfigurationProvider implements ConfigurationProvider {
-
-        public void destroy() {
-            waitInterceptor.destroy();
-        }
-
-        public boolean needsReload() {
-            return false;
-        }
-
-        public void init(Configuration configuration) throws ConfigurationException {
-            PackageConfig wait = new PackageConfig("");
-
-            Map results = new HashMap();
-            results.put(Action.SUCCESS, new ResultConfig(Action.SUCCESS, MockResult.class.getName(), null));
-            results.put(ExecuteAndWaitInterceptor.WAIT, new ResultConfig(ExecuteAndWaitInterceptor.WAIT, MockResult.class.getName(), null));
-
-            // interceptors
-            waitInterceptor = new ExecuteAndWaitInterceptor();
-            List interceptors = new ArrayList();
-            interceptors.add(new InterceptorMapping("params", new ParametersInterceptor()));
-            interceptors.add(new InterceptorMapping("execAndWait", waitInterceptor));
-
-            ActionConfig ac = new ActionConfig(null, ExecuteAndWaitDelayAction.class, null, results, interceptors);
-            wait.addActionConfig("action1", ac);
-
-            configuration.addPackageConfig("", wait);
-        }
-
-    }
-}
-
diff --git a/trunk/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java b/trunk/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
deleted file mode 100644
index 9f12180..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
-import org.springframework.mock.web.MockHttpServletRequest;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.ValidationAwareSupport;
-import com.opensymphony.xwork2.mock.MockActionInvocation;
-
-
-/**
- * Test case for FileUploadInterceptor.
- *
- */
-public class FileUploadInterceptorTest extends StrutsTestCase {
-
-    private FileUploadInterceptor interceptor;
-    private File tempDir;
-
-    public void testAcceptFileWithEmptyAllowedTypes() throws Exception {
-        // when allowed type is empty
-        ValidationAwareSupport validation = new ValidationAwareSupport();
-        boolean ok = interceptor.acceptFile(new File(""), "text/plain", "inputName", validation, Locale.getDefault());
-
-        assertTrue(ok);
-        assertTrue(validation.getFieldErrors().isEmpty());
-        assertFalse(validation.hasErrors());
-    }
-
-    public void testAcceptFileWithoutEmptyTypes() throws Exception {
-        interceptor.setAllowedTypes("text/plain");
-
-        // when file is of allowed types
-        ValidationAwareSupport validation = new ValidationAwareSupport();
-        boolean ok = interceptor.acceptFile(new File(""), "text/plain", "inputName", validation, Locale.getDefault());
-
-        assertTrue(ok);
-        assertTrue(validation.getFieldErrors().isEmpty());
-        assertFalse(validation.hasErrors());
-
-        // when file is not of allowed types
-        validation = new ValidationAwareSupport();
-        boolean notOk = interceptor.acceptFile(new File(""), "text/html", "inputName", validation, Locale.getDefault());
-
-        assertFalse(notOk);
-        assertFalse(validation.getFieldErrors().isEmpty());
-        assertTrue(validation.hasErrors());
-    }
-
-    public void testAcceptFileWithNoFile() throws Exception {
-        FileUploadInterceptor interceptor = new FileUploadInterceptor();
-        interceptor.setAllowedTypes("text/plain");
-
-        // when file is not of allowed types
-        ValidationAwareSupport validation = new ValidationAwareSupport();
-        boolean notOk = interceptor.acceptFile(null, "text/html", "inputName", validation, Locale.getDefault());
-
-        assertFalse(notOk);
-        assertFalse(validation.getFieldErrors().isEmpty());
-        assertTrue(validation.hasErrors());
-        List errors = (List) validation.getFieldErrors().get("inputName");
-        assertEquals(1, errors.size());
-        String msg = (String) errors.get(0);
-        assertTrue(msg.startsWith("Error uploading:"));
-        assertTrue(msg.indexOf("inputName") > 0);
-    }
-
-    public void testAcceptFileWithMaxSize() throws Exception {
-        interceptor.setAllowedTypes("text/plain");
-        interceptor.setMaximumSize(new Long(10));
-
-        // when file is not of allowed types
-        ValidationAwareSupport validation = new ValidationAwareSupport();
-
-        URL url = ClassLoaderUtil.getResource("log4j.properties", FileUploadInterceptorTest.class);
-        File file = new File(new URI(url.toString()));
-        assertTrue("log4j.properties should be in src/test folder", file.exists());
-        boolean notOk = interceptor.acceptFile(file, "text/html", "inputName", validation, Locale.getDefault());
-
-        assertFalse(notOk);
-        assertFalse(validation.getFieldErrors().isEmpty());
-        assertTrue(validation.hasErrors());
-        List errors = (List) validation.getFieldErrors().get("inputName");
-        assertEquals(1, errors.size());
-        String msg = (String) errors.get(0);
-        // the error message shoul contain at least this test
-        assertTrue(msg.startsWith("The file is to large to be uploaded"));
-        assertTrue(msg.indexOf("inputName") > 0);
-        assertTrue(msg.indexOf("log4j.properties") > 0);
-    }
-
-    public void testNoMultipartRequest() throws Exception {
-        MyFileupAction action = new MyFileupAction();
-
-        MockActionInvocation mai = new MockActionInvocation();
-        mai.setAction(action);
-        mai.setResultCode("NoMultipart");
-        mai.setInvocationContext(ActionContext.getContext());
-
-        // if no multipart request it will bypass and execute it
-        assertEquals("NoMultipart", interceptor.intercept(mai));
-    }
-
-    public void testInvalidContentTypeMultipartRequest() throws Exception {
-        MockHttpServletRequest req = new MockHttpServletRequest();
-
-        req.setCharacterEncoding("text/html");
-        req.setContentType("text/xml"); // not a multipart contentype
-        req.addHeader("Content-type", "multipart/form-data");
-
-        MyFileupAction action = new MyFileupAction();
-        MockActionInvocation mai = new MockActionInvocation();
-        mai.setAction(action);
-        mai.setResultCode("success");
-        mai.setInvocationContext(ActionContext.getContext());
-
-        Map param = new HashMap();
-        ActionContext.getContext().setParameters(param);
-        ActionContext.getContext().put(ServletActionContext.HTTP_REQUEST, createMultipartRequest((HttpServletRequest) req, 2000));
-
-        interceptor.intercept(mai);
-
-        assertTrue(action.hasErrors());
-    }
-
-    public void testNoContentMultipartRequest() throws Exception {
-        MockHttpServletRequest req = new MockHttpServletRequest();
-
-        req.setCharacterEncoding("text/html");
-        req.setContentType("multipart/form-data; boundary=---1234");
-        req.setContent(null); // there is no content
-
-        MyFileupAction action = new MyFileupAction();
-        MockActionInvocation mai = new MockActionInvocation();
-        mai.setAction(action);
-        mai.setResultCode("success");
-        mai.setInvocationContext(ActionContext.getContext());
-
-        Map param = new HashMap();
-        ActionContext.getContext().setParameters(param);
-        ActionContext.getContext().put(ServletActionContext.HTTP_REQUEST, createMultipartRequest((HttpServletRequest) req, 2000));
-
-        interceptor.intercept(mai);
-
-        assertTrue(action.hasErrors());
-    }
-
-    public void testSuccessUploadOfATextFileMultipartRequest() throws Exception {
-        MockHttpServletRequest req = new MockHttpServletRequest();
-        req.setCharacterEncoding("text/html");
-        req.setContentType("multipart/form-data; boundary=---1234");
-        req.addHeader("Content-type", "multipart/form-data");
-
-        // inspired by the unit tests for jakarta commons fileupload
-        String content = ("-----1234\r\n" +
-            "Content-Disposition: form-data; name=\"file\"; filename=\"deleteme.txt\"\r\n" +
-            "Content-Type: text/html\r\n" +
-            "\r\n" +
-            "Unit test of FileUploadInterceptor" +
-            "\r\n" +
-            "-----1234--\r\n");
-        req.setContent(content.getBytes("US-ASCII"));
-
-        MyFileupAction action = new MyFileupAction();
-
-        MockActionInvocation mai = new MockActionInvocation();
-        mai.setAction(action);
-        mai.setResultCode("success");
-        mai.setInvocationContext(ActionContext.getContext());
-        Map param = new HashMap();
-        ActionContext.getContext().setParameters(param);
-        ActionContext.getContext().put(ServletActionContext.HTTP_REQUEST, createMultipartRequest((HttpServletRequest) req, 2000));
-
-        interceptor.intercept(mai);
-
-        assertTrue(! action.hasErrors());
-
-        assertTrue(param.size() == 3);
-        File[] files = (File[]) param.get("file");
-        String[] fileContentTypes = (String[]) param.get("fileContentType");
-        String[] fileRealFilenames = (String[]) param.get("fileFileName");
-
-        assertNotNull(files);
-        assertNotNull(fileContentTypes);
-        assertNotNull(fileRealFilenames);
-        assertTrue(files.length == 1);
-        assertTrue(fileContentTypes.length == 1);
-        assertTrue(fileRealFilenames.length == 1);
-        assertEquals("text/html", fileContentTypes[0]);
-        assertNotNull("deleteme.txt", fileRealFilenames[0]);
-    }
-
-    private MultiPartRequestWrapper createMultipartRequest(HttpServletRequest req, int maxsize) throws IOException {
-       return new MultiPartRequestWrapper(req, tempDir.getAbsolutePath(), maxsize);
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        interceptor = new FileUploadInterceptor();
-        tempDir = File.createTempFile("struts", "fileupload");
-        tempDir.delete();
-        tempDir.mkdirs();
-    }
-
-    protected void tearDown() throws Exception {
-        tempDir.delete();
-        interceptor.destroy();
-        super.tearDown();
-    }
-
-    private class MyFileupAction extends ActionSupport {
-
-		private static final long serialVersionUID = 6255238895447968889L;
-        
-		// no methods
-    }
-
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java b/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java
deleted file mode 100644
index 4b3ba7b..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.StrutsTestCase;
-import org.easymock.EasyMock;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionSupport;
-
-
-/**
- * Test case for MessageStoreInterceptor.
- * 
- * @version $Date$ $Id$
- */
-public class MessageStoreInterceptorTest extends StrutsTestCase {
-
-	public void testStoreMessage() throws Exception {
-		MessageStoreInterceptor interceptor = new MessageStoreInterceptor();
-		interceptor.setAllowRequestParameterSwitch(true);
-		interceptor.setOperationMode(MessageStoreInterceptor.STORE_MODE);
-		
-		
-		Map paramMap = new LinkedHashMap();
-		Map sessionMap = new LinkedHashMap();
-		
-		ActionSupport action = new ActionSupport();
-		action.addActionError("some action error 1");
-		action.addActionError("some action error 2");
-		action.addActionMessage("some action message 1");
-		action.addActionMessage("some action message 2");
-		action.addFieldError("field1", "some field error 1");
-		action.addFieldError("field2", "some field error 2");
-		
-		ActionContext actionContext = new ActionContext(new HashMap());
-		actionContext.put(ActionContext.PARAMETERS, paramMap);
-		actionContext.put(ActionContext.SESSION, sessionMap);
-		
-		// Mock (ActionInvocation)
-		ActionInvocation mockActionInvocation = EasyMock.createControl().createMock(ActionInvocation.class);
-		mockActionInvocation.getInvocationContext();
-		EasyMock.expectLastCall().andReturn(actionContext);
-		EasyMock.expectLastCall().anyTimes();
-		
-		mockActionInvocation.invoke();
-		EasyMock.expectLastCall().andReturn(Action.SUCCESS);
-		
-		mockActionInvocation.getAction();
-		EasyMock.expectLastCall().andReturn(action);
-		
-		
-		EasyMock.replay(mockActionInvocation);
-		
-		interceptor.init();
-		interceptor.intercept(mockActionInvocation);
-		interceptor.destroy();
-		
-		assertEquals(sessionMap.size(), 3);
-		assertTrue(sessionMap.containsKey(MessageStoreInterceptor.actionErrorsSessionKey));
-		assertTrue(sessionMap.containsKey(MessageStoreInterceptor.actionMessagesSessionKey));
-		assertTrue(sessionMap.containsKey(MessageStoreInterceptor.fieldErrorsSessionKey));
-		
-		List actionErrors = (List) sessionMap.get(MessageStoreInterceptor.actionErrorsSessionKey);
-		List actionMessages = (List) sessionMap.get(MessageStoreInterceptor.actionMessagesSessionKey);
-		Map fieldErrors = (Map) sessionMap.get(MessageStoreInterceptor.fieldErrorsSessionKey);
-		
-		assertEquals(actionErrors.size(), 2);
-		assertEquals(actionMessages.size(), 2);
-		assertEquals(fieldErrors.size(), 2);
-		
-		assertTrue(actionErrors.contains("some action error 1"));
-		assertTrue(actionErrors.contains("some action error 2"));
-		assertTrue(actionMessages.contains("some action message 1"));
-		assertTrue(actionMessages.contains("some action message 2"));
-		assertTrue(fieldErrors.containsKey("field1"));
-		assertTrue(fieldErrors.containsKey("field2"));
-		assertEquals(((List)fieldErrors.get("field1")).size(), 1);
-		assertEquals(((List)fieldErrors.get("field2")).size(), 1);
-		assertEquals(((List)fieldErrors.get("field1")).get(0), "some field error 1");
-		assertEquals(((List)fieldErrors.get("field2")).get(0), "some field error 2");
-		
-		EasyMock.verify(mockActionInvocation);
-	}
-	
-	public void testRetrieveMessage() throws Exception {
-		MessageStoreInterceptor interceptor = new MessageStoreInterceptor();
-		interceptor.setOperationMode(MessageStoreInterceptor.RETRIEVE_MODE);
-		interceptor.setAllowRequestParameterSwitch(true);
-		
-		
-		ActionSupport action = new ActionSupport();
-		
-		ActionInvocation mockActionInvocation = EasyMock.createControl().createMock(ActionInvocation.class);
-		mockActionInvocation.invoke();
-		EasyMock.expectLastCall().andReturn(Action.SUCCESS);
-		
-		Map paramsMap = new LinkedHashMap();
-		Map sessionMap = new LinkedHashMap();
-		
-		List actionErrors = new ArrayList();
-		List actionMessages = new ArrayList();
-		Map fieldErrors = new LinkedHashMap();
-		
-		actionErrors.add("some action error 1");
-		actionErrors.add("some action error 2");
-		actionMessages.add("some action messages 1");
-		actionMessages.add("some action messages 2");
-		List field1Errors = new ArrayList();
-		field1Errors.add("some field error 1");
-		List field2Errors = new ArrayList();
-		field2Errors.add("some field error 2");
-		fieldErrors.put("field1", field1Errors);
-		fieldErrors.put("field2", field2Errors);
-		
-		sessionMap.put(MessageStoreInterceptor.actionErrorsSessionKey, actionErrors);
-		sessionMap.put(MessageStoreInterceptor.actionMessagesSessionKey, actionMessages);
-		sessionMap.put(MessageStoreInterceptor.fieldErrorsSessionKey, fieldErrors);
-		
-		
-		ActionContext actionContext = new ActionContext(new HashMap());
-		actionContext.put(ActionContext.PARAMETERS, paramsMap);
-		actionContext.put(ActionContext.SESSION, sessionMap);
-		
-		mockActionInvocation.getInvocationContext();
-		EasyMock.expectLastCall().andReturn(actionContext);
-		EasyMock.expectLastCall().anyTimes();
-		
-		mockActionInvocation.getAction();
-		EasyMock.expectLastCall().andReturn(action);
-		
-		EasyMock.replay(mockActionInvocation);
-		
-		interceptor.init();
-		interceptor.intercept(mockActionInvocation);
-		interceptor.destroy();
-		
-		assertEquals(action.getActionErrors().size(), 2);
-		assertEquals(action.getActionMessages().size(), 2);
-		assertEquals(action.getFieldErrors().size(), 2);
-		assertTrue(action.getActionErrors().contains("some action error 1"));
-		assertTrue(action.getActionErrors().contains("some action error 2"));
-		assertTrue(action.getActionMessages().contains("some action messages 1"));
-		assertTrue(action.getActionMessages().contains("some action messages 2"));
-		assertEquals(((List)action.getFieldErrors().get("field1")).size(), 1);
-		assertEquals(((List)action.getFieldErrors().get("field2")).size(), 1);
-		assertEquals(((List)action.getFieldErrors().get("field1")).get(0), "some field error 1");
-		assertEquals(((List)action.getFieldErrors().get("field2")).get(0), "some field error 2");
-		
-		EasyMock.verify(mockActionInvocation);
-	}
-	
-	public void testRequestOperationMode1() throws Exception {
-		
-		Map paramMap = new LinkedHashMap();
-		paramMap.put("operationMode", new String[] { MessageStoreInterceptor.RETRIEVE_MODE });
-		
-		ActionContext actionContext = new ActionContext(new HashMap());
-		actionContext.put(ActionContext.PARAMETERS, paramMap);
-		
-		ActionInvocation mockActionInvocation = EasyMock.createControl().createMock(ActionInvocation.class);
-		mockActionInvocation.getInvocationContext();
-		EasyMock.expectLastCall().andReturn(actionContext);
-		EasyMock.expectLastCall().anyTimes();
-		
-		EasyMock.replay(mockActionInvocation);
-		
-		MessageStoreInterceptor interceptor = new MessageStoreInterceptor();
-		String operationMode = interceptor.getRequestOperationMode(mockActionInvocation);
-		
-		assertEquals(operationMode, MessageStoreInterceptor.RETRIEVE_MODE);
-		
-		EasyMock.verify(mockActionInvocation);
-	}
-	
-	public void testRequestOperationMode2() throws Exception {
-		
-		Map paramMap = new LinkedHashMap();
-		paramMap.put("operationMode", new String[] { MessageStoreInterceptor.STORE_MODE });
-		
-		ActionContext actionContext = new ActionContext(new HashMap());
-		actionContext.put(ActionContext.PARAMETERS, paramMap);
-		
-		ActionInvocation mockActionInvocation = EasyMock.createControl().createMock(ActionInvocation.class);
-		mockActionInvocation.getInvocationContext();
-		EasyMock.expectLastCall().andReturn(actionContext);
-		EasyMock.expectLastCall().anyTimes();
-		
-		EasyMock.replay(mockActionInvocation);
-		
-		MessageStoreInterceptor interceptor = new MessageStoreInterceptor();
-		String operationMode = interceptor.getRequestOperationMode(mockActionInvocation);
-		
-		assertEquals(operationMode, MessageStoreInterceptor.STORE_MODE);
-		
-		EasyMock.verify(mockActionInvocation);
-	}
-	
-	public void testRequestOperationMode3() throws Exception {
-		
-		Map paramMap = new LinkedHashMap();
-		
-		ActionContext actionContext = new ActionContext(new HashMap());
-		actionContext.put(ActionContext.PARAMETERS, paramMap);
-		
-		ActionInvocation mockActionInvocation = EasyMock.createControl().createMock(ActionInvocation.class);
-		mockActionInvocation.getInvocationContext();
-		EasyMock.expectLastCall().andReturn(actionContext);
-		EasyMock.expectLastCall().anyTimes();
-		
-		EasyMock.replay(mockActionInvocation);
-		
-		MessageStoreInterceptor interceptor = new MessageStoreInterceptor();
-		String operationMode = interceptor.getRequestOperationMode(mockActionInvocation);
-		
-		assertEquals(operationMode, MessageStoreInterceptor.NONE);
-		
-		EasyMock.verify(mockActionInvocation);
-		
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java b/trunk/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java
deleted file mode 100644
index 2127aaa..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.util.ServletContextAware;
-import org.easymock.MockControl;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.mock.web.MockServletContext;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.mock.MockActionInvocation;
-
-/**
- * Unit test for {@link ServletConfigInterceptor}.
- *
- */
-public class ServletConfigInterceptorTest extends StrutsTestCase {
-
-    private ServletConfigInterceptor interceptor;
-
-    public void testServletRequestAware() throws Exception {
-        MockControl control = MockControl.createControl(ServletRequestAware.class);
-        ServletRequestAware mock = (ServletRequestAware) control.getMock();
-
-        MockHttpServletRequest req = new MockHttpServletRequest();
-
-        MockActionInvocation mai = createActionInvocation(mock);
-        mai.getInvocationContext().put(StrutsStatics.HTTP_REQUEST, req);
-
-        mock.setServletRequest((HttpServletRequest) req);
-        control.setVoidCallable();
-
-        control.replay();
-        interceptor.intercept(mai);
-        control.verify();
-    }
-
-    public void testServletResponseAware() throws Exception {
-        MockControl control = MockControl.createControl(ServletResponseAware.class);
-        ServletResponseAware mock = (ServletResponseAware) control.getMock();
-
-        MockHttpServletResponse res = new MockHttpServletResponse();
-
-        MockActionInvocation mai = createActionInvocation(mock);
-        mai.getInvocationContext().put(StrutsStatics.HTTP_RESPONSE, res);
-
-        mock.setServletResponse((HttpServletResponse) res);
-        control.setVoidCallable();
-
-        control.replay();
-        interceptor.intercept(mai);
-        control.verify();
-    }
-
-    public void testParameterAware() throws Exception {
-        MockControl control = MockControl.createControl(ParameterAware.class);
-        ParameterAware mock = (ParameterAware) control.getMock();
-
-        MockActionInvocation mai = createActionInvocation(mock);
-
-        Map param = new HashMap();
-        mai.getInvocationContext().setParameters(param);
-
-        mock.setParameters(param);
-        control.setVoidCallable();
-
-        control.replay();
-        interceptor.intercept(mai);
-        control.verify();
-    }
-
-    public void testSessionAware() throws Exception {
-        MockControl control = MockControl.createControl(SessionAware.class);
-        SessionAware mock = (SessionAware) control.getMock();
-
-        MockActionInvocation mai = createActionInvocation(mock);
-
-        Map session = new HashMap();
-        mai.getInvocationContext().setSession(session);
-
-        mock.setSession(session);
-        control.setVoidCallable();
-
-        control.replay();
-        interceptor.intercept(mai);
-        control.verify();
-    }
-
-    public void testApplicationAware() throws Exception {
-        MockControl control = MockControl.createControl(ApplicationAware.class);
-        ApplicationAware mock = (ApplicationAware) control.getMock();
-
-        MockActionInvocation mai = createActionInvocation(mock);
-
-        Map app = new HashMap();
-        mai.getInvocationContext().setApplication(app);
-
-        mock.setApplication(app);
-        control.setVoidCallable();
-
-        control.replay();
-        interceptor.intercept(mai);
-        control.verify();
-    }
-
-    public void testPrincipalAware() throws Exception {
-        MockControl control = MockControl.createControl(PrincipalAware.class);
-        control.setDefaultMatcher(MockControl.ALWAYS_MATCHER); // less strick match is needed for this unit test to be conducted using mocks
-        PrincipalAware mock = (PrincipalAware) control.getMock();
-
-        MockActionInvocation mai = createActionInvocation(mock);
-
-        MockServletContext ctx = new MockServletContext();
-        mai.getInvocationContext().put(StrutsStatics.SERVLET_CONTEXT, ctx);
-
-        mock.setPrincipalProxy(null); // we can do this because of ALWAYS_MATCHER
-        control.setVoidCallable();
-
-        control.replay();
-        interceptor.intercept(mai);
-        control.verify();
-    }
-
-    public void testPrincipalProxy() throws Exception {
-        // uni test that does not use mock, but an Action so we also get code coverage for the PrincipalProxy class
-        MockHttpServletRequest req = new MockHttpServletRequest();
-        req.setUserPrincipal(null);
-        req.setRemoteUser("Santa");
-
-        MyPrincipalAction action = new MyPrincipalAction();
-        MockActionInvocation mai = createActionInvocation(action);
-        mai.getInvocationContext().put(StrutsStatics.HTTP_REQUEST, req);
-
-        assertNull(action.getProxy());
-        interceptor.intercept(mai);
-        assertNotNull(action.getProxy());
-
-        PrincipalProxy proxy = action.getProxy();
-        assertEquals(proxy.getRequest(), req);
-        assertNull(proxy.getUserPrincipal());
-        assertTrue(! proxy.isRequestSecure());
-        assertTrue(! proxy.isUserInRole("no.role"));
-        assertEquals("Santa", proxy.getRemoteUser());
-
-    }
-
-    public void testServletContextAware() throws Exception {
-        MockControl control = MockControl.createControl(ServletContextAware.class);
-        ServletContextAware mock = (ServletContextAware) control.getMock();
-
-        MockActionInvocation mai = createActionInvocation(mock);
-
-        MockServletContext ctx = new MockServletContext();
-        mai.getInvocationContext().put(StrutsStatics.SERVLET_CONTEXT, ctx);
-
-        mock.setServletContext((ServletContext) ctx);
-        control.setVoidCallable();
-
-        control.replay();
-        interceptor.intercept(mai);
-        control.verify();
-    }
-
-    private MockActionInvocation createActionInvocation(Object mock) {
-        MockActionInvocation mai = new MockActionInvocation();
-        mai.setResultCode("success");
-        mai.setInvocationContext(ActionContext.getContext());
-        mai.setAction(mock);
-        return mai;
-    }
-
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        interceptor = new ServletConfigInterceptor();
-        interceptor.init();
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        interceptor.destroy();
-        interceptor = null;
-    }
-
-    private class MyPrincipalAction implements Action, PrincipalAware {
-
-        private PrincipalProxy proxy;
-
-        public String execute() throws Exception {
-            return SUCCESS;
-        }
-
-        public void setPrincipalProxy(PrincipalProxy proxy) {
-            this.proxy = proxy;
-        }
-
-        public PrincipalProxy getProxy() {
-            return proxy;
-        }
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptorTest.java b/trunk/core/src/test/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptorTest.java
deleted file mode 100644
index 734f77c..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptorTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.StrutsTestCase;
-
-import com.mockobjects.dynamic.C;
-import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- * StrutsConversionErrorInterceptorTest
- *
- */
-public class StrutsConversionErrorInterceptorTest extends StrutsTestCase {
-
-    protected ActionContext context;
-    protected ActionInvocation invocation;
-    protected Map conversionErrors;
-    protected Mock mockInvocation;
-    protected ValueStack stack;
-    protected StrutsConversionErrorInterceptor interceptor;
-
-
-    public void testEmptyValuesDoNotSetFieldErrors() throws Exception {
-        conversionErrors.put("foo", new Long(123));
-        conversionErrors.put("bar", "");
-        conversionErrors.put("baz", new String[]{""});
-
-        ActionSupport action = new ActionSupport();
-        mockInvocation.expectAndReturn("getAction", action);
-        stack.push(action);
-        mockInvocation.matchAndReturn("getAction",action);
-        assertNull(action.getFieldErrors().get("foo"));
-        assertNull(action.getFieldErrors().get("bar"));
-        assertNull(action.getFieldErrors().get("baz"));
-        interceptor.intercept(invocation);
-        assertTrue(action.hasFieldErrors());
-        assertNotNull(action.getFieldErrors().get("foo"));
-        assertNull(action.getFieldErrors().get("bar"));
-        assertNull(action.getFieldErrors().get("baz"));
-    }
-
-    public void testFieldErrorAdded() throws Exception {
-        conversionErrors.put("foo", new Long(123));
-
-        ActionSupport action = new ActionSupport();
-        mockInvocation.expectAndReturn("getAction", action);
-        stack.push(action);
-        mockInvocation.matchAndReturn("getAction",action);
-        assertNull(action.getFieldErrors().get("foo"));
-        interceptor.intercept(invocation);
-        assertTrue(action.hasFieldErrors());
-        assertNotNull(action.getFieldErrors().get("foo"));
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        interceptor = new StrutsConversionErrorInterceptor();
-        mockInvocation = new Mock(ActionInvocation.class);
-        invocation = (ActionInvocation) mockInvocation.proxy();
-        stack = ValueStackFactory.getFactory().createValueStack();
-        context = new ActionContext(stack.getContext());
-        conversionErrors = new HashMap();
-        context.setConversionErrors(conversionErrors);
-        mockInvocation.matchAndReturn("getInvocationContext", context);
-        mockInvocation.expectAndReturn("invoke", Action.SUCCESS);
-        mockInvocation.expectAndReturn("getStack", stack);
-        mockInvocation.expect("addPreResultListener", C.ANY_ARGS);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/interceptor/TokenInterceptorTest.java b/trunk/core/src/test/java/org/apache/struts2/interceptor/TokenInterceptorTest.java
deleted file mode 100644
index ad17bfe..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/interceptor/TokenInterceptorTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.TestConfigurationProvider;
-import org.apache.struts2.util.TokenHelper;
-import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest;
-import org.apache.struts2.views.jsp.StrutsMockHttpSession;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ActionProxyFactory;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- * TokenInterceptorTest
- */
-public class TokenInterceptorTest extends StrutsTestCase {
-
-    ActionContext oldContext;
-    HttpSession httpSession;
-    Map extraContext;
-    Map params;
-    Map session;
-    StrutsMockHttpServletRequest request;
-
-
-    public void testNoTokenInParams() throws Exception {
-        ActionProxy proxy = buildProxy(getActionName());
-        assertEquals(TokenInterceptor.INVALID_TOKEN_CODE, proxy.execute());
-    }
-
-    public void testNoTokenInSession() throws Exception {
-        assertEquals(oldContext, ActionContext.getContext());
-
-        ActionProxy proxy = buildProxy(getActionName());
-        setToken(request);
-        ActionContext.getContext().getSession().clear();
-        assertEquals(TokenInterceptor.INVALID_TOKEN_CODE, proxy.execute());
-    }
-
-    public void testTokenInterceptorSuccess() throws Exception {
-        ActionProxy proxy = buildProxy(getActionName());
-        setToken(request);
-        assertEquals(Action.SUCCESS, proxy.execute());
-    }
-
-    public void testCAllExecute2Times() throws Exception {
-        ActionProxy proxy = buildProxy(getActionName());
-        setToken(request);
-        assertEquals(Action.SUCCESS, proxy.execute());
-
-        ActionProxy proxy2 = buildProxy(getActionName());
-        // must not call setToken
-        // double post will result in a invalid.token return code
-        assertEquals(TokenInterceptor.INVALID_TOKEN_CODE, proxy2.execute());
-    }
-
-    protected String getActionName() {
-        return TestConfigurationProvider.TOKEN_ACTION_NAME;
-    }
-
-    protected String setToken(HttpServletRequest request) {
-        String token = TokenHelper.setToken();
-        setToken(token);
-
-        return token;
-    }
-
-    protected void setToken(String token) {
-        request.getParameterMap().put(TokenHelper.TOKEN_NAME_FIELD, new String[]{
-                TokenHelper.DEFAULT_TOKEN_NAME
-        });
-        request.getParameterMap().put(TokenHelper.DEFAULT_TOKEN_NAME, new String[]{
-                token
-        });
-    }
-
-    protected void setUp() throws Exception {
-        configurationManager.clearConfigurationProviders();
-        configurationManager.addConfigurationProvider(new TestConfigurationProvider());
-        configurationManager.reload();
-
-        session = new HashMap();
-        params = new HashMap();
-        extraContext = new HashMap();
-        extraContext.put(ActionContext.SESSION, session);
-        extraContext.put(ActionContext.PARAMETERS, params);
-
-        request = new StrutsMockHttpServletRequest();
-        httpSession = new StrutsMockHttpSession();
-        request.setSession(httpSession);
-        request.setParameterMap(params);
-        extraContext.put(ServletActionContext.HTTP_REQUEST, request);
-
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.getContext().putAll(extraContext);
-        oldContext = new ActionContext(stack.getContext());
-        ActionContext.setContext(oldContext);
-    }
-
-    protected ActionProxy buildProxy(String actionName) throws Exception {
-        return ActionProxyFactory.getFactory().createActionProxy(
-                configurationManager.getConfiguration(), "", actionName, extraContext, true, true);
-    }
-
-    protected void tearDown() throws Exception {
-        configurationManager.destroyConfiguration();
-        ActionContext.setContext(null);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptorTest.java b/trunk/core/src/test/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptorTest.java
deleted file mode 100644
index b4e3fa8..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptorTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.interceptor;
-
-import org.apache.struts2.TestConfigurationProvider;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionProxy;
-
-/**
- * Unit test for {@link TokenSessionStoreInterceptor}.
- *
- */
-public class TokenSessionStoreInterceptorTest extends TokenInterceptorTest {
-
-    public void testCAllExecute2Times() throws Exception {
-        ActionProxy proxy = buildProxy(getActionName());
-        setToken(request);
-        assertEquals(Action.SUCCESS, proxy.execute());
-
-        ActionProxy proxy2 = buildProxy(getActionName());
-        // must not call setToken
-        // double post will just return success and render the same view as the first execute
-        // see TokenInterceptor where a 2nd call will return invalid.token code instead
-        assertEquals(Action.SUCCESS, proxy2.execute());
-    }
-
-    protected String getActionName() {
-        return TestConfigurationProvider.TOKEN_SESSION_ACTION_NAME;
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/portlet/PortletApplicationMapTest.java b/trunk/core/src/test/java/org/apache/struts2/portlet/PortletApplicationMapTest.java
deleted file mode 100644
index 3bcc618..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/portlet/PortletApplicationMapTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.portlet.PortletContext;
-
-import org.jmock.Mock;
-import org.jmock.MockObjectTestCase;
-import org.jmock.core.Constraint;
-
-/**
- */
-public class PortletApplicationMapTest extends MockObjectTestCase {
-
-    Mock mockPortletContext;
-
-    PortletContext portletContext;
-
-    public void setUp() throws Exception {
-        super.setUp();
-        mockPortletContext = mock(PortletContext.class);
-        portletContext = (PortletContext) mockPortletContext.proxy();
-    }
-
-    public void testGetFromAttributes() {
-        mockPortletContext.stubs().method("getAttribute").with(eq("dummyKey"))
-                .will(returnValue("dummyValue"));
-
-        PortletApplicationMap map = new PortletApplicationMap(
-                (PortletContext) mockPortletContext.proxy());
-
-        assertEquals("dummyValue", map.get("dummyKey"));
-    }
-
-    public void testGetFromInitParameters() {
-        mockPortletContext.stubs().method("getAttribute").with(eq("dummyKey"));
-        mockPortletContext.stubs().method("getInitParameter").with(
-                eq("dummyKey")).will(returnValue("dummyValue"));
-
-        PortletApplicationMap map = new PortletApplicationMap(
-                (PortletContext) mockPortletContext.proxy());
-
-        assertEquals("dummyValue", map.get("dummyKey"));
-    }
-
-    public void testPut() {
-        mockPortletContext.expects(once()).method("setAttribute").with(
-                new Constraint[] { eq("dummyKey"), eq("dummyValue") });
-        mockPortletContext.expects(once()).method("getAttribute").with(
-                eq("dummyKey")).will(returnValue("dummyValue"));
-        PortletApplicationMap map = new PortletApplicationMap(portletContext);
-        Object val = map.put("dummyKey", "dummyValue");
-        assertEquals("dummyValue", val);
-    }
-
-    public void testRemove() {
-        mockPortletContext.expects(once()).method("getAttribute").with(
-                eq("dummyKey")).will(returnValue("dummyValue"));
-        mockPortletContext.expects(once()).method("removeAttribute").with(
-                eq("dummyKey"));
-        PortletApplicationMap map = new PortletApplicationMap(portletContext);
-        Object val = map.remove("dummyKey");
-        assertEquals("dummyValue", val);
-    }
-
-    public void testEntrySet() {
-
-        Enumeration names = new Enumeration() {
-
-            List keys = Arrays.asList(new Object[] { "key1", "key2" });
-
-            Iterator it = keys.iterator();
-
-            public boolean hasMoreElements() {
-                return it.hasNext();
-            }
-
-            public Object nextElement() {
-                return it.next();
-            }
-
-        };
-        Enumeration initParamNames = new Enumeration() {
-
-            List keys = Arrays.asList(new Object[] { "key3" });
-
-            Iterator it = keys.iterator();
-
-            public boolean hasMoreElements() {
-                return it.hasNext();
-            }
-
-            public Object nextElement() {
-                return it.next();
-            }
-
-        };
-
-        mockPortletContext.stubs().method("getAttributeNames").will(
-                returnValue(names));
-        mockPortletContext.stubs().method("getInitParameterNames").will(
-                returnValue(initParamNames));
-        mockPortletContext.stubs().method("getAttribute").with(eq("key1"))
-                .will(returnValue("value1"));
-        mockPortletContext.stubs().method("getAttribute").with(eq("key2"))
-                .will(returnValue("value2"));
-        mockPortletContext.stubs().method("getInitParameter").with(eq("key3"))
-                .will(returnValue("value3"));
-
-        PortletApplicationMap map = new PortletApplicationMap(portletContext);
-        Set entries = map.entrySet();
-
-        assertEquals(3, entries.size());
-        Iterator it = entries.iterator();
-        Map.Entry entry = (Map.Entry) it.next();
-        assertEquals("key2", entry.getKey());
-        assertEquals("value2", entry.getValue());
-        entry = (Map.Entry) it.next();
-        assertEquals("key1", entry.getKey());
-        assertEquals("value1", entry.getValue());
-        entry = (Map.Entry) it.next();
-        assertEquals("key3", entry.getKey());
-        assertEquals("value3", entry.getValue());
-
-    }
-
-    public void testClear() {
-        
-        mockPortletContext.expects(once()).method("removeAttribute").with(eq("key1"));
-        mockPortletContext.expects(once()).method("removeAttribute").with(eq("key2"));
-
-        ArrayList dummy = new ArrayList();
-        dummy.add("key1");
-        dummy.add("key2");
-
-        mockPortletContext.expects(once()).method("getAttributeNames").will(
-                returnValue(Collections.enumeration(dummy)));
-
-        PortletApplicationMap map = new PortletApplicationMap(portletContext);
-        map.clear();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/portlet/PortletRequestMapTest.java b/trunk/core/src/test/java/org/apache/struts2/portlet/PortletRequestMapTest.java
deleted file mode 100644
index d154753..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/portlet/PortletRequestMapTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.portlet.PortletRequest;
-
-import org.jmock.Mock;
-import org.jmock.MockObjectTestCase;
-import org.jmock.core.Constraint;
-
-
-/**
- * PortletRequestMapTest. Insert description.
- * 
- */
-public class PortletRequestMapTest extends MockObjectTestCase {
-
-    public void testSetAttribute() {
-        
-    }
-    
-    public void testGet() {
-        Mock mockRequest = mock(PortletRequest.class, "testGet");
-        mockRequest.expects(once()).method("getAttribute").with(eq("testAttribute")).will(returnValue("testValue"));
-        PortletRequestMap map = new PortletRequestMap((PortletRequest)mockRequest.proxy());
-        String value = (String)map.get("testAttribute");
-        mockRequest.verify();
-        assertEquals("testValue", value);
-    }
-    
-    public void testPut() {
-        Mock mockRequest = mock(PortletRequest.class, "testPut");
-        Object value = new String("testValue");
-        Constraint[] params = new Constraint[]{eq("testAttribute"), eq(value)};
-        mockRequest.expects(once()).method("setAttribute").with(params);
-        mockRequest.expects(once()).method("getAttribute").with(eq("testAttribute")).will(returnValue(value));
-        PortletRequestMap map = new PortletRequestMap((PortletRequest)mockRequest.proxy());
-        Object obj = map.put("testAttribute", value);
-        mockRequest.verify();
-        assertEquals(obj, value);
-    }
-    
-    public void testClear() {
-        Mock mockRequest = mock(PortletRequest.class, "testClear");
-
-        mockRequest.expects(once()).method("removeAttribute").with(eq("a"));
-        mockRequest.expects(once()).method("removeAttribute").with(eq("b"));
-        
-        ArrayList dummy = new ArrayList();
-        dummy.add("a");
-        dummy.add("b");
-        
-        mockRequest.expects(once()).method("getAttributeNames").will(returnValue(Collections.enumeration(dummy)));
-        
-        PortletRequestMap map = new PortletRequestMap((PortletRequest)mockRequest.proxy());
-        map.clear();
-        mockRequest.verify();
-    }
-    
-    public void testRemove() {
-        Mock mockRequest = mock(PortletRequest.class);
-        
-        PortletRequest req = (PortletRequest)mockRequest.proxy();
-        
-        
-        mockRequest.expects(once()).method("getAttribute").with(eq("dummyKey")).will(returnValue("dummyValue"));
-        
-        mockRequest.expects(once()).method("removeAttribute").with(eq("dummyKey"));
-        
-        PortletRequestMap map = new PortletRequestMap(req);
-        Object ret = map.remove("dummyKey");
-        assertEquals("dummyValue", ret);
-    }
-    
-    public void testEntrySet() {
-        Mock mockRequest = mock(PortletRequest.class);
-        
-        PortletRequest req = (PortletRequest)mockRequest.proxy();
-        
-        Enumeration names = new Enumeration() {
-
-            List keys = Arrays.asList(new Object[]{"key1", "key2"});
-            Iterator it = keys.iterator();
-            
-            public boolean hasMoreElements() {
-                return it.hasNext();
-            }
-
-            public Object nextElement() {
-                return it.next();
-            }
-            
-        };
-        
-        mockRequest.stubs().method("getAttributeNames").will(returnValue(names));
-        mockRequest.stubs().method("getAttribute").with(eq("key1")).will(returnValue("value1"));
-        mockRequest.stubs().method("getAttribute").with(eq("key2")).will(returnValue("value2"));
-        
-        PortletRequestMap map = new PortletRequestMap(req);
-        Set entries = map.entrySet();
-        
-        assertEquals(2, entries.size());
-        Iterator it = entries.iterator();
-        Map.Entry entry = (Map.Entry)it.next();
-        assertEquals("key2", entry.getKey());
-        assertEquals("value2", entry.getValue());
-        entry = (Map.Entry)it.next();
-        assertEquals("key1", entry.getKey());
-        assertEquals("value1", entry.getValue());
-        
-    }
-    
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/portlet/PortletSessionMapTest.java b/trunk/core/src/test/java/org/apache/struts2/portlet/PortletSessionMapTest.java
deleted file mode 100644
index 3674d93..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/portlet/PortletSessionMapTest.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet;
-
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletSession;
-
-import org.jmock.Mock;
-import org.jmock.MockObjectTestCase;
-import org.jmock.core.Constraint;
-
-
-/**
- * PortletSessionMapTest. Insert description.
- * 
- */
-public class PortletSessionMapTest extends MockObjectTestCase {
-
-    public void testPut() {
-        
-        Mock mockSession = mock(PortletSession.class);
-        Mock mockRequest = mock(PortletRequest.class);
-        
-        PortletRequest req = (PortletRequest)mockRequest.proxy();
-        PortletSession session = (PortletSession)mockSession.proxy();
-        
-        mockRequest.expects(once()).method("getPortletSession").will(returnValue(session));
-        Constraint[] params = new Constraint[]{eq("testAttribute1"), eq("testValue1")};
-        mockSession.expects(once()).method("setAttribute").with(params);
-        mockSession.expects(once()).method("getAttribute").with(eq("testAttribute1")).will(returnValue("testValue1"));
-        params = new Constraint[]{eq("testAttribute2"), eq("testValue2")};
-        mockSession.expects(once()).method("setAttribute").with(params);
-        mockSession.expects(once()).method("getAttribute").with(eq("testAttribute2")).will(returnValue("testValue2"));
-        
-        PortletSessionMap map = new PortletSessionMap(req);
-        map.put("testAttribute1", "testValue1");
-        map.put("testAttribute2", "testValue2");
-        
-    }
-    
-    public void testGet() {
-        Mock mockSession = mock(PortletSession.class);
-        Mock mockRequest = mock(PortletRequest.class);
-        
-        PortletRequest req = (PortletRequest)mockRequest.proxy();
-        PortletSession session = (PortletSession)mockSession.proxy();
-        
-        mockRequest.expects(once()).method("getPortletSession").will(returnValue(session));
-        mockSession.expects(once()).method("getAttribute").with(eq("testAttribute1")).will(returnValue("testValue1"));
-        mockSession.expects(once()).method("getAttribute").with(eq("testAttribute2")).will(returnValue("testValue2"));
-        
-        PortletSessionMap map = new PortletSessionMap(req);
-        Object val1 = map.get("testAttribute1");
-        Object val2 = map.get("testAttribute2");
-        assertEquals("testValue1", val1);
-        assertEquals("testValue2", val2);
-    }
-    
-    public void testClear() {
-        Mock mockSession = mock(PortletSession.class);
-        Mock mockRequest = mock(PortletRequest.class);
-        
-        PortletRequest req = (PortletRequest)mockRequest.proxy();
-        PortletSession session = (PortletSession)mockSession.proxy();
-        
-        mockRequest.expects(once()).method("getPortletSession").will(returnValue(session));
-        mockSession.expects(once()).method("invalidate");
-        
-        PortletSessionMap map = new PortletSessionMap(req);
-        map.clear();
-    }
-    
-    public void testRemove() {
-        Mock mockSession = mock(PortletSession.class);
-        Mock mockRequest = mock(PortletRequest.class);
-        
-        PortletRequest req = (PortletRequest)mockRequest.proxy();
-        PortletSession session = (PortletSession)mockSession.proxy();
-        
-        
-        mockRequest.expects(once()).method("getPortletSession").will(returnValue(session));
-        mockSession.stubs().method("getAttribute").with(eq("dummyKey")).will(returnValue("dummyValue"));
-        mockSession.expects(once()).method("removeAttribute").with(eq("dummyKey"));
-        
-        PortletSessionMap map = new PortletSessionMap(req);
-        Object ret = map.remove("dummyKey");
-        assertEquals("dummyValue", ret);
-    }
-    
-    public void testEntrySet() {
-        Mock mockSession = mock(PortletSession.class);
-        Mock mockRequest = mock(PortletRequest.class);
-        
-        PortletRequest req = (PortletRequest)mockRequest.proxy();
-        PortletSession session = (PortletSession)mockSession.proxy();
-        
-        Enumeration names = new Enumeration() {
-
-            List keys = Arrays.asList(new Object[]{"key1", "key2"});
-            Iterator it = keys.iterator();
-            
-            public boolean hasMoreElements() {
-                return it.hasNext();
-            }
-
-            public Object nextElement() {
-                return it.next();
-            }
-            
-        };
-        
-        mockSession.stubs().method("getAttributeNames").will(returnValue(names));
-        mockSession.stubs().method("getAttribute").with(eq("key1")).will(returnValue("value1"));
-        mockSession.stubs().method("getAttribute").with(eq("key2")).will(returnValue("value2"));
-        
-        mockRequest.expects(once()).method("getPortletSession").will(returnValue(session));
-        
-        PortletSessionMap map = new PortletSessionMap(req);
-        Set entries = map.entrySet();
-        
-        assertEquals(2, entries.size());
-        Iterator it = entries.iterator();
-        Map.Entry entry = (Map.Entry)it.next();
-        assertEquals("key2", entry.getKey());
-        assertEquals("value2", entry.getValue());
-        entry = (Map.Entry)it.next();
-        assertEquals("key1", entry.getKey());
-        assertEquals("value1", entry.getValue());
-        
-    }
-    
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java b/trunk/core/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java
deleted file mode 100644
index bb15f68..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.context;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletConfig;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-import junit.textui.TestRunner;
-
-import org.apache.struts2.portlet.PortletActionConstants;
-import org.jmock.Mock;
-import org.jmock.MockObjectTestCase;
-
-import com.opensymphony.xwork2.ActionContext;
-
-/**
- */
-public class PortletActionContextTest extends MockObjectTestCase {
-    
-    Mock mockRenderRequest;
-    Mock mockRenderResponse;
-    Mock mockPortletConfig;
-    Mock mockActionRequest;
-    Mock mockActionResponse;
-    
-    RenderRequest renderRequest;
-    RenderResponse renderResponse;
-    
-    ActionRequest actionRequest;
-    ActionResponse actionResponse;
-    
-    PortletConfig portletConfig;
-    
-    Map context = new HashMap();
-    
-    public void setUp() throws Exception {
-        super.setUp();
-        mockRenderRequest = mock(RenderRequest.class);
-        mockRenderResponse = mock(RenderResponse.class);
-        mockActionRequest = mock(ActionRequest.class);
-        mockActionResponse = mock(ActionResponse.class);
-        mockPortletConfig = mock(PortletConfig.class);
-        
-        renderRequest = (RenderRequest)mockRenderRequest.proxy();
-        renderResponse = (RenderResponse)mockRenderResponse.proxy();
-        actionRequest = (ActionRequest)mockActionRequest.proxy();
-        actionResponse = (ActionResponse)mockActionResponse.proxy();
-        portletConfig = (PortletConfig)mockPortletConfig.proxy();
-        
-        
-        ActionContext.setContext(new ActionContext(context));
-    }
-    
-    public void testGetPhase() {
-        context.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
-        
-        assertEquals(PortletActionConstants.RENDER_PHASE, PortletActionContext.getPhase());
-    }
-    
-    public void testIsRender() {
-        context.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
-        
-        assertTrue(PortletActionContext.isRender());
-        assertFalse(PortletActionContext.isEvent());
-    }
-    
-    public void testIsEvent() {
-        context.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
-        
-        assertTrue(PortletActionContext.isEvent());
-        assertFalse(PortletActionContext.isRender());
-    }
-    
-    public void testGetPortletConfig() {
-        context.put(PortletActionConstants.PORTLET_CONFIG, portletConfig);
-        assertSame(portletConfig, PortletActionContext.getPortletConfig());
-    }
-    
-    public void testGetRenderRequestAndResponse() {
-        context.put(PortletActionConstants.REQUEST, renderRequest);
-        context.put(PortletActionConstants.RESPONSE, renderResponse);
-        context.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
-        assertSame(renderRequest, PortletActionContext.getRenderRequest());
-        assertSame(renderResponse, PortletActionContext.getRenderResponse());
-        assertSame(renderRequest, PortletActionContext.getRequest());
-        assertSame(renderResponse, PortletActionContext.getResponse());
-    }
-    
-    public void testGetRenderRequestAndResponseInEventPhase() {
-        context.put(PortletActionConstants.REQUEST, renderRequest);
-        context.put(PortletActionConstants.RESPONSE, renderResponse);
-        context.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
-        try {
-            PortletActionContext.getRenderRequest();
-            fail("Should throw IllegalStateException!");
-        }
-        catch(IllegalStateException e) {
-            assertTrue(true);
-        }
-        try {
-            PortletActionContext.getRenderResponse();
-            fail("Should throw IllegalStateException!");
-        }
-        catch(IllegalStateException e) {
-            assertTrue(true);
-        }
-    }
-    
-    public void testGetActionRequestAndResponse() {
-        context.put(PortletActionConstants.REQUEST, actionRequest);
-        context.put(PortletActionConstants.RESPONSE, actionResponse);
-        context.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
-        assertSame(actionRequest, PortletActionContext.getActionRequest());
-        assertSame(actionResponse, PortletActionContext.getActionResponse());
-        assertSame(actionRequest, PortletActionContext.getRequest());
-        assertSame(actionResponse, PortletActionContext.getResponse());
-    }
-    
-    public void testGetActionRequestAndResponseInRenderPhase() {
-        context.put(PortletActionConstants.REQUEST, actionRequest);
-        context.put(PortletActionConstants.RESPONSE, actionResponse);
-        context.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
-        try {
-            PortletActionContext.getActionRequest();
-            fail("Should throw IllegalStateException!");
-        }
-        catch(IllegalStateException e) {
-            assertTrue(true);
-        }
-        try {
-            PortletActionContext.getActionResponse();
-            fail("Should throw IllegalStateException!");
-        }
-        catch(IllegalStateException e) {
-            assertTrue(true);
-        }
-    }
-    
-    public void testGetNamespace() {
-        context.put(PortletActionConstants.PORTLET_NAMESPACE, "testNamespace");
-        assertEquals("testNamespace", PortletActionContext.getPortletNamespace());
-    }
-    
-    public void testGetDefaultActionForMode() {
-        context.put(PortletActionConstants.DEFAULT_ACTION_FOR_MODE, "testAction");
-        assertEquals("testAction", PortletActionContext.getDefaultActionForMode());
-    }
-    
-    public void tearDown() throws Exception {
-        ActionContext.setContext(null);
-        super.tearDown();
-    }
-    
-    public static void main(String[] args) {
-        TestRunner.run(PortletActionContextTest.class);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/portlet/context/PreparatorServletTest.java b/trunk/core/src/test/java/org/apache/struts2/portlet/context/PreparatorServletTest.java
deleted file mode 100644
index eb2af32..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/portlet/context/PreparatorServletTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.context;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-import org.easymock.MockControl;
-
-/**
- * 
- * Test for the {@link PreparatorServletTest}
- * 
- */
-public class PreparatorServletTest extends StrutsTestCase {
-
-    /**
-     * Test that the service method stores the request, response and servlet context
-     * in the {@link com.opensymphony.xwork2.ActionContext}
-     */
-    public void testServiceHttpServletRequestHttpServletResponse() throws Exception {
-        MockControl mockRequest = MockControl.createNiceControl(HttpServletRequest.class);
-        MockControl mockResponse = MockControl.createNiceControl(HttpServletResponse.class);
-        MockControl mockContext = MockControl.createNiceControl(ServletContext.class);
-        MockControl mockConfig = MockControl.createNiceControl(ServletConfig.class);
-        
-        HttpServletRequest req = (HttpServletRequest)mockRequest.getMock();
-        HttpServletResponse res = (HttpServletResponse)mockResponse.getMock();
-        ServletContext context = (ServletContext)mockContext.getMock();
-        ServletConfig config = (ServletConfig)mockConfig.getMock();
-        
-        mockConfig.expectAndDefaultReturn(config.getServletContext(), context);
-        mockConfig.replay();
-        
-        PreparatorServlet servlet = new PreparatorServlet();
-        servlet.init(config);
-        servlet.service(req, res);
-        assertSame(req, ServletActionContext.getRequest());
-        assertSame(res, ServletActionContext.getResponse());
-        assertSame(context, ServletActionContext.getServletContext());
-        
-        mockConfig.verify();
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/portlet/context/ServletContextHolderListenerTest.java b/trunk/core/src/test/java/org/apache/struts2/portlet/context/ServletContextHolderListenerTest.java
deleted file mode 100644
index d64c2dd..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/portlet/context/ServletContextHolderListenerTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.context;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-
-import junit.framework.TestCase;
-
-import org.easymock.MockControl;
-
-/**
- */
-public class ServletContextHolderListenerTest extends TestCase {
-
-    public void testContextInitialized() {
-        MockControl mockContext = MockControl.createNiceControl(ServletContext.class);
-        ServletContext context = (ServletContext)mockContext.getMock();
-        ServletContextEvent event = new ServletContextEvent(context);
-        ServletContextHolderListener listener = new ServletContextHolderListener();
-        listener.contextInitialized(event);
-        assertSame(ServletContextHolderListener.getServletContext(), context);
-        
-        listener.contextDestroyed(event);
-        assertNull(ServletContextHolderListener.getServletContext());
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java b/trunk/core/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java
deleted file mode 100644
index e418997..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.dispatcher;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletSession;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.portlet.WindowState;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-
-import junit.textui.TestRunner;
-
-import org.apache.struts2.portlet.PortletActionConstants;
-import org.apache.struts2.portlet.context.ServletContextHolderListener;
-import org.jmock.Mock;
-import org.jmock.cglib.MockObjectTestCase;
-import org.jmock.core.Constraint;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ActionProxyFactory;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-/**
- * Jsr168DispatcherTest. Insert description.
- * 
- */
-public class Jsr168DispatcherTest extends MockObjectTestCase implements PortletActionConstants {
- 
-    Jsr168Dispatcher dispatcher = null;
-    Mock mockConfig = null;
-    Mock mockCtx = null;
-    Mock mockRequest = null;
-    Mock mockSession = null;
-    Mock mockActionFactory = null;
-    Mock mockActionProxy = null;
-    Mock mockAction = null;
-    Mock mockInvocation = null;
-    
-    public void setUp() {
-        dispatcher = new Jsr168Dispatcher();
-    }
-    
-    private void initPortletConfig(final Map initParams, final Map attributes) {
-        mockConfig = mock(PortletConfig.class);
-        mockCtx = mock(PortletContext.class);
-        mockConfig.stubs().method(ANYTHING);
-        setupStub(initParams, mockConfig, "getInitParameter");
-        mockCtx.stubs().method("getAttributeNames").will(returnValue(Collections.enumeration(attributes.keySet())));
-        setupStub(attributes, mockCtx, "getAttribute");
-        mockConfig.stubs().method("getPortletContext").will(returnValue(mockCtx.proxy()));
-        mockCtx.stubs().method("getInitParameterNames").will(returnValue(Collections.enumeration(initParams.keySet())));
-        setupStub(initParams, mockCtx, "getInitParameter");
-        
-        mockConfig.stubs().method("getResourceBundle").will(returnValue(new ListResourceBundle() {
-            protected Object[][] getContents() {
-                return new String[][]{{"javax.portlet.title", "MyTitle"}};
-            }
-        }));
-    }
-
-    private void setupActionFactory(String namespace, String actionName, String result, ValueStack stack) {
-        if(mockActionFactory == null) {
-            mockActionFactory = mock(ActionProxyFactory.class);
-        }
-        mockAction = mock(Action.class);
-        mockActionProxy = mock(ActionProxy.class);
-        mockInvocation = mock(ActionInvocation.class);
-        
-        mockActionFactory.expects(once()).method("createActionProxy").with(new Constraint[]{isA(Configuration.class), eq(namespace), eq(actionName), isA(Map.class)}).will(returnValue(mockActionProxy.proxy()));
-        mockActionProxy.stubs().method("getAction").will(returnValue(mockAction.proxy()));
-        mockActionProxy.expects(once()).method("execute").will(returnValue(result));
-        mockActionProxy.expects(once()).method("getInvocation").will(returnValue(mockInvocation.proxy()));
-        mockInvocation.stubs().method("getStack").will(returnValue(stack));
-    	
-    }
-
-    public void testRender_ok() {
-        final Mock mockResponse = mock(RenderResponse.class);
-        mockResponse.stubs().method(ANYTHING);
-        final Mock servletContext = mock(ServletContext.class);
-        servletContext.stubs().method(ANYTHING);
-        ServletContextEvent event = new ServletContextEvent((ServletContext)servletContext.proxy());
-        new ServletContextHolderListener().contextInitialized(event);
-        PortletMode mode = PortletMode.VIEW;
-
-        Map requestParams = new HashMap();
-        requestParams.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction"});
-        requestParams.put(EVENT_ACTION, new String[]{"true"});
-        requestParams.put(PortletActionConstants.MODE_PARAM, new String[]{mode.toString()});
-        
-        Map sessionMap = new HashMap();
-        
-        
-        
-        Map initParams = new HashMap();
-        initParams.put("viewNamespace", "/view");
-
-        initPortletConfig(initParams, new HashMap());
-        initRequest(requestParams, new HashMap(), sessionMap, new HashMap(), PortletMode.VIEW, WindowState.NORMAL, false, null);
-        setupActionFactory("/view", "testAction", "success", ValueStackFactory.getFactory().createValueStack());
-
-        mockInvocation.expects(once()).method("getStack").will(
-                returnValue(null));
-        //mockSession.expects(once()).method("setAttribute").with(new Constraint[]{eq(PortletActionConstants.LAST_MODE), eq(PortletMode.VIEW)});
-        try {
-            dispatcher
-                    .setActionProxyFactory((ActionProxyFactory) mockActionFactory
-                            .proxy());
-            dispatcher.init((PortletConfig) mockConfig.proxy());
-            dispatcher.render((RenderRequest) mockRequest.proxy(),
-                    (RenderResponse) mockResponse.proxy());
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail("Error occured");
-        }
-    }
-
-    public void testProcessAction_ok() {
-        final Mock mockResponse = mock(ActionResponse.class);
-
-        PortletMode mode = PortletMode.VIEW;
-        Map initParams = new HashMap();
-        initParams.put("viewNamespace", "/view");
-        
-        Map requestParams = new HashMap();
-        requestParams.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction"});
-        requestParams.put(PortletActionConstants.MODE_PARAM, new String[]{mode.toString()});
-        
-        initPortletConfig(initParams, new HashMap());
-        initRequest(requestParams, new HashMap(), new HashMap(), new HashMap(), PortletMode.VIEW, WindowState.NORMAL, true, null);
-        setupActionFactory("/view", "testAction", "success", ValueStackFactory.getFactory().createValueStack());
-        Constraint[] paramConstraints = new Constraint[] {
-                eq(PortletActionConstants.EVENT_ACTION), same(mockActionProxy.proxy()) };
-
-        mockSession.expects(once()).method("setAttribute").with(
-                paramConstraints);
-
-        mockResponse.expects(once()).method("setRenderParameter").with(
-                new Constraint[] { eq(PortletActionConstants.EVENT_ACTION),
-                        eq("true") });
-
-        //mockSession.expects(once()).method("setAttribute").with(new Constraint[]{eq(PortletActionConstants.LAST_MODE), eq(PortletMode.VIEW)});
-        try {
-            dispatcher
-                    .setActionProxyFactory((ActionProxyFactory) mockActionFactory
-                            .proxy());
-            dispatcher.init((PortletConfig) mockConfig.proxy());
-            dispatcher.processAction((ActionRequest) mockRequest.proxy(),
-                    (ActionResponse) mockResponse.proxy());
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail("Error occured");
-        }
-    }
-    
-    /**
-     * Initialize the mock request (and as a result, the mock session)
-     * @param requestParams The request parameters
-     * @param requestAttributes The request attributes
-     * @param sessionParams The session attributes
-     * @param renderParams The render parameters. Will only be set if <code>isEvent</code> is <code>true</code>
-     * @param mode The portlet mode
-     * @param state The portlet window state
-     * @param isEvent <code>true</code> when the request is an ActionRequest.
-     * @param locale The locale. If <code>null</code>, the request will return <code>Locale.getDefault()</code>
-     */
-    private void initRequest(Map requestParams, Map requestAttributes, Map sessionParams, Map renderParams, PortletMode mode, WindowState state, boolean isEvent, Locale locale) {
-    	mockRequest = isEvent ? mock(ActionRequest.class) : mock(RenderRequest.class);
-    	mockSession = mock(PortletSession.class);
-    	mockSession.stubs().method(ANYTHING);
-    	mockRequest.stubs().method(ANYTHING);
-    	setupStub(sessionParams, mockSession, "getAttribute");
-    	mockSession.stubs().method("getAttributeNames").will(returnValue(Collections.enumeration(sessionParams.keySet())));
-    	setupParamStub(requestParams, mockRequest, "getParameter");
-    	setupStub(requestAttributes, mockRequest, "getAttribute");
-    	mockRequest.stubs().method("getAttributeNames").will(returnValue(Collections.enumeration(requestAttributes.keySet())));
-    	mockRequest.stubs().method("getParameterMap").will(returnValue(requestParams));
-    	mockRequest.stubs().method("getParameterNames").will(returnValue(Collections.enumeration(requestParams.keySet())));
-    	mockRequest.stubs().method("getPortletSession").will(returnValue(mockSession.proxy()));
-    	if(locale != null) {
-    		mockRequest.stubs().method("getLocale").will(returnValue(locale));
-    	}
-    	else {
-    		mockRequest.stubs().method("getLocale").will(returnValue(Locale.getDefault()));
-    	}
-    	mockRequest.stubs().method("getPortletMode").will(returnValue(mode));
-    	mockRequest.stubs().method("getWindowState").will(returnValue(state));
-    }
-    
-    /**
-     * @param requestParams
-     * @param mockRequest2
-     * @param string
-     */
-    private void setupParamStub(Map requestParams, Mock mockRequest, String method) {
-        Map newMap = new HashMap();
-        Iterator it = requestParams.keySet().iterator();
-        while(it.hasNext()) {
-            Object key = it.next();
-            String[] val = (String[])requestParams.get(key);
-            newMap.put(key, val[0]);
-        }
-        setupStub(newMap, mockRequest, method);
-        
-    }
-
-    /**
-     * Set up stubs for the mock.
-     * @param map The map containing the <code>key</code> and <code>values</code>. The key is the 
-     * expected parameter to <code>method</code>, and value is the value that should be returned from
-     * the stub.
-     * @param mock The mock to initialize.
-     * @param method The name of the method to stub.
-     */
-    private void setupStub(Map map, Mock mock, String method) {
-    	Iterator it = map.keySet().iterator();
-    	while(it.hasNext()) {
-    		Object key = it.next();
-    		Object val = map.get(key);
-    		mock.stubs().method(method).with(eq(key)).will(returnValue(val));
-    	}
-    }
-    
-    public void testModeChangeUsingPortletWidgets() {
-        final Mock mockResponse = mock(RenderResponse.class);
-        mockResponse.stubs().method(ANYTHING);
-        PortletMode mode = PortletMode.EDIT;
-
-        Map requestParams = new HashMap();
-        requestParams.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction"});
-        requestParams.put(EVENT_ACTION, new String[]{"false"});
-        requestParams.put(PortletActionConstants.MODE_PARAM, new String[]{PortletMode.VIEW.toString()});
-        
-        Map sessionMap = new HashMap();
-        
-        Map initParams = new HashMap();
-        initParams.put("viewNamespace", "/view");
-        initParams.put("editNamespace", "/edit");
-
-        initPortletConfig(initParams, new HashMap());
-        initRequest(requestParams, new HashMap(), sessionMap, new HashMap(), mode, WindowState.NORMAL, false, null);
-        setupActionFactory("/edit", "default", "success", ValueStackFactory.getFactory().createValueStack());
-
-        mockInvocation.expects(once()).method("getStack").will(
-                returnValue(null));
-        //mockSession.expects(once()).method("setAttribute").with(new Constraint[]{eq(PortletActionConstants.LAST_MODE), eq(PortletMode.VIEW)});
-        try {
-            dispatcher
-                    .setActionProxyFactory((ActionProxyFactory) mockActionFactory
-                            .proxy());
-            dispatcher.init((PortletConfig) mockConfig.proxy());
-            dispatcher.render((RenderRequest) mockRequest.proxy(),
-                    (RenderResponse) mockResponse.proxy());
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail("Error occured");
-        }
-    }
-    
-    public static void main(String[] args) {
-    	TestRunner.run(Jsr168DispatcherTest.class);
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java b/trunk/core/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java
deleted file mode 100644
index fb6ca2e..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.result;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletRequestDispatcher;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-import junit.textui.TestRunner;
-
-import org.apache.struts2.portlet.PortletActionConstants;
-import org.jmock.Mock;
-import org.jmock.cglib.MockObjectTestCase;
-import org.jmock.core.Constraint;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-
-/**
- * PortletResultTest. Insert description.
- * 
- */
-public class PortletResultTest extends MockObjectTestCase {
-    
-    Mock mockInvocation = null;
-    Mock mockConfig = null;
-    Mock mockCtx = null;
-    
-    public void setUp() throws Exception {
-        super.setUp();
-        mockInvocation = mock(ActionInvocation.class);
-        mockConfig = mock(PortletConfig.class);
-        mockCtx = mock(PortletContext.class);
-        
-        mockConfig.stubs().method(ANYTHING);
-        mockConfig.stubs().method("getPortletContext").will(returnValue(mockCtx.proxy()));
-        
-        Map paramMap = new HashMap();
-        Map sessionMap = new HashMap();
-        
-        Map context = new HashMap();
-        context.put(ActionContext.SESSION, sessionMap);
-        context.put(ActionContext.PARAMETERS, paramMap);
-        context.put(PortletActionConstants.PORTLET_CONFIG, mockConfig.proxy());
-        
-        ActionContext.setContext(new ActionContext(context));
-        
-        mockInvocation.stubs().method("getInvocationContext").will(returnValue(ActionContext.getContext()));
-        
-    }
-    
-    public void testDoExecute_render() {
-        Mock mockRequest = mock(RenderRequest.class);
-        Mock mockResponse = mock(RenderResponse.class);
-        Mock mockRd = mock(PortletRequestDispatcher.class);
-        Mock mockPrep = mock(PortletRequestDispatcher.class);
-        
-        RenderRequest req = (RenderRequest)mockRequest.proxy();
-        RenderResponse res = (RenderResponse)mockResponse.proxy();
-        PortletRequestDispatcher rd = (PortletRequestDispatcher)mockRd.proxy();
-        PortletConfig cfg = (PortletConfig)mockConfig.proxy();
-        PortletContext ctx = (PortletContext)mockCtx.proxy();
-        ActionInvocation inv = (ActionInvocation)mockInvocation.proxy();
-        
-        Constraint[] params = new Constraint[]{same(req), same(res)};
-        mockRd.expects(once()).method("include").with(params);
-        mockPrep.expects(once()).method("include").with(params);
-        mockCtx.expects(once()).method("getRequestDispatcher").with(eq("/WEB-INF/pages/testPage.jsp")).will(returnValue(rd));
-        mockCtx.expects(once()).method("getNamedDispatcher").with(eq("preparator")).will(returnValue(mockPrep.proxy()));
-        mockResponse.expects(once()).method("setContentType").with(eq("text/html"));
-        mockConfig.expects(once()).method("getPortletContext").will(returnValue(ctx));
-        
-        mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
-        
-        ActionContext ctxMap = ActionContext.getContext();
-        ctxMap.put(PortletActionConstants.RESPONSE, res);
-        ctxMap.put(PortletActionConstants.REQUEST, req);
-        ctxMap.put(PortletActionConstants.PORTLET_CONFIG, cfg);
-        ctxMap.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
-        
-        PortletResult result = new PortletResult();
-        try {
-            result.doExecute("/WEB-INF/pages/testPage.jsp", inv);
-        }
-        catch(Exception e) {
-            e.printStackTrace();
-            fail("Error occured!");
-        }
-        
-    }
-    
-    public void testDoExecute_event_locationIsAction() {
-        
-        Mock mockRequest = mock(ActionRequest.class);
-        Mock mockResponse = mock(ActionResponse.class);
-        
-        Constraint[] params = new Constraint[]{eq(PortletActionConstants.ACTION_PARAM), eq("testView")};
-        mockResponse.expects(once()).method("setRenderParameter").with(params);
-        params = new Constraint[]{eq(PortletActionConstants.MODE_PARAM), eq(PortletMode.VIEW.toString())};
-        mockResponse.expects(once()).method("setRenderParameter").with(params);
-        mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
-        ActionContext ctx = ActionContext.getContext();
-        
-        ctx.put(PortletActionConstants.REQUEST, mockRequest.proxy());
-        ctx.put(PortletActionConstants.RESPONSE, mockResponse.proxy());
-        ctx.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
-        
-        PortletResult result = new PortletResult();
-        try {
-            result.doExecute("testView.action", (ActionInvocation)mockInvocation.proxy());
-        }
-        catch(Exception e) {
-            e.printStackTrace();
-            fail("Error occured!");
-        }
-        
-    }
-    
-    public void testDoExecute_event_locationIsJsp() {
-        Mock mockRequest = mock(ActionRequest.class);
-        Mock mockResponse = mock(ActionResponse.class);
-        
-        Constraint[] params = new Constraint[]{eq(PortletActionConstants.ACTION_PARAM), eq("renderDirect")};
-        mockResponse.expects(once()).method("setRenderParameter").with(params);
-        params = new Constraint[]{eq("location"), eq("/WEB-INF/pages/testJsp.jsp")};
-        mockResponse.expects(once()).method("setRenderParameter").with(params);
-        params = new Constraint[]{eq(PortletActionConstants.MODE_PARAM), eq(PortletMode.VIEW.toString())};
-        mockResponse.expects(once()).method("setRenderParameter").with(params);
-        mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
-        
-        ActionContext ctx = ActionContext.getContext();
-        
-        ctx.put(PortletActionConstants.REQUEST, mockRequest.proxy());
-        ctx.put(PortletActionConstants.RESPONSE, mockResponse.proxy());
-        ctx.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
-        
-        PortletResult result = new PortletResult();
-        try {
-            result.doExecute("/WEB-INF/pages/testJsp.jsp", (ActionInvocation)mockInvocation.proxy());
-        }
-        catch(Exception e) {
-            e.printStackTrace();
-            fail("Error occured!");
-        }
-    }
-    
-    public void testDoExecute_event_locationHasQueryParams() {
-        Mock mockRequest = mock(ActionRequest.class);
-        Mock mockResponse = mock(ActionResponse.class);
-        
-        Constraint[] params = new Constraint[]{eq(PortletActionConstants.ACTION_PARAM), eq("testView")};
-        mockResponse.expects(once()).method("setRenderParameter").with(params);
-        params = new Constraint[]{eq("testParam1"), eq("testValue1")};
-        mockResponse.expects(once()).method("setRenderParameter").with(params);
-        params = new Constraint[]{eq("testParam2"), eq("testValue2")};
-        mockResponse.expects(once()).method("setRenderParameter").with(params);
-        params = new Constraint[]{eq(PortletActionConstants.MODE_PARAM), eq(PortletMode.VIEW.toString())};
-        mockResponse.expects(once()).method("setRenderParameter").with(params);
-        mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
-        
-        ActionContext ctx = ActionContext.getContext();
-        
-        ctx.put(PortletActionConstants.REQUEST, mockRequest.proxy());
-        ctx.put(PortletActionConstants.RESPONSE, mockResponse.proxy());
-        ctx.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
-        
-        PortletResult result = new PortletResult();
-        try {
-            result.doExecute("testView.action?testParam1=testValue1&testParam2=testValue2", (ActionInvocation)mockInvocation.proxy());
-        }
-        catch(Exception e) {
-            e.printStackTrace();
-            fail("Error occured!");
-        }
-    }
-    
-    public void testTitleAndContentType() throws Exception {
-        Mock mockRequest = mock(RenderRequest.class);
-        Mock mockResponse = mock(RenderResponse.class);
-        Mock mockRd = mock(PortletRequestDispatcher.class);
-        Mock mockPrep = mock(PortletRequestDispatcher.class);
-        
-        RenderRequest req = (RenderRequest)mockRequest.proxy();
-        RenderResponse res = (RenderResponse)mockResponse.proxy();
-        PortletRequestDispatcher rd = (PortletRequestDispatcher)mockRd.proxy();
-        PortletConfig cfg = (PortletConfig)mockConfig.proxy();
-        PortletContext ctx = (PortletContext)mockCtx.proxy();
-        
-        Constraint[] params = new Constraint[]{same(req), same(res)};
-        mockRd.expects(once()).method("include").with(params);
-        mockPrep.expects(once()).method("include").with(params);
-        mockCtx.expects(once()).method("getRequestDispatcher").with(eq("/WEB-INF/pages/testPage.jsp")).will(returnValue(rd));
-        mockCtx.expects(once()).method("getNamedDispatcher").with(eq("preparator")).will(returnValue(mockPrep.proxy()));
-        mockConfig.expects(once()).method("getPortletContext").will(returnValue(ctx));
-        
-        mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
-        
-        ActionContext ctxMap = ActionContext.getContext();
-        ctxMap.put(PortletActionConstants.RESPONSE, res);
-        ctxMap.put(PortletActionConstants.REQUEST, req);
-        ctxMap.put(PortletActionConstants.PORTLET_CONFIG, cfg);
-        ctxMap.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
-        
-        mockResponse.expects(atLeastOnce()).method("setTitle").with(eq("testTitle"));
-        mockResponse.expects(atLeastOnce()).method("setContentType").with(eq("testContentType"));
-        
-        PortletResult result = new PortletResult();
-        result.setTitle("testTitle");
-        result.setContentType("testContentType");
-        result.doExecute("/WEB-INF/pages/testPage.jsp", (ActionInvocation)mockInvocation.proxy());
-    }
-    
-    public void tearDown() throws Exception {
-        super.tearDown();
-        ActionContext.setContext(null);
-    }
-    
-    public static void main(String[] args) {
-        TestRunner.run(PortletResultTest.class);
-    }
-    
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java b/trunk/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java
deleted file mode 100644
index d5c4947..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.portlet.PortletMode;
-import javax.portlet.PortletURL;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.portlet.WindowState;
-
-import junit.framework.TestCase;
-
-import org.apache.struts2.portlet.context.PortletActionContext;
-import org.easymock.MockControl;
-
-import com.opensymphony.xwork2.ActionContext;
-
-/**
- */
-public class PortletUrlHelperTest extends TestCase {
-
-    RenderResponse renderResponse;
-
-    RenderRequest renderRequest;
-
-    PortletURL url;
-
-    MockControl renderResponseControl;
-
-    MockControl renderRequestControl;
-
-    MockControl portletUrlControl;
-
-    public void setUp() throws Exception {
-        super.setUp();
-
-        renderRequestControl = MockControl.createControl(RenderRequest.class);
-        renderResponseControl = MockControl.createControl(RenderResponse.class);
-        portletUrlControl = MockControl.createControl(PortletURL.class);
-
-        renderRequest = (RenderRequest) renderRequestControl.getMock();
-        renderResponse = (RenderResponse) renderResponseControl.getMock();
-        url = (PortletURL) portletUrlControl.getMock();
-
-        renderRequestControl.expectAndDefaultReturn(renderRequest
-                .getPortletMode(), PortletMode.VIEW);
-        renderRequestControl.expectAndDefaultReturn(renderRequest
-                .getWindowState(), WindowState.NORMAL);
-
-        Map modeNamespaceMap = new HashMap();
-        modeNamespaceMap.put("view", "/view");
-        modeNamespaceMap.put("edit", "/edit");
-        modeNamespaceMap.put("help", "/help");
-
-        Map context = new HashMap();
-        context.put(PortletActionContext.REQUEST, renderRequest);
-        context.put(PortletActionContext.RESPONSE, renderResponse);
-        context.put(PortletActionContext.PHASE,
-                PortletActionContext.RENDER_PHASE);
-        context.put(PortletActionContext.MODE_NAMESPACE_MAP, modeNamespaceMap);
-
-        ActionContext.setContext(new ActionContext(context));
-
-    }
-
-    public void testCreateRenderUrlWithNoModeOrState() throws Exception {
-        renderResponseControl.expectAndReturn(renderResponse.createRenderURL(),
-                url);
-
-        url.setPortletMode(PortletMode.VIEW);
-        url.setWindowState(WindowState.NORMAL);
-        url.setParameters(null);
-        portletUrlControl.setMatcher(MockControl.ALWAYS_MATCHER);
-        renderRequestControl.replay();
-        renderResponseControl.replay();
-        portletUrlControl.replay();
-        PortletUrlHelper.buildUrl("testAction", null,
-                new HashMap(), null, null, null);
-        portletUrlControl.verify();
-        renderRequestControl.verify();
-        renderResponseControl.verify();
-    }
-
-    public void testCreateRenderUrlWithDifferentPortletMode() throws Exception {
-        renderResponseControl.expectAndReturn(renderResponse.createRenderURL(),
-                url);
-
-        url.setPortletMode(PortletMode.EDIT);
-        url.setWindowState(WindowState.NORMAL);
-        url.setParameters(null);
-        portletUrlControl.setMatcher(MockControl.ALWAYS_MATCHER);
-        renderRequestControl.replay();
-        renderResponseControl.replay();
-        portletUrlControl.replay();
-        PortletUrlHelper.buildUrl("testAction", null,
-                new HashMap(), null, "edit", null);
-        portletUrlControl.verify();
-        renderRequestControl.verify();
-        renderResponseControl.verify();
-    }
-
-    public void testCreateRenderUrlWithDifferentWindowState() throws Exception {
-        renderResponseControl.expectAndReturn(renderResponse.createRenderURL(),
-                url);
-
-        url.setPortletMode(PortletMode.VIEW);
-        url.setWindowState(WindowState.MAXIMIZED);
-        url.setParameters(null);
-        portletUrlControl.setMatcher(MockControl.ALWAYS_MATCHER);
-        renderRequestControl.replay();
-        renderResponseControl.replay();
-        portletUrlControl.replay();
-        PortletUrlHelper.buildUrl("testAction", null,
-                new HashMap(), null, null, "maximized");
-        portletUrlControl.verify();
-        renderRequestControl.verify();
-        renderResponseControl.verify();
-    }
-
-    public void testCreateActionUrl() throws Exception {
-        renderResponseControl.expectAndReturn(renderResponse.createActionURL(),
-                url);
-
-        url.setPortletMode(PortletMode.VIEW);
-        url.setWindowState(WindowState.NORMAL);
-        url.setParameters(null);
-        portletUrlControl.setMatcher(MockControl.ALWAYS_MATCHER);
-        renderRequestControl.replay();
-        renderResponseControl.replay();
-        portletUrlControl.replay();
-        PortletUrlHelper.buildUrl("testAction", null,
-                new HashMap(), "action", null, null);
-        portletUrlControl.verify();
-        renderRequestControl.verify();
-        renderResponseControl.verify();
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/portlet/util/StrutsUtilTest.java b/trunk/core/src/test/java/org/apache/struts2/portlet/util/StrutsUtilTest.java
deleted file mode 100644
index 0bcf9da..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/portlet/util/StrutsUtilTest.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.portlet.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.TestAction;
-import org.apache.struts2.util.ListEntry;
-import org.apache.struts2.util.StrutsUtil;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.mock.web.MockRequestDispatcher;
-
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-/**
- * Test case for StrutsUtil.
- * 
- */
-public class StrutsUtilTest extends StrutsTestCase {
-	
-	protected ValueStack stack = null;
-	protected InternalMockHttpServletRequest request = null;
-	protected MockHttpServletResponse response = null;
-	protected StrutsUtil strutsUtil = null;
-	
-	public void testBeanMethod() throws Exception {
-		Object o = strutsUtil.bean("org.apache.struts2.TestAction");
-		assertNotNull(o);
-		assertTrue(o instanceof TestAction);
-	}
-	
-	public void testIsTrueMethod() throws Exception {
-		stack.push(new Object() {
-			public String getMyString() {
-				return "myString";
-			}
-			public boolean getMyBoolean(boolean bool) {
-				return bool;
-			}
-		});
-		assertTrue(strutsUtil.isTrue("myString == 'myString'"));
-		assertFalse(strutsUtil.isTrue("myString == 'myOtherString'"));
-		assertTrue(strutsUtil.isTrue("getMyBoolean(true)"));
-		assertFalse(strutsUtil.isTrue("getMyBoolean(false)"));
-	}
-	
-	public void testFindStringMethod() throws Exception {
-		stack.push(new Object() {
-			public String getMyString() {
-				return "myString";
-			}
-			public boolean getMyBoolean(boolean bool) {
-				return bool;
-			}
-		});
-		
-		assertEquals(strutsUtil.findString("myString"), "myString");
-		assertNull(strutsUtil.findString("myOtherString"));
-		assertEquals(strutsUtil.findString("getMyBoolean(true)"), "true");
-	}
-	
-	public void testIncludeMethod() throws Exception {
-		strutsUtil.include("/some/includedJspFile.jsp");
-		
-		// with include, this must have been created and should not be null
-		assertNotNull(request.getDispatcher()); 
-		// this must be true, indicating we actaully ask container to do an include
-		assertTrue(request.getDispatcher().included);
-	}
-	
-	
-	public void testUrlEncodeMethod() throws Exception {
-		assertEquals(
-				strutsUtil.urlEncode("http://www.opensymphony.com/action2/index.jsp?param1=value1"), 
-				"http%3A%2F%2Fwww.opensymphony.com%2Faction2%2Findex.jsp%3Fparam1%3Dvalue1");
-	}
-	
-	public void testBuildUrlMethod() throws Exception {
-		request.setContextPath("/myContextPath");
-		assertEquals(strutsUtil.buildUrl("/someUrl?param1=value1"), "/myContextPath/someUrl?param1=value1");
-	}
-	
-	
-	public void testFindValueMethod() throws Exception {
-		stack.push(new Object() {
-			public String getMyString() {
-				return "myString";
-			}
-			public boolean getMyBoolean(boolean bool) {
-				return bool;
-			}
-		});
-		Object obj1 = strutsUtil.findValue("myString", "java.lang.String");
-		Object obj2 = strutsUtil.findValue("getMyBoolean(true)", "java.lang.Boolean");
-		
-		assertNotNull(obj1);
-		assertNotNull(obj2);
-		assertTrue(obj1 instanceof String);
-		assertTrue(obj2 instanceof Boolean);
-		assertEquals(obj1, "myString");
-		assertEquals(obj2, Boolean.TRUE);
-	}
-	
-	
-
-	public void testGetTextMethod() throws Exception {
-		// this should be in xwork-messages.properties (included by default 
-		// by LocalizedTextUtil
-		assertNotNull(strutsUtil.getText("xwork.error.action.execution"));
-		assertEquals(strutsUtil.getText("xwork.error.action.execution"), "Error during Action invocation");
-	}
-	
-	
-	public void testGetContextMethod() throws Exception {
-		request.setContextPath("/myContext");
-		assertEquals(strutsUtil.getContext(), "/myContext");
-	}
-	
-	
-	public void testMakeSelectListMethod() throws Exception {
-		String[] selectedList = new String[] { "Car", "Airplane", "Bus" };
-		List list = new ArrayList();
-		list.add("Lorry");
-		list.add("Car");
-		list.add("Helicopter");
-		
-		stack.getContext().put("mySelectedList", selectedList);
-		stack.getContext().put("myList", list);
-		
-		List listMade = strutsUtil.makeSelectList("#mySelectedList", "#myList", null, null);
-		
-		assertEquals(listMade.size(), 3);
-		assertEquals(((ListEntry)listMade.get(0)).getKey(), "Lorry");
-		assertEquals(((ListEntry)listMade.get(0)).getValue(), "Lorry");
-		assertEquals(((ListEntry)listMade.get(0)).getIsSelected(), false);
-		assertEquals(((ListEntry)listMade.get(1)).getKey(), "Car");
-		assertEquals(((ListEntry)listMade.get(1)).getValue(), "Car");
-		assertEquals(((ListEntry)listMade.get(1)).getIsSelected(), true);
-		assertEquals(((ListEntry)listMade.get(2)).getKey(), "Helicopter");
-		assertEquals(((ListEntry)listMade.get(2)).getValue(), "Helicopter");
-		assertEquals(((ListEntry)listMade.get(2)).getIsSelected(), false);
-	}
-	
-	
-	public void testHtmlEncode() throws Exception {
-		assertEquals(
-				strutsUtil.htmlEncode("<html><head><title>some title</title><body>some content</body></html>"), 
-				"&lt;html&gt;&lt;head&gt;&lt;title&gt;some title&lt;/title&gt;&lt;body&gt;some content&lt;/body&gt;&lt;/html&gt;");
-	}
-	
-
-	public void testToInt() throws Exception {
-		assertEquals(strutsUtil.toInt(11l), 11);
-	}
-	
-	
-	public void testToLong() throws Exception {
-		assertEquals(strutsUtil.toLong(11), 11l);
-	}
-	
-	
-	public void testToString() throws Exception {
-		assertEquals(strutsUtil.toString(1), "1");
-		assertEquals(strutsUtil.toString(11l), "11");
-	}
-	
-	
-	// === Junit Hook
-	
-	protected void setUp() throws Exception {
-		super.setUp();
-		stack = ValueStackFactory.getFactory().createValueStack();
-		request = new InternalMockHttpServletRequest();
-		response = new MockHttpServletResponse();
-		strutsUtil = new StrutsUtil(stack, request, response);
-	}
-	
-	protected void tearDown() throws Exception {
-		stack = null;
-		request = null;
-		response = null;
-		strutsUtil = null;
-		super.tearDown();
-	}
-	
-	
-	
-	// === internal class to assist in testing
-	
-	class InternalMockHttpServletRequest extends MockHttpServletRequest {
-		InternalMockRequestDispatcher dispatcher = null;
-		public RequestDispatcher getRequestDispatcher(String path) {
-			dispatcher = new InternalMockRequestDispatcher(path);
-			return dispatcher;
-		}
-		
-		public InternalMockRequestDispatcher getDispatcher() { 
-			return dispatcher;
-		}
-	}
-	
-	class InternalMockRequestDispatcher extends MockRequestDispatcher {
-		private String url;
-		boolean included = false;
-		public InternalMockRequestDispatcher(String url) {
-			super(url);
-			this.url = url;
-		}
-		public void include(ServletRequest servletRequest, ServletResponse servletResponse) {
-			if (servletResponse instanceof MockHttpServletResponse) {
-				((MockHttpServletResponse) servletResponse).setIncludedUrl(this.url);
-			}
-			included = true;
-		}
-	}
-	
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java b/trunk/core/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java
deleted file mode 100644
index 63d1c5c..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.spring;
-
-import javax.servlet.ServletContext;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.config.Settings;
-import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
-import org.springframework.mock.web.MockServletContext;
-import org.springframework.web.context.ConfigurableWebApplicationContext;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.XmlWebApplicationContext;
-
-/**
- * Unit test for {@link StrutsSpringObjectFactory}.
- *
- */
-public class StrutsSpringObjectFactoryTest extends StrutsTestCase {
-
-    public void testNoSpringContext() throws Exception {
-        // to cover situations where there will be logged an error
-        StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory();
-        ServletContext msc = (ServletContext) new MockServletContext();
-        fac.init(msc);
-        
-        assertEquals(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, fac.getAutowireStrategy());
-    }
-
-    public void testWithSpringContext() throws Exception {
-        StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory();
-
-        // autowire by constructure, we try a non default setting in this unit test
-        Settings.set(StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE, "constructor");
-
-        ConfigurableWebApplicationContext ac = new XmlWebApplicationContext();
-        ServletContext msc = (ServletContext) new MockServletContext();
-        msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, ac);
-        ac.setServletContext(msc);
-        ac.setConfigLocations(new String[] {"org/apache/struts2/spring/StrutsSpringObjectFactoryTest-applicationContext.xml"});
-        ac.refresh();
-
-        fac.init(msc);
-
-        assertEquals(AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, fac.getAutowireStrategy());
-    }
-
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/util/CounterTest.java b/trunk/core/src/test/java/org/apache/struts2/util/CounterTest.java
deleted file mode 100644
index 4295e91..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/util/CounterTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import junit.framework.TestCase;
-
-
-/**
- */
-public class CounterTest extends TestCase {
-
-    Counter c = new Counter();
-
-
-    public void testCurrentAfterNext() {
-        long next = c.getNext();
-        long current = c.getCurrent();
-        assertEquals(next + 1, current);
-    }
-
-    public void testCurrentBeforeNext() {
-        long current = c.getCurrent();
-        long next = c.getNext();
-        assertEquals(current, next);
-    }
-
-    public void testWrap() {
-        c.setWrap(true);
-        c.setLast(1);
-
-        long a = c.getNext();
-        long b = c.getNext();
-        assertEquals(1, a);
-        assertEquals(1, b);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/util/InvocationSessionStoreTest.java b/trunk/core/src/test/java/org/apache/struts2/util/InvocationSessionStoreTest.java
deleted file mode 100644
index f07f12c..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/util/InvocationSessionStoreTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.StrutsTestCase;
-
-import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- * InvocationSessionStoreTest
- *
- */
-public class InvocationSessionStoreTest extends StrutsTestCase {
-
-    private static final String INVOCATION_KEY = "org.apache.struts2.util.InvocationSessionStoreTest.invocation";
-    private static final String TOKEN_VALUE = "org.apache.struts2.util.InvocationSessionStoreTest.token";
-
-
-    private ActionInvocation invocation;
-    private Map session;
-    private Mock invocationMock;
-    private ValueStack stack;
-
-
-    public void testStore() {
-        assertNull(InvocationSessionStore.loadInvocation(INVOCATION_KEY, TOKEN_VALUE));
-        InvocationSessionStore.storeInvocation(INVOCATION_KEY, TOKEN_VALUE, invocation);
-        assertNotNull(InvocationSessionStore.loadInvocation(INVOCATION_KEY, TOKEN_VALUE));
-        assertEquals(invocation, InvocationSessionStore.loadInvocation(INVOCATION_KEY, TOKEN_VALUE));
-    }
-
-    public void testValueStackReset() {
-        ActionContext actionContext = ActionContext.getContext();
-        assertEquals(stack, actionContext.getValueStack());
-        InvocationSessionStore.storeInvocation(INVOCATION_KEY, TOKEN_VALUE, invocation);
-        actionContext.setValueStack(null);
-        assertNull(actionContext.getValueStack());
-        InvocationSessionStore.loadInvocation(INVOCATION_KEY, TOKEN_VALUE);
-        assertEquals(stack, actionContext.getValueStack());
-    }
-
-    protected void setUp() throws Exception {
-        stack = ValueStackFactory.getFactory().createValueStack();
-
-        ActionContext actionContext = new ActionContext(stack.getContext());
-        ActionContext.setContext(actionContext);
-
-        session = new HashMap();
-        actionContext.setSession(session);
-
-        invocationMock = new Mock(ActionInvocation.class);
-        invocation = (ActionInvocation) invocationMock.proxy();
-
-        actionContext.setValueStack(stack);
-        invocationMock.matchAndReturn("getStack", stack);
-
-        Mock proxyMock = new Mock(ActionProxy.class);
-        proxyMock.matchAndReturn("getInvocation", invocation);
-
-        ActionProxy proxy = (ActionProxy) proxyMock.proxy();
-
-        invocationMock.matchAndReturn("getProxy", proxy);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/util/PrefixTrieTest.java b/trunk/core/src/test/java/org/apache/struts2/util/PrefixTrieTest.java
deleted file mode 100644
index ec98c01..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/util/PrefixTrieTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import junit.framework.TestCase;
-
-/**
- */
-public class PrefixTrieTest extends TestCase {
-
-    public void testPutGet() {
-        PrefixTrie trie = new PrefixTrie();
-        Object foo = new Object();
-        trie.put("foo:", foo);
-        Object a = new Object();
-        trie.put("a:", a);
-        assertSame(foo, trie.get("foo:bar"));
-        assertSame(a, trie.get("a:bar"));
-        assertNull(trie.get("tee:bar"));
-        assertNull(trie.get("foobar"));        
-    }
-}
-
diff --git a/trunk/core/src/test/java/org/apache/struts2/util/StrutsTypeConverterTest.java b/trunk/core/src/test/java/org/apache/struts2/util/StrutsTypeConverterTest.java
deleted file mode 100644
index 5010c5a..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/util/StrutsTypeConverterTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-
-/**
- * Test case for Struts Type Converter.
- * 
- */
-public class StrutsTypeConverterTest extends TestCase {
-
-	/**
-	 * Typically form Struts -> html
-	 * 
-	 * @throws Exception
-	 */
-	public void testConvertToString() throws Exception {
-		InternalStrutsTypeConverter strutsTypeConverter = new InternalStrutsTypeConverter();
-		strutsTypeConverter.convertValue(new HashMap(), "", String.class);
-		assertTrue(strutsTypeConverter.isConvertToString);
-		assertEquals(strutsTypeConverter.objToBeConverted, "");
-	}
-	
-	/**
-	 * Typically form html -> Struts
-	 * 
-	 * @throws Exception
-	 */
-	public void testConvertFromString() throws Exception {
-		InternalStrutsTypeConverter strutsTypeConverter = new InternalStrutsTypeConverter();
-		strutsTypeConverter.convertValue(new HashMap(), "12/12/1997", Date.class);
-		assertTrue(strutsTypeConverter.isConvertFromString);
-		assertTrue(strutsTypeConverter.objToBeConverted instanceof String[]);
-		assertEquals(((String[])strutsTypeConverter.objToBeConverted).length, 1);
-	}
-	
-	/**
-	 * Typically from html -> Struts (in array due to the nature of html, param 
-	 * being able to have many values).
-	 * 
-	 * @throws Exception
-	 */
-	public void testConvertFromStringInArrayForm() throws Exception {
-		InternalStrutsTypeConverter strutsTypeConverter = new InternalStrutsTypeConverter();
-		strutsTypeConverter.convertValue(new HashMap(), new String[] { "12/12/1997", "1/1/1977" }, Date.class);
-		assertTrue(strutsTypeConverter.isConvertFromString);
-		assertTrue(strutsTypeConverter.objToBeConverted instanceof String[]);
-		assertEquals(((String[])strutsTypeConverter.objToBeConverted).length, 2);
-	}
-	
-	
-	public void testFallbackConversion() throws Exception {
-		InternalStrutsTypeConverter strutsTypeConverter = new InternalStrutsTypeConverter();
-		strutsTypeConverter.convertValue(new HashMap(), new Object(), Date.class);
-		assertTrue(strutsTypeConverter.fallbackConversion);
-	}
-	
-	// === internal class for testing 
-	class InternalStrutsTypeConverter extends StrutsTypeConverter {
-
-		boolean isConvertFromString = false;
-		boolean isConvertToString = false;
-		boolean fallbackConversion = false;
-		
-		Object objToBeConverted;
-		
-		public Object convertFromString(Map context, String[] values, Class toClass) {
-			isConvertFromString = true;
-			objToBeConverted = values;
-			return null;
-		}
-
-		public String convertToString(Map context, Object o) {
-			isConvertToString = true;
-			objToBeConverted = o;
-			return null;
-		}
-		
-		protected Object performFallbackConversion(Map context, Object o, Class toClass) {
-			fallbackConversion = true;
-			return null;
-		}
-		
-	}
-	
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java b/trunk/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java
deleted file mode 100644
index c9f0d81..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import com.opensymphony.xwork2.ActionContext;
-
-
-/**
- * TokenHelperTest
- *
- */
-public class TokenHelperTest extends TestCase {
-
-    private Map session;
-
-
-    public void testSetToken() {
-        String token = TokenHelper.setToken();
-        assertEquals(token, session.get(TokenHelper.DEFAULT_TOKEN_NAME));
-    }
-
-    public void testSetTokenWithName() {
-        String tokenName = "myTestToken";
-        String token = TokenHelper.setToken(tokenName);
-        assertEquals(token, session.get(tokenName));
-    }
-
-    public void testValidToken() {
-        String tokenName = "validTokenTest";
-        String token = TokenHelper.setToken(tokenName);
-        assertEquals(token, session.get(tokenName));
-        ActionContext.getContext().getParameters().put(TokenHelper.TOKEN_NAME_FIELD, new String[]{tokenName});
-        ActionContext.getContext().getParameters().put(tokenName, new String[]{token});
-        assertTrue(TokenHelper.validToken());
-    }
-
-    protected void setUp() throws Exception {
-        session = new HashMap();
-        Map params = new HashMap();
-        Map ctxMap = new HashMap();
-        ctxMap.put(ActionContext.SESSION, session);
-        ctxMap.put(ActionContext.PARAMETERS, params);
-        ActionContext ctx = new ActionContext(ctxMap);
-        ActionContext.setContext(ctx);
-    }
-
-    protected void tearDown() {
-        ActionContext.setContext(null);
-    }
-}
-
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java b/trunk/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java
deleted file mode 100644
index 6c87ea2..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views;
-
-import junit.framework.TestCase;
-
-import org.apache.struts2.components.template.FreemarkerTemplateEngine;
-import org.apache.struts2.components.template.JspTemplateEngine;
-import org.apache.struts2.components.template.Template;
-import org.apache.struts2.components.template.TemplateEngine;
-import org.apache.struts2.components.template.TemplateEngineManager;
-import org.apache.struts2.components.template.VelocityTemplateEngine;
-import org.apache.struts2.config.Settings;
-
-/**
- * TemplateEngineManagerTest
- *
- */
-public class TemplateEngineManagerTest extends TestCase {
-    public void testTemplateTypeFromTemplateNameAndDefaults() {
-        Settings.setInstance(new Settings() {
-            public boolean isSetImpl(String name) {
-                return name.equals(TemplateEngineManager.DEFAULT_TEMPLATE_TYPE_CONFIG_KEY);
-            }
-
-            public String getImpl(String aName) throws IllegalArgumentException {
-                if (aName.equals(TemplateEngineManager.DEFAULT_TEMPLATE_TYPE_CONFIG_KEY)) {
-                    return "jsp";
-                }
-                return null;
-            }
-        });
-        TemplateEngine engine = TemplateEngineManager.getTemplateEngine(new Template("/template", "simple", "foo"), null);
-        assertTrue(engine instanceof JspTemplateEngine);
-        engine = TemplateEngineManager.getTemplateEngine(new Template("/template", "simple", "foo.vm"), null);
-        assertTrue(engine instanceof VelocityTemplateEngine);
-    }
-
-    public void testTemplateTypeOverrides() {
-        TemplateEngine engine = TemplateEngineManager.getTemplateEngine(new Template("/template", "simple", "foo"), "ftl");
-        assertTrue(engine instanceof FreemarkerTemplateEngine);
-        engine = TemplateEngineManager.getTemplateEngine(new Template("/template", "simple", "foo.vm"), "ftl");
-        assertTrue(engine instanceof VelocityTemplateEngine);
-        engine = TemplateEngineManager.getTemplateEngine(new Template("/template", "simple", "foo.ftl"), "");
-        assertTrue(engine instanceof FreemarkerTemplateEngine);
-    }
-
-    public void testTemplateTypeUsesDefaultWhenNotSetInConfiguration() {
-        TemplateEngine engine = TemplateEngineManager.getTemplateEngine(new Template("/template", "simple", "foo"), null);
-        Template template = new Template("/template", "simple", "foo." + TemplateEngineManager.DEFAULT_TEMPLATE_TYPE);
-        TemplateEngine defaultTemplateEngine = TemplateEngineManager.getTemplateEngine(template, null);
-        assertTrue(engine.getClass().equals(defaultTemplateEngine.getClass()));
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        Settings.setInstance(null);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerManagerTest.java b/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerManagerTest.java
deleted file mode 100644
index b9ed84e..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerManagerTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.views.jsp.StrutsMockServletContext;
-
-/**
- * Test case for FreemarkerManager 
- * 
- */
-public class FreemarkerManagerTest extends StrutsTestCase {
-	
-	public void testIfStrutsEncodingIsSetProperty() throws Exception {
-		Settings.set(StrutsConstants.STRUTS_I18N_ENCODING, "UTF-8");
-		StrutsMockServletContext servletContext = new StrutsMockServletContext();
-		servletContext.setAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY, null);
-		freemarker.template.Configuration conf = FreemarkerManager.getInstance().getConfiguration(servletContext);
-		assertEquals(conf.getDefaultEncoding(), "UTF-8");
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerTest.java b/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerTest.java
deleted file mode 100644
index b4137bb..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.apache.struts2.util.ListEntry;
-import org.apache.struts2.util.StrutsUtil;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-import freemarker.ext.beans.CollectionModel;
-import freemarker.template.ObjectWrapper;
-
-
-/**
- */
-public class FreemarkerTest extends TestCase {
-
-    TestAction testAction = null;
-
-
-    /**
-     *
-     */
-    public FreemarkerTest(String name) {
-        super(name);
-    }
-
-
-    public void testSelectHelper() {
-        StrutsUtil wwUtil = new StrutsUtil(ActionContext.getContext().getValueStack(), null, null);
-
-        List selectList = null;
-
-        selectList = wwUtil.makeSelectList("ignored", "stringList", null, null);
-        assertEquals("one", ((ListEntry) selectList.get(0)).getKey());
-        assertEquals("one", ((ListEntry) selectList.get(0)).getValue());
-
-        selectList = wwUtil.makeSelectList("ignored", "beanList", "name", "value");
-        assertEquals("one", ((ListEntry) selectList.get(0)).getKey());
-        assertEquals("1", ((ListEntry) selectList.get(0)).getValue());
-    }
-
-    public void testValueStackMode() throws Exception {
-        ScopesHashModel model = new ScopesHashModel(ObjectWrapper.BEANS_WRAPPER, null, null, ActionContext.getContext().getValueStack());
-
-        CollectionModel stringList = null;
-
-        stringList = (CollectionModel) model.get("stringList");
-        assertEquals("one", stringList.get(0).toString());
-
-        assertEquals("one", model.get("stringList[0]").toString());
-        assertEquals("one", model.get("beanList[0].name").toString());
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        ActionContext.setContext(new ActionContext(stack.getContext()));
-
-        testAction = new TestAction();
-        ActionContext.getContext().getValueStack().push(testAction);
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        ActionContext.setContext(null);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/freemarker/TestAction.java b/trunk/core/src/test/java/org/apache/struts2/views/freemarker/TestAction.java
deleted file mode 100644
index e3ee493..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/freemarker/TestAction.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-
-/**
- */
-public class TestAction extends ActionSupport {
-
-	private static final long serialVersionUID = -762413863731432302L;
-
-    public TestAction() {
-        super();
-    }
-
-
-    public List getBeanList() {
-        List list = new ArrayList();
-        list.add(new TestBean("one", "1"));
-        list.add(new TestBean("two", "2"));
-        list.add(new TestBean("three", "3"));
-
-        return list;
-    }
-
-    public List getStringList() {
-        List list = new ArrayList();
-        list.add("one");
-        list.add("two");
-        list.add("three");
-
-        return list;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/freemarker/TestBean.java b/trunk/core/src/test/java/org/apache/struts2/views/freemarker/TestBean.java
deleted file mode 100644
index 64da713..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/freemarker/TestBean.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.freemarker;
-
-
-/**
- */
-public class TestBean {
-
-    private String pName = null;
-    private String pValue = null;
-
-
-    public TestBean(String name, String value) {
-        super();
-        setName(name);
-        setValue(value);
-    }
-
-
-    public void setName(String aName) {
-        pName = aName;
-    }
-
-    /**
-     * Bean Property String Name
-     */
-    public String getName() {
-        return pName;
-    }
-
-    public void setValue(String aValue) {
-        pValue = aValue;
-    }
-
-    /**
-     * Bean Property String Value
-     */
-    public String getValue() {
-        return pValue;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java
deleted file mode 100644
index d8e622b..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.io.File;
-import java.io.StringWriter;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspWriter;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.TestAction;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.ApplicationMap;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.dispatcher.RequestMap;
-import org.apache.struts2.dispatcher.SessionMap;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- * Base class to extend for unit testing UI Tags.
- *
- */
-public abstract class AbstractTagTest extends StrutsTestCase {
-    protected Action action;
-    protected Map context;
-    protected Map session;
-    protected ValueStack stack;
-
-    /**
-     * contains the buffer that our unit test will write to.  we can later verify this buffer for correctness.
-     */
-    protected StringWriter writer;
-    protected StrutsMockHttpServletRequest request;
-    protected StrutsMockPageContext pageContext;
-    protected HttpServletResponse response;
-    protected StrutsMockServletContext servletContext;
-
-    /**
-     * Constructs the action that we're going to test against.  For most UI tests, this default action should be enough.
-     * However, simply override getAction to return a custom Action if you need something more sophisticated.
-     *
-     * @return the Action to be added to the ValueStack as part of the unit test
-     */
-    public Action getAction() {
-        return new TestAction();
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        /**
-         * create our standard mock objects
-         */
-        action = this.getAction();
-        stack = ValueStackFactory.getFactory().createValueStack();
-        context = stack.getContext();
-        stack.push(action);
-
-        request = new StrutsMockHttpServletRequest();
-        request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
-        response = new StrutsMockHttpServletResponse();
-        request.setSession(new StrutsMockHttpSession());
-        request.setupGetServletPath("/");
-
-        writer = new StringWriter();
-
-        JspWriter jspWriter = new StrutsMockJspWriter(writer);
-
-        servletContext = new StrutsMockServletContext();
-        servletContext.setRealPath(new File("nosuchfile.properties").getAbsolutePath());
-        servletContext.setServletInfo("Resin");
-
-        pageContext = new StrutsMockPageContext();
-        pageContext.setRequest(request);
-        pageContext.setResponse(response);
-        pageContext.setJspWriter(jspWriter);
-        pageContext.setServletContext(servletContext);
-
-        Dispatcher du = new Dispatcher(pageContext.getServletContext());
-        Dispatcher.setInstance(du);
-        du.setConfigurationManager(configurationManager);
-        session = new SessionMap(request);
-        Map extraContext = du.createContextMap(new RequestMap(request),
-                request.getParameterMap(),
-                session,
-                new ApplicationMap(pageContext.getServletContext()),
-                request,
-                response,
-                pageContext.getServletContext());
-        // let's not set the locale -- there is a test that checks if Dispatcher actually picks this up...
-        // ... but generally we want to just use no locale (let it stay system default)
-        extraContext.remove(ActionContext.LOCALE);
-        stack.getContext().putAll(extraContext);
-
-        context.put(ServletActionContext.HTTP_REQUEST, request);
-        context.put(ServletActionContext.HTTP_RESPONSE, response);
-        context.put(ServletActionContext.SERVLET_CONTEXT, servletContext);
-
-        ActionContext.setContext(new ActionContext(context));
-
-        Settings.setInstance(null);
-    }
-
-    protected void tearDown() throws Exception {
-        pageContext.verify();
-        request.verify();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java
deleted file mode 100644
index 77bda4a..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.views.jsp.ui.AbstractUITag;
-
-import com.opensymphony.xwork2.ActionContext;
-
-
-/**
- */
-public abstract class AbstractUITagTest extends AbstractTagTest {
-
-    private static final Log LOG = LogFactory.getLog(AbstractUITagTest.class);
-
-    static final String FREEMARKER_ERROR_EXPECTATION = "Java backtrace for programmers:";
-
-    /**
-     * Simple helper class for generic tag property testing mechanism. Basically it holds a property name, a property
-     * value and an output to be expected in tag output when property was accordingly set.
-     *
-     * @author <a href="mailto:gielen@it-neering.net">Rene Gielen</a>
-     */
-    public class PropertyHolder {
-        String name, value, expectation;
-
-        public String getName() {
-            return name;
-        }
-
-        public String getValue() {
-            return value;
-        }
-
-        public String getExpectation() {
-            return expectation;
-        }
-
-        /**
-         * Construct simple holder with default expectation.
-         *
-         * @param name  The property name to use.
-         * @param value The property value to set.
-         * @see #PropertyHolder(String, String, String)
-         */
-        public PropertyHolder(String name, String value) {
-            this(name, value, null);
-        }
-
-        /**
-         * Construct property holder.
-         *
-         * @param name        The property name to use.
-         * @param value       The property value to set.
-         * @param expectation The expected String to occur in tag output caused by setting given tag property. If
-         *                    <tt>null</tt>, will be set to <pre>name + "=\"" + value + "\"</pre>.
-         */
-        public PropertyHolder(String name, String value, String expectation) {
-            this.name = name;
-            this.value = value;
-            if (expectation != null) {
-                this.expectation = expectation;
-            } else {
-                this.expectation = name + "=\"" + value + "\"";
-            }
-        }
-
-        /**
-         * Convenience method for easily adding anonymous constructed instance to a given map, with {@link #getName()}
-         * as key.
-         *
-         * @param map The map to place this instance in.
-         */
-        public void addToMap(Map map) {
-            if (map != null) {
-                map.put(this.name, this);
-            }
-        }
-    }
-
-    /**
-     * Simple Helper for setting bean properties. Although BeanUtils from oscore should provide bean property setting
-     * functionality, it does not work (at least with my JDK 1.5.0_05), failing in jdk's PropertyDescriptor constructor.
-     * This implementation works safely in any case, and does not add dependency on commons-beanutils for building.
-     * TODO: Check how we can remove this crap again.
-     *
-     * @author <a href="mailto:gielen@it-neering.net">Rene Gielen</a>
-     */
-    public class BeanHelper {
-        Map propDescriptors;
-        Object bean;
-
-        public BeanHelper(Object bean) {
-            this.bean = bean;
-
-            try {
-                PropertyDescriptor[] pds;
-                pds = Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors();
-                propDescriptors = new HashMap(pds.length + 1, 1f);
-                for (int i = 0; i < pds.length; i ++) {
-                    propDescriptors.put(pds[i].getName(), pds[i]);
-                }
-            } catch (IntrospectionException e) {
-                e.printStackTrace();
-            }
-        }
-
-        public void set(String name, Object value) throws IllegalAccessException, InvocationTargetException {
-            PropertyDescriptor pd = (PropertyDescriptor) propDescriptors.get(name);
-
-            if (pd != null) {
-                pd.getWriteMethod().invoke(bean, new Object[]{value});
-            }
-        }
-
-    }
-
-    /**
-     * Initialize a map of {@link PropertyHolder} for generic tag property testing. Will be used when calling {@link
-     * #verifyGenericProperties(org.apache.struts2.views.jsp.ui.AbstractUITag, String, String[])} as properties to
-     * verify.<p/> This implementation defines testdata for all common AbstractUITag properties and may be overridden in
-     * subclasses.
-     *
-     * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()}
-     *         as key.
-     */
-    protected Map initializedGenericTagTestProperties() {
-        Map result = new HashMap();
-        new PropertyHolder("name", "someName").addToMap(result);
-        new PropertyHolder("id", "someId").addToMap(result);
-        new PropertyHolder("cssClass", "cssClass1", "class=\"cssClass1\"").addToMap(result);
-        new PropertyHolder("cssStyle", "cssStyle1", "style=\"cssStyle1\"").addToMap(result);
-        new PropertyHolder("title", "someTitle").addToMap(result);
-        new PropertyHolder("disabled", "true", "disabled=\"disabled\"").addToMap(result);
-        //new PropertyHolder("label", "label", "label=\"label\"").addToMap(result);
-        //new PropertyHolder("required", "someTitle").addToMap(result);
-        new PropertyHolder("tabindex", "99").addToMap(result);
-        new PropertyHolder("value", "someValue").addToMap(result);
-        new PropertyHolder("onclick", "onclick1").addToMap(result);
-        new PropertyHolder("ondblclick", "ondblclick1").addToMap(result);
-        new PropertyHolder("onmousedown", "onmousedown1").addToMap(result);
-        new PropertyHolder("onmouseup", "onmouseup1").addToMap(result);
-        new PropertyHolder("onmouseover", "onmouseover1").addToMap(result);
-        new PropertyHolder("onmousemove", "onmousemove1").addToMap(result);
-        new PropertyHolder("onmouseout", "onmouseout1").addToMap(result);
-        new PropertyHolder("onfocus", "onfocus1").addToMap(result);
-        new PropertyHolder("onblur", "onblur1").addToMap(result);
-        new PropertyHolder("onkeypress", "onkeypress1").addToMap(result);
-        new PropertyHolder("onkeydown", "onkeydown1").addToMap(result);
-        new PropertyHolder("onkeyup", "onkeyup1").addToMap(result);
-        new PropertyHolder("onclick", "onclick1").addToMap(result);
-        new PropertyHolder("onselect", "onchange").addToMap(result);
-        return result;
-    }
-
-    /**
-     * Do a generic verification that setting certain properties on a tag causes expected output regarding this
-     * property. In most cases you would not call this directly, instead use {@link
-     * #verifyGenericProperties(org.apache.struts2.views.jsp.ui.AbstractUITag, String, String[])}.
-     *
-     * @param tag              The fresh created tag instance to test.
-     * @param theme            The theme to use. If <tt>null</tt>, use configured default theme.
-     * @param propertiesToTest Map of {@link PropertyHolder}s, defining properties to test.
-     * @param exclude          Names of properties to exclude from particular test.
-     * @throws Exception
-     */
-    public void verifyGenericProperties(AbstractUITag tag, String theme, Map propertiesToTest, String[] exclude) throws Exception {
-        if (tag != null && propertiesToTest != null) {
-            List excludeList;
-            if (exclude != null) {
-                excludeList = Arrays.asList(exclude);
-            } else {
-                excludeList = Collections.EMPTY_LIST;
-            }
-
-            tag.setPageContext(pageContext);
-            if (theme != null) {
-                tag.setTheme(theme);
-            }
-
-            BeanHelper beanHelper = new BeanHelper(tag);
-            Iterator it = propertiesToTest.values().iterator();
-            while (it.hasNext()) {
-                PropertyHolder propertyHolder = (PropertyHolder) it.next();
-                if (! excludeList.contains(propertyHolder.getName())) {
-                    beanHelper.set(propertyHolder.getName(), propertyHolder.getValue());
-                }
-            }
-            tag.doStartTag();
-            tag.doEndTag();
-            String writerString = normalize(writer.toString(), true);
-            if (LOG.isInfoEnabled()) {
-                LOG.info("AbstractUITagTest - [verifyGenericProperties]: Tag output is " + writerString);
-            }
-
-            assertTrue("Freemarker error detected in tag output: " + writerString, writerString.indexOf(FREEMARKER_ERROR_EXPECTATION) == -1);
-
-            it = propertiesToTest.values().iterator();
-            while (it.hasNext()) {
-                PropertyHolder propertyHolder = (PropertyHolder) it.next();
-                if (! excludeList.contains(propertyHolder.getName())) {
-                    assertTrue("Expected to find: " + propertyHolder.getExpectation(), writerString.indexOf(propertyHolder.getExpectation()) > -1);
-                }
-            }
-        }
-    }
-
-    /**
-     * Do a generic verification that setting certain properties on a tag causes expected output regarding this
-     * property. Which properties to test with which expectations will be determined by the Map retrieved by {@link #initializedGenericTagTestProperties()}.
-     *
-     * @param tag              The fresh created tag instance to test.
-     * @param theme            The theme to use. If <tt>null</tt>, use configured default theme.
-     * @param exclude          Names of properties to exclude from particular test.
-     * @throws Exception
-     */
-    public void verifyGenericProperties(AbstractUITag tag, String theme, String[] exclude) throws Exception {
-        verifyGenericProperties(tag, theme, initializedGenericTagTestProperties(), exclude);
-    }
-
-    /**
-     * Attempt to verify the contents of this.writer against the contents of the URL specified.  verify() performs a
-     * trim on both ends
-     *
-     * @param url the HTML snippet that we want to validate against
-     * @throws Exception if the validation failed
-     */
-    public void verify(URL url) throws Exception {
-        if (url == null) {
-            fail("unable to verify a null URL");
-        } else if (this.writer == null) {
-            fail("AbstractJspWriter.writer not initialized.  Unable to verify");
-        }
-
-        StringBuffer buffer = new StringBuffer(128);
-        InputStream in = url.openStream();
-        byte[] buf = new byte[4096];
-        int nbytes;
-
-        while ((nbytes = in.read(buf)) > 0) {
-            buffer.append(new String(buf, 0, nbytes));
-        }
-
-        in.close();
-
-        /**
-         * compare the trimmed values of each buffer and make sure they're equivalent.  however, let's make sure to
-         * normalize the strings first to account for line termination differences between platforms.
-         */
-        String writerString = normalize(writer.toString(), true);
-        String bufferString = normalize(buffer.toString(), true);
-
-        assertEquals(bufferString, writerString);
-    }
-
-    /**
-     * Attempt to verify the contents of this.writer against the contents of the URL specified.  verify() performs a
-     * trim on both ends
-     *
-     * @param url the HTML snippet that we want to validate against
-     * @throws Exception if the validation failed
-     */
-    public void verify(URL url, String[] excluded) throws Exception {
-        if (url == null) {
-            fail("unable to verify a null URL");
-        } else if (this.writer == null) {
-            fail("AbstractJspWriter.writer not initialized.  Unable to verify");
-        }
-
-        StringBuffer buffer = new StringBuffer(128);
-        InputStream in = url.openStream();
-        byte[] buf = new byte[4096];
-        int nbytes;
-
-        while ((nbytes = in.read(buf)) > 0) {
-            buffer.append(new String(buf, 0, nbytes));
-        }
-
-        in.close();
-
-        /**
-         * compare the trimmed values of each buffer and make sure they're equivalent.  however, let's make sure to
-         * normalize the strings first to account for line termination differences between platforms.
-         */
-        String writerString = normalize(writer.toString(), true);
-        String bufferString = normalize(buffer.toString(), true);
-
-        assertEquals(bufferString, writerString);
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        ServletActionContext.setServletContext(pageContext.getServletContext());
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        ActionContext.setContext(null);
-    }
-
-    /**
-     * normalizes a string so that strings generated on different platforms can be compared.  any group of one or more
-     * space, tab, \r, and \n characters are converted to a single space character
-     *
-     * @param obj the object to be normalized.  normalize will perform its operation on obj.toString().trim() ;
-     * @param appendSpace
-     * @return the normalized string
-     */
-    public static String normalize(Object obj, boolean appendSpace) {
-        StringTokenizer st = new StringTokenizer(obj.toString().trim(), " \t\r\n");
-        StringBuffer buffer = new StringBuffer(128);
-
-        while (st.hasMoreTokens()) {
-            buffer.append(st.nextToken());
-
-            /*
-            if (appendSpace && st.hasMoreTokens()) {
-                buffer.append("");
-            }
-            */
-        }
-
-        return buffer.toString();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ActionTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ActionTagTest.java
deleted file mode 100644
index 8e142c9..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ActionTagTest.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.TestAction;
-import org.apache.struts2.TestActionTagResult;
-import org.apache.struts2.TestConfigurationProvider;
-import org.apache.struts2.components.ActionComponent;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- * Unit test for {@link ActionTag}.
- */
-public class ActionTagTest extends AbstractTagTest {
-
-    public void testActionTagWithNamespace() {
-        request.setupGetServletPath(TestConfigurationProvider.TEST_NAMESPACE + "/" + "foo.action");
-
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setName(TestConfigurationProvider.TEST_NAMESPACE_ACTION);
-        tag.setId(TestConfigurationProvider.TEST_NAMESPACE_ACTION);
-
-        try {
-            tag.doStartTag();
-            ActionComponent ac = ((ActionComponent) tag.component);
-            tag.doEndTag();
-            ActionProxy proxy = ac.getProxy();
-
-            Object o = pageContext.findAttribute(TestConfigurationProvider.TEST_NAMESPACE_ACTION);
-            assertTrue(o instanceof TestAction);
-
-            assertEquals(TestConfigurationProvider.TEST_NAMESPACE, proxy.getNamespace());
-        } catch (JspException ex) {
-            ex.printStackTrace();
-            fail();
-        }
-    }
-
-    public void testSimple() {
-        request.setupGetServletPath("/foo.action");
-
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setName("testAction");
-        tag.setId("testAction");
-
-        int stackSize = stack.size();
-
-        try {
-            tag.doStartTag();
-            tag.addParameter("foo", "myFoo");
-            tag.doEndTag();
-
-            assertEquals(stack.size(), ActionContext.getContext().getValueStack().size());
-            assertEquals("myFoo", stack.findValue("#testAction.foo"));
-            assertEquals(stackSize, stack.size());
-
-            Object o = pageContext.findAttribute("testAction");
-            assertTrue(o instanceof TestAction);
-            assertEquals("myFoo", ((TestAction) o).getFoo());
-            assertEquals(Action.SUCCESS, ((TestAction) o).getResult());
-        } catch (JspException ex) {
-            ex.printStackTrace();
-            fail();
-        }
-    }
-
-    public void testSimpleWithoutServletActionContext() {
-        ServletActionContext.setRequest(null);
-        ServletActionContext.setResponse(null);
-        this.testSimple();
-    }
-
-    public void testActionWithExecuteResult() throws Exception {
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setNamespace("");
-        tag.setName("testActionTagAction");
-        tag.setExecuteResult(true);
-
-        tag.doStartTag();
-
-        // tag clear components on doEndTag
-        ActionComponent component = (ActionComponent) tag.getComponent();
-
-        tag.doEndTag();
-
-        TestActionTagResult result = (TestActionTagResult) component.getProxy().getInvocation().getResult();
-
-        assertTrue(stack.getContext().containsKey(ServletActionContext.PAGE_CONTEXT));
-        assertTrue(stack.getContext().get(ServletActionContext.PAGE_CONTEXT)instanceof PageContext);
-        assertTrue(result.isExecuted());
-    }
-
-    public void testActionWithoutExecuteResult() throws Exception {
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setNamespace("");
-        tag.setName("testActionTagAction");
-        tag.setExecuteResult(false);
-
-        tag.doStartTag();
-
-        // tag clear components on doEndTag, so we need to get it here
-        ActionComponent component = (ActionComponent) tag.getComponent();
-
-        tag.doEndTag();
-
-        TestActionTagResult result = (TestActionTagResult) component.getProxy().getInvocation().getResult();
-
-        assertTrue(stack.getContext().containsKey(ServletActionContext.PAGE_CONTEXT));
-        assertTrue(stack.getContext().get(ServletActionContext.PAGE_CONTEXT)instanceof PageContext);
-        assertNull(result); // result is never executed, hence never set into invocation
-    }
-
-    public void testIngoreContextParamsFalse() throws Exception {
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setNamespace("");
-        tag.setName("testActionTagAction");
-        tag.setExecuteResult(false);
-        tag.setIgnoreContextParams(false);
-        ActionContext.getContext().getParameters().put("user", "Santa Claus");
-
-        tag.doStartTag();
-
-        // tag clear components on doEndTag, so we need to get it here
-        ActionComponent component = (ActionComponent) tag.getComponent();
-
-        tag.doEndTag();
-
-        // check parameters, there should be one
-        ActionInvocation ai = component.getProxy().getInvocation();
-        ActionContext ac = ai.getInvocationContext();
-        assertEquals(1, ac.getParameters().size());
-    }
-
-    public void testIngoreContextParamsTrue() throws Exception {
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setNamespace("");
-        tag.setName("testActionTagAction");
-        tag.setExecuteResult(false);
-        tag.setIgnoreContextParams(true);
-        ActionContext.getContext().getParameters().put("user", "Santa Claus");
-
-        tag.doStartTag();
-
-        // tag clear components on doEndTag, so we need to get it here
-        ActionComponent component = (ActionComponent) tag.getComponent();
-
-        tag.doEndTag();
-
-        // check parameters, there should be one
-        ActionInvocation ai = component.getProxy().getInvocation();
-        ActionContext ac = ai.getInvocationContext();
-        assertEquals(0, ac.getParameters().size());
-    }
-
-    public void testNoNameDefined() throws Exception {
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setNamespace("");
-        tag.setName(null);
-        tag.setExecuteResult(false);
-
-        try {
-            tag.doStartTag();
-            tag.doEndTag();
-            fail("Should have thrown RuntimeException");
-        } catch (StrutsException e) {
-             assertEquals("tag 'actioncomponent', field 'name': Action name is required. Example: updatePerson", e.getMessage());
-        }
-    }
-
-    // FIXME: Logging the error seems to cause the standard Maven build to fail
-    public void testUnknownNameDefined() throws Exception {
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setNamespace("");
-        tag.setName("UNKNOWN_NAME");
-        tag.setExecuteResult(false);
-
-        tag.doStartTag();
-        tag.doEndTag();
-        // will just log it to ERROR but we run the code to test that it works somehow
-    }
-
-    public void testActionMethodWithExecuteResult() throws Exception {
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setNamespace("");
-        tag.setName("testActionTagAction!input");
-        tag.setExecuteResult(true);
-
-        tag.doStartTag();
-
-        // tag clear components on doEndTag
-        ActionComponent component = (ActionComponent) tag.getComponent();
-
-        tag.doEndTag();
-
-        TestActionTagResult result = (TestActionTagResult) component.getProxy().getInvocation().getResult();
-
-        assertTrue(stack.getContext().containsKey(ServletActionContext.PAGE_CONTEXT));
-        assertTrue(stack.getContext().get(ServletActionContext.PAGE_CONTEXT)instanceof PageContext);
-        assertTrue(result.isExecuted());
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        configurationManager.clearConfigurationProviders();
-        configurationManager.addConfigurationProvider(new TestConfigurationProvider());
-        configurationManager.reload();
-
-        ActionContext actionContext = new ActionContext(context);
-        actionContext.setValueStack(stack);
-        ActionContext.setContext(actionContext);
-    }
-
-    protected void tearDown() throws Exception {
-        configurationManager.destroyConfiguration();
-
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        ActionContext.setContext(new ActionContext(stack.getContext()));
-        super.tearDown();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/AnchorTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/AnchorTagTest.java
deleted file mode 100644
index d9a5bae..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/AnchorTagTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.io.StringWriter;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspWriter;
-
-import org.apache.struts2.views.jsp.ui.AnchorTag;
-import org.apache.struts2.views.jsp.ui.StrutsBodyContent;
-
-
-/**
- *
- */
-public class AnchorTagTest extends AbstractUITagTest {
-    private StringWriter writer = new StringWriter();
-    private AnchorTag tag;
-
-    public void testActionURL() {
-        tag.setHref("TestAction.action");
-        try {
-            tag.doStartTag();
-            tag.doEndTag();
-            assertTrue( writer.toString().indexOf("href=\"TestAction.action\"") > -1);
-        } catch (JspException ex) {
-            ex.printStackTrace();
-            fail();
-        }
-    }
-
-    public void testAddParameters() {
-        tag.setHref("/TestAction.action");
-        String bodyText = "<img src=\"#\"/>";
-        try {
-            StrutsBodyContent bodyContent = new StrutsBodyContent(null);
-            bodyContent.print(bodyText);
-            tag.setBodyContent(bodyContent);
-
-            tag.doStartTag();
-            tag.doEndTag();
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            fail();
-        }
-    }
-
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        request.setScheme("http");
-        request.setServerName("localhost");
-        request.setServerPort(80);
-
-        tag = new AnchorTag();
-        tag.setPageContext(pageContext);
-        JspWriter jspWriter = new StrutsMockJspWriter(writer);
-        pageContext.setJspWriter(jspWriter);
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/AppendIteratorTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/AppendIteratorTagTest.java
deleted file mode 100644
index 3a25869..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/AppendIteratorTagTest.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.struts2.views.jsp.iterator.AppendIteratorTag;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Test case for AppendIteratorTag.
- */
-public class AppendIteratorTagTest extends AbstractTagTest {
-
-	
-	public void testAppendingIteratorUsingArrayAsSource() throws Exception {
-		AppendIteratorTag tag = new AppendIteratorTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myAppendedIterator");
-		
-		ParamTag iterator1ParamTag = new ParamTag();
-		iterator1ParamTag.setPageContext(pageContext);
-		iterator1ParamTag.setValue("%{myArr1}");
-		
-		ParamTag iterator2ParamTag = new ParamTag();
-		iterator2ParamTag.setPageContext(pageContext);
-		iterator2ParamTag.setValue("%{myArr2}");
-		
-		ParamTag iterator3ParamTag = new ParamTag();
-		iterator3ParamTag.setPageContext(pageContext);
-		iterator3ParamTag.setValue("%{myArr3}");
-		
-		
-		tag.doStartTag();
-		iterator1ParamTag.doStartTag();
-		iterator1ParamTag.doEndTag();
-		iterator2ParamTag.doStartTag();
-		iterator2ParamTag.doEndTag();
-		iterator3ParamTag.doStartTag();
-		iterator3ParamTag.doEndTag();
-		tag.doEndTag();
-		
-		Iterator appendedIterator = (Iterator) stack.findValue("#myAppendedIterator");
-		
-		assertNotNull(appendedIterator);
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "1");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "2");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "3");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "a");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "b");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "c");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "A");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "B");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "C");
-		assertFalse(appendedIterator.hasNext());
-	}
-	
-	public void testAppendingIteratorsUsingListAsSource() throws Exception {
-		AppendIteratorTag tag = new AppendIteratorTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myAppendedIterator");
-		
-		ParamTag iterator1ParamTag = new ParamTag();
-		iterator1ParamTag.setPageContext(pageContext);
-		iterator1ParamTag.setValue("%{myList1}");
-		
-		ParamTag iterator2ParamTag = new ParamTag();
-		iterator2ParamTag.setPageContext(pageContext);
-		iterator2ParamTag.setValue("%{myList2}");
-		
-		ParamTag iterator3ParamTag = new ParamTag();
-		iterator3ParamTag.setPageContext(pageContext);
-		iterator3ParamTag.setValue("%{myList3}");
-		
-		
-		tag.doStartTag();
-		iterator1ParamTag.doStartTag();
-		iterator1ParamTag.doEndTag();
-		iterator2ParamTag.doStartTag();
-		iterator2ParamTag.doEndTag();
-		iterator3ParamTag.doStartTag();
-		iterator3ParamTag.doEndTag();
-		tag.doEndTag();
-		
-		Iterator appendedIterator = (Iterator) stack.findValue("#myAppendedIterator");
-		
-		assertNotNull(appendedIterator);
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "1");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "2");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "3");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "a");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "b");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "c");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "A");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "B");
-		assertTrue(appendedIterator.hasNext());
-		assertEquals(appendedIterator.next(), "C");
-		assertFalse(appendedIterator.hasNext());
-	}
-	
-
-	
-	public Action getAction() {
-		return new ActionSupport() {
-			public List getMyList1() {
-				List l = new ArrayList();
-				l.add("1");
-				l.add("2");
-				l.add("3");
-				return l;
-			}
-			
-			public List getMyList2() {
-				List l = new ArrayList();
-				l.add("a");
-				l.add("b");
-				l.add("c");
-				return l;
-			}
-			
-			public List getMyList3() {
-				List l = new ArrayList(0);
-				l.add("A");
-				l.add("B");
-				l.add("C");
-				return l;
-			}
-			
-			public String[] getMyArr1() {
-				return new String[] { "1", "2", "3" };
-			}
-			
-			public String[] getMyArr2() {
-				return new String[] { "a", "b", "c" };
-			}
-			
-			public String[] getMyArr3() {
-				return new String[] { "A", "B", "C" };
-			}
-		};
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/BeanTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/BeanTagTest.java
deleted file mode 100644
index a5811a3..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/BeanTagTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.jsp.JspException;
-
-
-/**
- */
-public class BeanTagTest extends AbstractUITagTest {
-
-    public void testSimple() {
-        BeanTag tag = new BeanTag();
-        tag.setPageContext(pageContext);
-        tag.setName("org.apache.struts2.TestAction");
-
-        try {
-            tag.doStartTag();
-            tag.component.addParameter("result", "success");
-
-            assertEquals("success", stack.findValue("result"));
-            // TestAction from bean tag, Action from execution and DefaultTextProvider 
-            assertEquals(3, stack.size());
-            tag.doEndTag();
-            assertEquals(2, stack.size());
-        } catch (JspException ex) {
-            ex.printStackTrace();
-            fail();
-        }
-
-        request.verify();
-        pageContext.verify();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ElseIfTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ElseIfTagTest.java
deleted file mode 100644
index 704440b..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ElseIfTagTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.jsp.tagext.TagSupport;
-
-import junit.framework.TestCase;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.components.If;
-
-import com.mockobjects.servlet.MockJspWriter;
-import com.mockobjects.servlet.MockPageContext;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-/**
- * 
- */
-public class ElseIfTagTest extends TestCase {
-
-	protected MockPageContext pageContext;
-	protected MockJspWriter jspWriter;
-	protected ValueStack stack;
-	
-	
-	public void testIfIsFalseElseIfIsTrue() throws Exception {
-		stack.getContext().put(If.ANSWER, Boolean.FALSE);
-		
-		ElseIfTag tag = new ElseIfTag();
-		tag.setPageContext(pageContext);
-		tag.setTest("true");
-		
-		int result = tag.doStartTag();
-		tag.doEndTag();
-		
-		assertEquals(result, TagSupport.EVAL_BODY_INCLUDE);
-	}
-	
-	public void testIfIsFalseElseIfIsFalse() throws Exception {
-		stack.getContext().put(If.ANSWER, Boolean.FALSE);
-		
-		ElseIfTag tag = new ElseIfTag();
-		tag.setPageContext(pageContext);
-		tag.setTest("false");
-		
-		int result = tag.doStartTag();
-		tag.doEndTag();
-		
-		assertEquals(result, TagSupport.SKIP_BODY);
-	}
-	
-	public void testIfIsTrueElseIfIsTrue() throws Exception {
-		stack.getContext().put(If.ANSWER, Boolean.TRUE);
-		
-		ElseIfTag tag = new ElseIfTag();
-		tag.setPageContext(pageContext);
-		tag.setTest("true");
-		
-		int result = tag.doStartTag();
-		tag.doEndTag();
-		
-		assertEquals(result, TagSupport.SKIP_BODY);
-	}
-	
-	public void testIfIsTrueElseIfIsFalse() throws Exception {
-		stack.getContext().put(If.ANSWER, Boolean.TRUE);
-		
-		ElseIfTag tag = new ElseIfTag();
-		tag.setPageContext(pageContext);
-		tag.setTest("false");
-		
-		int result = tag.doStartTag();
-		tag.doEndTag();
-		
-		assertEquals(result, TagSupport.SKIP_BODY);
-	}
-	
-	
-	protected void setUp() throws Exception {
-		stack = ValueStackFactory.getFactory().createValueStack();
-		
-		jspWriter = new MockJspWriter();
-		
-		StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-		
-		StrutsMockServletContext servletContext = new StrutsMockServletContext();
-		servletContext.setServletInfo("not-weblogic");
-		
-		pageContext = new MockPageContext();
-		pageContext.setJspWriter(jspWriter);
-		pageContext.setRequest(request);
-		pageContext.setServletContext(servletContext);
-		
-		request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
-	}
-	
-	
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ElseTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ElseTagTest.java
deleted file mode 100644
index 51f236e..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ElseTagTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.components.If;
-
-import com.mockobjects.servlet.MockJspWriter;
-import com.mockobjects.servlet.MockPageContext;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- */
-public class ElseTagTest extends StrutsTestCase {
-
-    ElseTag elseTag;
-    MockPageContext pageContext;
-    ValueStack stack;
-
-
-    public void testTestFalse() {
-    	stack.getContext().put(If.ANSWER, new Boolean(false));
-
-        int result = 0;
-
-        try {
-        	elseTag.setPageContext(pageContext);
-            result = elseTag.doStartTag();
-            elseTag.doEndTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-        assertEquals(TagSupport.EVAL_BODY_INCLUDE, result);
-    }
-
-    public void testTestNull() {
-        elseTag.setPageContext(pageContext);
-
-        int result = 0;
-
-        try {
-            result = elseTag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(TagSupport.SKIP_BODY, result);
-    }
-
-    public void testTestTrue() {
-    	stack.getContext().put(If.ANSWER, new Boolean(true));
-        elseTag.setPageContext(pageContext);
-
-        int result = 0;
-
-        try {
-            result = elseTag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(TagSupport.SKIP_BODY, result);
-    }
-
-    protected void setUp() throws Exception {
-        // create the needed objects
-        elseTag = new ElseTag();
-        stack = ValueStackFactory.getFactory().createValueStack();
-
-        // create the mock http servlet request
-        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-        
-        // NOTE: in Struts Tag library, TagUtil gets stack from request, which will be set
-        //       when request going through the FilterDispatcher --> DispatcherUtil etc. route
-        request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
-
-        StrutsMockServletContext servletContext = new StrutsMockServletContext();
-        servletContext.setServletInfo("not-weblogic");
-        
-        // create the mock page context
-        pageContext = new StrutsMockPageContext();
-        pageContext.setRequest(request);
-        pageContext.setServletContext(servletContext);
-        pageContext.setJspWriter(new MockJspWriter());
-    }
-
-
-    class Foo {
-        int num;
-
-        public void setNum(int num) {
-            this.num = num;
-        }
-
-        public int getNum() {
-            return num;
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/IfTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/IfTagTest.java
deleted file mode 100644
index 5848f06..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/IfTagTest.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import junit.framework.TestCase;
-
-import org.apache.struts2.ServletActionContext;
-
-import com.mockobjects.servlet.MockJspWriter;
-import com.mockobjects.servlet.MockPageContext;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- */
-public class IfTagTest extends TestCase {
-
-    IfTag tag;
-    MockPageContext pageContext;
-    ValueStack stack;
-
-
-    public void testNonBooleanTest() {
-        // set up the stack
-        Foo foo = new Foo();
-        foo.setNum(1);
-        stack.push(foo);
-
-        // set up the test
-        tag.setTest("num");
-
-        int result = 0;
-
-        try {
-            result = tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(TagSupport.EVAL_BODY_INCLUDE, result);
-
-        try {
-            result = tag.doEndTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    public void testTestError() {
-        // set up the stack
-        Foo foo = new Foo();
-        foo.setNum(2);
-        stack.push(foo);
-
-        // set up the test
-        tag.setTest("nuuuuum == 2");
-
-        int result = 0;
-
-        try {
-            result = tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(TagSupport.SKIP_BODY, result);
-
-        try {
-            result = tag.doEndTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    public void testTestFalse() {
-        // set up the stack
-        Foo foo = new Foo();
-        foo.setNum(2);
-        stack.push(foo);
-
-        // set up the test
-        tag.setTest("num != 2");
-
-        int result = 0;
-
-        try {
-            result = tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(TagSupport.SKIP_BODY, result);
-
-        try {
-            result = tag.doEndTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    public void testTestTrue() {
-        // set up the stack
-        Foo foo = new Foo();
-        foo.setNum(2);
-        stack.push(foo);
-
-        // set up the test
-        tag.setTest("num == 2");
-
-        int result = 0;
-        //tag.setPageContext(pageContext);
-
-        try {
-            result = tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(TagSupport.EVAL_BODY_INCLUDE, result);
-
-        try {
-            result = tag.doEndTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-    
-    
-    public void testIfElse1() throws Exception {
-    	IfTag ifTag = new IfTag();
-    	ifTag.setPageContext(pageContext);
-    	ifTag.setTest("true");
-    	
-    	ElseTag elseTag = new ElseTag();
-    	elseTag.setPageContext(pageContext);
-    	
-    	int r1 = ifTag.doStartTag();
-    	ifTag.doEndTag();
-    	int r2 = elseTag.doStartTag();
-    	elseTag.doEndTag();
-    	
-    	assertEquals(TagSupport.EVAL_BODY_INCLUDE, r1);
-    	assertEquals(TagSupport.SKIP_BODY, r2);
-    }
-    
-    public void testIfElse2() throws Exception {
-    	IfTag ifTag = new IfTag();
-    	ifTag.setPageContext(pageContext);
-    	ifTag.setTest("false");
-    	
-    	ElseTag elseTag = new ElseTag();
-    	elseTag.setPageContext(pageContext);
-    	
-    	int r1 = ifTag.doStartTag();
-    	ifTag.doEndTag();
-    	int r2 = elseTag.doStartTag();
-    	elseTag.doEndTag();
-    	
-    	assertEquals(TagSupport.SKIP_BODY, r1);
-    	assertEquals(TagSupport.EVAL_BODY_INCLUDE, r2);
-    }
-    
-    public void testIfElseIf() throws Exception {
-    	IfTag ifTag = new IfTag();
-    	ifTag.setPageContext(pageContext);
-    	ifTag.setTest("false");
-    	
-    	ElseIfTag elseIfTag1 = new ElseIfTag();
-    	elseIfTag1.setPageContext(pageContext);
-    	elseIfTag1.setTest("false");
-    	
-    	ElseIfTag elseIfTag2 = new ElseIfTag();
-    	elseIfTag2.setPageContext(pageContext);
-    	elseIfTag2.setTest("true");
-    	
-    	ElseIfTag elseIfTag3 = new ElseIfTag();
-    	elseIfTag3.setPageContext(pageContext);
-    	elseIfTag3.setTest("true");
-    	
-    	int r1 = ifTag.doStartTag();
-    	ifTag.doEndTag();
-    	int r2 = elseIfTag1.doStartTag();
-    	elseIfTag1.doEndTag();
-    	int r3 = elseIfTag2.doStartTag();
-    	elseIfTag2.doEndTag();
-    	int r4 = elseIfTag3.doStartTag();
-    	elseIfTag3.doEndTag();
-    	
-    	assertEquals(TagSupport.SKIP_BODY, r1);
-    	assertEquals(TagSupport.SKIP_BODY, r2);
-    	assertEquals(TagSupport.EVAL_BODY_INCLUDE, r3);
-    	assertEquals(TagSupport.SKIP_BODY, r4);
-    }
-    
-    public void testIfElseIfElse() throws Exception {
-    	IfTag ifTag = new IfTag();
-    	ifTag.setPageContext(pageContext);
-    	ifTag.setTest("false");
-    	
-    	ElseIfTag elseIfTag1 = new ElseIfTag();
-    	elseIfTag1.setPageContext(pageContext);
-    	elseIfTag1.setTest("false");
-    	
-    	ElseIfTag elseIfTag2 = new ElseIfTag();
-    	elseIfTag2.setPageContext(pageContext);
-    	elseIfTag2.setTest("false");
-    	
-    	ElseIfTag elseIfTag3 = new ElseIfTag();
-    	elseIfTag3.setPageContext(pageContext);
-    	elseIfTag3.setTest("false");
-    	
-    	ElseTag elseTag = new ElseTag();
-    	elseTag.setPageContext(pageContext);
-    	
-    	int r1 = ifTag.doStartTag();
-    	ifTag.doEndTag();
-    	int r2 = elseIfTag1.doStartTag();
-    	elseIfTag1.doEndTag();
-    	int r3 = elseIfTag2.doStartTag();
-    	elseIfTag2.doEndTag();
-    	int r4 = elseIfTag3.doStartTag();
-    	elseIfTag3.doEndTag();
-    	int r5 = elseTag.doStartTag();
-    	elseTag.doEndTag();
-    	
-    	assertEquals(TagSupport.SKIP_BODY, r1);
-    	assertEquals(TagSupport.SKIP_BODY, r2);
-    	assertEquals(TagSupport.SKIP_BODY, r3);
-    	assertEquals(TagSupport.SKIP_BODY, r4);
-    	assertEquals(TagSupport.EVAL_BODY_INCLUDE, r5);
-    }
-    
-    
-    public void testNestedIfElse1() throws Exception {
-    	IfTag ifTag = new IfTag();
-    	ifTag.setPageContext(pageContext);
-    	ifTag.setTest("true");
-    	
-    	IfTag nestedIfTag = new IfTag();
-    	nestedIfTag.setPageContext(pageContext);
-    	nestedIfTag.setTest("true");
-    	
-    	ElseTag elseTag = new ElseTag();
-    	elseTag.setPageContext(pageContext);
-    	
-    	int r1 = ifTag.doStartTag();
-    	int r2 = nestedIfTag.doStartTag();
-    	int r3 = nestedIfTag.doEndTag();
-    	int r4 = ifTag.doEndTag();
-    	int r5 = elseTag.doStartTag();
-    	int r6 = elseTag.doEndTag();
-    	
-    	assertEquals(TagSupport.EVAL_BODY_INCLUDE, r1);
-    	assertEquals(TagSupport.EVAL_BODY_INCLUDE, r2);
-    	assertEquals(TagSupport.EVAL_PAGE, r3);
-    	assertEquals(TagSupport.EVAL_PAGE, r4);
-    	assertEquals(TagSupport.SKIP_BODY, r5);
-    	assertEquals(TagSupport.EVAL_PAGE, r6);
-    }
-    
-    public void testNestedIfElse2() throws Exception {
-    	IfTag ifTag = new IfTag();
-    	ifTag.setPageContext(pageContext);
-    	ifTag.setTest("true");
-    	
-    	IfTag nestedIfTag = new IfTag();
-    	nestedIfTag.setPageContext(pageContext);
-    	nestedIfTag.setTest("false");
-    	
-    	ElseTag elseTag = new ElseTag();
-    	elseTag.setPageContext(pageContext);
-    	
-    	int r1 = ifTag.doStartTag();
-    	int r2 = nestedIfTag.doStartTag();
-    	int r3 = nestedIfTag.doEndTag();
-    	int r4 = ifTag.doEndTag();
-    	int r5 = elseTag.doStartTag();
-    	int r6 = elseTag.doEndTag();
-    	
-    	assertEquals(TagSupport.EVAL_BODY_INCLUDE, r1);
-    	assertEquals(TagSupport.SKIP_BODY, r2);
-    	assertEquals(TagSupport.EVAL_PAGE, r3);
-    	assertEquals(TagSupport.EVAL_PAGE, r4);
-    	assertEquals(TagSupport.SKIP_BODY, r5);
-    	assertEquals(TagSupport.EVAL_PAGE, r6);
-    }
-    
-    
-    
-
-    protected void setUp() throws Exception {
-        // create the needed objects
-        tag = new IfTag();
-        stack = ValueStackFactory.getFactory().createValueStack();
-
-        // create the mock http servlet request
-        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-        ActionContext.getContext().setValueStack(stack);
-        request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
-
-        // create the mock page context
-        pageContext = new MockPageContext();
-        pageContext.setRequest(request);
-        pageContext.setJspWriter(new MockJspWriter());
-        
-        // associate the tag with the mock page request
-        tag.setPageContext(pageContext);
-    }
-
-
-    class Foo {
-        int num;
-
-        public void setNum(int num) {
-            this.num = num;
-        }
-
-        public int getNum() {
-            return num;
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/IncludeTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/IncludeTagTest.java
deleted file mode 100644
index 02065b7..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/IncludeTagTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.RequestDispatcher;
-
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.components.Include;
-import org.easymock.MockControl;
-
-import com.mockobjects.servlet.MockRequestDispatcher;
-
-/**
- * Unit test of {@link IncludeTag}.
- *
- */
-public class IncludeTagTest extends AbstractTagTest {
-
-    private MockControl controlRequestDispatcher;
-    private RequestDispatcher mockRequestDispatcher;
-
-    private IncludeTag tag;
-
-    public void testNoURL() throws Exception {
-        try {
-            tag.doStartTag();
-            tag.doEndTag();
-            fail("Should have thrown exception as no URL is specified in setValue");
-        } catch (StrutsException e) {
-            assertEquals("tag 'include', field 'value': You must specify the URL to include. Example: /foo.jsp", e.getMessage());
-        }
-    }
-
-    public void testIncludeNoParam() throws Exception {
-        mockRequestDispatcher.include(null, null);
-        controlRequestDispatcher.setVoidCallable();
-        controlRequestDispatcher.replay();
-
-        tag.setValue("person/list.jsp");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        controlRequestDispatcher.verify();
-        assertEquals("/person/list.jsp", request.getRequestDispatherString());
-        assertEquals("", writer.toString());
-    }
-
-    public void testIncludeWithParameters() throws Exception {
-        mockRequestDispatcher.include(null, null);
-        controlRequestDispatcher.setVoidCallable();
-        controlRequestDispatcher.replay();
-
-        tag.setValue("person/create.jsp");
-        tag.doStartTag();
-        // adding param must be done after doStartTag()
-        Include include = (Include) tag.getComponent();
-        include.addParameter("user", "Santa Claus");
-        tag.doEndTag();
-
-        controlRequestDispatcher.verify();
-        assertEquals("/person/create.jsp?user=Santa+Claus", request.getRequestDispatherString());
-        assertEquals("", writer.toString());
-    }
-
-    public void testIncludeRelative2Dots() throws Exception {
-        // TODO: we should test for .. in unit test - is this test correct?
-        mockRequestDispatcher.include(null, null);
-        controlRequestDispatcher.setVoidCallable();
-        controlRequestDispatcher.replay();
-
-        request.setupGetServletPath("app/manager");
-        tag.setValue("../car/view.jsp");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        controlRequestDispatcher.verify();
-        assertEquals("/car/view.jsp", request.getRequestDispatherString());
-        assertEquals("", writer.toString());
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        request.setupGetRequestDispatcher(new MockRequestDispatcher());
-        tag = new IncludeTag();
-
-        controlRequestDispatcher = MockControl.createNiceControl(RequestDispatcher.class);
-        // use always matcher as we can not determine the excact objects used in mock.include(request, response) call
-        controlRequestDispatcher.setDefaultMatcher(MockControl.ALWAYS_MATCHER);
-        mockRequestDispatcher = (RequestDispatcher) controlRequestDispatcher.getMock();
-
-        request.setupGetRequestDispatcher(mockRequestDispatcher);
-        tag.setPageContext(pageContext);
-        tag.setPageContext(pageContext);
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        tag = null;
-        controlRequestDispatcher = null;
-        mockRequestDispatcher = null;
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java
deleted file mode 100644
index a61babb..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.Iterator;
-
-import org.apache.struts2.util.IteratorGenerator.Converter;
-import org.apache.struts2.views.jsp.iterator.IteratorGeneratorTag;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Test case for IteratorGeneratorTag.
- * 
- */
-public class IteratorGeneratorTagTest extends AbstractTagTest {
-
-	public void testGeneratorBasic() throws Exception {
-		IteratorGeneratorTag tag = new IteratorGeneratorTag();
-		
-		tag.setPageContext(pageContext);
-		tag.setVal("%{'aaa,bbb,ccc,ddd,eee'}");
-		tag.doStartTag();
-		Object topOfStack = stack.findValue("top");
-		
-		
-		assertTrue(topOfStack instanceof Iterator);
-		// 1
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "aaa");
-		// 2
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "bbb");
-		// 3
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "ccc");
-		// 4
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "ddd");
-		// 5
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(),"eee");
-		
-		assertFalse(((Iterator)topOfStack).hasNext());
-		
-		tag.doEndTag();
-		Object afterTopOfStack = stack.findValue("top");
-		
-		
-		assertNotSame(afterTopOfStack, topOfStack);
-	}
-	
-	public void testGeneratorWithSeparator() throws Exception {
-		IteratorGeneratorTag tag = new IteratorGeneratorTag();
-		
-		tag.setPageContext(pageContext);
-		tag.setVal("%{'aaa|bbb|ccc|ddd|eee'}");
-		tag.setSeparator("|");
-		tag.doStartTag();
-		Object topOfStack = stack.findValue("top");
-		tag.doEndTag();
-		Object afterTopOfStack = stack.findValue("top");
-		
-		assertTrue(topOfStack instanceof Iterator);
-		// 1
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "aaa");
-		// 2 
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "bbb");
-		// 3
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "ccc");
-		// 4
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "ddd");
-		// 5
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "eee");
-		
-		assertFalse(((Iterator)topOfStack).hasNext());
-		assertNotSame(afterTopOfStack, topOfStack);
-	}
-	
-	public void testGeneratorWithConverter() throws Exception {
-		IteratorGeneratorTag tag = new IteratorGeneratorTag();
-		
-		tag.setPageContext(pageContext);
-		tag.setVal("%{'aaa, bbb, ccc, ddd, eee'}");
-		tag.setConverter("myConverter");
-		tag.doStartTag();
-		Object topOfStack = stack.findValue("top");
-		tag.doEndTag();
-		Object afterTopOfStack = stack.findValue("top");
-		
-		assertTrue(topOfStack instanceof Iterator);
-		// 1.
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "myConverter-aaa");
-		// 2
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "myConverter-bbb");
-		// 3
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "myConverter-ccc");
-		// 4.
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "myConverter-ddd");
-		// 5.
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "myConverter-eee");
-		
-		assertFalse(((Iterator)topOfStack).hasNext());
-		assertNotSame(afterTopOfStack, topOfStack);
-	}
-	
-	public void testGeneratorWithId() throws Exception {
-		IteratorGeneratorTag tag = new IteratorGeneratorTag();
-		tag.setPageContext(pageContext);
-		tag.setVal("%{'aaa,bbb,ccc,ddd,eee'}");
-		tag.setId("myPageContextAttId");
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		Object pageContextIterator = pageContext.getAttribute("myPageContextAttId"); 
-		
-		assertTrue(pageContextIterator instanceof Iterator);
-		// 1
-		assertTrue(((Iterator)pageContextIterator).hasNext());
-		assertEquals(((Iterator)pageContextIterator).next(), "aaa");
-		// 2.
-		assertTrue(((Iterator)pageContextIterator).hasNext());
-		assertEquals(((Iterator)pageContextIterator).next(), "bbb");
-		// 3.
-		assertTrue(((Iterator)pageContextIterator).hasNext());
-		assertEquals(((Iterator)pageContextIterator).next(), "ccc");
-		// 4
-		assertTrue(((Iterator)pageContextIterator).hasNext());
-		assertEquals(((Iterator)pageContextIterator).next(), "ddd");
-		// 5
-		assertTrue(((Iterator)pageContextIterator).hasNext());
-		assertEquals(((Iterator)pageContextIterator).next(), "eee");
-		
-		assertFalse(((Iterator)pageContextIterator).hasNext());
-	}
-	
-	public void testGeneratorWithCount() throws Exception {
-		IteratorGeneratorTag tag = new IteratorGeneratorTag();
-		
-		tag.setPageContext(pageContext);
-		tag.setVal("%{'aaa,bbb,ccc,ddd,eee'}");
-		tag.setCount("myCount");
-		tag.doStartTag();
-		Object topOfStack = stack.findValue("top");
-		tag.doEndTag();
-		Object afterTopOfStack = stack.findValue("top");
-		
-		
-		assertTrue(topOfStack instanceof Iterator);
-		// 1
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "aaa");
-		// 2
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "bbb");
-		// 3.
-		assertTrue(((Iterator)topOfStack).hasNext());
-		assertEquals(((Iterator)topOfStack).next(), "ccc");
-		
-		assertFalse(((Iterator)topOfStack).hasNext());
-		assertNotSame(topOfStack, afterTopOfStack);
-	}
-	
-	
-	public Action getAction() {
-		return new ActionSupport() {
-			public Converter getMyConverter() {
-				return new Converter() {
-					public Object convert(String value) throws Exception {
-						return "myConverter-"+value;
-					}
-				};
-			}
-			
-			public int getMyCount() {
-				return 3;
-			}
-		};
-	}
-}
-
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/IteratorTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/IteratorTagTest.java
deleted file mode 100644
index cde3949..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/IteratorTagTest.java
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import com.mockobjects.servlet.MockBodyContent;
-import com.mockobjects.servlet.MockJspWriter;
-
-
-/**
- * Test Case for Iterator Tag 
- * 
- */
-public class IteratorTagTest extends AbstractUITagTest {
-
-    IteratorTag tag;
-
-    
-    public void testIteratingWithIdSpecified() throws Exception {
-    	List list = new ArrayList();
-    	list.add("one");
-    	list.add("two");
-    	list.add("three");
-    	list.add("four");
-    	list.add("five");
-    	
-    	Foo foo = new Foo();
-    	foo.setList(list);
-    	
-    	stack.push(foo);
-    	
-    	tag.setValue("list");
-    	tag.setId("myId");
-    	
-    	// one
-    	int result = tag.doStartTag();
-    	assertEquals(result, TagSupport.EVAL_BODY_INCLUDE);
-    	assertEquals(stack.peek(), "one");
-    	assertEquals(stack.getContext().get("myId"), "one");
-    	
-
-    	tag.doInitBody();
-    	
-    	// two
-    	result = tag.doAfterBody();
-    	assertEquals(result, TagSupport.EVAL_BODY_AGAIN);
-    	assertEquals(stack.peek(), "two");
-    	assertEquals(stack.getContext().get("myId"), "two");
-    	
-    	
-    	// three
-    	result = tag.doAfterBody();
-    	assertEquals(result, TagSupport.EVAL_BODY_AGAIN);
-    	assertEquals(stack.peek(), "three");
-    	assertEquals(stack.getContext().get("myId"), "three");
-    	
-    	
-    	// four
-    	result = tag.doAfterBody();
-    	assertEquals(result, TagSupport.EVAL_BODY_AGAIN);
-    	assertEquals(stack.peek(), "four");
-    	assertEquals(stack.getContext().get("myId"), "four");
-    	
-    	
-    	// five
-    	result = tag.doAfterBody();
-    	assertEquals(result, TagSupport.EVAL_BODY_AGAIN);
-    	assertEquals(stack.peek(), "five");
-    	assertEquals(stack.getContext().get("myId"), "five");
-    	
-    	
-    	result = tag.doAfterBody();
-    	assertEquals(result, TagSupport.SKIP_BODY);
-    	
-    	result = tag.doEndTag();
-    	assertEquals(result, TagSupport.EVAL_PAGE);
-    }
-    
-
-    public void testArrayIterator() {
-        Foo foo = new Foo();
-        foo.setArray(new String[]{"test1", "test2", "test3"});
-
-        stack.push(foo);
-
-        tag.setValue("array");
-
-        iterateThreeStrings();
-    }
-
-    public void testCollectionIterator() {
-        Foo foo = new Foo();
-        ArrayList list = new ArrayList();
-        list.add("test1");
-        list.add("test2");
-        list.add("test3");
-        foo.setList(list);
-
-        stack.push(foo);
-
-        tag.setValue("list");
-
-        iterateThreeStrings();
-    }
-
-    public void testIteratorWithDefaultValue() {
-        stack.push(new String[]{"test1", "test2", "test3"});
-        iterateThreeStrings();
-    }
-
-    public void testMapIterator() {
-        Foo foo = new Foo();
-        HashMap map = new HashMap();
-        map.put("test1", "123");
-        map.put("test2", "456");
-        map.put("test3", "789");
-        foo.setMap(map);
-
-        stack.push(foo);
-
-        tag.setValue("map");
-
-        int result = 0;
-
-        try {
-            result = tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(TagSupport.EVAL_BODY_INCLUDE, result);
-        assertEquals(4, stack.size());
-        assertTrue(stack.getRoot().peek() instanceof Map.Entry);
-
-        try {
-            result = tag.doAfterBody();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(TagSupport.EVAL_BODY_AGAIN, result);
-        assertEquals(4, stack.size());
-        assertTrue(stack.getRoot().peek() instanceof Map.Entry);
-
-        try {
-            result = tag.doAfterBody();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(TagSupport.EVAL_BODY_AGAIN, result);
-        assertEquals(4, stack.size());
-        assertTrue(stack.getRoot().peek() instanceof Map.Entry);
-
-        try {
-            result = tag.doAfterBody();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(TagSupport.SKIP_BODY, result);
-        assertEquals(3, stack.size());
-    }
-
-    public void testStatus() {
-        Foo foo = new Foo();
-        foo.setArray(new String[]{"test1", "test2", "test3"});
-
-        stack.push(foo);
-
-        tag.setValue("array");
-        tag.setStatus("fooStatus");
-
-        int result = 0;
-
-        try {
-            result = tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(result, TagSupport.EVAL_BODY_INCLUDE);
-        assertEquals("test1", stack.getRoot().peek());
-        assertEquals(4, stack.size());
-
-        IteratorStatus status = (IteratorStatus) context.get("fooStatus");
-        assertNotNull(status);
-        assertFalse(status.isLast());
-        assertTrue(status.isFirst());
-        assertEquals(0, status.getIndex());
-        assertEquals(1, status.getCount());
-        assertTrue(status.isOdd());
-        assertFalse(status.isEven());
-
-        try {
-            result = tag.doAfterBody();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(result, TagSupport.EVAL_BODY_AGAIN);
-        assertEquals("test2", stack.getRoot().peek());
-        assertEquals(4, stack.size());
-
-        status = (IteratorStatus) context.get("fooStatus");
-        assertNotNull(status);
-        assertFalse(status.isLast());
-        assertFalse(status.isFirst());
-        assertEquals(1, status.getIndex());
-        assertEquals(2, status.getCount());
-        assertFalse(status.isOdd());
-        assertTrue(status.isEven());
-
-        try {
-            result = tag.doAfterBody();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(result, TagSupport.EVAL_BODY_AGAIN);
-        assertEquals("test3", stack.getRoot().peek());
-        assertEquals(4, stack.size());
-
-        status = (IteratorStatus) context.get("fooStatus");
-        assertNotNull(status);
-        assertTrue(status.isLast());
-        assertFalse(status.isFirst());
-        assertEquals(2, status.getIndex());
-        assertEquals(3, status.getCount());
-        assertTrue(status.isOdd());
-        assertFalse(status.isEven());
-    }
-
-    public void testEmptyArray() {
-        Foo foo = new Foo();
-        foo.setArray(new String[]{});
-
-        stack.push(foo);
-
-        tag.setValue("array");
-
-        validateSkipBody();
-    }
-
-    public void testNullArray() {
-        Foo foo = new Foo();
-        foo.setArray(null);
-
-        stack.push(foo);
-
-        tag.setValue("array");
-
-        validateSkipBody();
-    }
-
-    public void testEmptyCollection() {
-        Foo foo = new Foo();
-        foo.setList(new ArrayList());
-
-        stack.push(foo);
-
-        tag.setValue("list");
-
-        validateSkipBody();
-    }
-
-    public void testNullCollection() {
-        Foo foo = new Foo();
-        foo.setList(null);
-
-        stack.push(foo);
-
-        tag.setValue("list");
-
-        validateSkipBody();
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        // create the needed objects
-        tag = new IteratorTag();
-
-        MockBodyContent mockBodyContent = new TestMockBodyContent();
-        mockBodyContent.setupGetEnclosingWriter(new MockJspWriter());
-        tag.setBodyContent(mockBodyContent);
-
-        // associate the tag with the mock page request
-        tag.setPageContext(pageContext);
-    }
-
-    private void iterateThreeStrings() {
-        int result = 0;
-
-        try {
-            result = tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(result, TagSupport.EVAL_BODY_INCLUDE);
-        assertEquals("test1", stack.getRoot().peek());
-        assertEquals(4, stack.size());
-
-        try {
-            result = tag.doAfterBody();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(result, TagSupport.EVAL_BODY_AGAIN);
-        assertEquals("test2", stack.getRoot().peek());
-        assertEquals(4, stack.size());
-
-        try {
-            result = tag.doAfterBody();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(result, TagSupport.EVAL_BODY_AGAIN);
-        assertEquals("test3", stack.getRoot().peek());
-        assertEquals(4, stack.size());
-
-        try {
-            result = tag.doAfterBody();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(result, TagSupport.SKIP_BODY);
-        assertEquals(3, stack.size());
-    }
-
-    private void validateSkipBody() {
-        int result = 0;
-
-        try {
-            result = tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        assertEquals(result, TagSupport.SKIP_BODY);
-        try {
-            result = tag.doEndTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    class Foo {
-        private Collection list;
-        private Map map;
-        private String[] array;
-
-        public void setArray(String[] array) {
-            this.array = array;
-        }
-
-        public String[] getArray() {
-            return array;
-        }
-
-        public void setList(Collection list) {
-            this.list = list;
-        }
-
-        public Collection getList() {
-            return list;
-        }
-
-        public void setMap(Map map) {
-            this.map = map;
-        }
-
-        public Map getMap() {
-            return map;
-        }
-    }
-
-    class TestMockBodyContent extends MockBodyContent {
-        public String getString() {
-            return ".-.";
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/MergeIteratorTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/MergeIteratorTagTest.java
deleted file mode 100644
index c88bf5d..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/MergeIteratorTagTest.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.struts2.views.jsp.iterator.MergeIteratorTag;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Test case for MergeIteratorTag.
- * 
- */
-public class MergeIteratorTagTest extends AbstractTagTest {
-
-	public void testMergingIteratorWithArrayAsSource() throws Exception {
-		MergeIteratorTag tag = new MergeIteratorTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myMergedIterator");
-		
-		ParamTag iterator1ParamTag = new ParamTag();
-		iterator1ParamTag.setPageContext(pageContext);
-		iterator1ParamTag.setValue("myArr1");
-		
-		ParamTag iterator2ParamTag = new ParamTag();
-		iterator2ParamTag.setPageContext(pageContext);
-		iterator2ParamTag.setValue("myArr2");
-		
-		ParamTag iterator3ParamTag = new ParamTag();
-		iterator3ParamTag.setPageContext(pageContext);
-		iterator3ParamTag.setValue("myArr3");
-		
-		
-		tag.doStartTag();
-		iterator1ParamTag.doStartTag();
-		iterator1ParamTag.doEndTag();
-		iterator2ParamTag.doStartTag();
-		iterator2ParamTag.doEndTag();
-		iterator3ParamTag.doStartTag();
-		iterator3ParamTag.doEndTag();
-		tag.doEndTag();
-		
-		Iterator mergedIterator = (Iterator) stack.findValue("#myMergedIterator"); // if not iterator, let CCE surface
-		
-		assertNotNull(mergedIterator);
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "1");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "a");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "A");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "2");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "b");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "B");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "3");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "c");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "C");
-		assertFalse(mergedIterator.hasNext());
-	}
-	
-
-	public void testMergingIteratorsWithListAsSource() throws Exception {
-		MergeIteratorTag tag = new MergeIteratorTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myMergedIterator");
-		
-		ParamTag iterator1ParamTag = new ParamTag();
-		iterator1ParamTag.setPageContext(pageContext);
-		iterator1ParamTag.setValue("myList1");
-		
-		ParamTag iterator2ParamTag = new ParamTag();
-		iterator2ParamTag.setPageContext(pageContext);
-		iterator2ParamTag.setValue("myList2");
-		
-		ParamTag iterator3ParamTag = new ParamTag();
-		iterator3ParamTag.setPageContext(pageContext);
-		iterator3ParamTag.setValue("myList3");
-		
-		
-		tag.doStartTag();
-		iterator1ParamTag.doStartTag();
-		iterator1ParamTag.doEndTag();
-		iterator2ParamTag.doStartTag();
-		iterator2ParamTag.doEndTag();
-		iterator3ParamTag.doStartTag();
-		iterator3ParamTag.doEndTag();
-		tag.doEndTag();
-		
-		Iterator mergedIterator = (Iterator) stack.findValue("#myMergedIterator"); // if not iterator, let CCE surface
-		
-		assertNotNull(mergedIterator);
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "1");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "a");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "A");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "2");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "b");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "B");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "3");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "c");
-		assertTrue(mergedIterator.hasNext());
-		assertEquals(mergedIterator.next(), "C");
-		assertFalse(mergedIterator.hasNext());
-	}
-	
-	
-	
-	
-	public Action getAction() {
-		return new ActionSupport() {
-			public List getMyList1() {
-				List l = new ArrayList();
-				l.add("1");
-				l.add("2");
-				l.add("3");
-				return l;
-			}
-			
-			public List getMyList2() {
-				List l = new ArrayList();
-				l.add("a");
-				l.add("b");
-				l.add("c");
-				return l;
-			}
-			
-			public List getMyList3() {
-				List l = new ArrayList();
-				l.add("A");
-				l.add("B");
-				l.add("C");
-				return l;
-			}
-			
-			public String[] getMyArr1() {
-				return new String[] { "1", "2", "3" };
-			}
-			
-			public String[] getMyArr2() {
-				return new String[] { "a", "b", "c" };
-			}
-			
-			public String[] getMyArr3() {
-				return new String[] {"A", "B", "C"};
-			}
-		};
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java
deleted file mode 100644
index 225fe84..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.portlet.PortletMode;
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletResponse;
-import javax.portlet.PortletURL;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.portlet.WindowState;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.PageContext;
-
-import junit.textui.TestRunner;
-
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.portlet.PortletActionConstants;
-import org.apache.struts2.portlet.util.PortletUrlHelper;
-import org.jmock.Mock;
-import org.jmock.cglib.MockObjectTestCase;
-import org.jmock.core.Constraint;
-
-import com.mockobjects.servlet.MockJspWriter;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-/**
- */
-public class PortletUrlTagTest extends MockObjectTestCase {
-
-	URLTag tag = new URLTag();
-
-	Mock mockHttpReq = null;
-
-	Mock mockHttpRes = null;
-
-	Mock mockPortletReq = null;
-
-	Mock mockPortletRes = null;
-
-	Mock mockPageCtx = null;
-
-	Mock mockPortletUrl = null;
-	
-	MockJspWriter mockJspWriter = null;
-
-	ValueStack stack = null;
-
-	public static void main(String[] args) {
-		TestRunner.run(PortletUrlTagTest.class);
-	}
-
-	public void setUp() throws Exception {
-		super.setUp();
-		
-		Settings.reset();
-        Dispatcher.setInstance(new Dispatcher(null));
-        
-        mockPortletApiAvailable();
-		
-		stack = ValueStackFactory.getFactory().createValueStack();
-
-		
-		mockHttpReq = mock(HttpServletRequest.class);
-		mockHttpRes = mock(HttpServletResponse.class);
-		mockPortletReq = mock(RenderRequest.class);
-		mockPortletRes = mock(RenderResponse.class);
-		mockPageCtx = mock(PageContext.class);
-		mockPortletUrl = mock(PortletURL.class);
-		mockJspWriter = new MockJspWriter();
-
-		mockPageCtx.stubs().method("getRequest").will(
-				returnValue((HttpServletRequest) mockHttpReq.proxy()));
-		mockPageCtx.stubs().method("getResponse").will(
-				returnValue((HttpServletResponse) mockHttpRes.proxy()));
-		mockPageCtx.stubs().method("getOut").will(returnValue(mockJspWriter));
-		
-		mockHttpReq.stubs().method("getScheme").will(returnValue("http"));
-		mockHttpReq.stubs().method("getAttribute").with(
-				eq("struts.valueStack")).will(returnValue(stack));
-		mockHttpReq.stubs().method("getAttribute").with(
-				eq("javax.portlet.response")).will(
-				returnValue((PortletResponse) mockPortletRes.proxy()));
-		mockHttpReq.stubs().method("getAttribute").with(
-				eq("javax.portlet.request")).will(
-				returnValue((PortletRequest) mockPortletReq.proxy()));
-		
-		mockPortletReq.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
-		mockPortletReq.stubs().method("getWindowState").will(returnValue(WindowState.NORMAL));
-		mockPortletReq.stubs().method("getContextPath").will(returnValue("/contextPath"));
-
-		tag.setPageContext((PageContext) mockPageCtx.proxy());
-		
-		Map modeMap = new HashMap();
-		modeMap.put(PortletMode.VIEW, "/view");
-		modeMap.put(PortletMode.HELP, "/help");
-		modeMap.put(PortletMode.EDIT, "/edit");
-		Map sessionMap = new HashMap();
-		Map contextMap = new HashMap();
-		contextMap.put(ActionContext.SESSION, sessionMap);
-		contextMap.put(PortletActionConstants.REQUEST, mockPortletReq.proxy());
-		contextMap.put(PortletActionConstants.RESPONSE, mockPortletRes.proxy());
-		contextMap.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
-		contextMap.put(PortletActionConstants.MODE_NAMESPACE_MAP, modeMap);
-		ActionContext ctx = new ActionContext(contextMap);
-		ctx.setValueStack(stack);
-		ActionContext.setContext(ctx);
-    }
-
-	/**
-     * 
-     */
-    private void mockPortletApiAvailable() {
-        try {
-            Field field = Dispatcher.class.getDeclaredField("portletSupportActive");
-            field.setAccessible(true);
-            field.set(null, Boolean.TRUE);
-        }
-        catch(Exception e) {
-            
-        }
-        
-    }
-
-    public void testEnsureParamsAreStringArrays() {
-		Map params = new HashMap();
-		params.put("param1", "Test1");
-		params.put("param2", new String[] { "Test2" });
-
-		Map result = PortletUrlHelper.ensureParamsAreStringArrays(params);
-		assertEquals(2, result.size());
-		assertTrue(result.get("param1") instanceof String[]);
-	}
-
-	public void testSetWindowState() throws Exception {
-
-	    PortletMode mode = PortletMode.VIEW;
-	    
-		mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
-
-		mockPortletRes.expects(once()).method("createRenderURL").will(
-				returnValue((PortletURL) mockPortletUrl.proxy()));
-		
-		Map paramMap = new HashMap();
-		paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction"});
-		paramMap.put(PortletActionConstants.MODE_PARAM, new String[]{mode.toString()});
-		
-		mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap));
-		mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.MAXIMIZED));
-		mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.VIEW));
-		
-		tag.setAction("testAction");
-		tag.setWindowState("maximized");
-		tag.doStartTag();
-		tag.doEndTag();
-
-	}
-	
-	public void testSetPortletMode() throws Exception  {
-	    
-	    PortletMode mode = PortletMode.HELP;
-	    
-		mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
-
-		mockPortletRes.expects(once()).method("createRenderURL").will(
-				returnValue((PortletURL) mockPortletUrl.proxy()));
-		
-		Map paramMap = new HashMap();
-		paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{"/help/testAction"});
-		paramMap.put(PortletActionConstants.MODE_PARAM, new String[]{mode.toString()});
-		
-		mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap));
-		mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.HELP));
-		mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.NORMAL));
-		
-		tag.setAction("testAction");
-		tag.setPortletMode("help");
-		tag.doStartTag();
-		tag.doEndTag();
-	}
-	
-	public void testUrlWithQueryParams() throws Exception {
-	    
-	    PortletMode mode = PortletMode.VIEW;
-	    
-		mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
-
-		mockPortletRes.expects(once()).method("createRenderURL").will(
-				returnValue((PortletURL) mockPortletUrl.proxy()));
-		
-		Map paramMap = new HashMap();
-		paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction"});
-		paramMap.put("testParam1", new String[]{"testValue1"});
-		paramMap.put(PortletActionConstants.MODE_PARAM, new String[]{mode.toString()});
-		
-		mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap));
-		mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.VIEW));
-		mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.NORMAL));
-		
-		tag.setAction("testAction?testParam1=testValue1");
-		tag.doStartTag();
-		tag.doEndTag();
-	}
-	
-	public void testActionUrl() throws Exception {
-	    
-	    PortletMode mode = PortletMode.VIEW;
-	    
-		mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
-
-		mockPortletRes.expects(once()).method("createActionURL").will(
-				returnValue((PortletURL) mockPortletUrl.proxy()));
-		
-		Map paramMap = new HashMap();
-		paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction"});
-		paramMap.put(PortletActionConstants.MODE_PARAM, new String[]{mode.toString()});
-		
-		mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap));
-		mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.VIEW));
-		mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.NORMAL));
-		
-		tag.setAction("testAction");
-		tag.setPortletUrlType("action");
-		tag.doStartTag();
-		tag.doEndTag();
-	}
-	
-	public void testResourceUrl() throws Exception {
-		mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
-		mockPortletRes.expects(once()).method("encodeURL").will(returnValue("/contextPath/image.gif"));
-		mockJspWriter.setExpectedData("/contextPath/image.gif");
-		tag.setValue("image.gif");
-		tag.doStartTag();
-		tag.doEndTag();
-		mockJspWriter.verify();
-	}
-	
-	public void testResourceUrlWithNestedParam() throws Exception {
-		mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
-		mockPortletRes.expects(once()).method("encodeURL").with(eq("/contextPath/image.gif?testParam1=testValue1")).will(returnValue("/contextPath/image.gif?testParam1=testValue1"));
-		mockJspWriter.setExpectedData("/contextPath/image.gif?testParam1=testValue1");
-		
-		ParamTag paramTag = new ParamTag();
-		paramTag.setPageContext((PageContext)mockPageCtx.proxy());
-		paramTag.setParent(tag);
-		paramTag.setName("testParam1");
-		paramTag.setValue("'testValue1'");
-		tag.setValue("image.gif");
-		tag.doStartTag();
-		paramTag.doStartTag();
-		paramTag.doEndTag();
-		tag.doEndTag();
-		mockJspWriter.verify();
-	}
-	
-	public void testResourceUrlWithTwoNestedParam() throws Exception {
-		mockHttpReq.stubs().method("getQueryString").will(returnValue(""));
-		mockPortletRes.expects(once()).method("encodeURL").with(eq("/contextPath/image.gif?testParam1=testValue1&testParam2=testValue2")).will(returnValue("/contextPath/image.gif?testParam1=testValue1&testParam2=testValue2"));
-		mockJspWriter.setExpectedData("/contextPath/image.gif?testParam1=testValue1&testParam2=testValue2");
-		
-		ParamTag paramTag = new ParamTag();
-		paramTag.setPageContext((PageContext)mockPageCtx.proxy());
-		paramTag.setParent(tag);
-		paramTag.setName("testParam1");
-		paramTag.setValue("'testValue1'");
-		ParamTag paramTag2 = new ParamTag();
-		paramTag2.setPageContext((PageContext)mockPageCtx.proxy());
-		paramTag2.setParent(tag);
-		paramTag2.setName("testParam2");
-		paramTag2.setValue("'testValue2'");
-		tag.setValue("image.gif");
-		tag.doStartTag();
-		paramTag.doStartTag();
-		paramTag.doEndTag();
-		paramTag2.doStartTag();
-		paramTag2.doEndTag();
-		tag.doEndTag();
-		mockJspWriter.verify();
-	}
-
-	private static class ParamMapConstraint implements Constraint {
-
-		private Map myExpectedMap = null;
-		private Map myActualMap = null;
-		
-		public ParamMapConstraint(Map expectedMap) {
-			if(expectedMap == null) {
-				throw new IllegalArgumentException("Use an isNull constraint instead!");
-			}
-			myExpectedMap = expectedMap;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.jmock.core.Constraint#eval(java.lang.Object)
-		 */
-		public boolean eval(Object val) {
-			myActualMap = (Map)val;
-			boolean result = false;
-			if(val != null) {
-				if(myExpectedMap.size() == myActualMap.size()) {
-					Iterator keys = myExpectedMap.keySet().iterator();
-					boolean allSame = true;
-					while(keys.hasNext()) {
-						Object key = keys.next();
-						if(!myActualMap.containsKey(key)) {
-							allSame = false;
-							break;
-						}
-						else {
-							String[] expected = (String[])myExpectedMap.get(key);
-							String[] actual = (String[])myActualMap.get(key);
-							if(!Arrays.equals(expected, actual)) {
-								allSame = false;
-								break;
-							}
-						}
-					}
-					result = allSame;
-				}
-			}
-			return result;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.jmock.core.SelfDescribing#describeTo(java.lang.StringBuffer)
-		 */
-		public StringBuffer describeTo(StringBuffer sb) {
-			return sb.append(myExpectedMap);
-		}
-		
-		
-
-	}
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java
deleted file mode 100644
index d92ecfe..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.jsp.JspException;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.config.Settings;
-
-import com.mockobjects.servlet.MockJspWriter;
-import com.mockobjects.servlet.MockPageContext;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- * PropertyTag test case.
- * 
- */
-public class PropertyTagTest extends StrutsTestCase {
-
-    StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
-    ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-
-
-    public void testDefaultValue() {
-        PropertyTag tag = new PropertyTag();
-
-        Foo foo = new Foo();
-
-        stack.push(foo);
-
-        MockJspWriter jspWriter = new MockJspWriter();
-        jspWriter.setExpectedData("TEST");
-
-        MockPageContext pageContext = new MockPageContext();
-        pageContext.setJspWriter(jspWriter);
-        pageContext.setRequest(request);
-
-        tag.setPageContext(pageContext);
-        tag.setValue("title");
-        tag.setDefault("TEST");
-
-        try {
-            tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        request.verify();
-        jspWriter.verify();
-        pageContext.verify();
-    }
-
-    public void testNull() {
-        PropertyTag tag = new PropertyTag();
-
-        Foo foo = new Foo();
-
-        stack.push(foo);
-
-        MockJspWriter jspWriter = new MockJspWriter();
-        jspWriter.setExpectedData("");
-
-        MockPageContext pageContext = new MockPageContext();
-        pageContext.setJspWriter(jspWriter);
-        pageContext.setRequest(request);
-
-        tag.setPageContext(pageContext);
-        tag.setValue("title");
-
-        try {
-            tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        request.verify();
-        jspWriter.verify();
-        pageContext.verify();
-    }
-
-    public void testSimple() {
-        PropertyTag tag = new PropertyTag();
-
-        Foo foo = new Foo();
-        foo.setTitle("test");
-
-        stack.push(foo);
-
-        MockJspWriter jspWriter = new MockJspWriter();
-        jspWriter.setExpectedData("test");
-
-        MockPageContext pageContext = new MockPageContext();
-        pageContext.setJspWriter(jspWriter);
-        pageContext.setRequest(request);
-
-        tag.setPageContext(pageContext);
-        tag.setValue("title");
-
-        try {
-            tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        request.verify();
-        jspWriter.verify();
-        pageContext.verify();
-    }
-
-    public void testTopOfStack() {
-        PropertyTag tag = new PropertyTag();
-
-        Foo foo = new Foo();
-        foo.setTitle("test");
-
-        stack.push(foo);
-
-        MockJspWriter jspWriter = new MockJspWriter();
-        jspWriter.setExpectedData("Foo is: test");
-
-        MockPageContext pageContext = new MockPageContext();
-        pageContext.setJspWriter(jspWriter);
-        pageContext.setRequest(request);
-
-        tag.setPageContext(pageContext);
-
-        try {
-            tag.doStartTag();
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        request.verify();
-        jspWriter.verify();
-        pageContext.verify();
-    }
-
-
-    public void testWithAltSyntax1() throws Exception {
-        // setups
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "true");
-
-        Foo foo = new Foo();
-        foo.setTitle("tm_jee");
-        stack.push(foo);
-
-        MockJspWriter jspWriter = new MockJspWriter();
-        jspWriter.setExpectedData("Foo is: tm_jee");
-
-        MockPageContext pageContext = new MockPageContext();
-        pageContext.setJspWriter(jspWriter);
-        pageContext.setRequest(request);
-
-        // test
-        {PropertyTag tag = new PropertyTag();
-        tag.setPageContext(pageContext);
-        tag.setValue("%{toString()}");
-        tag.doStartTag();
-        tag.doEndTag();}
-
-        // verify test
-        request.verify();
-        jspWriter.verify();
-        pageContext.verify();
-    }
-
-    public void testWithAltSyntax2() throws Exception {
-        // setups
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "true");
-
-        Foo foo = new Foo();
-        foo.setTitle("tm_jee");
-        stack.push(foo);
-
-        MockJspWriter jspWriter = new MockJspWriter();
-        jspWriter.setExpectedData("Foo is: tm_jee");
-
-        MockPageContext pageContext = new MockPageContext();
-        pageContext.setJspWriter(jspWriter);
-        pageContext.setRequest(request);
-
-        // test
-        {PropertyTag tag = new PropertyTag();
-        tag.setPageContext(pageContext);
-        tag.setValue("toString()");
-        tag.doStartTag();
-        tag.doEndTag();}
-
-        // verify test
-        request.verify();
-        jspWriter.verify();
-        pageContext.verify();
-    }
-
-    public void testWithoutAltSyntax1() throws Exception {
-        //      setups
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "false");
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "false");
-
-        Foo foo = new Foo();
-        foo.setTitle("tm_jee");
-        stack.push(foo);
-
-        MockJspWriter jspWriter = new MockJspWriter();
-        jspWriter.setExpectedData("Foo is: tm_jee");
-
-        MockPageContext pageContext = new MockPageContext();
-        pageContext.setJspWriter(jspWriter);
-        pageContext.setRequest(request);
-
-        // test
-        {PropertyTag tag = new PropertyTag();
-        tag.setPageContext(pageContext);
-        tag.setValue("toString()");
-        tag.doStartTag();
-        tag.doEndTag();}
-
-        // verify test
-        request.verify();
-        jspWriter.verify();
-        pageContext.verify();
-    }
-
-
-    public void testWithoutAltSyntax2() throws Exception {
-        //      setups
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "false");
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "false");
-
-        Foo foo = new Foo();
-        foo.setTitle("tm_jee");
-        stack.push(foo);
-
-        MockJspWriter jspWriter = new MockJspWriter();
-
-        MockPageContext pageContext = new MockPageContext();
-        pageContext.setJspWriter(jspWriter);
-        pageContext.setRequest(request);
-
-        // test
-        {PropertyTag tag = new PropertyTag();
-        tag.setPageContext(pageContext);
-        tag.setValue("%{toString()}");
-        tag.doStartTag();
-        tag.doEndTag();}
-
-        // verify test
-        request.verify();
-        jspWriter.verify();
-        pageContext.verify();
-    }
-
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        ActionContext.getContext().setValueStack(stack);
-        request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
-    }
-
-
-    public class Foo {
-        private String title;
-
-        public void setTitle(String title) {
-            this.title = title;
-        }
-
-        public String getTitle() {
-            return title;
-        }
-
-        public String toString() {
-            return "Foo is: " + title;
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/PushTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/PushTagTest.java
deleted file mode 100644
index ee27b05..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/PushTagTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.jsp.JspException;
-
-
-/**
- */
-public class PushTagTest extends AbstractUITagTest {
-
-    public void testSimple() {
-        PushTag tag = new PushTag();
-
-        stack.setValue("foo", "bar");
-
-        tag.setPageContext(pageContext);
-        tag.setValue("foo");
-
-        try {
-            assertEquals(2, stack.size());
-            tag.doStartTag();
-            assertEquals(3, stack.size());
-            tag.doEndTag();
-            assertEquals(2, stack.size());
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/SetTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/SetTagTest.java
deleted file mode 100644
index 4ab11ca..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/SetTagTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import javax.servlet.jsp.JspException;
-
-
-/**
- */
-public class SetTagTest extends AbstractUITagTest {
-
-    Chewbacca chewie;
-    SetTag tag;
-
-
-    public void testApplicationScope() throws JspException {
-        tag.setName("foo");
-        tag.setValue("name");
-        tag.setScope("application");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("chewie", servletContext.getAttribute("foo"));
-    }
-
-    public void testPageScope() throws JspException {
-        tag.setName("foo");
-        tag.setValue("name");
-        tag.setScope("page");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("chewie", pageContext.getAttribute("foo"));
-    }
-
-    public void testRequestScope() throws JspException {
-        tag.setName("foo");
-        tag.setValue("name");
-        tag.setScope("request");
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("chewie", request.getAttribute("foo"));
-    }
-
-    public void testSessionScope() throws JspException {
-        tag.setName("foo");
-        tag.setValue("name");
-        tag.setScope("session");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("chewie", session.get("foo"));
-    }
-
-    public void testStrutsScope() throws JspException {
-        tag.setName("foo");
-        tag.setValue("name");
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("chewie", context.get("foo"));
-    }
-
-    public void testStrutsScope2() throws JspException {
-        tag.setName("chewie");
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(chewie, context.get("chewie"));
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        tag = new SetTag();
-        chewie = new Chewbacca("chewie", true);
-        stack.push(chewie);
-        tag.setPageContext(pageContext);
-    }
-
-
-    public class Chewbacca {
-        String name;
-        boolean furry;
-
-        public Chewbacca(String name, boolean furry) {
-            this.name = name;
-            this.furry = furry;
-        }
-
-        public void setFurry(boolean furry) {
-            this.furry = furry;
-        }
-
-        public boolean isFurry() {
-            return furry;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return name;
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java
deleted file mode 100644
index ef89b31..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.jsp.JspException;
-
-import org.apache.struts2.views.jsp.iterator.SortIteratorTag;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Test case to test SortIteratorTag.
- *
- */
-public class SortIteratorTagTest extends AbstractTagTest {
-
-    public void testSortWithoutId() throws Exception {
-        SortIteratorTag tag = new SortIteratorTag();
-
-        tag.setComparator("comparator");
-        tag.setSource("source");
-
-        tag.setPageContext(pageContext);
-        tag.doStartTag();
-
-        // if not an Iterator, just let the ClassCastException be thrown as error instead of failure
-        Iterator sortedIterator = (Iterator) stack.findValue("top");
-
-        assertNotNull(sortedIterator);
-        // 1
-        assertTrue(sortedIterator.hasNext());
-        assertEquals(sortedIterator.next(), new Integer(1));
-        // 2
-        assertTrue(sortedIterator.hasNext());
-        assertEquals(sortedIterator.next(), new Integer(2));
-        // 3.
-        assertTrue(sortedIterator.hasNext());
-        assertEquals(sortedIterator.next(), new Integer(3));
-        // 4.
-        assertTrue(sortedIterator.hasNext());
-        assertEquals(sortedIterator.next(), new Integer(4));
-        // 5
-        assertTrue(sortedIterator.hasNext());
-        assertEquals(sortedIterator.next(), new Integer(5));
-
-        assertFalse(sortedIterator.hasNext());
-        tag.doEndTag();
-    }
-
-    public void testSortWithIdIteratorAvailableInStackTop() throws Exception {
-    	
-    	SortIteratorTag tag = new SortIteratorTag();
-
-        tag.setId("myId");
-        tag.setComparator("comparator");
-        tag.setSource("source");
-
-        tag.setPageContext(pageContext);
-        tag.doStartTag();
-
-        {
-            Iterator sortedIterator = (Iterator) stack.findValue("top");
-
-            assertNotNull(sortedIterator);
-            // 1
-            assertTrue(sortedIterator.hasNext());
-            assertEquals(sortedIterator.next(), new Integer(1));
-            // 2
-            assertTrue(sortedIterator.hasNext());
-            assertEquals(sortedIterator.next(), new Integer(2));
-            // 3
-            assertTrue(sortedIterator.hasNext());
-            assertEquals(sortedIterator.next(), new Integer(3));
-            // 4
-            assertTrue(sortedIterator.hasNext());
-            assertEquals(sortedIterator.next(), new Integer(4));
-            // 5
-            assertTrue(sortedIterator.hasNext());
-            assertEquals(sortedIterator.next(), new Integer(5));
-            
-            assertFalse(sortedIterator.hasNext());
-        }
-
-        tag.doEndTag();
-    }
-    
-    
-    public void testSortWithIdIteratorAvailableInPageContext() throws Exception {
-        SortIteratorTag tag = new SortIteratorTag();
-
-        tag.setId("myId");
-        tag.setComparator("comparator");
-        tag.setSource("source");
-
-        tag.setPageContext(pageContext);
-        tag.doStartTag();
-
-        {
-            Iterator sortedIterator = (Iterator) pageContext.getAttribute("myId");
-
-            assertNotNull(sortedIterator);
-            // 1
-            assertTrue(sortedIterator.hasNext());
-            assertEquals(sortedIterator.next(), new Integer(1));
-            // 2
-            assertTrue(sortedIterator.hasNext());
-            assertEquals(sortedIterator.next(), new Integer(2));
-            // 3
-            assertTrue(sortedIterator.hasNext());
-            assertEquals(sortedIterator.next(), new Integer(3));
-            // 4
-            assertTrue(sortedIterator.hasNext());
-            assertEquals(sortedIterator.next(), new Integer(4));
-            // 5
-            assertTrue(sortedIterator.hasNext());
-            assertEquals(sortedIterator.next(), new Integer(5));
-            
-            assertFalse(sortedIterator.hasNext());
-        }
-
-        tag.doEndTag();
-    }
-
-    public void testSortWithIllegalSource() throws Exception {
-        SortIteratorTag tag = new SortIteratorTag();
-
-        tag.setComparator("comparator");
-        tag.setSource("badSource");
-
-        try {
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            tag.doEndTag();
-            fail("JspException expected");
-        }
-        catch (JspException e) {
-            // ok
-            assertTrue(true);
-        }
-    }
-
-    public void testSortWithIllegalComparator() throws Exception {
-        SortIteratorTag tag = new SortIteratorTag();
-
-        tag.setComparator("badComparator");
-        tag.setSource("source");
-
-        try {
-            tag.setPageContext(pageContext);
-            tag.doStartTag();
-            tag.doEndTag();
-            fail("JspException expected");
-        }
-        catch (JspException e) {
-            // good
-            assertTrue(true);
-        }
-
-    }
-
-    public Action getAction() {
-        return new ActionSupport() {
-            public Comparator getComparator() {
-                return new Comparator() {
-                    public int compare(Object o1, Object o2) {
-                        Integer i1 = (Integer) o1;
-                        Integer i2 = (Integer) o2;
-
-                        return (i1.intValue() - i2.intValue());
-                    }
-                };
-            }
-
-            public List getSource() {
-                List l = new ArrayList();
-                l.add(new Integer(3));
-                l.add(new Integer(1));
-                l.add(new Integer(2));
-                l.add(new Integer(5));
-                l.add(new Integer(4));
-                return l;
-            }
-
-            public Object getBadComparator() {
-                return new Object();
-            }
-
-            public Object getBadSource() {
-                return new Object();
-            }
-        };
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockBodyContent.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockBodyContent.java
deleted file mode 100644
index 9f94c33..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockBodyContent.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.Writer;
-
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.tagext.BodyContent;
-
-
-/**
- * StrutsMockBodyContent
- *
- */
-public class StrutsMockBodyContent extends BodyContent {
-
-    private JspWriter jspWriter;
-    private String body = null;
-
-
-    public StrutsMockBodyContent(JspWriter jspWriter) {
-        super(jspWriter);
-        this.jspWriter = jspWriter;
-    }
-
-
-    public Reader getReader() {
-        return null;
-    }
-
-    public int getRemaining() {
-        return jspWriter.getRemaining();
-    }
-
-    public void setString(String body) {
-        this.body = body;
-    }
-
-    public String getString() {
-        return body;
-    }
-
-    public void clear() throws IOException {
-        jspWriter.clear();
-    }
-
-    public void clearBuffer() throws IOException {
-        jspWriter.clearBuffer();
-    }
-
-    public void close() throws IOException {
-        jspWriter.close();
-    }
-
-    public void newLine() throws IOException {
-        jspWriter.newLine();
-    }
-
-    public void print(double v) throws IOException {
-        jspWriter.print(v);
-    }
-
-    public void print(int i) throws IOException {
-        jspWriter.print(i);
-    }
-
-    public void print(long l) throws IOException {
-        jspWriter.print(l);
-    }
-
-    public void print(float v) throws IOException {
-        jspWriter.print(v);
-    }
-
-    public void print(boolean b) throws IOException {
-        jspWriter.print(b);
-    }
-
-    public void print(String s) throws IOException {
-        jspWriter.print(s);
-    }
-
-    public void print(char c) throws IOException {
-        jspWriter.print(c);
-    }
-
-    public void print(Object o) throws IOException {
-        jspWriter.print(o);
-    }
-
-    public void print(char[] chars) throws IOException {
-        jspWriter.print(chars);
-    }
-
-    public void println() throws IOException {
-        jspWriter.println();
-    }
-
-    public void println(char c) throws IOException {
-        jspWriter.println(c);
-    }
-
-    public void println(String s) throws IOException {
-        jspWriter.println(s);
-    }
-
-    public void println(char[] chars) throws IOException {
-        jspWriter.println(chars);
-    }
-
-    public void println(boolean b) throws IOException {
-        jspWriter.println(b);
-    }
-
-    public void println(long l) throws IOException {
-        jspWriter.println(l);
-    }
-
-    public void println(int i) throws IOException {
-        jspWriter.println(i);
-    }
-
-    public void println(float v) throws IOException {
-        jspWriter.println(v);
-    }
-
-    public void println(double v) throws IOException {
-        jspWriter.println(v);
-    }
-
-    public void println(Object o) throws IOException {
-        jspWriter.println(o);
-    }
-
-    public void write(char[] chars, int i, int i1) throws IOException {
-        jspWriter.write(chars, i, i1);
-    }
-
-    public void writeOut(Writer writer) throws IOException {
-        writer.write(body);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletRequest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletRequest.java
deleted file mode 100644
index 56a155c..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletRequest.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.http.HttpSession;
-
-import junit.framework.AssertionFailedError;
-
-import com.mockobjects.servlet.MockHttpServletRequest;
-
-
-/**
- * StrutsMockHttpServletRequest
- *
- */
-public class StrutsMockHttpServletRequest extends MockHttpServletRequest {
-
-    Locale locale = Locale.US;
-    private Map attributes = new HashMap();
-    private Map parameterMap = new HashMap();
-    private String context = "";
-    private String pathInfo = "";
-    private String queryString;
-    private String requestURI;
-    private String scheme;
-    private String serverName;
-    private int serverPort;
-    private String encoding;
-    private String requestDispatherString;
-
-
-    public void setAttribute(String s, Object o) {
-        attributes.put(s, o);
-    }
-
-    public Object getAttribute(String s) {
-        return attributes.get(s);
-    }
-
-    public Enumeration getAttributeNames() {
-        Vector v = new Vector();
-        v.addAll(attributes.keySet());
-
-        return v.elements();
-    }
-
-    public String getContextPath() {
-        return this.context;
-    }
-
-    public void setLocale(Locale locale) {
-        this.locale = locale;
-    }
-
-    public Locale getLocale() {
-        return locale;
-    }
-
-    public void setCharacterEncoding(String s) {
-        this.encoding = s;
-    }
-
-    public String getCharacterEncoding() {
-        return encoding;
-    }
-
-    public void setParameterMap(Map parameterMap) {
-        this.parameterMap = parameterMap;
-    }
-
-    public Map getParameterMap() {
-        return parameterMap;
-    }
-
-    public String getParameter(String string) {
-        return (String) parameterMap.get(string);
-    }
-
-    public Enumeration getParameterNames() {
-        return Collections.enumeration(parameterMap.keySet());
-    }
-
-    public String[] getParameterValues(String string) {
-        return (String[]) parameterMap.get(string);
-    }
-
-    public String getPathInfo() {
-        return pathInfo;
-    }
-
-    public void setQueryString(String queryString) {
-        this.queryString = queryString;
-    }
-
-    public String getQueryString() {
-        return queryString;
-    }
-
-    public RequestDispatcher getRequestDispatcher(String string) {
-        this.requestDispatherString = string;
-        return super.getRequestDispatcher(string);
-    }
-
-    /**
-     * Get's the source string that was used in the last getRequestDispatcher method call.
-     */
-    public String getRequestDispatherString() {
-        return requestDispatherString;
-    }
-
-    public void setRequestURI(String requestURI) {
-        this.requestURI = requestURI;
-    }
-
-    public String getRequestURI() {
-        return requestURI;
-    }
-
-    public void setScheme(String scheme) {
-        this.scheme = scheme;
-    }
-
-    public String getScheme() {
-        return scheme;
-    }
-
-    public void setServerName(String serverName) {
-        this.serverName = serverName;
-    }
-
-    public String getServerName() {
-        return serverName;
-    }
-
-    public void setServerPort(int serverPort) {
-        this.serverPort = serverPort;
-    }
-
-    public int getServerPort() {
-        return serverPort;
-    }
-
-    public HttpSession getSession() {
-        HttpSession session = null;
-
-        try {
-            session = super.getSession();
-        } catch (AssertionFailedError e) {
-            //ignore
-        }
-
-        if (session == null) {
-            session = new StrutsMockHttpSession();
-            setSession(session);
-        }
-
-        return session;
-    }
-
-    public void setupGetContext(String context) {
-        this.context = context;
-    }
-
-    public void setupGetPathInfo(String pathInfo) {
-        this.pathInfo = pathInfo;
-    }
-
-    public int getRemotePort() {
-        return 0;
-    }
-
-    public String getLocalName() {
-        return null;
-    }
-
-    public String getLocalAddr() {
-        return null;
-    }
-
-    public int getLocalPort() {
-        return 0;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java
deleted file mode 100644
index e7d069a..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Locale;
-
-import com.mockobjects.servlet.MockHttpServletResponse;
-
-
-/**
- * StrutsMockHttpServletResponse
- *
- */
-public class StrutsMockHttpServletResponse extends MockHttpServletResponse {
-    private Locale locale;
-    private PrintWriter writer;
-    
-    public Locale getLocale() {
-        return locale;
-    }
-
-    public void setLocale(Locale locale) {
-        this.locale = locale;
-    }
-
-    public PrintWriter getWriter() throws IOException {
-    	if (writer == null)
-    		return new PrintWriter(new ByteArrayOutputStream());
-    	else 
-    		return writer;
-    }
-    
-    public void setWriter(PrintWriter writer) {
-    	this.writer = writer;
-    }
-
-    public String encodeURL(String s) {
-        return s;
-    }
-
-    public String encodeUrl(String s) {
-        return s;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpSession.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpSession.java
deleted file mode 100644
index 5ba0454..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpSession.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import com.mockobjects.servlet.MockHttpSession;
-
-
-/**
- * StrutsMockHttpSession
- *
- */
-public class StrutsMockHttpSession extends MockHttpSession {
-
-    Hashtable attributes = new Hashtable();
-
-
-    public void setAttribute(String s, Object o) {
-        attributes.put(s, o);
-    }
-
-    public Object getAttribute(String s) {
-        return attributes.get(s);
-    }
-
-    public Enumeration getAttributeNames() {
-        return attributes.keys();
-    }
-
-    public void setExpectedAttribute(String s, Object o) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void setExpectedRemoveAttribute(String s) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void removeAttribute(String s) {
-        attributes.remove(s);
-    }
-
-    public void setupGetAttribute(String s, Object o) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void setupGetAttributeNames(Enumeration enumeration) {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockJspWriter.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockJspWriter.java
deleted file mode 100644
index a8f644c..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockJspWriter.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.io.IOException;
-import java.io.StringWriter;
-
-import javax.servlet.jsp.JspWriter;
-
-
-/**
- * Unforunately, the MockJspWriter throws a NotImplementedException when any of the Writer methods are invoked and
- * as you might guess, Velocity uses the Writer methods.  I'velocityEngine subclassed the MockJspWriter for the time being so
- * that we can do testing on the results until MockJspWriter gets fully implemented.
- * <p/>
- * todo replace this once MockJspWriter implements Writer correctly (i.e. doesn't throw NotImplementException)
- */
-public class StrutsMockJspWriter extends JspWriter {
-    StringWriter writer;
-
-    public StrutsMockJspWriter(StringWriter writer) {
-        super(1024, true);
-        this.writer = writer;
-    }
-
-    public void newLine() throws IOException {
-        writer.write("\n");
-    }
-
-    public void print(boolean b) throws IOException {
-        writer.write(String.valueOf(b));
-    }
-
-    public void print(char c) throws IOException {
-        writer.write(String.valueOf(c));
-    }
-
-    public void print(int i) throws IOException {
-        writer.write(i);
-    }
-
-    public void print(long l) throws IOException {
-        writer.write(String.valueOf(l));
-    }
-
-    public void print(float v) throws IOException {
-        writer.write(String.valueOf(v));
-    }
-
-    public void print(double v) throws IOException {
-        writer.write(String.valueOf(v));
-    }
-
-    public void print(char[] chars) throws IOException {
-        writer.write(chars);
-    }
-
-    public void print(String s) throws IOException {
-        writer.write(s);
-    }
-
-    public void print(Object o) throws IOException {
-        writer.write(o.toString());
-    }
-
-    public void println() throws IOException {
-        writer.write("\n");
-    }
-
-    public void println(boolean b) throws IOException {
-        print(b);
-        println();
-    }
-
-    public void println(char c) throws IOException {
-        print(c);
-        println();
-    }
-
-    public void println(int i) throws IOException {
-        print(i);
-        println();
-    }
-
-    public void println(long l) throws IOException {
-        print(l);
-        println();
-    }
-
-    public void println(float v) throws IOException {
-        print(v);
-        println();
-    }
-
-    public void println(double v) throws IOException {
-        print(v);
-        println();
-    }
-
-    public void println(char[] chars) throws IOException {
-        print(chars);
-        println();
-    }
-
-    public void println(String s) throws IOException {
-        print(s);
-        println();
-    }
-
-    public void println(Object o) throws IOException {
-        print(o);
-        println();
-    }
-
-    public void clear() throws IOException {
-    }
-
-    public void clearBuffer() throws IOException {
-    }
-
-    public void close() throws IOException {
-        writer.close();
-    }
-
-    public int getRemaining() {
-        return 0;
-    }
-
-    public void write(char cbuf[], int off, int len) throws IOException {
-        writer.write(cbuf, off, len);
-    }
-
-    public void write(String str) throws IOException {
-        writer.write(str);
-    }
-
-    public void write(int c) throws IOException {
-        writer.write(c);
-    }
-
-    public void write(char[] cbuf) throws IOException {
-        writer.write(cbuf);
-    }
-
-    public void write(String str, int off, int len) throws IOException {
-        writer.write(str, off, len);
-    }
-
-    public void flush() {
-        writer.flush();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockPageContext.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockPageContext.java
deleted file mode 100644
index cfbd71f..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockPageContext.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import com.mockobjects.servlet.MockPageContext;
-
-
-/**
- */
-public class StrutsMockPageContext extends MockPageContext {
-
-    private Map attributes = new HashMap();
-    private ServletResponse response;
-
-
-    public void setAttribute(String s, Object o) {
-        if ((s == null) || (o == null)) {
-            throw new NullPointerException("PageContext does not accept null attributes");
-        }
-
-        this.attributes.put(s, o);
-    }
-
-    public Object getAttribute(String key) {
-        return attributes.get(key);
-    }
-
-    public Object getAttributes(String key) {
-        return this.attributes.get(key);
-    }
-
-    public void setResponse(ServletResponse response) {
-        this.response = response;
-    }
-
-    public ServletResponse getResponse() {
-        return response;
-    }
-
-    public HttpSession getSession() {
-        HttpSession session = super.getSession();
-
-        if (session == null) {
-            session = ((HttpServletRequest) getRequest()).getSession(true);
-        }
-
-        return session;
-    }
-
-    public Object findAttribute(String s) {
-        return attributes.get(s);
-    }
-
-    public void removeAttribute(String key) {
-        this.attributes.remove(key);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java
deleted file mode 100644
index bf07f5b..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.Servlet;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-
-
-/**
- * StrutsMockServletContext
- *
- */
-public class StrutsMockServletContext implements ServletContext {
-
-    String realPath;
-    String servletInfo;
-    Map initParams = new HashMap();
-    Map attributes = new HashMap();
-    InputStream resourceAsStream;
-
-    public void setInitParameter(String name, String value) {
-        initParams.put(name, value);
-    }
-
-    public void setRealPath(String value) {
-        realPath = value;
-    }
-
-    public String getRealPath(String string) {
-        return realPath;
-    }
-
-    public ServletContext getContext(String s) {
-        return null;
-    }
-
-    public int getMajorVersion() {
-        return 0;
-    }
-
-    public int getMinorVersion() {
-        return 0;
-    }
-
-    public String getMimeType(String s) {
-        return null;
-    }
-
-    public Set getResourcePaths(String s) {
-        return null;
-    }
-
-    public URL getResource(String s) throws MalformedURLException {
-        return null;
-    }
-
-    public InputStream getResourceAsStream(String s) {
-    	if (resourceAsStream != null) {
-    		return resourceAsStream;
-    	}
-        return null;
-    }
-    
-    public void setResourceAsStream(InputStream is) {
-    	this.resourceAsStream = is;
-    }
-
-    public RequestDispatcher getRequestDispatcher(String s) {
-        return null;
-    }
-
-    public RequestDispatcher getNamedDispatcher(String s) {
-        return null;
-    }
-
-    public Servlet getServlet(String s) throws ServletException {
-        return null;
-    }
-
-    public Enumeration getServlets() {
-        return null;
-    }
-
-    public Enumeration getServletNames() {
-        return null;
-    }
-
-    public void log(String s) {
-    }
-
-    public void log(Exception e, String s) {
-    }
-
-    public void log(String s, Throwable throwable) {
-    }
-
-    public String getServerInfo() {
-        return servletInfo;
-    }
-
-    public String getInitParameter(String s) {
-        return (String) initParams.get(s);
-    }
-
-    public Enumeration getInitParameterNames() {
-        return Collections.enumeration(initParams.keySet());
-    }
-
-    public Object getAttribute(String s) {
-        return attributes.get(s);
-    }
-
-    public Enumeration getAttributeNames() {
-        return Collections.enumeration(attributes.keySet());
-    }
-
-    public void setAttribute(String s, Object o) {
-        attributes.put(s, o);
-    }
-
-    public void removeAttribute(String s) {
-        attributes.remove(s);
-    }
-
-    public String getServletContextName() {
-        return null;
-    }
-
-    public void setServletInfo(String servletInfo) {
-        this.servletInfo = servletInfo;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java
deleted file mode 100644
index 1cfd4ae..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.struts2.util.SubsetIteratorFilter.Decider;
-import org.apache.struts2.views.jsp.iterator.SubsetIteratorTag;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-
-/**
- * Test case for SubsetIteratorTag.
- * 
- */
-public class SubsetIteratorTagTest extends AbstractTagTest {
-	
-
-	public void testBasic() throws Exception {
-		{ // List as Source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myList");
-		
-			tag.doStartTag();
-			Iterator subsetIterator = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-		
-			assertEquals(subsetIterator.next(), new Integer(1));
-			assertEquals(subsetIterator.next(), new Integer(2));
-			assertEquals(subsetIterator.next(), new Integer(3));
-			assertEquals(subsetIterator.next(), new Integer(4));
-			assertEquals(subsetIterator.next(), new Integer(5));
-		}
-		
-		{ // Array as Source 
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myArray");
-		
-			tag.doStartTag();
-			Iterator subsetIterator = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			assertEquals(subsetIterator.next(), new Integer(1));
-			assertEquals(subsetIterator.next(), new Integer(2));
-			assertEquals(subsetIterator.next(), new Integer(3));
-			assertEquals(subsetIterator.next(), new Integer(4));
-			assertEquals(subsetIterator.next(), new Integer(5));
-		}
-	}
-	
-	public void testWithStartAttribute() throws Exception {
-		{ // List as source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myList");
-			tag.setStart("3");
-			
-			tag.doStartTag();
-			Iterator subsetIterator = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			assertEquals(subsetIterator.next(), new Integer(4));
-			assertEquals(subsetIterator.next(), new Integer(5));
-		}
-		
-		{ // Array as source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myArray");
-			tag.setStart("3");
-			
-			tag.doStartTag();
-			Iterator subsetIterator = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			assertEquals(subsetIterator.next(), new Integer(4));
-			assertEquals(subsetIterator.next(), new Integer(5));
-		}
-	}
-	
-	public void testWithCountAttribute() throws Exception {
-		{ // List as source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myList");
-			tag.setCount("3");
-			
-			tag.doStartTag();
-			Iterator subsetIterator = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			assertEquals(subsetIterator.next(), new Integer(1));
-			assertEquals(subsetIterator.next(), new Integer(2));
-			assertEquals(subsetIterator.next(), new Integer(3));
-		}
-		
-		{ // array as source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myArray");
-			tag.setCount("3");
-			
-			tag.doStartTag();
-			Iterator subsetIterator = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			assertEquals(subsetIterator.next(), new Integer(1));
-			assertEquals(subsetIterator.next(), new Integer(2));
-			assertEquals(subsetIterator.next(), new Integer(3));
-		}
-	}
-	
-	public void testWIthStartAndCountAttribute() throws Exception {
-		{ // List as source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myList");
-			tag.setStart("3");
-			tag.setCount("3");
-			
-			tag.doStartTag();
-			Iterator subsetIterator = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			assertEquals(subsetIterator.next(), new Integer("4"));
-			assertEquals(subsetIterator.next(), new Integer("5"));
-		}
-		
-		{	// Array as source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myArray");
-			tag.setStart("3");
-			tag.setCount("3");
-			
-			tag.doStartTag();
-			Iterator subsetIterator = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			assertEquals(subsetIterator.next(), new Integer("4"));
-			assertEquals(subsetIterator.next(), new Integer("5"));
-		}
-	}
-	
-	public void testWithId() throws Exception {
-		{	// List as Source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myList");
-			tag.setId("myPageContextId1");
-			
-			tag.doStartTag();
-			Iterator subsetIterator1 = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			Iterator subsetIterator2 = (Iterator) pageContext.getAttribute("myPageContextId1");
-			
-			assertNotNull(subsetIterator1);
-			assertNotNull(subsetIterator2);
-			assertEquals(subsetIterator1, subsetIterator2);
-			assertEquals(subsetIterator2.next(), new Integer(1));
-			assertEquals(subsetIterator2.next(), new Integer(2));
-			assertEquals(subsetIterator2.next(), new Integer(3));
-			assertEquals(subsetIterator2.next(), new Integer(4));
-			assertEquals(subsetIterator2.next(), new Integer(5));
-		}
-		
-		{	// Array as source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myArray");
-			tag.setId("myPageContextId2");
-			
-			tag.doStartTag();
-			Iterator subsetIterator1 = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			Iterator subsetIterator2 = (Iterator) pageContext.getAttribute("myPageContextId2");
-			
-			assertNotNull(subsetIterator1);
-			assertNotNull(subsetIterator2);
-			assertEquals(subsetIterator1, subsetIterator2);
-			assertEquals(subsetIterator2.next(), new Integer(1));
-			assertEquals(subsetIterator2.next(), new Integer(2));
-			assertEquals(subsetIterator2.next(), new Integer(3));
-			assertEquals(subsetIterator2.next(), new Integer(4));
-			assertEquals(subsetIterator2.next(), new Integer(5));
-		}
-	}
-	
-	public void testWithDecider() throws Exception {
-		{	// List as source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myList");
-			tag.setDecider("myDecider");
-			
-			tag.doStartTag();
-			Iterator subsetIterator = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			assertEquals(subsetIterator.next(), new Integer(2));
-			assertEquals(subsetIterator.next(), new Integer(4));
-		}
-		
-		{	// Array As source
-			SubsetIteratorTag tag = new SubsetIteratorTag();
-			tag.setPageContext(pageContext);
-			tag.setSource("myList");
-			tag.setDecider("myDecider");
-			
-			tag.doStartTag();
-			Iterator subsetIterator = (Iterator) stack.findValue("top");
-			tag.doEndTag();
-			
-			assertEquals(subsetIterator.next(), new Integer(2));
-			assertEquals(subsetIterator.next(), new Integer(4));
-		}
-	}
-	
-	
-	
-	public Action getAction() {
-		return new ActionSupport() {
-			public List getMyList() {
-				List l = new ArrayList();
-				l.add(new Integer(1));
-				l.add(new Integer(2));
-				l.add(new Integer(3));
-				l.add(new Integer(4));
-				l.add(new Integer(5));
-				return l;
-			}
-			
-			public Integer[] getMyArray() {
-				Integer[] integers = new Integer[5];
-				integers[0] = new Integer(1);
-				integers[1] = new Integer(2);
-				integers[2] = new Integer(3);
-				integers[3] = new Integer(4);
-				integers[4] = new Integer(5);
-				return integers;
-			}
-			
-			public Decider getMyDecider() {
-				return new Decider() {
-					public boolean decide(Object element) throws Exception {
-						int integer = ((Integer)element).intValue();
-						return (((integer % 2) == 0)?true:false);
-					}
-				};
-			}
-		};
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java
deleted file mode 100644
index d9af1f0..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.BodyTag;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.TestAction;
-import org.apache.struts2.components.Text;
-import org.apache.struts2.views.jsp.ui.StrutsBodyContent;
-import org.apache.struts2.views.jsp.ui.TestAction1;
-
-import com.mockobjects.servlet.MockJspWriter;
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-
-/**
- * TextTagTest
- *
- */
-public class TextTagTest extends AbstractTagTest {
-
-    private String fooValue = "org.apache.struts2.views.jsp.TextTagTest.fooValue";
-    private TextTag tag;
-
-
-    public Action getAction() {
-        TestAction action = new TestAction();
-        action.setFoo(fooValue);
-
-        return action;
-    }
-    
-    public void testDefaultMessageOk() throws Exception {
-    	// NOTE:
-    	// simulate the condition
-    	// <s:text name="some.invalid.key">My Default Message</s:text>
-    	
-    	StrutsMockBodyContent mockBodyContent = new StrutsMockBodyContent(new MockJspWriter());
-    	mockBodyContent.setString("Sample Of Default Message");
-    	tag.setBodyContent(mockBodyContent);
-    	tag.setName("some.invalid.key.so.we.should.get.the.default.message");
-    	int startStatus = tag.doStartTag();
-    	tag.doEndTag();
-    	
-    	assertEquals(startStatus, BodyTag.EVAL_BODY_BUFFERED);
-    	assertEquals("Sample Of Default Message", writer.toString());
-    }
-
-    public void testExpressionsEvaluated() throws Exception {
-        String key = "expressionKey";
-        String value = "Foo is " + fooValue;
-        tag.setName(key);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(value, writer.toString());
-    }
-
-    public void testCorrectI18NKey() throws Exception {
-        String key = "foo.bar.baz";
-        String value = "This should start with foo";
-        tag.setName(key);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(value, writer.toString());
-    }
-
-    public void testCorrectI18NKey2() throws Exception {
-        String key = "bar.baz";
-        String value = "No foo here";
-        tag.setName(key);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(value, writer.toString());
-    }
-
-    public void testMessageFormatWorks() throws Exception {
-        String key = "messageFormatKey";
-        String pattern = "Params are {0} {1} {2}";
-        Object param1 = new Integer(12);
-        Object param2 = new Date();
-        Object param3 = "StringVal";
-        List params = new ArrayList();
-        params.add(param1);
-        params.add(param2);
-        params.add(param3);
-
-        String expected = MessageFormat.format(pattern, params.toArray());
-        tag.setName(key);
-        tag.doStartTag();
-        ((Text) tag.component).addParameter(param1);
-        ((Text) tag.component).addParameter(param2);
-        ((Text) tag.component).addParameter(param3);
-        tag.doEndTag();
-        assertEquals(expected, writer.toString());
-    }
-
-    public void testSimpleKeyValueWorks() throws JspException {
-        String key = "simpleKey";
-        String value = "Simple Message";
-        tag.setName(key);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(value, writer.toString());
-    }
-
-    private Locale getForeignLocale() {
-        if (Locale.getDefault().getLanguage().equals("de")) {
-            return Locale.FRANCE;
-        } else {
-            return Locale.GERMANY;
-        }
-    }
-
-    private Locale getDefaultLocale() {
-        if (Locale.getDefault().getLanguage().equals("de")) {
-            return Locale.GERMANY;
-        } else if (Locale.getDefault().getLanguage().equals("fr")) {
-            return Locale.FRANCE;
-        } else {
-            return Locale.US;
-        }
-    }
-
-    private String getLocalizedMessage(Locale locale) {
-        if (locale.getLanguage().equals("de")) {
-            return "This is TestBean1 in German";
-        } else if (locale.getLanguage().equals("fr")) {
-            return "This is TestBean1 in French";
-        } else {
-            return "This is TestBean1";
-        }
-    }
-
-    public void testTextTagUsesValueStackInRequestNotActionContext() throws JspException {
-        String key = "simpleKey";
-        String value1 = "Simple Message";
-        Locale foreignLocale = getForeignLocale();
-        String value2 = getLocalizedMessage(foreignLocale);
-        tag.setName(key);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(value1, writer.toString());
-        final StringBuffer buffer = writer.getBuffer();
-        buffer.delete(0, buffer.length());
-        ValueStack newStack = ValueStackFactory.getFactory().createValueStack();
-        newStack.getContext().put(ActionContext.LOCALE, foreignLocale);
-        newStack.push(new TestAction1());
-        request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, newStack);
-        assertNotSame(ActionContext.getContext().getValueStack().peek(), newStack.peek());
-
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(value2, writer.toString());
-    }
-
-    public void testTextTagUsesLocaleFromValueStack() throws JspException {
-        stack.pop();
-        stack.push(new TestAction1());
-
-        Locale defaultLocale = getDefaultLocale();
-        Locale foreignLocale = getForeignLocale();
-        assertNotSame(defaultLocale, foreignLocale);
-
-        ActionContext.getContext().setLocale(defaultLocale);
-        String key = "simpleKey";
-        String value_default = getLocalizedMessage(defaultLocale);
-        tag.setName(key);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(value_default, writer.toString());
-
-        final StringBuffer buffer = writer.getBuffer();
-        buffer.delete(0, buffer.length());
-        String value_int = getLocalizedMessage(foreignLocale);
-        assertFalse(value_default.equals(value_int));
-        ValueStack newStack = ValueStackFactory.getFactory().createValueStack(stack);
-        newStack.getContext().put(ActionContext.LOCALE, foreignLocale);
-        assertNotSame(newStack.getContext().get(ActionContext.LOCALE), ActionContext.getContext().getLocale());
-        request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, newStack);
-        assertEquals(ActionContext.getContext().getValueStack().peek(), newStack.peek());
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(value_int, writer.toString());
-    }
-
-    public void testWithNoMessageAndBodyIsNotEmptyBodyIsReturned() throws Exception {
-        final String key = "key.does.not.exist";
-        final String bodyText = "body text";
-        tag.setName(key);
-
-        StrutsBodyContent bodyContent = new StrutsBodyContent(null);
-        bodyContent.print(bodyText);
-        tag.setBodyContent(bodyContent);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(bodyText, writer.toString());
-    }
-
-    public void testWithNoMessageAndNoDefaultKeyReturned() throws JspException {
-        final String key = "key.does.not.exist";
-        tag.setName("'" + key + "'");
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(key, writer.toString());
-    }
-
-    public void testNoNameDefined() throws Exception {
-        String msg = "tag 'text', field 'name': You must specify the i18n key. Example: welcome.header";
-        try {
-            tag.doStartTag();
-            tag.doEndTag();
-            fail("Should have thrown a RuntimeException");
-        } catch (StrutsException e) {
-            assertEquals(msg, e.getMessage());
-        }
-    }
-
-    public void testBlankNameDefined() throws Exception {
-        tag.setName("");
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("", writer.toString());
-    }
-
-    public void testPutId() throws Exception {
-        assertEquals(null, stack.findString("myId")); // nothing in stack
-        tag.setId("myId");
-        tag.setName("bar.baz");
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("", writer.toString());
-        assertEquals("No foo here", stack.findString("myId")); // is in stack now
-    }
-
-    /**
-     * todo remove ActionContext set after LocalizedTextUtil is fixed to not use ThreadLocal
-     *
-     * @throws Exception
-     */
-    protected void setUp() throws Exception {
-        super.setUp();
-        tag = new TextTag();
-        tag.setPageContext(pageContext);
-        ActionContext.setContext(new ActionContext(stack.getContext()));
-    }
-
-    protected void tearDown() throws Exception {
-        ValueStack valueStack = ValueStackFactory.getFactory().createValueStack();
-        ActionContext.setContext(new ActionContext(valueStack.getContext()));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java
deleted file mode 100644
index 887d554..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.jsp.JspWriter;
-
-import org.apache.struts2.components.URL;
-
-/**
- * Unit test for {@link URLTag}.
- *
- */
-public class URLTagTest extends AbstractUITagTest {
-
-    private URLTag tag;
-    
-    
-    /**
-     * To test priority of parameter passed in to url component though 
-     * various way 
-     *  - current request url
-     *  - tag's value attribute
-     *  - tag's nested param tag
-     * 
-	 * id1
-	 * ===
-	 * - found in current request url
-	 * - found in tag's value attribute
-	 * - found in tag's param tag
-	 * CONCLUSION: tag's param tag takes precedence (paramId1)
-	 * 
-	 * id2
-	 * ===
-	 * - found in current request url
-	 * - found in tag's value attribute
-	 * CONCLUSION: tag's value attribute take precedence (tagId2)
-	 * 
-	 * urlParam1
-	 * =========
-	 * - found in current request url
-	 * CONCLUSION: param in current request url will be used (urlValue1)
-	 * 
-	 * urlParam2
-	 * =========
-	 * - found in current request url
-	 * CONCLUSION: param in current request url will be used. (urlValue2)
-	 * 
-	 * tagId
-	 * =====
-	 * - found in tag's value attribute
-	 * CONCLUSION: param in tag's value attribute wil; be used. (tagValue)
-	 * 
-	 * param1
-	 * ======
-	 * - found in nested param tag
-	 * CONCLUSION: param in nested param tag will be used. (param1value)
-	 * 
-	 * param2
-	 * ======
-	 * - found in nested param tag
-	 * CONCLUSION: param in nested param tag will be used. (param2value)
-	 */
-    public void testParametersPriority() throws Exception {
-    	request.setQueryString("id1=urlId1&id2=urlId2&urlParam1=urlValue1&urlParam2=urlValue2");
-    	
-    	tag.setValue("testAction.action?id1=tagId1&id2=tagId2&tagId=tagValue");
-    	
-    	ParamTag param1 = new ParamTag();
-    	param1.setPageContext(pageContext);
-    	param1.setName("param1");
-    	param1.setValue("%{'param1value'}");
-    	
-    	ParamTag param2 = new ParamTag();
-    	param2.setPageContext(pageContext);
-    	param2.setName("param2");
-    	param2.setValue("%{'param2value'}");
-    	
-    	ParamTag param3 = new ParamTag();
-    	param3.setPageContext(pageContext);
-    	param3.setName("id1");
-    	param3.setValue("%{'paramId1'}");
-    	
-    	
-    	tag.doStartTag();
-    	param1.doStartTag();
-    	param1.doEndTag();
-    	param2.doStartTag();
-    	param2.doEndTag();
-    	param3.doStartTag();
-    	param3.doEndTag();
-    	
-    	URL url = (URL) tag.getComponent();
-    	Map parameters = url.getParameters();
-    	
-    	
-    	assertNotNull(parameters);
-    	assertEquals(parameters.size(), 7);
-    	assertEquals(parameters.get("id1"), "paramId1");
-    	assertEquals(parameters.get("id2"), "tagId2");
-    	assertEquals(parameters.get("urlParam1"), "urlValue1");
-    	assertEquals(parameters.get("urlParam2"), "urlValue2");
-    	assertEquals(parameters.get("tagId"), "tagValue");
-    	assertEquals(parameters.get("param1"), "param1value");
-    	assertEquals(parameters.get("param2"), "param2value");
-    }
-    
-    
-    /**
-     * To test priority of parameter passed in to url component though 
-     * various way, with includeParams="NONE"
-     *  - current request url
-     *  - tag's value attribute
-     *  - tag's nested param tag
-     *  
-     *  In this case only parameters from the tag itself is taken into account.
-     *  Those from request will not count, only those in tag's value attribute 
-     *  and nested param tag.
-     *  
-     * @throws Exception
-     */
-    public void testParametersPriorityWithIncludeParamsAsNONE() throws Exception {
-    	request.setQueryString("id1=urlId1&id2=urlId2&urlParam1=urlValue1&urlParam2=urlValue2");
-    	
-    	tag.setValue("testAction.action?id1=tagId1&id2=tagId2&tagId=tagValue");
-    	tag.setIncludeParams("NONE");
-    	
-    	ParamTag param1 = new ParamTag();
-    	param1.setPageContext(pageContext);
-    	param1.setName("param1");
-    	param1.setValue("%{'param1value'}");
-    	
-    	ParamTag param2 = new ParamTag();
-    	param2.setPageContext(pageContext);
-    	param2.setName("param2");
-    	param2.setValue("%{'param2value'}");
-    	
-    	ParamTag param3 = new ParamTag();
-    	param3.setPageContext(pageContext);
-    	param3.setName("id1");
-    	param3.setValue("%{'paramId1'}");
-    	
-    	
-    	tag.doStartTag();
-    	param1.doStartTag();
-    	param1.doEndTag();
-    	param2.doStartTag();
-    	param2.doEndTag();
-    	param3.doStartTag();
-    	param3.doEndTag();
-    	
-    	URL url = (URL) tag.getComponent();
-    	Map parameters = url.getParameters();
-    	
-    	assertEquals(parameters.size(), 5);
-    	assertEquals(parameters.get("id1"), "paramId1");
-    	assertEquals(parameters.get("id2"), "tagId2");
-    	assertEquals(parameters.get("tagId"), "tagValue");
-    	assertEquals(parameters.get("param1"), "param1value");
-    	assertEquals(parameters.get("param2"), "param2value");
-    }
-
-    public void testIncludeParamsDefaultToGET() throws Exception {
-    	request.setQueryString("one=oneVal&two=twoVal&three=threeVal");
-    	
-    	// request parameter map should not have any effect, as includeParams 
-    	// default to GET, which get its param from request.getQueryString()
-    	Map tmp = new HashMap();
-    	tmp.put("one", "aaa");
-    	tmp.put("two", "bbb");
-    	tmp.put("three", "ccc");
-    	request.setParameterMap(tmp);
-    	
-    	tag.setValue("TestAction.acton");
-    	
-    	tag.doStartTag();
-    	
-    	URL url = (URL) tag.getComponent();
-    	Map parameters = url.getParameters();
-    	
-    	tag.doEndTag();
-    	
-    	assertEquals(parameters.get("one"), "oneVal");
-    	assertEquals(parameters.get("two"), "twoVal");
-    	assertEquals(parameters.get("three"), "threeVal");
-    }
-    
-    public void testActionURL() throws Exception {
-        tag.setValue("TestAction.action");
-
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("TestAction.action", writer.toString());
-    }
-
-    public void testAddParameters() throws Exception {
-        request.setAttribute("struts.request_uri", "/Test.action");
-
-        request.setAttribute("struts.request_uri", "/TestAction.action");
-        request.setQueryString("param0=value0");
-
-        tag.doStartTag();
-        tag.component.addParameter("param1", "value1");
-        tag.component.addParameter("param2", "value2");
-        tag.doEndTag();
-        assertEquals("/TestAction.action?param2=value2&amp;param0=value0&amp;param1=value1", writer.toString());
-    }
-
-    public void testEvaluateValue() throws Exception {
-        Foo foo = new Foo();
-        foo.setTitle("test");
-        stack.push(foo);
-        tag.setValue("%{title}");
-
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("test", writer.toString());
-    }
-
-    public void testHttps() throws Exception {
-        request.setScheme("https");
-        request.setServerName("localhost");
-        request.setServerPort(443);
-
-        tag.setValue("list-members.action");
-
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("list-members.action", writer.toString());
-    }
-
-    public void testAnchor() throws Exception {
-        request.setScheme("https");
-        request.setServerName("localhost");
-        request.setServerPort(443);
-
-        tag.setValue("list-members.action");
-        tag.setAnchor("test");
-
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("list-members.action#test", writer.toString());
-    }
-    
-    public void testParamPrecedence() throws Exception {
-    	request.setRequestURI("/context/someAction.action");
-    	request.setQueryString("id=22&name=John");
-    	
-    	URLTag urlTag = new URLTag();
-    	urlTag.setPageContext(pageContext);
-    	urlTag.setIncludeParams("get");
-    	urlTag.setEncode("%{false}");
-    	
-    	ParamTag paramTag = new ParamTag();
-    	paramTag.setPageContext(pageContext);
-    	paramTag.setName("id");
-    	paramTag.setValue("%{'33'}");
-    	
-    	urlTag.doStartTag();
-    	paramTag.doStartTag();
-    	paramTag.doEndTag();
-    	urlTag.doEndTag();
-    	
-    	assertEquals(writer.getBuffer().toString(), "/context/someAction.action?name=John&amp;id=33");
-    }
-
-    public void testParamPrecedenceWithAnchor() throws Exception {
-    	request.setRequestURI("/context/someAction.action");
-    	request.setQueryString("id=22&name=John");
-
-    	URLTag urlTag = new URLTag();
-    	urlTag.setPageContext(pageContext);
-    	urlTag.setIncludeParams("get");
-    	urlTag.setEncode("%{false}");
-        urlTag.setAnchor("testAnchor");
-
-        ParamTag paramTag = new ParamTag();
-    	paramTag.setPageContext(pageContext);
-    	paramTag.setName("id");
-    	paramTag.setValue("%{'33'}");
-
-    	urlTag.doStartTag();
-    	paramTag.doStartTag();
-    	paramTag.doEndTag();
-    	urlTag.doEndTag();
-
-    	assertEquals(writer.getBuffer().toString(), "/context/someAction.action?name=John&amp;id=33#testAnchor");
-    }
-
-    public void testPutId() throws Exception {
-        tag.setValue("/public/about");
-        assertEquals(null, stack.findString("myId")); // nothing in stack
-        tag.setId("myId");
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("", writer.toString());
-        assertEquals("/public/about", stack.findString("myId")); // is in stack now
-    }
-    
-    public void testUsingValueOnly() throws Exception {
-        tag.setValue("/public/about/team.jsp");
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("/public/about/team.jsp", writer.toString());
-    }
-
-    public void testRequestURIActionIncludeNone() throws Exception {
-        request.setRequestURI("/public/about");
-        request.setQueryString("section=team&company=acme inc");
-
-        tag.setAction("team");
-        tag.setIncludeParams("none");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("/team.action", writer.toString());
-    }
-
-    public void testRequestURIActionIncludeGet() throws Exception {
-        request.setRequestURI("/public/about");
-        request.setQueryString("section=team&company=acme inc");
-
-        tag.setAction("team");
-        tag.setIncludeParams("get");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("/team.action?section=team&amp;company=acme+inc", writer.toString());
-    }
-
-    public void testRequestURINoActionIncludeNone() throws Exception {
-        request.setRequestURI("/public/about");
-        request.setQueryString("section=team&company=acme inc");
-
-        tag.setAction(null);
-        tag.setIncludeParams("none");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("/public/about", writer.toString());
-    }
-
-    public void testNoActionIncludeGet() throws Exception {
-        request.setRequestURI("/public/about");
-        request.setQueryString("section=team&company=acme inc");
-
-        tag.setAction(null);
-        tag.setIncludeParams("get");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("/public/about?section=team&amp;company=acme+inc", writer.toString());
-    }
-
-    public void testRequestURIActionIncludeAll() throws Exception {
-        request.setRequestURI("/public/about");
-        request.setQueryString("section=team&company=acme inc");
-
-        tag.setAction("team");
-        tag.setIncludeParams("all");
-
-        tag.doStartTag();
-
-        // include nested param tag
-        ParamTag paramTag = new ParamTag();
-        paramTag.setPageContext(pageContext);
-        paramTag.setName("year");
-        paramTag.setValue("2006");
-        paramTag.doStartTag();
-        paramTag.doEndTag();
-
-        tag.doEndTag();
-
-        assertEquals("/team.action?section=team&amp;year=2006&amp;company=acme+inc", writer.toString());
-    }
-
-    public void testRequestURINoActionIncludeAll() throws Exception {
-        request.setRequestURI("/public/about");
-        request.setQueryString("section=team&company=acme inc");
-
-        tag.setAction(null);
-        tag.setIncludeParams("all");
-
-        tag.doStartTag();
-
-        // include nested param tag
-        ParamTag paramTag = new ParamTag();
-        paramTag.setPageContext(pageContext);
-        paramTag.setName("year");
-        paramTag.setValue("2006");
-        paramTag.doStartTag();
-        paramTag.doEndTag();
-
-        tag.doEndTag();
-
-        assertEquals("/public/about?section=team&amp;year=2006&amp;company=acme+inc", writer.toString());
-    }
-
-    public void testUnknownIncludeParam() throws Exception {
-        request.setRequestURI("/public/about");
-        request.setQueryString("section=team");
-
-        tag.setIncludeParams("unknown"); // will log at WARN level
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("/public/about", writer.toString()); // should not add any request parameters
-    }
-
-    public void testRequestURIWithAnchor() throws Exception {
-        request.setRequestURI("/public/about");
-        request.setQueryString("company=acme inc#canada");
-
-        tag.setAction("company");
-        tag.setIncludeParams("get");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("/company.action?company=acme+inc", writer.toString()); // will always chop anchor if using requestURI
-    }
-
-    public void testIncludeContext() throws Exception {
-        request.setupGetContext("/myapp");
-
-        tag.setIncludeContext("true");
-        tag.setAction("company");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("/myapp/company.action", writer.toString());
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        request.setScheme("http");
-        request.setServerName("localhost");
-        request.setServerPort(80);
-
-        tag = new URLTag();
-        tag.setPageContext(pageContext);
-        JspWriter jspWriter = new StrutsMockJspWriter(writer);
-        pageContext.setJspWriter(jspWriter);
-    }
-
-    public class Foo {
-        private String title;
-
-        public void setTitle(String title) {
-            this.title = title;
-        }
-
-        public String getTitle() {
-            return title;
-        }
-
-        public String toString() {
-            return "Foo is: " + title;
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionErrorTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionErrorTagTest.java
deleted file mode 100644
index 1c4dfd2..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionErrorTagTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * ActionErrorTag test case.
- * 
- */
-public class ActionErrorTagTest extends AbstractUITagTest {
-	
-	boolean shouldActionHaveError = false;
-	
-	public void testNoActionErrors() throws Exception {
-		ActionErrorTag tag = new ActionErrorTag();
-		((InternalActionSupport)action).setHasActionErrors(false);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		//assertEquals("", writer.toString());
-		verify(ActionErrorTagTest.class.getResource("actionerror-1.txt"));
-	}
-	
-	public void testHaveActionErrors() throws Exception {
-		
-		ActionErrorTag tag = new ActionErrorTag();
-		((InternalActionSupport)action).setHasActionErrors(true);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-		tag.doEndTag();
-
-		verify(ActionErrorTagTest.class.getResource("actionerror-2.txt"));
-	}
-	
-	
-	public Action getAction() {
-		return new InternalActionSupport();
-	}
-	
-	
-	public class InternalActionSupport extends ActionSupport {
-		
-		private static final long serialVersionUID = -4777466640658557661L;
-		
-		private boolean yesActionErrors;
-		
-		public void setHasActionErrors(boolean aYesActionErrors) {
-			yesActionErrors = aYesActionErrors;
-		}
-		
-		public boolean hasActionErrors() {
-			return yesActionErrors;
-		}
-		
-		public Collection getActionErrors() {
-			if (yesActionErrors) {
-				List errors = new ArrayList();
-				errors.add("action error number 1");
-				errors.add("action error number 2");
-				errors.add("action error number 3");
-				return errors;
-			}
-			else {
-				return Collections.EMPTY_LIST;
-			}
-		}
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionMessageTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionMessageTagTest.java
deleted file mode 100644
index 8bfe7ed..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionMessageTagTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * ActionMessageTag test case.
- * 
- */
-public class ActionMessageTagTest extends AbstractUITagTest {
-
-	public void testNoActionMessages() throws Exception {
-		
-		ActionMessageTag tag = new ActionMessageTag();
-		((InternalActionSupport)action).setHasActionMessage(false);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(ActionMessageTagTest.class.getResource("actionmessage-1.txt"));
-	}
-	
-	public void testYesActionMessages() throws Exception {
-		
-		ActionMessageTag tag = new ActionMessageTag();
-		((InternalActionSupport)action).setHasActionMessage(true);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(ActionMessageTagTest.class.getResource("actionmessage-2.txt"));
-	}
-	
-	public Action getAction() {
-		return new InternalActionSupport();
-	}
-
-	/**
-	 * Internal ActionSupport class for testing, can be in state with
-	 * or without action messages.
-	 * 
-	 * @author tm_jee
-	 * @version $Date$ $Id$
-	 */
-	public class InternalActionSupport extends ActionSupport {
-		
-		private static final long serialVersionUID = -3230043189352453629L;
-		
-		private boolean canHaveActionMessage;
-		
-		public void setHasActionMessage(boolean canHaveActionMessage) {
-			this.canHaveActionMessage = canHaveActionMessage;
-		}
-		
-		public Collection getActionMessages() {
-			if (canHaveActionMessage) {
-				List messages = new ArrayList();
-				messages.add("action message number 1");
-				messages.add("action message number 2");
-				messages.add("action message number 3");
-				return messages;
-			}
-			else {
-				return Collections.EMPTY_LIST;
-			}
-		}
-		
-		public boolean hasActionMessages() {
-			return canHaveActionMessage;
-		}
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java
deleted file mode 100644
index 06b058f..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class AnchorTest extends AbstractUITagTest {
-
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        AnchorTag tag = new AnchorTag();
-        tag.setPageContext(pageContext);
-
-        tag.setId("mylink");
-        tag.setTheme("ajax");
-        tag.setHref("a");
-        tag.setErrorText("c");
-        tag.setShowErrorTransportText("true");
-        tag.setNotifyTopics("g");
-        tag.setAfterLoading("h");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(AnchorTest.class.getResource("href-1.txt"));
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/Category.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/Category.java
deleted file mode 100644
index e767bfc..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/Category.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Used by Tree Component Test. Copied from showcase.
- */
-public class Category {
-	private static Map<Long, Category> catMap = new HashMap<Long, Category>();
-
-    static {
-        new Category(1, "Root",
-                new Category(2, "Java",
-                        new Category(3, "Web Frameworks",
-                                new Category(4, "Struts"),
-                                new Category(7, "Stripes"),
-                                new Category(8, "Rife")),
-                        new Category(9, "Persistence",
-                                new Category(10, "iBatis"),
-                                new Category(11, "Hibernate"),
-                                new Category(12, "JDO"),
-                                new Category(13, "JDBC"))),
-                new Category(14, "JavaScript",
-                        new Category(15, "Dojo"),
-                        new Category(16, "Prototype"),
-                        new Category(17, "Scriptaculous"),
-                        new Category(18, "OpenRico"),
-                        new Category(19, "DWR")));
-    }
-
-    public static Category getById(long id) {
-        return catMap.get(id);
-    }
-
-    private long id;
-    private String name;
-    private List<Category> children;
-    private boolean toggle;
-
-    public Category(long id, String name, Category... children) {
-        this.id = id;
-        this.name = name;
-        this.children = new ArrayList<Category>();
-        for (Category child : children) {
-            this.children.add(child);
-        }
-
-        catMap.put(id, this);
-    }
-
-    public long getId() {
-        return id;
-    }
-
-    public void setId(long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public List<Category> getChildren() {
-        return children;
-    }
-
-    public void setChildren(List<Category> children) {
-        this.children = children;
-    }
-
-    public void toggle() {
-        toggle = !toggle;
-    }
-
-    public boolean isToggle() {
-        return toggle;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxListTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxListTest.java
deleted file mode 100644
index 8cb0b89..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxListTest.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Map;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- * Test case for CheckboxList.
- *
- */
-public class CheckboxListTest extends AbstractUITagTest {
-
-    /**
-     * Initialize a map of {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder} for generic tag
-     * property testing. Will be used when calling {@link #verifyGenericProperties(org.apache.struts2.views.jsp.ui.AbstractUITag,
-     * String, String[])} as properties to verify.<p/> This implementation extends testdata from AbstractUITag.
-     *
-     * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()}
-     *         as key.
-     */
-    protected Map initializedGenericTagTestProperties() {
-        Map result = super.initializedGenericTagTestProperties();
-        new PropertyHolder("value", "hello").addToMap(result);
-        return result;
-    }
-
-    public void testGenericSimple() throws Exception {
-        CheckboxListTag tag = new CheckboxListTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "simple", new String[]{"tabindex","cssClass","cssStyle","id"});
-    }
-
-    public void testGenericXhtml() throws Exception {
-        CheckboxListTag tag = new CheckboxListTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "xhtml", new String[]{"tabindex","cssClass","cssStyle","id"});
-    }
-
-    public void testGenericAjax() throws Exception {
-        CheckboxListTag tag = new CheckboxListTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "ajax", new String[]{"tabindex","cssClass","cssStyle","id"});
-    }
-
-    private void prepareTagGeneric(CheckboxListTag tag) {
-        TestAction testAction = (TestAction) action;
-        Collection collection = new ArrayList(2);
-        collection.add("hello");
-        collection.add("foo");
-        testAction.setCollection(collection);
-        testAction.setList(new String[][]{
-                {"hello", "world"},
-                {"foo", "bar"},
-        });
-        tag.setName("collection");
-        tag.setList("list");
-        tag.setListKey("top[0]");
-        tag.setListValue("top[1]");
-    }
-
-    public void testMultiple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        Collection collection = new ArrayList(2);
-        collection.add("hello");
-        collection.add("foo");
-        testAction.setCollection(collection);
-        testAction.setList(new String[][]{
-                {"hello", "world"},
-                {"foo", "bar"},
-                {"cat", "dog"}
-        });
-
-        CheckboxListTag tag = new CheckboxListTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("collection");
-        tag.setList("list");
-        tag.setListKey("top[0]");
-        tag.setListValue("top[1]");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(CheckboxListTag.class.getResource("CheckboxList-2.txt"));
-    }
-
-    public void testMultipleWithDisabledOn() throws Exception {
-        TestAction testAction = (TestAction) action;
-        Collection collection = new ArrayList(2);
-        collection.add("hello");
-        collection.add("foo");
-        testAction.setCollection(collection);
-        testAction.setList(new String[][]{
-                {"hello", "world"},
-                {"foo", "bar"},
-                {"cat", "dog"}
-        });
-
-        CheckboxListTag tag = new CheckboxListTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("collection");
-        tag.setList("list");
-        tag.setListKey("top[0]");
-        tag.setListValue("top[1]");
-        tag.setDisabled("true");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(CheckboxListTag.class.getResource("CheckboxList-3.txt"));
-    }
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("hello");
-        testAction.setList(new String[][]{
-                {"hello", "world"},
-                {"foo", "bar"}
-        });
-
-        CheckboxListTag tag = new CheckboxListTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setList("list");
-        tag.setListKey("top[0]");
-        tag.setListValue("top[1]");
-        tag.setOnchange("alert('foo');");
-        tag.setTitle("mytitle");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(CheckboxListTag.class.getResource("CheckboxList-1.txt"));
-    }
-
-    public void testSimpleWithDisableOn() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("hello");
-        testAction.setList(new String[][]{
-                {"hello", "world"},
-                {"foo", "bar"}
-        });
-
-        CheckboxListTag tag = new CheckboxListTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setList("list");
-        tag.setListKey("top[0]");
-        tag.setListValue("top[1]");
-        tag.setOnchange("alert('foo');");
-        tag.setDisabled("true");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(CheckboxListTag.class.getResource("CheckboxList-4.txt"));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxTest.java
deleted file mode 100644
index 26e98a6..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.Map;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class CheckboxTest extends AbstractUITagTest {
-
-    public CheckboxTest() {
-    }
-
-    /**
-     * Initialize a map of {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder} for generic tag
-     * property testing. Will be used when calling {@link #verifyGenericProperties(org.apache.struts2.views.jsp.ui.AbstractUITag,
-     * String, String[])} as properties to verify.<p/> This implementation extends testdata from AbstractUITag.
-     *
-     * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()}
-     *         as key.
-     */
-    protected Map initializedGenericTagTestProperties() {
-        Map result = super.initializedGenericTagTestProperties();
-        new PropertyHolder("value", "true").addToMap(result);
-        return result;
-    }
-
-    public void testGenericSimple() throws Exception {
-        CheckboxTag tag = new CheckboxTag();
-        verifyGenericProperties(tag, "simple", null);
-    }
-
-    public void testGenericXhtml() throws Exception {
-        CheckboxTag tag = new CheckboxTag();
-        verifyGenericProperties(tag, "xhtml", null);
-    }
-
-    public void testGenericAjax() throws Exception {
-        CheckboxTag tag = new CheckboxTag();
-        verifyGenericProperties(tag, "ajax", null);
-    }
-
-    public void testChecked() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("true");
-
-        CheckboxTag tag = new CheckboxTag();
-        tag.setPageContext(pageContext);
-        tag.setId("someId");
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setFieldValue("baz");
-        tag.setOnfocus("test();");
-        tag.setTitle("mytitle");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(CheckboxTag.class.getResource("Checkbox-1.txt"));
-    }
-
-    public void testCheckedWithTopLabelPosition() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("true");
-
-        CheckboxTag tag = new CheckboxTag();
-        tag.setPageContext(pageContext);
-        tag.setId("someId");
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setFieldValue("baz");
-        tag.setOnfocus("test();");
-        tag.setTitle("mytitle");
-        tag.setLabelposition("top");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(CheckboxTag.class.getResource("Checkbox-4.txt"));
-    }
-
-    public void testCheckedWithLeftLabelPosition() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("true");
-
-        CheckboxTag tag = new CheckboxTag();
-        tag.setPageContext(pageContext);
-        tag.setId("someId");
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setFieldValue("baz");
-        tag.setOnfocus("test();");
-        tag.setTitle("mytitle");
-        tag.setLabelposition("left");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(CheckboxTag.class.getResource("Checkbox-5.txt"));
-    }
-
-    public void testCheckedWithError() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("true");
-        testAction.addFieldError("foo", "Some Foo Error");
-        testAction.addFieldError("foo", "Another Foo Error");
-
-        CheckboxTag tag = new CheckboxTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setFieldValue("baz");
-        tag.setOndblclick("test();");
-        tag.setOnclick("test();");
-        tag.setTitle("mytitle");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(CheckboxTag.class.getResource("Checkbox-3.txt"));
-    }
-
-    public void testUnchecked() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("false");
-
-        CheckboxTag tag = new CheckboxTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setFieldValue("baz");
-        tag.setTitle("mytitle");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(CheckboxTag.class.getResource("Checkbox-2.txt"));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java
deleted file mode 100644
index fc93720..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- * Test case for ComboBox component.
- */
-public class ComboBoxTest extends AbstractUITagTest {
-
-    public void testGenericSimple() throws Exception {
-        ComboBoxTag tag = new ComboBoxTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "simple", null);
-    }
-
-    public void testGenericXhtml() throws Exception {
-        ComboBoxTag tag = new ComboBoxTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "xhtml", null);
-    }
-
-    public void testGenericAjax() throws Exception {
-        ComboBoxTag tag = new ComboBoxTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "ajax", null);
-    }
-
-    private void prepareTagGeneric(ComboBoxTag tag) {
-        TestAction testAction = (TestAction) action;
-        ArrayList collection = new ArrayList();
-        collection.add("foo");
-        collection.add("bar");
-        collection.add("baz");
-
-        testAction.setCollection(collection);
-
-        tag.setList("collection");
-    }
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("hello");
-
-        ArrayList collection = new ArrayList();
-        collection.add("foo");
-        collection.add("bar");
-        collection.add("baz");
-        testAction.setCollection(collection);
-
-        ComboBoxTag tag = new ComboBoxTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setList("collection");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(ComboBoxTag.class.getResource("ComboBox-1.txt"));
-    }
-    
-    public void testWithEmptyOptionAndHeader() throws Exception {
-    	TestAction testAction = (TestAction) action;
-    	testAction.setFoo("banana");
-    	
-    	List l = new ArrayList();
-    	l.add("apple");
-    	l.add("banana");
-    	l.add("pineaple");
-    	l.add("grapes");
-    	testAction.setCollection(l);
-    	
-    	ComboBoxTag tag = new ComboBoxTag();
-    	tag.setPageContext(pageContext);
-    	tag.setLabel("My Favourite Fruit");
-    	tag.setName("myFavouriteFruit");
-    	tag.setEmptyOption("true");
-    	tag.setHeaderKey("-1");
-    	tag.setHeaderValue("--- Please Select ---");
-    	tag.setList("collection");
-    	tag.setValue("%{foo}");
-    	
-    	tag.doStartTag();
-    	tag.doEndTag();
-    	
-    	verify(ComboBoxTag.class.getResource("ComboBox-2.txt"));
-    }
-    
-    public void testWithMap() throws Exception {
-    	TestAction testAction = (TestAction) action;
-    	testAction.setFoo("banana");
-    	
-    	Map m = new LinkedHashMap();
-    	m.put("apple", "apple");
-    	m.put("banana", "banana");
-    	m.put("pineaple", "pineaple");
-    	m.put("grapes", "grapes");
-    	testAction.setMap(m);
-    	
-    	ComboBoxTag tag = new ComboBoxTag();
-    	tag.setPageContext(pageContext);
-    	tag.setLabel("My Favourite Fruit");
-    	tag.setName("myFavouriteFruit");
-    	tag.setHeaderKey("-1");
-    	tag.setHeaderValue("--- Please Select ---");
-    	tag.setEmptyOption("true");
-    	tag.setList("map");
-    	tag.setValue("%{foo}");
-    	
-    	tag.doStartTag();
-    	tag.doEndTag();
-    	
-    	verify(ComboBoxTag.class.getResource("ComboBox-3.txt"));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ComponentTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ComponentTest.java
deleted file mode 100644
index 3307cd6..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ComponentTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class ComponentTest extends AbstractUITagTest {
-
-	/**
-	 * Test that id attribute is evaludated against the Ognl Stack.
-	 * @throws Exception
-	 */
-	public void testIdIsEvaluatedAgainstStack1() throws Exception {
-		TestAction testAction = (TestAction) action;
-		testAction.setFoo("myFooValue");
-		
-		TextFieldTag tag = new TextFieldTag();
-		tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setValue("foo");
-        tag.setId("%{foo}");
-		
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(ComponentTag.class.getResource("Component-2.txt"));
-	}
-	
-	public void testIdIsEvaludatedAgainstStack2() throws Exception {
-		TestAction testAction = (TestAction) action;
-		testAction.setFoo("myFooValue");
-		
-		TextFieldTag tag = new TextFieldTag();
-		tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setValue("foo");
-        tag.setId("foo");
-		
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(ComponentTag.class.getResource("Component-3.txt"));
-	}
-	
-	
-    /**
-     * Note -- this test uses empty.vm, so it's basically clear
-     */
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        ComponentTag tag = new ComponentTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setValue("foo");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(ComponentTag.class.getResource("Component-1.txt"));
-    }
-
-    /**
-     * executes a component test passing in a custom parameter. it also executes calling a custom template using an
-     * absolute reference.
-     */
-    public void testWithParam() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        ComponentTag tag = new ComponentTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setValue("foo");
-        tag.setTheme("test");
-        tag.setTemplate("Component");
-
-        tag.doStartTag();
-        tag.getComponent().addParameter("hello", "world");
-        tag.getComponent().addParameter("argle", "bargle");
-        tag.getComponent().addParameter("glip", "glop");
-        tag.getComponent().addParameter("array", new String[]{"a", "b", "c"});
-        tag.getComponent().addParameter("obj", tag);
-        tag.doEndTag();
-
-        //        System.out.println(writer);
-        verify(ComponentTag.class.getResource("Component-param.txt"));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java
deleted file mode 100644
index 56daea8..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.Locale;
-
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-import com.opensymphony.xwork2.ActionContext;
-
-/**
- * Unit test for {@link DatePickerTag}.
- *
- */
-public class DatePickerTagTest extends AbstractUITagTest {
-
-    private DatePickerTag tag;
-
-    public void testDefault() throws Exception {
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(DatePickerTagTest.class.getResource("DatePickerTagTest-1.txt"));
-    }
-
-    public void testLocaleInStack() throws Exception {
-        stack.getContext().put(ActionContext.LOCALE, Locale.FRANCE);
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(DatePickerTagTest.class.getResource("DatePickerTagTest-2.txt"));
-    }
-
-    public void testFormat() throws Exception {
-        tag.setFormat("#yyyy/#MM/#dd #hh:#mm:#ss");
-
-        tag.doStartTag();
-        tag.doEndTag();
-        assertTrue("Should contain format", writer.toString().indexOf("#yyyy/#MM/#dd #hh:#mm:#ss") > -1);
-    }
-
-    // NOTE: Switching to Dojo's DatePicker, i18n is not supported, 
-    //       Commenting out this test case
-    /*public void testLanguage() throws Exception {
-        tag.setLanguage("da");
-
-        tag.doStartTag();
-        tag.doEndTag();
-        assertTrue("Should contain danish language", writer.toString().indexOf("/struts/jscalendar/lang/calendar-da.js") > -1);
-    }*/
-
-    
-    // NOTE: Switching to Dojo's DatePicker, showing time is not supported.
-    //       Commenting this test case
-    /*public void testShowstime() throws Exception {
-        tag.setShowstime("24");
-
-        tag.doStartTag();
-        tag.doEndTag();
-        assertTrue("Should contain showsTime 24", writer.toString().indexOf("showsTime      :    \"24\"") > -1);
-    }*/
-
-    // NOTE: Switching to Dojo's DatePickuer, single / double click to popup
-    //       is not supported. Commenting out this test case.
-    /*public void testSingleclick() throws Exception {
-        tag.setSingleclick("true");
-
-        tag.doStartTag();
-        tag.doEndTag();
-    }*/
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        tag = new DatePickerTag();
-        tag.setPageContext(pageContext);
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DateTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DateTagTest.java
deleted file mode 100644
index c980de4..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DateTagTest.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-
-import org.apache.struts2.views.jsp.AbstractTagTest;
-import org.apache.struts2.views.jsp.DateTag;
-
-import com.opensymphony.xwork2.ActionContext;
-
-/**
- * Unit test for {@link org.apache.struts2.components.Date}.
- *
- */
-public class DateTagTest extends AbstractTagTest {
-
-    private DateTag tag;
-
-    public void testCustomFormat() throws Exception {
-        String format = "yyyy/MM/dd hh:mm:ss";
-        Date now = new Date();
-        String formatted = new SimpleDateFormat(format).format(now);
-        context.put("myDate", now);
-
-        tag.setName("myDate");
-        tag.setNice(false);
-        tag.setFormat(format);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(formatted, writer.toString());
-    }
-
-    public void testDefaultFormat() throws Exception {
-        Date now = new Date();
-        String formatted = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM,
-                ActionContext.getContext().getLocale()).format(now);
-
-        context.put("myDate", now);
-        tag.setName("myDate");
-        tag.setNice(false);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(formatted, writer.toString());
-    }
-
-    public void testCustomFormatAndComponent() throws Exception {
-        String format = "yyyy/MM/dd hh:mm:ss";
-        Date now = new Date();
-        String formatted = new SimpleDateFormat(format).format(now);
-        context.put("myDate", now);
-
-        tag.setName("myDate");
-        tag.setFormat(format);
-        tag.setNice(false);
-
-        tag.doStartTag();
-
-        // component test must be done between start and end tag
-        org.apache.struts2.components.Date component = (org.apache.struts2.components.Date) tag.getComponent();
-        assertEquals("myDate", component.getName());
-        assertEquals(format, component.getFormat());
-        assertEquals(false, component.isNice());
-
-        tag.doEndTag();
-
-        assertEquals(formatted, writer.toString());
-    }
-
-    public void testSetId() throws Exception {
-        String format = "yyyy/MM/dd hh:mm:ss";
-        Date now = new Date();
-        String formatted = new SimpleDateFormat(format).format(now);
-        context.put("myDate", now);
-
-        tag.setName("myDate");
-        tag.setNice(false);
-        tag.setFormat(format);
-        tag.setId("myId");
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals(formatted, context.get("myId"));
-    }
-
-    public void testFutureNiceHour() throws Exception {
-        Date now = new Date();
-        Calendar future = Calendar.getInstance();
-        future.setTime(now);
-        future.add(Calendar.HOUR, 1);
-        future.add(Calendar.SECOND, 5); // always add a little slack otherwise we could calculate wrong
-
-        context.put("myDate", future.getTime());
-        tag.setName("myDate");
-        tag.setNice(true);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("in one hour", writer.toString());
-    }
-
-    public void testPastNiceHour() throws Exception {
-        Date now = new Date();
-        Calendar future = Calendar.getInstance();
-        future.setTime(now);
-        future.add(Calendar.HOUR, -1);
-        future.add(Calendar.SECOND, -5); // always add a little slack otherwise we could calculate wrong
-
-        context.put("myDate", future.getTime());
-        tag.setName("myDate");
-        tag.setNice(true);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("one hour ago", writer.toString());
-    }
-
-    public void testFutureNiceHourMinSec() throws Exception {
-        Date now = new Date();
-        Calendar future = Calendar.getInstance();
-        future.setTime(now);
-        future.add(Calendar.HOUR, 2);
-        future.add(Calendar.MINUTE, 33);
-        future.add(Calendar.SECOND, 5); // always add a little slack otherwise we could calculate wrong
-
-        context.put("myDate", future.getTime());
-        tag.setName("myDate");
-        tag.setNice(true);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("in 2 hours, 33 minutes", writer.toString());
-    }
-
-    public void testPastNiceHourMin() throws Exception {
-        Date now = new Date();
-        Calendar past = Calendar.getInstance();
-        past.setTime(now);
-        past.add(Calendar.HOUR, -4);
-        past.add(Calendar.MINUTE, -55);
-        past.add(Calendar.SECOND, -5); // always add a little slack otherwise we could calculate wrong
-
-        context.put("myDate", past.getTime());
-        tag.setName("myDate");
-        tag.setNice(true);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("4 hours, 55 minutes ago", writer.toString());
-    }
-
-    public void testFutureLessOneMin() throws Exception {
-        Date now = new Date();
-        Calendar future = Calendar.getInstance();
-        future.setTime(now);
-        future.add(Calendar.SECOND, 47);
-        future.add(Calendar.SECOND, 5); // always add a little slack otherwise we could calculate wrong
-
-        context.put("myDate", future.getTime());
-        tag.setName("myDate");
-        tag.setNice(true);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("in an instant", writer.toString());
-    }
-
-    public void testFutureLessOneHour() throws Exception {
-        Date now = new Date();
-        Calendar future = Calendar.getInstance();
-        future.setTime(now);
-        future.add(Calendar.MINUTE, 36);
-        future.add(Calendar.SECOND, 5); // always add a little slack otherwise we could calculate wrong
-
-        context.put("myDate", future.getTime());
-        tag.setName("myDate");
-        tag.setNice(true);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("in 36 minutes", writer.toString());
-    }
-
-    public void testFutureLessOneYear() throws Exception {
-        Date now = new Date();
-        Calendar future = Calendar.getInstance();
-        future.setTime(now);
-        future.add(Calendar.HOUR, 40 * 24);
-        future.add(Calendar.SECOND, 5); // always add a little slack otherwise we could calculate wrong
-
-        context.put("myDate", future.getTime());
-        tag.setName("myDate");
-        tag.setNice(true);
-        tag.doStartTag();
-        tag.doEndTag();
-        assertEquals("in 40 days", writer.toString());
-    }
-
-    public void testFutureTwoYears() throws Exception {
-        Date now = new Date();
-        Calendar future = Calendar.getInstance();
-        future.setTime(now);
-        future.add(Calendar.YEAR, 2);
-        future.add(Calendar.SECOND, 5); // always add a little slack otherwise we could calculate wrong
-
-        context.put("myDate", future.getTime());
-        tag.setName("myDate");
-        tag.setNice(true);
-        tag.doStartTag();
-        tag.doEndTag();
-
-        // hmmm the Date component isn't the best to calculate the excat difference so we'll just check
-        // that it starts with in 2 years
-        assertTrue(writer.toString().startsWith("in 2 years"));
-    }
-
-    public void testNoDateObjectInContext() throws Exception {
-        context.put("myDate", "this is not a java.util.Date object");
-        tag.setName("myDate");
-        tag.setNice(true);
-        tag.doStartTag();
-        tag.doEndTag();
-        //should return a blank
-        assertEquals("", writer.toString());
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        tag = new DateTag();
-        tag.setPageContext(pageContext);
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DivTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DivTest.java
deleted file mode 100644
index 9cb9f61..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DivTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class DivTest extends AbstractUITagTest {
-
-
-    public void testGenericSimple() throws Exception {
-        DivTag tag = new DivTag();
-        verifyGenericProperties(tag, "simple", new String[]{"value","tabindex","disabled"});
-    }
-
-    public void testGenericXhtml() throws Exception {
-        DivTag tag = new DivTag();
-        verifyGenericProperties(tag, "xhtml", new String[]{"value","tabindex","disabled"});
-    }
-
-    public void testGenericAjax() throws Exception {
-        DivTag tag = new DivTag();
-        verifyGenericProperties(tag, "ajax", new String[]{"value","tabindex","disabled"});
-    }
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        DivTag tag = new DivTag();
-        tag.setPageContext(pageContext);
-
-        tag.setId("mylabel");
-        tag.setTheme("ajax");
-        tag.setHref("a");
-        tag.setLoadingText("b");
-        tag.setErrorText("c");
-        tag.setShowErrorTransportText("true");
-        tag.setDelay("4000");
-        tag.setUpdateFreq("1000");
-        tag.setListenTopics("g");
-        tag.setAfterLoading("h");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(DivTest.class.getResource("div-1.txt"));
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java
deleted file mode 100644
index d2920a0..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-/**
- * Test case for DoubleSelectTag.
- * 
- */
-public class DoubleSelectTest extends AbstractUITagTest {
-
-    public void testDouble() throws Exception {
-        TestAction testAction = (TestAction) action;
-
-        Region antwerp = new Region("Antwerp", "AN");
-        Region gent = new Region("Gent", "GN");
-        Region brugge = new Region("Brugge", "BRG");
-        ArrayList belgiumRegions = new ArrayList();
-        belgiumRegions.add(antwerp);
-        belgiumRegions.add(gent);
-        belgiumRegions.add(brugge);
-        Country belgium = new Country("Belgium", "BE", belgiumRegions);
-
-        Region paris = new Region("Paris", "PA");
-        Region bordeaux = new Region("Bordeaux", "BOR");
-        ArrayList franceRegions = new ArrayList();
-        franceRegions.add(paris);
-        franceRegions.add(bordeaux);
-        Country france = new Country("France", "FR", franceRegions);
-
-        Collection collection = new ArrayList(2);
-        collection.add("AN");
-        testAction.setCollection(collection);
-
-        List countries = new ArrayList();
-        countries.add(belgium);
-        countries.add(france);
-
-        testAction.setList2(countries);
-
-        DoubleSelectTag tag = new DoubleSelectTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setDoubleName("region");
-
-        tag.setList("list2");
-        tag.setDoubleList("regions");
-
-        tag.setListKey("iso");
-        tag.setDoubleListKey("key");
-        tag.setListValue("name");
-        tag.setDoubleListValue("name");
-
-        tag.setFormName("inputForm");
-
-        tag.setOnmousedown("window.status='onmousedown';");
-        tag.setOnmousemove("window.status='onmousemove';");
-        tag.setOnmouseout("window.status='onmouseout';");
-        tag.setOnmouseover("window.status='onmouseover';");
-        tag.setOnmouseup("window.status='onmouseup';");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(SelectTag.class.getResource("DoubleSelect-1.txt"));
-    }
-
-    
-    public void testDoubleWithDefaultSelectedValues() throws Exception {
-    	
-    	TestAction testAction = (TestAction) action;
-
-        Region antwerp = new Region("Antwerp", "AN");
-        Region gent = new Region("Gent", "GN");
-        Region brugge = new Region("Brugge", "BRG");
-        ArrayList belgiumRegions = new ArrayList();
-        belgiumRegions.add(antwerp);
-        belgiumRegions.add(gent);
-        belgiumRegions.add(brugge);
-        Country belgium = new Country("Belgium", "BE", belgiumRegions);
-
-        Region paris = new Region("Paris", "PA");
-        Region bordeaux = new Region("Bordeaux", "BOR");
-        ArrayList franceRegions = new ArrayList();
-        franceRegions.add(paris);
-        franceRegions.add(bordeaux);
-        Country france = new Country("France", "FR", franceRegions);
-
-        Collection collection = new ArrayList(2);
-        collection.add("AN");
-        testAction.setCollection(collection);
-
-        List countries = new ArrayList();
-        countries.add(belgium);
-        countries.add(france);
-
-        testAction.setList2(countries);
-
-        DoubleSelectTag tag = new DoubleSelectTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setDoubleName("region");
-
-        tag.setValue("'FR'");
-        tag.setDoubleValue("'BOR'");
-        
-        tag.setList("list2");
-        tag.setDoubleList("regions");
-
-        tag.setListKey("iso");
-        tag.setDoubleListKey("key");
-        tag.setListValue("name");
-        tag.setDoubleListValue("name");
-
-        tag.setFormName("inputForm");
-
-        tag.setOnmousedown("window.status='onmousedown';");
-        tag.setOnmousemove("window.status='onmousemove';");
-        tag.setOnmouseout("window.status='onmouseout';");
-        tag.setOnmouseover("window.status='onmouseover';");
-        tag.setOnmouseup("window.status='onmouseup';");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(SelectTag.class.getResource("DoubleSelect-2.txt"));
-    	
-    	
-    }
-    
-    
-    public void testGenericSimple() throws Exception {
-        DoubleSelectTag tag = new DoubleSelectTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "simple", new String[]{"value"});
-    }
-
-    public void testGenericXhtml() throws Exception {
-        DoubleSelectTag tag = new DoubleSelectTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "xhtml", new String[]{"value"});
-    }
-
-    public void testGenericAjax() throws Exception {
-        DoubleSelectTag tag = new DoubleSelectTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "ajax", new String[]{"value"});
-    }
-
-    private void prepareTagGeneric(DoubleSelectTag tag) {
-        TestAction testAction = (TestAction) action;
-        Region antwerp = new Region("Antwerp", "AN");
-        Region gent = new Region("Gent", "GN");
-        Region brugge = new Region("Brugge", "BRG");
-        ArrayList belgiumRegions = new ArrayList();
-        belgiumRegions.add(antwerp);
-        belgiumRegions.add(gent);
-        belgiumRegions.add(brugge);
-        Country belgium = new Country("Belgium", "BE", belgiumRegions);
-
-        Region paris = new Region("Paris", "PA");
-        Region bordeaux = new Region("Bordeaux", "BOR");
-        ArrayList franceRegions = new ArrayList();
-        franceRegions.add(paris);
-        franceRegions.add(bordeaux);
-        Country france = new Country("France", "FR", franceRegions);
-
-        Collection collection = new ArrayList(2);
-        collection.add("AN");
-        testAction.setCollection(collection);
-
-        tag.setList("collection");
-
-        List countries = new ArrayList();
-        countries.add(belgium);
-        countries.add(france);
-
-        testAction.setList2(countries);
-
-        tag.setValue("'FR'");
-        tag.setDoubleValue("'BOR'");
-
-        tag.setList("list2");
-        tag.setDoubleList("regions");
-        tag.setDoubleName("region");
-
-        tag.setListKey("iso");
-        tag.setDoubleListKey("key");
-        tag.setListValue("name");
-        tag.setDoubleListValue("name");
-
-        tag.setFormName("inputForm");
-    }
-
-    public class Country {
-        String name;
-        String iso;
-        Collection regions;
-
-        public Country(String name, String iso, Collection regions) {
-            this.name = name;
-            this.iso = iso;
-            this.regions = regions;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public String getIso() {
-            return iso;
-        }
-
-        public Collection getRegions() {
-            return regions;
-        }
-    }
-
-    public class Region {
-        String name;
-        String key;
-
-        public Region(String name, String key) {
-            this.name = name;
-            this.key = key;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public String getKey() {
-            return key;
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java
deleted file mode 100644
index 690a490..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-import org.apache.struts2.views.jsp.ParamTag;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * FieldError Tag Test Case.
- * 
- */
-public class FieldErrorTagTest extends AbstractUITagTest {
-
-	
-	public void testWithoutParamsWithFieldErrors() throws Exception {
-		FieldErrorTag tag = new FieldErrorTag();
-		((InternalAction)action).setHaveFieldErrors(true);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(FieldErrorTagTest.class.getResource("fielderror-1.txt"));
-	}
-	
-	public void testWithoutParamsWithoutFieldErrors() throws Exception {
-		FieldErrorTag tag = new FieldErrorTag();
-		((InternalAction)action).setHaveFieldErrors(false);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(FieldErrorTagTest.class.getResource("fielderror-2.txt"));
-	}
-	
-	public void testWithParamsWithFieldErrors1() throws Exception {
-		FieldErrorTag tag = new FieldErrorTag();
-		((InternalAction)action).setHaveFieldErrors(true);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-			ParamTag pTag1 = new ParamTag();
-			pTag1.setPageContext(pageContext);
-			pTag1.setValue("%{'field1'}");
-			pTag1.doStartTag();
-			pTag1.doEndTag();
-			
-			ParamTag pTag2 = new ParamTag();
-			pTag2.setPageContext(pageContext);
-			pTag2.setValue("%{'field3'}");
-			pTag2.doStartTag();
-			pTag2.doEndTag();
-			
-		tag.doEndTag();
-		
-		verify(FieldErrorTagTest.class.getResource("fielderror-3.txt"));
-	}
-	
-	public void testWithParamsWithFieldErrors2() throws Exception {
-		FieldErrorTag tag = new FieldErrorTag();
-		((InternalAction)action).setHaveFieldErrors(true);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-			ParamTag pTag1 = new ParamTag();
-			pTag1.setPageContext(pageContext);
-			pTag1.setValue("%{'field1'}");
-			pTag1.doStartTag();
-			pTag1.doEndTag();
-			
-			ParamTag pTag2 = new ParamTag();
-			pTag2.setPageContext(pageContext);
-			pTag2.setValue("%{'field2'}");
-			pTag2.doStartTag();
-			pTag2.doEndTag();
-			
-		tag.doEndTag();
-		
-		verify(FieldErrorTagTest.class.getResource("fielderror-4.txt"));
-	}
-	
-	
-	public void testWithParamsWithFieldErrors3() throws Exception {
-		FieldErrorTag tag = new FieldErrorTag();
-		((InternalAction)action).setHaveFieldErrors(true);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-			ParamTag pTag1 = new ParamTag();
-			pTag1.setPageContext(pageContext);
-			pTag1.setValue("%{'field2'}");
-			pTag1.doStartTag();
-			pTag1.doEndTag();
-			
-		tag.doEndTag();
-		
-		verify(FieldErrorTagTest.class.getResource("fielderror-5.txt"));
-	}
-	
-	public void testWithParamsWithoutFieldErrors1() throws Exception {
-		FieldErrorTag tag = new FieldErrorTag();
-		((InternalAction)action).setHaveFieldErrors(false);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-			ParamTag pTag1 = new ParamTag();
-			pTag1.setPageContext(pageContext);
-			pTag1.setValue("%{'field1'}");
-			pTag1.doStartTag();
-			pTag1.doEndTag();
-			
-			ParamTag pTag2 = new ParamTag();
-			pTag2.setPageContext(pageContext);
-			pTag2.setValue("%{'field3'}");
-			pTag2.doStartTag();
-			pTag2.doEndTag();
-		tag.doEndTag();
-		
-		verify(FieldErrorTagTest.class.getResource("fielderror-2.txt"));
-	}
-	
-	public void testWithParamsWithoutFieldErrors2() throws Exception {
-		FieldErrorTag tag = new FieldErrorTag();
-		((InternalAction)action).setHaveFieldErrors(false);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-			ParamTag pTag1 = new ParamTag();
-			pTag1.setPageContext(pageContext);
-			pTag1.setValue("%{'field1'}");
-			pTag1.doStartTag();
-			pTag1.doEndTag();
-			
-			ParamTag pTag2 = new ParamTag();
-			pTag2.setPageContext(pageContext);
-			pTag2.setValue("%{'field3'}");
-			pTag2.doStartTag();
-			pTag2.doEndTag();
-		tag.doEndTag();
-		
-		verify(FieldErrorTagTest.class.getResource("fielderror-2.txt"));
-	}
-	
-	
-	public void testWithParamsWithoutFieldErrors3() throws Exception {
-		FieldErrorTag tag = new FieldErrorTag();
-		((InternalAction)action).setHaveFieldErrors(false);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-			ParamTag pTag1 = new ParamTag();
-			pTag1.setPageContext(pageContext);
-			pTag1.setValue("%{'field2'}");
-			pTag1.doStartTag();
-			pTag1.doEndTag();
-			
-		tag.doEndTag();
-		
-		verify(FieldErrorTagTest.class.getResource("fielderror-2.txt"));
-	}
-	
-	public void testWithNullFieldErrors() throws Exception {
-		FieldErrorTag tag = new FieldErrorTag();
-		((InternalAction)action).setHaveFieldErrors(false);
-		((InternalAction)action).setReturnNullForFieldErrors(true);
-		tag.setPageContext(pageContext);
-		tag.doStartTag();
-			ParamTag pTag1 = new ParamTag();
-			pTag1.setPageContext(pageContext);
-			pTag1.setValue("%{'field2'}");
-			pTag1.doStartTag();
-			pTag1.doEndTag();
-			
-		tag.doEndTag();
-		
-		verify(FieldErrorTagTest.class.getResource("fielderror-2.txt"));
-	}
-	
-	
-	public Action getAction() {
-		return new InternalAction();
-	}
-	
-	
-	public class InternalAction extends ActionSupport {
-		
-		private boolean haveFieldErrors = false;
-		private boolean returnNullForFieldErrors = false;
-		
-		public void setHaveFieldErrors(boolean haveFieldErrors) {
-			this.haveFieldErrors = haveFieldErrors;
-		}
-		
-		public void setReturnNullForFieldErrors(boolean returnNullForFieldErrors) {
-			this.returnNullForFieldErrors = returnNullForFieldErrors;
-		}
-		
-		public Map getFieldErrors() {
-			if (haveFieldErrors) {
-				List err1 = new ArrayList();
-				err1.add("field error message number 1");
-				List err2 = new ArrayList();
-				err2.add("field error message number 2");
-				List err3 = new ArrayList();
-				err3.add("field error message number 3");
-				Map fieldErrors = new LinkedHashMap();
-				fieldErrors.put("field1", err1);
-				fieldErrors.put("field2", err2);
-				fieldErrors.put("field3", err3);
-				return fieldErrors;
-			}
-			else if (returnNullForFieldErrors) {
-				return null;
-			}
-			else {
-				return Collections.EMPTY_MAP;
-			}
-		}
-		
-		public boolean hasFieldErrors() {
-			return haveFieldErrors;
-		}
-	}
-}
-
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FileTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FileTest.java
deleted file mode 100644
index 89d8431..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FileTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.Map;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class FileTest extends AbstractUITagTest {
-
-    public FileTest() {
-    }
-
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        FileTag tag = new FileTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setAccept("*.txt");
-        tag.setValue("%{foo}");
-        tag.setSize("10");
-        tag.setTitle("mytitle");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("File-1.txt"));
-    }
-
-    /**
-     * Initialize a map of {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder} for generic tag
-     * property testing. Will be used when calling {@link #verifyGenericProperties(org.apache.struts2.views.jsp.ui.AbstractUITag,
-     * String, String[])} as properties to verify.<p/> This implementation extends testdata from AbstractUITag.
-     *
-     * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()}
-     *         as key.
-     */
-    protected Map initializedGenericTagTestProperties() {
-        Map result = super.initializedGenericTagTestProperties();
-        new PropertyHolder("accept", "someAccepted").addToMap(result);
-        new PropertyHolder("size", "101").addToMap(result);
-        return result;
-    }
-
-    public void testGenericSimple() throws Exception {
-        FileTag tag = new FileTag();
-        verifyGenericProperties(tag, "simple", null);
-    }
-
-    public void testGenericXhtml() throws Exception {
-        FileTag tag = new FileTag();
-        verifyGenericProperties(tag, "xhtml", null);
-    }
-
-    public void testGenericAjax() throws Exception {
-        FileTag tag = new FileTag();
-        verifyGenericProperties(tag, "ajax", null);
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java
deleted file mode 100644
index 25bc188..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.TestAction;
-import org.apache.struts2.TestConfigurationProvider;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.mapper.DefaultActionMapper;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-import org.apache.struts2.views.jsp.ActionTag;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.config.RuntimeConfiguration;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.InterceptorMapping;
-import com.opensymphony.xwork2.validator.ValidationInterceptor;
-
-
-/**
- * FormTagTest
- */
-public class FormTagTest extends AbstractUITagTest {
-
-    public void testFormWithActionAttributeContainingBothActionAndMethod() throws Exception {
-        FormTag tag = new FormTag();
-        tag.setPageContext(pageContext);
-        tag.setName("myForm");
-        tag.setMethod("POST");
-        tag.setAcceptcharset("UTF-8");
-        tag.setAction("testAction");
-        tag.setEnctype("myEncType");
-        tag.setTitle("mytitle");
-        tag.setOnsubmit("submitMe()");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(FormTag.class.getResource("Formtag-9.txt"));
-    }
-
-
-    public void testFormWithActionAttributeContainingBothActionAndMethodAndNamespace() throws Exception {
-        FormTag tag = new FormTag();
-        tag.setPageContext(pageContext);
-        tag.setName("myForm");
-        tag.setNamespace("/testNamespace");
-        tag.setMethod("POST");
-        tag.setAcceptcharset("UTF-8");
-        tag.setAction("testNamespaceAction");
-        tag.setEnctype("myEncType");
-        tag.setTitle("mytitle");
-        tag.setOnsubmit("submitMe()");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(FormTag.class.getResource("Formtag-10.txt"));
-    }
-
-
-    public void testForm() throws Exception {
-
-        request.setupGetServletPath("/testAction");
-
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        FormTag tag = new FormTag();
-        tag.setPageContext(pageContext);
-        tag.setName("myForm");
-        tag.setMethod("POST");
-        tag.setAcceptcharset("UTF-8");
-        tag.setAction("myAction");
-        tag.setEnctype("myEncType");
-        tag.setTitle("mytitle");
-        tag.setOnsubmit("submitMe()");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(FormTag.class.getResource("Formtag-1.txt"));
-    }
-
-    /**
-     * This test with form tag validation enabled. Js validation script will appear
-     * cause action submited by the form is intercepted by validation interceptor which
-     * "include" all methods.
-     */
-    public void testFormWithCustomOnsubmitEnabledWithValidateEnabled1() throws Exception {
-
-        com.opensymphony.xwork2.config.Configuration originalConfiguration = configurationManager.getConfiguration();
-        ObjectFactory originalObjectFactory = ObjectFactory.getObjectFactory();
-
-        try {
-            // used to determined if the form action needs js validation
-            configurationManager.setConfiguration(new com.opensymphony.xwork2.config.impl.DefaultConfiguration() {
-                public RuntimeConfiguration getRuntimeConfiguration() {
-                    return new RuntimeConfiguration() {
-                        public ActionConfig getActionConfig(String namespace, String name) {
-                            ActionConfig actionConfig = new ActionConfig() {
-                                public List getInterceptors() {
-                                    List interceptors = new ArrayList();
-
-                                    ValidationInterceptor validationInterceptor = new ValidationInterceptor();
-                                    validationInterceptor.setIncludeMethods("*");
-
-                                    InterceptorMapping interceptorMapping = new InterceptorMapping();
-                                    interceptorMapping.setName("validation");
-                                    interceptorMapping.setInterceptor(validationInterceptor);
-                                    interceptors.add(interceptorMapping);
-
-                                    return interceptors;
-                                }
-                            };
-                            return actionConfig;
-                        }
-
-                        public Map getActionConfigs() {
-                            return null;
-                        }
-                    };
-                }
-            });
-
-            // used by form tag to get "actionClass" parameter
-            ObjectFactory.setObjectFactory(new ObjectFactory() {
-                public Class getClassInstance(String className) throws ClassNotFoundException {
-                    if (DefaultActionMapper.class.getName().equals(className)) {
-                        return DefaultActionMapper.class;
-                    }
-                    return ActionSupport.class;
-                }
-            });
-
-
-            FormTag tag = new FormTag();
-            tag.setPageContext(pageContext);
-            tag.setName("myForm");
-            tag.setMethod("POST");
-            tag.setAction("myAction");
-            tag.setAcceptcharset("UTF-8");
-            tag.setEnctype("myEncType");
-            tag.setTitle("mytitle");
-            tag.setOnsubmit("submitMe()");
-            tag.setValidate("true");
-            tag.setNamespace("");
-
-            UpDownSelectTag t = new UpDownSelectTag();
-            t.setPageContext(pageContext);
-            t.setName("myUpDownSelectTag");
-            t.setList("{}");
-
-            tag.doStartTag();
-            t.doStartTag();
-            t.doEndTag();
-            tag.doEndTag();
-
-            verify(FormTag.class.getResource("Formtag-2.txt"));
-        }
-        finally {
-            configurationManager.setConfiguration(originalConfiguration);
-            ObjectFactory.setObjectFactory(originalObjectFactory);
-        }
-    }
-
-
-    /**
-     * This test with form tag validation enabled. Js validation script will not appear
-     * cause action submited by the form is intercepted by validation interceptor which
-     * "excludes" all methods.
-     */
-    public void testFormWithCustomOnsubmitEnabledWithValidateEnabled2() throws Exception {
-
-        com.opensymphony.xwork2.config.Configuration originalConfiguration = configurationManager.getConfiguration();
-        ObjectFactory originalObjectFactory = ObjectFactory.getObjectFactory();
-
-        try {
-            // used to determined if the form action needs js validation
-            configurationManager.setConfiguration(new com.opensymphony.xwork2.config.impl.DefaultConfiguration() {
-                public RuntimeConfiguration getRuntimeConfiguration() {
-                    return new RuntimeConfiguration() {
-                        public ActionConfig getActionConfig(String namespace, String name) {
-                            ActionConfig actionConfig = new ActionConfig() {
-                                public List getInterceptors() {
-                                    List interceptors = new ArrayList();
-
-                                    ValidationInterceptor validationInterceptor = new ValidationInterceptor();
-                                    validationInterceptor.setExcludeMethods("*");
-
-                                    InterceptorMapping interceptorMapping = new InterceptorMapping();
-                                    interceptorMapping.setName("validation");
-                                    interceptorMapping.setInterceptor(validationInterceptor);
-                                    interceptors.add(interceptorMapping);
-
-                                    return interceptors;
-                                }
-                            };
-                            return actionConfig;
-                        }
-
-                        public Map getActionConfigs() {
-                            return null;
-                        }
-                    };
-                }
-            });
-
-            // used by form tag to get "actionClass" parameter
-            ObjectFactory.setObjectFactory(new ObjectFactory() {
-                public Class getClassInstance(String className) throws ClassNotFoundException {
-                    if (DefaultActionMapper.class.getName().equals(className)) {
-                        return DefaultActionMapper.class;
-                    }
-                    return ActionSupport.class;
-                }
-            });
-
-
-            FormTag tag = new FormTag();
-            tag.setPageContext(pageContext);
-            tag.setName("myForm");
-            tag.setMethod("POST");
-            tag.setAction("myAction");
-            tag.setAcceptcharset("UTF-8");
-            tag.setEnctype("myEncType");
-            tag.setTitle("mytitle");
-            tag.setOnsubmit("submitMe()");
-            tag.setValidate("true");
-            tag.setNamespace("");
-
-            UpDownSelectTag t = new UpDownSelectTag();
-            t.setPageContext(pageContext);
-            t.setName("myUpDownSelectTag");
-            t.setList("{}");
-
-            tag.doStartTag();
-            t.doStartTag();
-            t.doEndTag();
-            tag.doEndTag();
-
-            verify(FormTag.class.getResource("Formtag-11.txt"));
-        }
-        finally {
-            configurationManager.setConfiguration(originalConfiguration);
-            ObjectFactory.setObjectFactory(originalObjectFactory);
-        }
-    }
-
-    /**
-     * This test with form tag validation disabled.
-     */
-    public void testFormWithCustomOnsubmitEnabledWithValidateDisabled() throws Exception {
-        FormTag tag = new FormTag();
-        tag.setPageContext(pageContext);
-        tag.setName("myForm");
-        tag.setMethod("POST");
-        tag.setAction("myAction");
-        tag.setEnctype("myEncType");
-        tag.setTitle("mytitle");
-        tag.setOnsubmit("submitMe()");
-        tag.setValidate("false");
-
-        UpDownSelectTag t = new UpDownSelectTag();
-        t.setPageContext(pageContext);
-        t.setName("myUpDownSelectTag");
-        t.setList("{}");
-
-        tag.doStartTag();
-        t.doStartTag();
-        t.doEndTag();
-        tag.doEndTag();
-
-        verify(FormTag.class.getResource("Formtag-6.txt"));
-    }
-
-
-    /**
-     * Testing that this: <p>
-     * &lt;a:form name=&quot;'myForm'&quot; namespace=&quot;'/testNamespace'&quot; action=&quot;'testNamespaceAction'&quot; method=&quot;'POST'&quot;&gt;
-     * <p/>
-     * doesn't create an action of &quot;/testNamespace/testNamespaceAction.action&quot; when the &quot;struts.action.extension&quot;
-     * config property is set to &quot;jspa&quot;.
-     */
-    public void testFormTagWithDifferentActionExtension() throws Exception {
-        request.setupGetServletPath("/testNamespace/testNamespaceAction");
-        String oldConfiguration = (String) Settings.get(StrutsConstants.STRUTS_ACTION_EXTENSION);
-        Settings.set(StrutsConstants.STRUTS_ACTION_EXTENSION, "jspa");
-
-        FormTag tag = new FormTag();
-        tag.setPageContext(pageContext);
-        tag.setNamespace("/testNamespace");
-        tag.setAction("testNamespaceAction");
-        tag.setMethod("POST");
-        tag.setName("myForm");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        Settings.set(StrutsConstants.STRUTS_ACTION_EXTENSION, oldConfiguration);
-
-        verify(FormTag.class.getResource("Formtag-5.txt"));
-
-        // set it back to the default
-        Settings.set(StrutsConstants.STRUTS_ACTION_EXTENSION, "action");
-    }
-
-    /**
-     * Testing that this: <p>
-     * &lt;a:form name=&quot;'myForm'&quot; action=&quot;'/testNamespace/testNamespaceAction.jspa'&quot; method=&quot;'POST'&quot;&gt;
-     * <p/>
-     * doesn't create an action of &quot;/testNamespace/testNamespaceAction.action&quot;
-     */
-    public void testFormTagWithDifferentActionExtensionHardcoded() throws Exception {
-        request.setupGetServletPath("/testNamespace/testNamespaceAction");
-
-        FormTag tag = new FormTag();
-        tag.setPageContext(pageContext);
-        tag.setAction("/testNamespace/testNamespaceAction.jspa");
-        tag.setMethod("POST");
-        tag.setName("myForm");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(FormTag.class.getResource("Formtag-5.txt"));
-    }
-
-    public void testFormWithNamespaceDefaulting() throws Exception {
-        request.setupGetServletPath("/testNamespace/testNamespaceAction");
-
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        FormTag tag = new FormTag();
-        tag.setPageContext(pageContext);
-        tag.setName("myForm");
-        tag.setMethod("POST");
-        tag.setAction("testNamespaceAction");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(FormTag.class.getResource("Formtag-3.txt"));
-    }
-
-    public void testFormTagForStackOverflowException1() throws Exception {
-        request.setRequestURI("/requestUri");
-
-        FormTag form1 = new FormTag();
-        form1.setPageContext(pageContext);
-        form1.doStartTag();
-
-        assertEquals(form1.getComponent().getComponentStack().size(), 1);
-
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setName("testAction");
-        tag.doStartTag();
-
-        assertEquals(tag.getComponent().getComponentStack().size(), 2);
-
-        tag.doEndTag();
-
-        assertEquals(form1.getComponent().getComponentStack().size(), 1);
-
-        form1.doEndTag();
-
-        assertNull(form1.getComponent()); // component is removed after end tag
-    }
-
-    public void testFormTagForStackOverflowException2() throws Exception {
-        request.setRequestURI("/requestUri");
-
-        FormTag form1 = new FormTag();
-        form1.setPageContext(pageContext);
-        form1.doStartTag();
-
-        assertEquals(form1.getComponent().getComponentStack().size(), 1);
-
-        FormTag form2 = new FormTag();
-        form2.setPageContext(pageContext);
-        form2.doStartTag();
-
-        assertEquals(form2.getComponent().getComponentStack().size(), 2);
-
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setName("testAction");
-        tag.doStartTag();
-
-        assertEquals(tag.getComponent().getComponentStack().size(), 3);
-
-        tag.doEndTag();
-
-        assertEquals(form2.getComponent().getComponentStack().size(), 2);
-
-        form2.doEndTag();
-
-        assertEquals(form1.getComponent().getComponentStack().size(), 1);
-
-        form1.doEndTag();
-
-        assertNull(form1.getComponent()); // component is removed after end tag
-    }
-
-
-    public void testFormTagForStackOverflowException3() throws Exception {
-        request.setRequestURI("/requestUri");
-
-        FormTag form1 = new FormTag();
-        form1.setPageContext(pageContext);
-        form1.doStartTag();
-
-        assertEquals(form1.getComponent().getComponentStack().size(), 1);
-
-        FormTag form2 = new FormTag();
-        form2.setPageContext(pageContext);
-        form2.doStartTag();
-
-        assertEquals(form2.getComponent().getComponentStack().size(), 2);
-
-        FormTag form3 = new FormTag();
-        form3.setPageContext(pageContext);
-        form3.doStartTag();
-
-        assertEquals(form3.getComponent().getComponentStack().size(), 3);
-
-        ActionTag tag = new ActionTag();
-        tag.setPageContext(pageContext);
-        tag.setName("testAction");
-        tag.doStartTag();
-
-        assertEquals(tag.getComponent().getComponentStack().size(), 4);
-
-        tag.doEndTag();
-
-        assertEquals(form3.getComponent().getComponentStack().size(), 3);
-
-        form3.doEndTag();
-
-        assertEquals(form2.getComponent().getComponentStack().size(), 2);
-
-        form2.doEndTag();
-
-        assertEquals(form1.getComponent().getComponentStack().size(), 1);
-
-        form1.doEndTag();
-
-        assertNull(form1.getComponent()); // component is removed after end tag
-    }
-
-
-    public void testFormComponentIsRemoved() throws Exception {
-        request.setRequestURI("/requestUri");
-
-        FormTag form = new FormTag();
-        form.setPageContext(pageContext);
-        form.doStartTag();
-
-        assertEquals(form.getComponent().getComponentStack().size(), 1);
-
-        form.doEndTag();
-
-        assertNull(form.getComponent());
-    }
-
-
-    public void testFormWithNoAction() throws Exception {
-        request.setupGetServletPath("/");
-        request.setupGetContextPath("/");
-        request.setRequestURI("/foo.jsp");
-
-        FormTag tag = new FormTag();
-        tag.setPageContext(pageContext);
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(FormTag.class.getResource("Formtag-4.txt"));
-    }
-
-    public void testFormWithStaticAction() throws Exception {
-        request.setupGetServletPath("/");
-        request.setupGetContextPath("/");
-        request.setRequestURI("/foo.jsp");
-
-        FormTag tag = new FormTag();
-        tag.setPageContext(pageContext);
-        tag.setAction("test.html");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(FormTag.class.getResource("Formtag-7.txt"));
-    }
-
-    public void testFormWithActionAndExtension() throws Exception {
-        request.setupGetServletPath("/BLA");
-        String oldConfiguration = (String) Settings.get(StrutsConstants.STRUTS_ACTION_EXTENSION);
-        Settings.set(StrutsConstants.STRUTS_ACTION_EXTENSION, "jspa");
-
-        FormTag tag = new FormTag();
-        tag.setPageContext(pageContext);
-        tag.setAction("/testNamespace/testNamespaceAction.jspa");
-        tag.setMethod("POST");
-        tag.setName("myForm");
-
-        tag.doStartTag();
-        tag.doEndTag();
-        Settings.set(StrutsConstants.STRUTS_ACTION_EXTENSION, oldConfiguration);
-
-        verify(FormTag.class.getResource("Formtag-8.txt"));
-
-        // set it back to the default
-        Settings.set(StrutsConstants.STRUTS_ACTION_EXTENSION, "action");
-
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        configurationManager.clearConfigurationProviders();
-        configurationManager.addConfigurationProvider(new TestConfigurationProvider());
-        ActionContext.getContext().setValueStack(stack);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/HeadTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/HeadTagTest.java
deleted file mode 100644
index fc92f2c..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/HeadTagTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.components.Head;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-/**
- * Unit test for {@link HeadTag}.
- * <p/>
- * Note: If unit test fails with encoding difference check the src/test/struts.properties
- * and adjust the .txt files accordingly
- *
- */
-public class HeadTagTest extends AbstractUITagTest {
-
-    private HeadTag tag;
-
-    public void testHead1() throws Exception {
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(HeadTagTest.class.getResource("HeadTagTest-1.txt"));
-    }
-
-    public void testHead1NoCalender() throws Exception {
-        tag.doStartTag();
-        tag.doEndTag();
-        tag.setCalendarcss(null); // null = should use calendar-blue.css
-        
-        verify(HeadTagTest.class.getResource("HeadTagTest-1.txt"));
-    }
-
-    public void testHead2() throws Exception {
-        tag.setTheme("ajax");
-        tag.doStartTag();
-        Head component = (Head) tag.getComponent();
-        assertTrue(!component.isDebug());
-        tag.doEndTag();
-
-        verify(HeadTagTest.class.getResource("HeadTagTest-2.txt"));
-        assertTrue("should have debug false", writer.toString().indexOf("isDebug: false") > -1);
-    }
-
-    public void testHead3() throws Exception {
-        tag.setTheme("ajax");
-        tag.setDebug("true");
-        tag.doStartTag();
-        Head component = (Head) tag.getComponent(); // must be done between start and end
-        assertTrue(component.isDebug());
-        tag.doEndTag();
-
-        verify(HeadTagTest.class.getResource("HeadTagTest-3.txt"));
-        assertTrue("should have debug true", writer.toString().indexOf("isDebug: true") > -1);
-    }
-
-    public void testHead4() throws Exception {
-        tag.setCalendarcss("my-calendar");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(HeadTagTest.class.getResource("HeadTagTest-4.txt"));
-        assertEquals("my-calendar", tag.getCalendarcss());
-    }
-
-    public void testHead4b() throws Exception {
-        tag.setCalendarcss("my-calendar.css");
-        tag.doStartTag();
-        Head component = (Head) tag.getComponent(); // must be done between start and end
-        assertEquals("my-calendar.css", component.getCalendarcss());
-        tag.doEndTag();
-
-        verify(HeadTagTest.class.getResource("HeadTagTest-4.txt"));
-        assertEquals("my-calendar.css", tag.getCalendarcss());
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        tag = new HeadTag();
-        tag.setPageContext(pageContext);
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/HiddenTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/HiddenTest.java
deleted file mode 100644
index f30fec9..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/HiddenTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class HiddenTest extends AbstractUITagTest {
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        HiddenTag tag = new HiddenTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Hidden-1.txt"));
-    }
-
-    /**
-     * Initialize a map of {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder} for generic tag
-     * property testing. Will be used when calling {@link #verifyGenericProperties(org.apache.struts2.views.jsp.ui.AbstractUITag,
-     * String, String[])} as properties to verify.<p/> This implementation extends testdata from AbstractUITag.
-     *
-     * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()}
-     *         as key.
-     */
-    protected Map initializedGenericTagTestProperties() {
-        Map result = new HashMap();
-        new PropertyHolder("name", "someName").addToMap(result);
-        new PropertyHolder("value", "someValue").addToMap(result);
-        new PropertyHolder("cssClass", "cssClass1", "class=\"cssClass1\"").addToMap(result);
-        new PropertyHolder("cssStyle", "cssStyle1", "style=\"cssStyle1\"").addToMap(result);
-        new PropertyHolder("id", "someId").addToMap(result);
-        return result;
-    }
-
-    public void testGenericSimple() throws Exception {
-        HiddenTag tag = new HiddenTag();
-        verifyGenericProperties(tag, "simple", null);
-    }
-
-    public void testGenericXhtml() throws Exception {
-        HiddenTag tag = new HiddenTag();
-        verifyGenericProperties(tag, "xhtml", null);
-    }
-
-    public void testGenericAjax() throws Exception {
-        HiddenTag tag = new HiddenTag();
-        verifyGenericProperties(tag, "ajax", null);
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/JspTemplateTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/JspTemplateTest.java
deleted file mode 100644
index c5efac7..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/JspTemplateTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-import com.mockobjects.dynamic.C;
-import com.mockobjects.dynamic.Mock;
-
-/**
- * JspTemplateTest
- *
- */
-public class JspTemplateTest extends AbstractUITagTest {
-    public void testCheckBox() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("true");
-
-        CheckboxTag tag = new CheckboxTag();
-        Mock rdMock = new Mock(RequestDispatcher.class);
-        rdMock.expect("include",C.args(C.isA(HttpServletRequest.class), C.isA(HttpServletResponse.class)));
-        RequestDispatcher dispatcher = (RequestDispatcher) rdMock.proxy();
-        request.setupGetRequestDispatcher(dispatcher);
-        tag.setPageContext(pageContext);
-        tag.setTemplate("/test/checkbox.jsp");
-        tag.doStartTag();
-        tag.doEndTag();
-        rdMock.verify();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/LabelTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/LabelTest.java
deleted file mode 100644
index ef51f9e..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/LabelTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class LabelTest extends AbstractUITagTest {
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        LabelTag tag = new LabelTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setTitle("mytitle");
-        tag.setValue("%{foo}");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(LabelTest.class.getResource("Label-1.txt"));
-    }
-
-    public void testSimpleWithLabelposition() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        LabelTag tag = new LabelTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-        tag.setLabelposition("top");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(LabelTest.class.getResource("Label-3.txt"));
-    }
-
-    /**
-     * Initialize a map of {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder} for generic tag
-     * property testing. Will be used when calling {@link #verifyGenericProperties(org.apache.struts2.views.jsp.ui.AbstractUITag,
-     * String, String[])} as properties to verify.<p/> This implementation extends testdata from AbstractUITag.
-     *
-     * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()}
-     *         as key.
-     */
-    protected Map initializedGenericTagTestProperties() {
-        Map result = new HashMap();
-        new PropertyHolder("title", "someTitle").addToMap(result);
-        new PropertyHolder("cssClass", "cssClass1", "class=\"cssClass1\"").addToMap(result);
-        new PropertyHolder("cssStyle", "cssStyle1", "style=\"cssStyle1\"").addToMap(result);
-        new PropertyHolder("id", "someId").addToMap(result);
-        new PropertyHolder("for", "someFor").addToMap(result);
-        return result;
-    }
-
-    public void testWithNoValue() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("baz");
-
-        LabelTag tag = new LabelTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setFor("for");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(LabelTest.class.getResource("Label-2.txt"));
-    }
-
-    public void testGenericSimple() throws Exception {
-        LabelTag tag = new LabelTag();
-        verifyGenericProperties(tag, "simple", null);
-    }
-
-    public void testGenericXhtml() throws Exception {
-        LabelTag tag = new LabelTag();
-        verifyGenericProperties(tag, "xhtml", null);
-    }
-
-    public void testGenericAjax() throws Exception {
-        LabelTag tag = new LabelTag();
-        verifyGenericProperties(tag, "ajax", null);
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/MockTag.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/MockTag.java
deleted file mode 100644
index 25d7d8b..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/MockTag.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.jsp.tagext.BodyTagSupport;
-
-
-/**
- */
-public class MockTag extends BodyTagSupport {
-
-	private static final long serialVersionUID = 2694367759647164641L;
-	
-	private static String s;
-    private static Integer i;
-    private static Double d;
-    private static Long l;
-    private static Float f;
-    private static Date date;
-    private static Calendar cal;
-    private static HashMap params;
-    private static MockTag instance = new MockTag();
-
-
-    public static MockTag getInstance() {
-        return instance;
-    }
-
-    public void setCal(Calendar cal) {
-        MockTag.cal = cal;
-    }
-
-    public Calendar getCal() {
-        return cal;
-    }
-
-    public void setDate(Date date) {
-        MockTag.date = date;
-    }
-
-    public Date getDate() {
-        return date;
-    }
-
-    public void setDouble(Double d) {
-        MockTag.d = d;
-    }
-
-    public Double getDouble() {
-        return d;
-    }
-
-    public void setFloat(Float f) {
-        MockTag.f = f;
-    }
-
-    public Float getFloat() {
-        return f;
-    }
-
-    public void setInteger(Integer i) {
-        MockTag.i = i;
-    }
-
-    public Integer getInteger() {
-        return i;
-    }
-
-    public void setLong(Long l) {
-        MockTag.l = l;
-    }
-
-    public Long getLong() {
-        return l;
-    }
-
-    public Map getParameters() {
-        return MockTag.params;
-    }
-
-    public void setString(String s) {
-        MockTag.s = s;
-    }
-
-    public String getString() {
-        return s;
-    }
-
-    public void addParameter(String key, Object value) {
-        MockTag.params.put(key, value);
-    }
-
-    /**
-     * resets all the static variables to their initial state.  this must be called before each test!
-     */
-    public void reset() {
-        s = null;
-        i = null;
-        l = null;
-        f = null;
-        date = null;
-        cal = null;
-        params = new HashMap();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/OptGroupTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/OptGroupTest.java
deleted file mode 100644
index b0c062d..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/OptGroupTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-/**
- * 
- */
-public class OptGroupTest extends AbstractUITagTest {
-	
-	
-	public void testOptGroupSimple() throws Exception {
-		SelectTag selectTag = new SelectTag();
-		selectTag.setName("mySelection");
-		selectTag.setLabel("My Selection");
-		selectTag.setList("%{#{'ONE':'one','TWO':'two','THREE':'three'}}");
-		
-		OptGroupTag optGroupTag1 = new OptGroupTag();
-		optGroupTag1.setLabel("My Label 1");
-		optGroupTag1.setList("%{#{'AAA':'aaa','BBB':'bbb','CCC':'ccc'}}");
-		
-		OptGroupTag optGroupTag2 = new OptGroupTag();
-		optGroupTag2.setLabel("My Label 2");
-		optGroupTag2.setList("%{#{'DDD':'ddd','EEE':'eee','FFF':'fff'}}");
-		
-		selectTag.setPageContext(pageContext);
-		selectTag.doStartTag();
-		optGroupTag1.setPageContext(pageContext);
-		optGroupTag1.doStartTag();
-		optGroupTag1.doEndTag();
-		optGroupTag2.setPageContext(pageContext);
-		optGroupTag2.doStartTag();
-		optGroupTag2.doEndTag();
-		selectTag.doEndTag();
-		
-		
-		//System.out.println(writer.toString());
-		verify(SelectTag.class.getResource("OptGroup-1.txt"));
-	}
-	
-	
-	public void testOptGroupWithSingleSelect() throws Exception {
-		
-		SelectTag selectTag = new SelectTag();
-		selectTag.setName("mySelection");
-		selectTag.setLabel("My Selection");
-		selectTag.setList("%{#{'ONE':'one','TWO':'two','THREE':'three'}}");
-		selectTag.setValue("%{'EEE'}");
-		
-		OptGroupTag optGroupTag1 = new OptGroupTag();
-		optGroupTag1.setLabel("My Label 1");
-		optGroupTag1.setList("%{#{'AAA':'aaa','BBB':'bbb','CCC':'ccc'}}");
-		
-		OptGroupTag optGroupTag2 = new OptGroupTag();
-		optGroupTag2.setLabel("My Label 2");
-		optGroupTag2.setList("%{#{'DDD':'ddd','EEE':'eee','FFF':'fff'}}");
-		
-		selectTag.setPageContext(pageContext);
-		selectTag.doStartTag();
-		optGroupTag1.setPageContext(pageContext);
-		optGroupTag1.doStartTag();
-		optGroupTag1.doEndTag();
-		optGroupTag2.setPageContext(pageContext);
-		optGroupTag2.doStartTag();
-		optGroupTag2.doEndTag();
-		selectTag.doEndTag();
-		
-		
-		//System.out.println(writer.toString());
-		verify(SelectTag.class.getResource("OptGroup-2.txt"));
-	}
-	
-	
-	public void testOptGroupWithMultipleSelect() throws Exception {
-		SelectTag selectTag = new SelectTag();
-		selectTag.setMultiple("true");
-		selectTag.setName("mySelection");
-		selectTag.setLabel("My Selection");
-		selectTag.setList("%{#{'ONE':'one','TWO':'two','THREE':'three'}}");
-		selectTag.setValue("%{{'EEE','BBB','TWO'}}");
-		
-		OptGroupTag optGroupTag1 = new OptGroupTag();
-		optGroupTag1.setLabel("My Label 1");
-		optGroupTag1.setList("%{#{'AAA':'aaa','BBB':'bbb','CCC':'ccc'}}");
-		
-		OptGroupTag optGroupTag2 = new OptGroupTag();
-		optGroupTag2.setLabel("My Label 2");
-		optGroupTag2.setList("%{#{'DDD':'ddd','EEE':'eee','FFF':'fff'}}");
-		
-		selectTag.setPageContext(pageContext);
-		selectTag.doStartTag();
-		optGroupTag1.setPageContext(pageContext);
-		optGroupTag1.doStartTag();
-		optGroupTag1.doEndTag();
-		optGroupTag2.setPageContext(pageContext);
-		optGroupTag2.doStartTag();
-		optGroupTag2.doEndTag();
-		selectTag.doEndTag();
-		
-		
-		//System.out.println(writer.toString());
-		verify(SelectTag.class.getResource("OptGroup-3.txt"));
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/OptionTransferSelectTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/OptionTransferSelectTagTest.java
deleted file mode 100644
index 2384fe6..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/OptionTransferSelectTagTest.java
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-/**
- * 
- */
-public class OptionTransferSelectTagTest extends AbstractUITagTest {
-
-	public void testWithAllSelected() throws Exception {
-		List left = new ArrayList();
-		left.add("Left1");
-		left.add("Left2");
-		
-		List right = new ArrayList();
-		right.add("Right1");
-		right.add("Right2");
-		
-		TestAction testaction = (TestAction) action;
-		testaction.setCollection(left);
-		testaction.setList2(right);
-		
-		OptionTransferSelectTag tag = new OptionTransferSelectTag();
-		tag.setPageContext(pageContext);
-		
-		tag.setName("collection");
-		tag.setId("id");
-		tag.setList("collection");
-		tag.setSize("20");
-		tag.setMultiple("true");
-		tag.setEmptyOption("true");
-		
-		tag.setDoubleName("list2");
-		tag.setDoubleList("list2");
-		tag.setDoubleId("doubleId");
-		tag.setDoubleSize("20");
-		tag.setMultiple("true");
-		tag.setDoubleEmptyOption("true");
-		
-		tag.setAllowAddAllToLeft("true");
-		tag.setAllowAddAllToRight("true");
-		tag.setAllowAddToLeft("true");
-		tag.setAllowAddToRight("true");
-		tag.setAllowSelectAll("true");
-		
-		tag.setAddAllToLeftLabel("All Left");
-		tag.setAddAllToRightLabel("All Right");
-		tag.setAddToLeftLabel("Left");
-		tag.setAddToRightLabel("Right");
-		tag.setSelectAllLabel("Select All");
-		
-		tag.setLeftTitle("Title Left");
-		tag.setRightTitle("Title Right");
-		
-		tag.setButtonCssClass("buttonCssClass");
-		tag.setButtonCssStyle("buttonCssStyle");
-		
-		tag.setHeaderKey("Header Key");
-		tag.setHeaderValue("Header Value");
-		
-		tag.setDoubleHeaderKey("Double Header Key");
-		tag.setDoubleHeaderValue("Double Header Value");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		//System.out.println(writer.toString());
-		verify(OptionTransferSelectTagTest.class.getResource("optiontransferselect-1.txt"));
-	}
-	
-	public void testWithPartialSelectedOnBothSides() throws Exception {
-		List left = new ArrayList();
-		left.add("Left2");
-		
-		List right = new ArrayList();
-		right.add("Right2");
-		
-		List leftVal = new ArrayList();
-		leftVal.add("Left1");
-		leftVal.add("Left2");
-		leftVal.add("Left3");
-		
-		List rightVal = new ArrayList();
-		rightVal.add("Right1");
-		rightVal.add("Right2");
-		rightVal.add("Right3");
-		
-		
-		TestAction testaction = (TestAction) action;
-		testaction.setCollection(left);
-		testaction.setList2(right);
-		testaction.setCollection2(leftVal);
-		testaction.setList3(rightVal);
-		
-		
-		OptionTransferSelectTag tag = new OptionTransferSelectTag();
-		tag.setPageContext(pageContext);
-		
-		tag.setName("collection");
-		tag.setId("id");
-		tag.setList("collection2");
-		tag.setSize("20");
-		tag.setMultiple("true");
-		tag.setEmptyOption("true");
-		
-		tag.setDoubleName("list2");
-		tag.setDoubleList("list3");
-		tag.setDoubleId("doubleId");
-		tag.setDoubleSize("20");
-		tag.setMultiple("true");
-		tag.setDoubleEmptyOption("true");
-		
-		tag.setAllowAddAllToLeft("true");
-		tag.setAllowAddAllToRight("true");
-		tag.setAllowAddToLeft("true");
-		tag.setAllowAddToRight("true");
-		tag.setAllowSelectAll("true");
-		
-		tag.setAddAllToLeftLabel("All Left");
-		tag.setAddAllToRightLabel("All Right");
-		tag.setAddToLeftLabel("Left");
-		tag.setAddToRightLabel("Right");
-		tag.setSelectAllLabel("Select All");
-		
-		tag.setLeftTitle("Title Left");
-		tag.setRightTitle("Title Right");
-		
-		tag.setButtonCssClass("buttonCssClass");
-		tag.setButtonCssStyle("buttonCssStyle");
-		
-		tag.setHeaderKey("Header Key");
-		tag.setHeaderValue("Header Value");
-		
-		tag.setDoubleHeaderKey("Double Header Key");
-		tag.setDoubleHeaderValue("Double Header Value");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		//System.out.println(writer.toString());
-		verify(OptionTransferSelectTagTest.class.getResource("optiontransferselect-2.txt"));
-	}
-	
-	public void testWithoutHeaderOnBothSides() throws Exception {
-		List left = new ArrayList();
-		left.add("Left2");
-		
-		List right = new ArrayList();
-		right.add("Right2");
-		
-		List leftVal = new ArrayList();
-		leftVal.add("Left1");
-		leftVal.add("Left2");
-		leftVal.add("Left3");
-		
-		List rightVal = new ArrayList();
-		rightVal.add("Right1");
-		rightVal.add("Right2");
-		rightVal.add("Right3");
-		
-		
-		TestAction testaction = (TestAction) action;
-		testaction.setCollection(left);
-		testaction.setList2(right);
-		testaction.setCollection2(leftVal);
-		testaction.setList3(rightVal);
-		
-		
-		OptionTransferSelectTag tag = new OptionTransferSelectTag();
-		tag.setPageContext(pageContext);
-		
-		tag.setName("collection");
-		tag.setId("id");
-		tag.setList("collection2");
-		tag.setSize("20");
-		tag.setMultiple("true");
-		tag.setEmptyOption("true");
-		
-		tag.setDoubleName("list2");
-		tag.setDoubleList("list3");
-		tag.setDoubleId("doubleId");
-		tag.setDoubleSize("20");
-		tag.setMultiple("true");
-		tag.setDoubleEmptyOption("true");
-		
-		tag.setAllowAddAllToLeft("true");
-		tag.setAllowAddAllToRight("true");
-		tag.setAllowAddToLeft("true");
-		tag.setAllowAddToRight("true");
-		tag.setAllowSelectAll("true");
-		
-		tag.setAddAllToLeftLabel("All Left");
-		tag.setAddAllToRightLabel("All Right");
-		tag.setAddToLeftLabel("Left");
-		tag.setAddToRightLabel("Right");
-		tag.setSelectAllLabel("Select All");
-		
-		tag.setLeftTitle("Title Left");
-		tag.setRightTitle("Title Right");
-		
-		tag.setButtonCssClass("buttonCssClass");
-		tag.setButtonCssStyle("buttonCssStyle");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		//System.out.println(writer.toString());
-		verify(OptionTransferSelectTagTest.class.getResource("optiontransferselect-3.txt"));
-	}
-	
-	public void testWithoutHeaderOnOneSide() throws Exception {
-		List left = new ArrayList();
-		left.add("Left2");
-		
-		List right = new ArrayList();
-		right.add("Right2");
-		
-		List leftVal = new ArrayList();
-		leftVal.add("Left1");
-		leftVal.add("Left2");
-		leftVal.add("Left3");
-		
-		List rightVal = new ArrayList();
-		rightVal.add("Right1");
-		rightVal.add("Right2");
-		rightVal.add("Right3");
-		
-		
-		TestAction testaction = (TestAction) action;
-		testaction.setCollection(left);
-		testaction.setList2(right);
-		testaction.setCollection2(leftVal);
-		testaction.setList3(rightVal);
-		
-		
-		OptionTransferSelectTag tag = new OptionTransferSelectTag();
-		tag.setPageContext(pageContext);
-		
-		tag.setName("collection");
-		tag.setId("id");
-		tag.setList("collection2");
-		tag.setSize("20");
-		tag.setMultiple("true");
-		tag.setEmptyOption("true");
-		
-		tag.setDoubleName("list2");
-		tag.setDoubleList("list3");
-		tag.setDoubleId("doubleId");
-		tag.setDoubleSize("20");
-		tag.setMultiple("true");
-		tag.setDoubleEmptyOption("true");
-		
-		tag.setAllowAddAllToLeft("true");
-		tag.setAllowAddAllToRight("true");
-		tag.setAllowAddToLeft("true");
-		tag.setAllowAddToRight("true");
-		tag.setAllowSelectAll("true");
-		
-		tag.setAddAllToLeftLabel("All Left");
-		tag.setAddAllToRightLabel("All Right");
-		tag.setAddToLeftLabel("Left");
-		tag.setAddToRightLabel("Right");
-		tag.setSelectAllLabel("Select All");
-		
-		tag.setLeftTitle("Title Left");
-		tag.setRightTitle("Title Right");
-		
-		tag.setButtonCssClass("buttonCssClass");
-		tag.setButtonCssStyle("buttonCssStyle");
-		
-		tag.setHeaderKey("Header Key");
-		tag.setHeaderValue("Header Value");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		//System.out.println(writer.toString());
-		verify(OptionTransferSelectTagTest.class.getResource("optiontransferselect-4.txt"));
-	}
-	
-	public void testWithoutEmptyOptionOnBothSides() throws Exception {
-		List left = new ArrayList();
-		left.add("Left2");
-		
-		List right = new ArrayList();
-		right.add("Right2");
-		
-		List leftVal = new ArrayList();
-		leftVal.add("Left1");
-		leftVal.add("Left2");
-		leftVal.add("Left3");
-		
-		List rightVal = new ArrayList();
-		rightVal.add("Right1");
-		rightVal.add("Right2");
-		rightVal.add("Right3");
-		
-		
-		TestAction testaction = (TestAction) action;
-		testaction.setCollection(left);
-		testaction.setList2(right);
-		testaction.setCollection2(leftVal);
-		testaction.setList3(rightVal);
-		
-		
-		OptionTransferSelectTag tag = new OptionTransferSelectTag();
-		tag.setPageContext(pageContext);
-		
-		tag.setName("collection");
-		tag.setId("id");
-		tag.setList("collection2");
-		tag.setSize("20");
-		tag.setMultiple("true");
-		tag.setEmptyOption("false");
-		
-		tag.setDoubleName("list2");
-		tag.setDoubleList("list3");
-		tag.setDoubleId("doubleId");
-		tag.setDoubleSize("20");
-		tag.setMultiple("true");
-		tag.setDoubleEmptyOption("false");
-		
-		tag.setAllowAddAllToLeft("true");
-		tag.setAllowAddAllToRight("true");
-		tag.setAllowAddToLeft("true");
-		tag.setAllowAddToRight("true");
-		tag.setAllowSelectAll("true");
-		
-		tag.setAddAllToLeftLabel("All Left");
-		tag.setAddAllToRightLabel("All Right");
-		tag.setAddToLeftLabel("Left");
-		tag.setAddToRightLabel("Right");
-		tag.setSelectAllLabel("Select All");
-		
-		tag.setLeftTitle("Title Left");
-		tag.setRightTitle("Title Right");
-		
-		tag.setButtonCssClass("buttonCssClass");
-		tag.setButtonCssStyle("buttonCssStyle");
-		
-		tag.setHeaderKey("Header Key");
-		tag.setHeaderValue("Header Value");
-		
-		tag.setDoubleHeaderKey("Double Header Key");
-		tag.setDoubleHeaderValue("Double Header Value");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		//System.out.println(writer.toString());
-		verify(OptionTransferSelectTagTest.class.getResource("optiontransferselect-5.txt"));
-	}
-	
-	public void testWithoutEmptyOptionOnOneSide() throws Exception {
-		List left = new ArrayList();
-		left.add("Left2");
-		
-		List right = new ArrayList();
-		right.add("Right2");
-		
-		List leftVal = new ArrayList();
-		leftVal.add("Left1");
-		leftVal.add("Left2");
-		leftVal.add("Left3");
-		
-		List rightVal = new ArrayList();
-		rightVal.add("Right1");
-		rightVal.add("Right2");
-		rightVal.add("Right3");
-		
-		
-		TestAction testaction = (TestAction) action;
-		testaction.setCollection(left);
-		testaction.setList2(right);
-		testaction.setCollection2(leftVal);
-		testaction.setList3(rightVal);
-		
-		
-		OptionTransferSelectTag tag = new OptionTransferSelectTag();
-		tag.setPageContext(pageContext);
-		
-		tag.setName("collection");
-		tag.setId("id");
-		tag.setList("collection2");
-		tag.setSize("20");
-		tag.setMultiple("true");
-		tag.setEmptyOption("true");
-		
-		tag.setDoubleName("list2");
-		tag.setDoubleList("list3");
-		tag.setDoubleId("doubleId");
-		tag.setDoubleSize("20");
-		tag.setMultiple("true");
-		tag.setDoubleEmptyOption("false");
-		
-		tag.setAllowAddAllToLeft("true");
-		tag.setAllowAddAllToRight("true");
-		tag.setAllowAddToLeft("true");
-		tag.setAllowAddToRight("true");
-		tag.setAllowSelectAll("true");
-		
-		tag.setAddAllToLeftLabel("All Left");
-		tag.setAddAllToRightLabel("All Right");
-		tag.setAddToLeftLabel("Left");
-		tag.setAddToRightLabel("Right");
-		tag.setSelectAllLabel("Select All");
-		
-		tag.setLeftTitle("Title Left");
-		tag.setRightTitle("Title Right");
-		
-		tag.setButtonCssClass("buttonCssClass");
-		tag.setButtonCssStyle("buttonCssStyle");
-		
-		tag.setHeaderKey("Header Key");
-		tag.setHeaderValue("Header Value");
-		
-		tag.setDoubleHeaderKey("Double Header Key");
-		tag.setDoubleHeaderValue("Double Header Value");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		//System.out.println(writer.toString());
-		verify(OptionTransferSelectTagTest.class.getResource("optiontransferselect-6.txt"));
-	}
-	
-	public void testDisableSomeButtons() throws Exception {
-		List left = new ArrayList();
-		left.add("Left2");
-		
-		List right = new ArrayList();
-		right.add("Right2");
-		
-		List leftVal = new ArrayList();
-		leftVal.add("Left1");
-		leftVal.add("Left2");
-		leftVal.add("Left3");
-		
-		List rightVal = new ArrayList();
-		rightVal.add("Right1");
-		rightVal.add("Right2");
-		rightVal.add("Right3");
-		
-		
-		TestAction testaction = (TestAction) action;
-		testaction.setCollection(left);
-		testaction.setList2(right);
-		testaction.setCollection2(leftVal);
-		testaction.setList3(rightVal);
-		
-		
-		OptionTransferSelectTag tag = new OptionTransferSelectTag();
-		tag.setPageContext(pageContext);
-		
-		tag.setName("collection");
-		tag.setId("id");
-		tag.setList("collection2");
-		tag.setSize("20");
-		tag.setMultiple("true");
-		tag.setEmptyOption("true");
-		
-		tag.setDoubleName("list2");
-		tag.setDoubleList("list3");
-		tag.setDoubleId("doubleId");
-		tag.setDoubleSize("20");
-		tag.setMultiple("true");
-		tag.setDoubleEmptyOption("true");
-		
-		tag.setAllowAddAllToLeft("false");
-		tag.setAllowAddAllToRight("false");
-		tag.setAllowAddToLeft("true");
-		tag.setAllowAddToRight("true");
-		tag.setAllowSelectAll("false");
-		
-		tag.setAddAllToLeftLabel("All Left");
-		tag.setAddAllToRightLabel("All Right");
-		tag.setAddToLeftLabel("Left");
-		tag.setAddToRightLabel("Right");
-		tag.setSelectAllLabel("Select All");
-		
-		tag.setLeftTitle("Title Left");
-		tag.setRightTitle("Title Right");
-		
-		tag.setButtonCssClass("buttonCssClass");
-		tag.setButtonCssStyle("buttonCssStyle");
-		
-		tag.setHeaderKey("Header Key");
-		tag.setHeaderValue("Header Value");
-		
-		tag.setDoubleHeaderKey("Double Header Key");
-		tag.setDoubleHeaderValue("Double Header Value");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		//System.out.println(writer.toString());
-		verify(OptionTransferSelectTagTest.class.getResource("optiontransferselect-7.txt"));
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/PasswordTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/PasswordTest.java
deleted file mode 100644
index 66d33d3..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/PasswordTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class PasswordTest extends AbstractUITagTest {
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        PasswordTag tag = new PasswordTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setTitle("mytitle");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(PasswordTag.class.getResource("Password-1.txt"));
-    }
-
-    public void testGenericSimple() throws Exception {
-        PasswordTag tag = new PasswordTag();
-        verifyGenericProperties(tag, "simple", new String[]{"value"});
-    }
-
-    public void testGenericXhtml() throws Exception {
-        PasswordTag tag = new PasswordTag();
-        verifyGenericProperties(tag, "xhtml", new String[]{"value"});
-    }
-
-    public void testGenericAjax() throws Exception {
-        PasswordTag tag = new PasswordTag();
-        verifyGenericProperties(tag, "ajax", new String[]{"value"});
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java
deleted file mode 100644
index 541c8b3..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class RadioTest extends AbstractUITagTest {
-	
-	public void testMapWithBooleanAsKey() throws Exception {
-		TestAction testAction = (TestAction) action;
-		
-		HashMap map = new LinkedHashMap();
-		map.put(Boolean.TRUE, "male");
-		map.put(Boolean.FALSE, "female");
-		testAction.setMap(map);
-		
-		RadioTag tag = new RadioTag();
-		tag.setPageContext(pageContext);
-		tag.setLabel("mylabel");
-		tag.setName("myname");
-		tag.setValue("%{'true'}");
-		tag.setList("map");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(RadioTag.class.getResource("Radio-3.txt"));
-	}
-	
-
-    public void testMapChecked() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        HashMap map = new HashMap();
-        map.put("1", "One");
-        map.put("2", "Two");
-        testAction.setMap(map);
-
-        RadioTag tag = new RadioTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setValue("\"1\"");
-        tag.setList("map");
-        tag.setListKey("key");
-        tag.setListValue("value");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(RadioTag.class.getResource("Radio-2.txt"));
-    }
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-        testAction.setList(new String[][]{
-                {"hello", "world"},
-                {"foo", "bar"}
-        });
-
-        RadioTag tag = new RadioTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setValue("");
-        tag.setList("list");
-        tag.setListKey("top[0]");
-        tag.setListValue("top[1]");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(RadioTag.class.getResource("Radio-1.txt"));
-    }
-
-    public void testGenericSimple() throws Exception {
-        RadioTag tag = new RadioTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "simple", new String[]{"id","value"});
-    }
-
-    public void testGenericXhtml() throws Exception {
-        RadioTag tag = new RadioTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "xhtml", new String[]{"id","value"});
-    }
-
-    public void testGenericAjax() throws Exception {
-        RadioTag tag = new RadioTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "ajax", new String[]{"id","value"});
-    }
-
-    private void prepareTagGeneric(RadioTag tag) {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-        testAction.setList(new String[][]{
-                {"hello", "world"},
-                {"foo", "bar"}
-        });
-        tag.setList("list");
-        tag.setListKey("top[0]");
-        tag.setListValue("top[1]");
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ResetTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ResetTest.java
deleted file mode 100644
index df333e2..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/ResetTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-/**
- * Reset Component Test.
- *
- */
-public class ResetTest extends AbstractUITagTest {
-
-    public void testDefaultValues() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        ResetTag tag = new ResetTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setTitle("mytitle");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Reset-2.txt"));
-    }
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        ResetTag tag = new ResetTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setAlign("left");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Reset-1.txt"));
-    }
-
-    public void testButtonSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        ResetTag tag = new ResetTag();
-        tag.setPageContext(pageContext);
-        tag.setType("button");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Reset-3.txt"));
-    }
-
-    public void testButtonWithLabel() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        ResetTag tag = new ResetTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setType("button");
-        tag.setAlign("left");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Reset-4.txt"));
-    }
-
-    /**
-     * Initialize a map of {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder} for generic tag
-     * property testing. Will be used when calling {@link #verifyGenericProperties(AbstractUITag,
-     * String, String[])} as properties to verify.<p/> This implementation extends testdata from AbstractUITag.
-     *
-     * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()}
-     *         as key.
-     */
-    protected Map initializedGenericTagTestProperties() {
-        Map result = new HashMap();
-        new PropertyHolder("title", "someTitle").addToMap(result);
-        new PropertyHolder("cssClass", "cssClass1", "class=\"cssClass1\"").addToMap(result);
-        new PropertyHolder("cssStyle", "cssStyle1", "style=\"cssStyle1\"").addToMap(result);
-        new PropertyHolder("name", "someName").addToMap(result);
-        new PropertyHolder("value", "someValue").addToMap(result);
-        return result;
-    }
-
-    public void testGenericSimple() throws Exception {
-        ResetTag tag = new ResetTag();
-        verifyGenericProperties(tag, "simple", null);
-    }
-
-    public void testGenericXhtml() throws Exception {
-        ResetTag tag = new ResetTag();
-        verifyGenericProperties(tag, "xhtml", null);
-    }
-
-    public void testGenericAjax() throws Exception {
-        ResetTag tag = new ResetTag();
-        verifyGenericProperties(tag, "ajax", null);
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java
deleted file mode 100644
index 43f9965..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class SelectTest extends AbstractUITagTest {
-	
-	
-	public void testHeaderCanBePreselected() throws Exception {
-		SelectTag tag = new SelectTag();
-		tag.setPageContext(pageContext);
-		tag.setLabel("myLabel");
-		tag.setList("#{1:'Cat',2:'Dog'}");
-		tag.setName("myPet");
-		tag.setHeaderKey("-1");
-		tag.setHeaderValue("--- Please Select ---");
-		tag.setValue("%{'-1'}");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(SelectTag.class.getResource("Select-8.txt"));
-	}
-
-    /**
-     * Tests WW-455: Select tag template does not work properly for Object like BigDecimal.
-     */
-    public void testBigDecimal() throws Exception {
-        BigDecimalObject hello = new BigDecimalObject("hello", new BigDecimal(1));
-        BigDecimalObject foo = new BigDecimalObject("foo", new BigDecimal(2));
-
-        TestAction testAction = (TestAction) action;
-
-        Collection collection = new ArrayList(2);
-        // expect strings to be returned, we're still dealing with HTTP here!
-        collection.add("hello");
-        collection.add("foo");
-        testAction.setCollection(collection);
-
-        List list2 = new ArrayList();
-        list2.add(hello);
-        list2.add(foo);
-        list2.add(new BigDecimalObject("<cat>", new BigDecimal(1.500)));
-        testAction.setList2(list2);
-
-        SelectTag tag = new SelectTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("collection");
-        tag.setList("list2");
-        tag.setListKey("name");
-        tag.setListValue("bigDecimal");
-        tag.setMultiple("true");
-        tag.setTitle("mytitle");
-        tag.setOnmousedown("alert('onmousedown');");
-        tag.setOnmousemove("alert('onmousemove');");
-        tag.setOnmouseout("alert('onmouseout');");
-        tag.setOnmouseover("alert('onmouseover');");
-        tag.setOnmouseup("alert('onmouseup');");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(SelectTag.class.getResource("Select-3.txt"));
-    }
-
-    public class BigDecimalObject {
-        private String name;
-        private BigDecimal bigDecimal;
-
-        public BigDecimalObject(String name, BigDecimal bigDecimal) {
-            this.name = name;
-            this.bigDecimal = bigDecimal;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public BigDecimal getBigDecimal() {
-            return bigDecimal;
-        }
-    }
-    
-    public void testNullList() throws Exception {
-    	TestAction testAction = (TestAction) action;
-    	testAction.setList2(null);
-    	
-    	SelectTag tag = new SelectTag();
-    	tag.setName("collection");
-    	tag.setList("list2");
-    	tag.setLabel("tmjee_name");
-    	
-    	tag.setPageContext(pageContext);
-    	try {
-    		tag.doStartTag();
-    		tag.doEndTag();
-    		fail("exception should have been thrown value of select tag is null");
-    	}
-    	catch(Exception e) {
-    		assertTrue(true);
-    	}
-    }
-    
-
-    public void testEmptyList() throws Exception {
-    	TestAction testAction = (TestAction) action;
-    	testAction.setList2(new ArrayList());
-    	
-    	SelectTag tag = new SelectTag();
-    	tag.setName("collection");
-    	tag.setList("list2");
-    	tag.setLabel("tmjee_name");
-    	
-    	tag.setPageContext(pageContext);
-    	tag.doStartTag();
-    	tag.doEndTag();
-    	
-    	verify(SelectTag.class.getResource("Select-4.txt"));
-    }
-    
-    public void testMultiple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        Collection collection = new ArrayList(2);
-        collection.add("hello");
-        collection.add("foo");
-        testAction.setCollection(collection);
-        testAction.setList(new String[][]{
-                {"hello", "world"},
-                {"foo", "bar"},
-                {"cat", "dog"}
-        });
-
-        SelectTag tag = new SelectTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("collection");
-        tag.setList("list");
-        tag.setListKey("top[0]");
-        tag.setListValue("top[1]");
-        tag.setMultiple("true");
-        tag.setOnmousedown("alert('onmousedown');");
-        tag.setOnmousemove("alert('onmousemove');");
-        tag.setOnmouseout("alert('onmouseout');");
-        tag.setOnmouseover("alert('onmouseover');");
-        tag.setOnmouseup("alert('onmouseup');");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(SelectTag.class.getResource("Select-2.txt"));
-    }
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("hello");
-        testAction.setList(new String[][]{
-                {"hello", "world"},
-                {"foo", "bar"}
-        });
-
-        SelectTag tag = new SelectTag();
-        tag.setPageContext(pageContext);
-        tag.setEmptyOption("true");
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setList("list");
-        tag.setListKey("top[0]");
-        tag.setListValue("top[1]");
-
-        // header stuff
-        tag.setHeaderKey("headerKey");
-        tag.setHeaderValue("headerValue");
-
-        // empty option
-        tag.setEmptyOption("true");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(SelectTag.class.getResource("Select-1.txt"));
-    }
-
-    public void testExtended() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("hello");
-        testAction.setList(new String[][]{
-                {"hello", "world"},
-                {"foo", "bar"}
-        });
-
-        SelectTag tag = new SelectTag();
-        tag.setPageContext(pageContext);
-        tag.setEmptyOption("true");
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setList("list");
-        tag.setListKey("top[0]");
-        tag.setListValue("%{top[0] + ' - ' + top[1]}");
-
-        // header stuff
-        tag.setHeaderKey("headerKey");
-        tag.setHeaderValue("%{foo + ': headerValue'}");
-
-        // empty option
-        tag.setEmptyOption("true");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(SelectTag.class.getResource("Select-7.txt"));
-     }
-
-    public void testGenericSimple() throws Exception {
-        SelectTag tag = new SelectTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "simple", new String[]{"value"});
-    }
-
-    public void testGenericXhtml() throws Exception {
-        SelectTag tag = new SelectTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "xhtml", new String[]{"value"});
-    }
-
-    public void testGenericAjax() throws Exception {
-        SelectTag tag = new SelectTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "ajax", new String[]{"value"});
-    }
-    
-    public void testMultipleOn() throws Exception {
-    	SelectTag tag = new SelectTag();
-    	tag.setPageContext(pageContext);
-    	tag.setLabel("media1");
-    	tag.setId("myId");
-    	tag.setEmptyOption("true");
-    	tag.setName("myName");
-    	tag.setMultiple("true");
-    	tag.setList("{'aaa','bbb'}");
-    	
-    	tag.doStartTag();
-    	tag.doEndTag();
-    	
-    	verify(SelectTag.class.getResource("Select-5.txt"));
-    }
-    
-    public void testMultipleOff() throws Exception {
-    	SelectTag tag = new SelectTag();
-    	tag.setPageContext(pageContext);
-    	tag.setLabel("media2");
-    	tag.setId("myId");
-    	tag.setEmptyOption("true");
-    	tag.setName("myName");
-    	tag.setMultiple("false");
-    	tag.setList("{'aaa','bbb'}");
-    	
-    	tag.doStartTag();
-    	tag.doEndTag();
-    	
-    	verify(SelectTag.class.getResource("Select-6.txt"));
-    }
-
-    private void prepareTagGeneric(SelectTag tag) {
-        TestAction testAction = (TestAction) action;
-        ArrayList collection = new ArrayList();
-        collection.add("foo");
-        collection.add("bar");
-        collection.add("baz");
-
-        testAction.setCollection(collection);
-
-        tag.setList("collection");
-    }
-    
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/StrutsBodyContent.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/StrutsBodyContent.java
deleted file mode 100644
index 6a9968f..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/StrutsBodyContent.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.Writer;
-
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.tagext.BodyContent;
-
-
-/**
- * StrutsBodyContent
- */
-public class StrutsBodyContent extends BodyContent {
-
-    private StringBuffer buffer = new StringBuffer();
-
-
-    public StrutsBodyContent(JspWriter jspWriter) {
-        super(jspWriter);
-    }
-
-
-    public Reader getReader() {
-        return new StringReader(buffer.toString());
-    }
-
-    public int getRemaining() {
-        return 0;
-    }
-
-    public String getString() {
-        return buffer.toString();
-    }
-
-    public void clear() throws IOException {
-        buffer = new StringBuffer();
-    }
-
-    public void clearBuffer() throws IOException {
-        clear();
-    }
-
-    public void close() throws IOException {
-        buffer = null;
-    }
-
-    public void newLine() throws IOException {
-        buffer.append("\n");
-    }
-
-    public void print(boolean b) throws IOException {
-        buffer.append(b);
-    }
-
-    public void print(char c) throws IOException {
-        buffer.append(c);
-    }
-
-    public void print(int i) throws IOException {
-        buffer.append(i);
-    }
-
-    public void print(long l) throws IOException {
-        buffer.append(l);
-    }
-
-    public void print(float v) throws IOException {
-        buffer.append(v);
-    }
-
-    public void print(double v) throws IOException {
-        buffer.append(v);
-    }
-
-    public void print(char[] chars) throws IOException {
-        buffer.append(chars);
-    }
-
-    public void print(String s) throws IOException {
-        buffer.append(s);
-    }
-
-    public void print(Object o) throws IOException {
-        buffer.append(o);
-    }
-
-    public void println() throws IOException {
-        newLine();
-    }
-
-    public void println(boolean b) throws IOException {
-        print(b);
-        newLine();
-    }
-
-    public void println(char c) throws IOException {
-        print(c);
-        newLine();
-    }
-
-    public void println(int i) throws IOException {
-        print(i);
-        newLine();
-    }
-
-    public void println(long l) throws IOException {
-        print(l);
-        newLine();
-    }
-
-    public void println(float v) throws IOException {
-        print(v);
-        newLine();
-    }
-
-    public void println(double v) throws IOException {
-        print(v);
-        newLine();
-    }
-
-    public void println(char[] chars) throws IOException {
-        print(chars);
-        newLine();
-    }
-
-    public void println(String s) throws IOException {
-        print(s);
-        newLine();
-    }
-
-    public void println(Object o) throws IOException {
-        print(o);
-        newLine();
-    }
-
-    /**
-     * Write a portion of an array of characters.
-     *
-     * @param cbuf Array of characters
-     * @param off  Offset from which to start writing characters
-     * @param len  Number of characters to write
-     * @throws IOException If an I/O error occurs
-     */
-    public void write(char[] cbuf, int off, int len) throws IOException {
-        buffer.append(cbuf, off, len);
-    }
-
-    public void writeOut(Writer writer) throws IOException {
-        writer.write(buffer.toString());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java
deleted file mode 100644
index 91d1e2f..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-/**
- * Test Submit component in "ajax" theme.
- */
-public class SubmitAjaxTest extends AbstractUITagTest {
-	
-	public void testSimple() throws Exception {
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-
-        tag.setId("mylink");
-        tag.setValue("submit");
-        tag.setTheme("ajax");
-        tag.setResultDivId("formId");
-        tag.setOnLoadJS("alert('form submitted');");
-        tag.setListenTopics("a");
-        tag.setNotifyTopics("b");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(AnchorTest.class.getResource("submit-ajax-1.txt"));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitTest.java
deleted file mode 100644
index 9f32765..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitTest.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- * Unit test for {@link SubmitTag}.
- *
- */
-public class SubmitTest extends AbstractUITagTest {
-
-    public void testDefaultValues() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setTitle("mytitle");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Submit-2.txt"));
-    }
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setAlign("left");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Submit-1.txt"));
-    }
-
-    public void testButtonSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-        tag.setType("button");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Submit-3.txt"));
-    }
-
-    public void testButtonWithLabel() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setType("button");
-        tag.setAlign("left");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Submit-4.txt"));
-    }
-
-    public void testImageSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-        tag.setType("image");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Submit-5.txt"));
-    }
-
-    public void testImageWithSrc() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-        tag.setType("image");
-        tag.setName("myname");
-        tag.setLabel("mylabel");
-        tag.setValue("%{foo}");
-        tag.setSrc("some.gif");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Submit-6.txt"));
-    }
-
-    public void testSimpleThemeImageUsingActionAndMethod() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-        tag.setTheme("simple");
-        tag.setType("button");
-        tag.setName("myname");
-        tag.setLabel("mylabel");
-        tag.setAction("manager");
-        tag.setMethod("update");
-        tag.setAlign("left");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("<button type=\"submit\" id=\"myname\" name=\"action:manager!update\" value=\"Submit\">mylabel</button>", writer.toString().trim());
-    }
-
-    public void testSimpleThemeImageUsingActionOnly() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-        tag.setTheme("simple");
-        tag.setType("button");
-        tag.setName("myname");
-        tag.setLabel("mylabel");
-        tag.setAction("manager");
-        tag.setMethod(null); // no method
-        tag.setAlign("left");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("<button type=\"submit\" id=\"myname\" name=\"action:manager\" value=\"Submit\">mylabel</button>", writer.toString().trim());
-    }
-
-    public void testSimpleThemeImageUsingMethodOnly() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-        tag.setTheme("simple");
-        tag.setType("button");
-        tag.setName("myname");
-        tag.setLabel("mylabel");
-        tag.setAction(null); // no action
-        tag.setMethod("update");
-        tag.setAlign("left");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("<button type=\"submit\" id=\"myname\" name=\"method:update\" value=\"Submit\">mylabel</button>", writer.toString().trim());
-    }
-
-    public void testSimpleThemeInput() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        SubmitTag tag = new SubmitTag();
-        tag.setPageContext(pageContext);
-        tag.setTheme("simple");
-        tag.setType("input");
-        tag.setName("myname");
-        tag.setLabel("mylabel");
-        tag.setAction(null);
-        tag.setMethod(null);
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        assertEquals("<input type=\"submit\" id=\"myname\" name=\"myname\" value=\"Submit\"/>", writer.toString().trim());
-    }
-
-    /**
-     * Initialize a map of {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder} for generic tag
-     * property testing. Will be used when calling {@link #verifyGenericProperties(org.apache.struts2.views.jsp.ui.AbstractUITag,
-     * String, String[])} as properties to verify.<p/> This implementation extends testdata from AbstractUITag.
-     *
-     * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()}
-     *         as key.
-     */
-    protected Map initializedGenericTagTestProperties() {
-        Map result = new HashMap();
-        new PropertyHolder("title", "someTitle").addToMap(result);
-        new PropertyHolder("cssClass", "cssClass1", "class=\"cssClass1\"").addToMap(result);
-        new PropertyHolder("cssStyle", "cssStyle1", "style=\"cssStyle1\"").addToMap(result);
-        new PropertyHolder("name", "someName").addToMap(result);
-        new PropertyHolder("value", "someValue").addToMap(result);
-        return result;
-    }
-
-    public void testGenericSimple() throws Exception {
-        SubmitTag tag = new SubmitTag();
-        verifyGenericProperties(tag, "simple", null);
-    }
-
-    public void testGenericXhtml() throws Exception {
-        SubmitTag tag = new SubmitTag();
-        verifyGenericProperties(tag, "xhtml", null);
-    }
-
-    public void testGenericAjax() throws Exception {
-        SubmitTag tag = new SubmitTag();
-        verifyGenericProperties(tag, "ajax", null);
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TestAction1.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TestAction1.java
deleted file mode 100644
index 7ebcacb..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TestAction1.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * TestAction1
- *
- */
-public class TestAction1 extends ActionSupport {
-
-	private static final long serialVersionUID = 2545551979978561327L;
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TextareaTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TextareaTest.java
deleted file mode 100644
index df79971..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TextareaTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.Map;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- */
-public class TextareaTest extends AbstractUITagTest {
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        TextareaTag tag = new TextareaTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-        tag.setRows("30");
-        tag.setCols("20");
-        tag.setTitle("mytitle");
-        tag.setDisabled("true");
-        tag.setTabindex("5");
-        tag.setOnchange("alert('goodbye');");
-        tag.setOnclick("alert('onclick');");
-        tag.setId("the_id");
-        tag.setOnkeyup("alert('hello');");
-        tag.setReadonly("true");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextareaTag.class.getResource("Textarea-1.txt"));
-    }
-
-    /**
-     * Initialize a map of {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder} for generic tag
-     * property testing. Will be used when calling {@link #verifyGenericProperties(org.apache.struts2.views.jsp.ui.AbstractUITag,
-     * String, String[])} as properties to verify.<p/> This implementation extends testdata from AbstractUITag.
-     *
-     * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()}
-     *         as key.
-     */
-    protected Map initializedGenericTagTestProperties() {
-        Map result = super.initializedGenericTagTestProperties();
-        new PropertyHolder("cols", "10").addToMap(result);
-        new PropertyHolder("rows", "11").addToMap(result);
-        new PropertyHolder("readonly", "true", "readonly=\"readonly\"").addToMap(result);
-        new PropertyHolder("wrap", "soft").addToMap(result);
-        return result;
-    }
-
-    public void testGenericSimple() throws Exception {
-        TextareaTag tag = new TextareaTag();
-        verifyGenericProperties(tag, "simple", new String[] {"value"});
-    }
-
-    public void testGenericXhtml() throws Exception {
-        TextareaTag tag = new TextareaTag();
-        verifyGenericProperties(tag, "xhtml", new String[] {"value"});
-    }
-
-    public void testGenericAjax() throws Exception {
-        TextareaTag tag = new TextareaTag();
-        verifyGenericProperties(tag, "ajax", new String[] {"value"});
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java
deleted file mode 100644
index 5796b1e..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.freemarker.tags.TextFieldModel;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-import freemarker.template.TransformControl;
-
-
-/**
- */
-public class TextfieldTest extends AbstractUITagTest {
-
-    /**
-     * Initialize a map of {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder} for generic tag
-     * property testing. Will be used when calling {@link #verifyGenericProperties(org.apache.struts2.views.jsp.ui.AbstractUITag,
-     * String, String[])} as properties to verify.<p/> This implementation extends testdata from AbstractUITag.
-     *
-     * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()}
-     *         as key.
-     */
-    protected Map initializedGenericTagTestProperties() {
-        Map result = super.initializedGenericTagTestProperties();
-        new PropertyHolder("maxlength", "10").addToMap(result);
-        new PropertyHolder("readonly", "true", "readonly=\"readonly\"").addToMap(result);
-        new PropertyHolder("size", "12").addToMap(result);
-        return result;
-    }
-
-    public void testGenericSimple() throws Exception {
-        TextFieldTag tag = new TextFieldTag();
-        verifyGenericProperties(tag, "simple", null);
-    }
-
-    public void testGenericXhtml() throws Exception {
-        TextFieldTag tag = new TextFieldTag();
-        verifyGenericProperties(tag, "xhtml", null);
-    }
-
-    public void testGenericAjax() throws Exception {
-        TextFieldTag tag = new TextFieldTag();
-        verifyGenericProperties(tag, "ajax", null);
-    }
-
-    public void testErrors() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        TextFieldTag tag = new TextFieldTag();
-        tag.setPageContext(pageContext);
-        tag.setId("myId");
-        tag.setLabel("mylabel");
-        tag.setName("foo");
-        tag.setValue("bar");
-        tag.setTitle("mytitle");
-
-        testAction.addFieldError("foo", "bar error message");
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Textfield-2.txt"));
-    }
-
-    public void testNoLabelJsp() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        TextFieldTag tag = new TextFieldTag();
-        tag.setPageContext(pageContext);
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-        tag.setSize("10");
-        tag.setOnblur("blahescape('somevalue');");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Textfield-3.txt"));
-    }
-
-    public void testNoLabelFtl() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        TextFieldModel model = new TextFieldModel(stack, request, response);
-        HashMap params = new HashMap();
-        params.put("name", "myname");
-        params.put("value", "%{foo}");
-        params.put("size", "10");
-        params.put("onblur", "blahescape('somevalue');");
-        TransformControl control = (TransformControl) model.getWriter(writer, params);
-        control.onStart();
-        control.afterBody();
-
-        verify(TextFieldTag.class.getResource("Textfield-3.txt"));
-    }
-
-    public void testSimple() throws Exception {
-        TestAction testAction = (TestAction) action;
-        testAction.setFoo("bar");
-
-        TextFieldTag tag = new TextFieldTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("mylabel");
-        tag.setName("myname");
-        tag.setValue("%{foo}");
-        tag.setSize("10");
-
-        tag.doStartTag();
-        tag.doEndTag();
-
-        verify(TextFieldTag.class.getResource("Textfield-1.txt"));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java
deleted file mode 100644
index 500519e..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import javax.servlet.jsp.JspException;
-
-import org.apache.struts2.util.TokenHelper;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-
-/**
- * TokenTagTest
- *
- */
-public class TokenTagTest extends AbstractUITagTest {
-
-    public void testDefaultName() {
-        String tokenName = TokenHelper.DEFAULT_TOKEN_NAME;
-        TokenTag tag = new TokenTag();
-        doTokenTest(tokenName, tag);
-    }
-
-    public void testMultipleTagsWithSameName() {
-        String tokenName = "sameName";
-        TokenTag tag = new TokenTag();
-        tag.setName(tokenName);
-
-        String token = doTokenTest(tokenName, tag);
-
-        TokenTag anotherTag = new TokenTag();
-        anotherTag.setName(tokenName);
-
-        String anotherToken = doTokenTest(tokenName, anotherTag);
-        assertEquals(token, anotherToken);
-    }
-
-    /**
-     * WW-480
-     */
-    public void testNotFindableName() {
-        String tokenName = "foo";
-        TokenTag tag = new TokenTag();
-        tag.setName(tokenName);
-        doTokenTest(tokenName, tag);
-
-        String s = writer.toString();
-        assertTrue(s.indexOf("name=\"" + TokenHelper.DEFAULT_TOKEN_NAME) > -1);
-        assertTrue(s.indexOf("value=\"" + tokenName + "\"") > -1);
-        assertTrue(s.indexOf("name=\"" + tokenName + "\"") > -1);
-
-        //System.out.println(s);
-    }
-
-    public void testSuppliedName() {
-        String tokenName = "my.very.long.token.name";
-        TokenTag tag = new TokenTag();
-        tag.setName(tokenName);
-        doTokenTest(tokenName, tag);
-    }
-
-    private String doTokenTest(String tokenName, TokenTag tag) {
-        tag.setPageContext(pageContext);
-
-        String token = null;
-
-        try {
-            tag.doStartTag();
-            tag.doEndTag();
-
-            token = (String) context.get(tokenName);
-            assertNotNull(token);
-            assertEquals(token, pageContext.getSession().getAttribute(tokenName));
-        } catch (JspException e) {
-            e.printStackTrace();
-            fail();
-        }
-
-        return token;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java
deleted file mode 100644
index 0e1b9ff..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.TestConfigurationProvider;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-import org.apache.struts2.views.jsp.ParamTag;
-import org.apache.struts2.views.jsp.StrutsMockBodyContent;
-
-import com.mockobjects.servlet.MockJspWriter;
-
-/**
- * UI components Tooltip test case.
- */
-public class TooltipTest extends AbstractUITagTest {
-
-    public void testWithoutFormOverriding() throws Exception {
-
-        configurationManager.clearConfigurationProviders();
-        configurationManager.addConfigurationProvider(new TestConfigurationProvider());
-
-        // we test it on textfield component, but since the tooltip are common to
-        // all components, it will be the same for other components as well.
-        FormTag formTag = new FormTag();
-        formTag.setPageContext(pageContext);
-        formTag.setId("myFormId");
-        formTag.setAction("testAction");
-        formTag.setName("myForm");
-
-
-        TextFieldTag tag = new TextFieldTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("MyLabel");
-        tag.setId("myId");
-
-
-        tag.setTooltip("myTooltip");
-        tag.setTooltipConfig(
-                "#{" +
-                        "'tooltipIcon':'/struts/tooltip/myTooltip.gif', " +
-                        "'tooltipDelay':'500', " +
-                        "'jsTooltipEnabled':'true' "+
-                        "}"
-        );
-
-        formTag.doStartTag();
-        tag.doStartTag();
-        tag.doEndTag();
-        formTag.doEndTag();
-
-        verify(TooltipTest.class.getResource("tooltip-1.txt"));
-    }
-
-    public void testWithFormOverriding() throws Exception {
-
-        configurationManager.clearConfigurationProviders();
-        configurationManager.addConfigurationProvider(new TestConfigurationProvider());
-
-        FormTag formTag = new FormTag();
-        formTag.setPageContext(pageContext);
-        formTag.setName("myForm");
-        formTag.setId("myFormId");
-        formTag.setAction("testAction");
-
-        formTag.setTooltipConfig(
-        		"#{" +
-                "'tooltipIcon':'/struts/tooltip/myTooltip.gif', " +
-                "'tooltipDelay':'500', " +
-                "'jsTooltipEnabled':'true' "+
-                "}"
-        );
-
-
-        TextFieldTag tag = new TextFieldTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("MyLabel");
-        tag.setId("myId");
-
-        tag.setTooltip("myTooltip");
-
-        formTag.doStartTag();
-        tag.doStartTag();
-        tag.doEndTag();
-        formTag.doEndTag();
-
-        verify(TooltipTest.class.getResource("tooltip-2.txt"));
-    }
-
-    public void testWithPartialFormOverriding() throws Exception {
-
-        configurationManager.clearConfigurationProviders();
-        configurationManager.addConfigurationProvider(new TestConfigurationProvider());
-
-        FormTag formTag = new FormTag();
-        formTag.setName("myForm");
-        formTag.setPageContext(pageContext);
-        formTag.setId("myFormId");
-        formTag.setAction("testAction");
-
-        formTag.setTooltipConfig(
-        		"#{" +
-                "'tooltipIcon':'/struts/tooltip/myTooltip.gif', " +
-                "'tooltipDelay':'500', " +
-                "'jsTooltipEnabled':'true' "+
-                "}"
-        );
-
-
-        TextFieldTag tag = new TextFieldTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("MyLabel");
-        tag.setId("myId");
-
-        tag.setTooltip("myTooltip");
-        tag.setTooltipConfig(
-        		"#{" +
-                "'tooltipIcon':'/struts/tooltip/myTooltip2.gif', " +
-                "'tooltipDelay':'5000' " +
-                "}"
-        );
-
-        formTag.doStartTag();
-        tag.doStartTag();
-        tag.doEndTag();
-        formTag.doEndTag();
-
-        verify(TooltipTest.class.getResource("tooltip-3.txt"));
-    }
-
-
-    public void testUsingParamValueToSetConfigurations() throws Exception {
-        configurationManager.clearConfigurationProviders();
-        configurationManager.addConfigurationProvider(new TestConfigurationProvider());
-
-        FormTag formTag = new FormTag();
-        formTag.setName("myForm");
-        formTag.setPageContext(pageContext);
-        formTag.setId("myFormId");
-        formTag.setAction("testAction");
-
-
-        ParamTag formParamTag = new ParamTag();
-        formParamTag.setPageContext(pageContext);
-        formParamTag.setName("tooltipConfig");
-        formParamTag.setValue(
-        		"#{" +
-                "'tooltipIcon':'/struts/tooltip/myTooltip.gif', " +
-                "'tooltipDelay':'500', " +
-                "'jsTooltipEnabled':'true' "+
-                "}"
-        );
-
-
-        TextFieldTag tag = new TextFieldTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("MyLabel");
-        tag.setId("myId");
-        tag.setTooltip("myTooltip");
-
-        ParamTag textFieldParamTag = new ParamTag();
-        textFieldParamTag.setPageContext(pageContext);
-        textFieldParamTag.setName("tooltipConfig");
-        textFieldParamTag.setValue(
-        		"#{" +
-                "'tooltipIcon':'/struts/tooltip/myTooltip2.gif', " +
-                "'tooltipDelay':'5000' "+
-                "}"
-        );
-
-        formTag.doStartTag();
-        formParamTag.doStartTag();
-        formParamTag.doEndTag();
-        tag.doStartTag();
-        textFieldParamTag.doStartTag();
-        textFieldParamTag.doEndTag();
-        tag.doEndTag();
-        formTag.doEndTag();
-
-        verify(TooltipTest.class.getResource("tooltip-3.txt"));
-    }
-
-
-    public void testUsingParamBodyValueToSetConfigurations() throws Exception {
-        configurationManager.clearConfigurationProviders();
-        configurationManager.addConfigurationProvider(new TestConfigurationProvider());
-
-        FormTag formTag = new FormTag();
-        formTag.setName("myForm");
-        formTag.setPageContext(pageContext);
-        formTag.setId("myFormId");
-        formTag.setAction("testAction");
-
-
-        ParamTag formParamTag = new ParamTag();
-        formParamTag.setPageContext(pageContext);
-        formParamTag.setName("tooltipConfig");
-        StrutsMockBodyContent bodyContent = new StrutsMockBodyContent(new MockJspWriter());
-        bodyContent.setString(
-                "tooltipIcon=/struts/tooltip/myTooltip.gif| " +
-                "tooltipDelay=500| " +
-                "jsTooltipEnabled=true "
-        );
-        formParamTag.setBodyContent(bodyContent);
-
-        TextFieldTag tag = new TextFieldTag();
-        tag.setPageContext(pageContext);
-        tag.setLabel("MyLabel");
-        tag.setId("myId");
-        tag.setTooltip("myTooltip");
-
-
-        ParamTag textFieldParamTag = new ParamTag();
-        textFieldParamTag.setPageContext(pageContext);
-        textFieldParamTag.setName("tooltipConfig");
-        StrutsMockBodyContent bodyContent2 = new StrutsMockBodyContent(new MockJspWriter());
-        bodyContent2.setString(
-                "tooltipIcon=/struts/tooltip/myTooltip2.gif| " +
-                "tooltipDelay=5000 "
-        );
-        textFieldParamTag.setBodyContent(bodyContent2);
-
-        formTag.doStartTag();
-        formParamTag.doStartTag();
-        formParamTag.doEndTag();
-        tag.doStartTag();
-        textFieldParamTag.doStartTag();
-        textFieldParamTag.doEndTag();
-        tag.doEndTag();
-        formTag.doEndTag();
-        
-        System.out.println(writer.toString());
-
-        verify(TooltipTest.class.getResource("tooltip-3.txt"));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TreeTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TreeTest.java
deleted file mode 100644
index e1563b1..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TreeTest.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Test case for Tree component.
- */
-public class TreeTest extends AbstractUITagTest{
-	
-	public void testStaticTree() throws Exception {
-		// Root
-		TreeTag tag = new TreeTag();
-		tag.setShowRootGrid("false");
-		tag.setShowGrid("false");
-		tag.setTemplateCssPath("/struts/tree.css");
-		tag.setTheme("ajax");
-		tag.setPageContext(pageContext);
-		tag.setId("rootId");
-		tag.setLabel("Root");
-		tag.doStartTag();
-		
-			// Child 1
-			TreeNodeTag nodeTag1 = new TreeNodeTag();
-			nodeTag1.setTheme("ajax");
-			nodeTag1.setPageContext(pageContext);
-			nodeTag1.setId("child1");
-			nodeTag1.setLabel("Child 1");
-			nodeTag1.doStartTag();
-			nodeTag1.doEndTag();
-			
-			// Child 2
-			TreeNodeTag nodeTag2 = new TreeNodeTag();
-			nodeTag2.setTheme("ajax");
-			nodeTag2.setPageContext(pageContext);
-			nodeTag2.setId("child2");
-			nodeTag2.setLabel("Child 2");
-			nodeTag2.doStartTag();
-			
-				// Grand Child 1
-				TreeNodeTag gNodeTag1 = new TreeNodeTag();
-				gNodeTag1.setTheme("ajax");
-				gNodeTag1.setPageContext(pageContext);
-				gNodeTag1.setId("gChild1");
-				gNodeTag1.setLabel("Grand Child 1");
-				gNodeTag1.doStartTag();
-				gNodeTag1.doEndTag();
-			
-				// Grand Child 2
-				TreeNodeTag gNodeTag2 = new TreeNodeTag();
-				gNodeTag2.setTheme("ajax");
-				gNodeTag2.setPageContext(pageContext);
-				gNodeTag2.setId("gChild2");
-				gNodeTag2.setLabel("Grand Child 2");
-				gNodeTag2.doStartTag();
-				gNodeTag2.doEndTag();
-			
-				// Grand Child 3
-				TreeNodeTag gNodeTag3= new TreeNodeTag();
-				gNodeTag3.setTheme("ajax");
-				gNodeTag3.setPageContext(pageContext);
-				gNodeTag3.setId("gChild3");
-				gNodeTag3.setLabel("Grand Child 3");
-				gNodeTag3.doStartTag();
-				gNodeTag3.doEndTag();
-				
-			nodeTag2.doEndTag();
-			
-			
-			// Child 3
-			TreeNodeTag nodeTag3 = new TreeNodeTag();
-			nodeTag3.setTheme("ajax");
-			nodeTag3.setPageContext(pageContext);
-			nodeTag3.setId("child3");
-			nodeTag3.setLabel("Child 4");
-			nodeTag3.doStartTag();
-			nodeTag3.doEndTag();
-			
-		tag.doEndTag();
-		
-		//System.out.println(writer.toString());
-		verify(TreeTest.class.getResource("tree-1.txt"));
-	}
-	
-	
-	
-	public void testDynamicTree() throws Exception {
-		
-		TreeTag tag = new TreeTag();
-		tag.setPageContext(pageContext);
-		tag.setTheme("ajax");
-		tag.setId("myTree");
-		tag.setRootNode("%{myTreeRoot}");
-		tag.setNodeIdProperty("id");
-		tag.setNodeTitleProperty("name");
-		tag.setChildCollectionProperty("children");
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		//System.out.println(writer.toString());
-		verify(TreeTest.class.getResource("tree-2.txt"));
-	}
-	
-	
-	public Action getAction() {
-		return new InternalActionSupport();
-	}
-	
-	public static class InternalActionSupport extends ActionSupport {
-		public Category getMyTreeRoot() {
-			return Category.getById(1);
-		}
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/UpDownSelectTagTest.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/UpDownSelectTagTest.java
deleted file mode 100644
index b3cad78..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/UpDownSelectTagTest.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
-/**
- * Test case for UpDownSelectTag 
- * 
- */
-public class UpDownSelectTagTest extends AbstractUITagTest {
-
-	public void testWithAllSelected() throws Exception {
-		
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("myAllSelectedMapIds");
-		tag.setEmptyOption("true");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-1.txt"));
-	}
-	
-	public void testWithPartialSelected() throws Exception {
-		
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("mySelectedMapIds");
-		tag.setEmptyOption("false");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-2.txt"));
-	}
-	
-	public void testWithHeaderAndEmptyOption() throws Exception {
-		
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("mySelectedMapIds");
-		tag.setEmptyOption("true");
-		tag.setHeaderKey("-1");
-		tag.setHeaderValue("--- Please Order ---");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-3.txt"));
-	}
-	
-	public void testWithHeaderOnly() throws Exception {
-		
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("mySelectedMapIds");
-		tag.setEmptyOption("false");
-		tag.setHeaderKey("-1");
-		tag.setHeaderValue("--- Please Order ---");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-4.txt"));
-	}
-	
-	public void testWithEmptyOptionOnly() throws Exception {
-		
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("mySelectedMapIds");
-		tag.setEmptyOption("true");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-5.txt"));
-	}
-	
-	
-	public void testDisableSomeSelectAllButton() throws Exception {
-		
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("mySelectedMapIds");
-		tag.setEmptyOption("true");
-		tag.setAllowSelectAll("false");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-6.txt"));
-	}
-	
-	public void testDisableMoveUpButton() throws Exception {
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("mySelectedMapIds");
-		tag.setEmptyOption("true");
-		tag.setAllowMoveUp("false");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-7.txt"));
-	}
-	
-	public void testDisableMoveDownButton() throws Exception {
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("mySelectedMapIds");
-		tag.setEmptyOption("true");
-		tag.setAllowMoveDown("false");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-8.txt"));
-	}
-	
-	public void testChangeSelectAllButtonText() throws Exception {
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("mySelectedMapIds");
-		tag.setEmptyOption("true");
-		tag.setSelectAllLabel("Select All");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-9.txt"));
-	}
-	
-	public void testChangeMoveUpButtonText() throws Exception {
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("mySelectedMapIds");
-		tag.setEmptyOption("true");
-		tag.setMoveUpLabel("Move Up");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-10.txt"));
-	}
-	
-	public void testChangeMoveDownButtonText() throws Exception {
-		UpDownSelectTag tag = new UpDownSelectTag();
-		tag.setPageContext(pageContext);
-		tag.setId("myId");
-		tag.setName("myName");
-		tag.setList("myMap");
-		tag.setValue("mySelectedMapIds");
-		tag.setEmptyOption("true");
-		tag.setMoveDownLabel("Move Down");
-		
-		tag.doStartTag();
-		tag.doEndTag();
-		
-		verify(UpDownSelectTagTest.class.getResource("updownselecttag-11.txt"));
-	}
-	
-    public void testGenericSimple() throws Exception {
-        UpDownSelectTag tag = new UpDownSelectTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "simple", new String[]{"value"});
-    }
-
-    public void testGenericXhtml() throws Exception {
-        UpDownSelectTag tag = new UpDownSelectTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "xhtml", new String[]{"value"});
-    }
-
-    public void testGenericAjax() throws Exception {
-        UpDownSelectTag tag = new UpDownSelectTag();
-        prepareTagGeneric(tag);
-        verifyGenericProperties(tag, "ajax", new String[]{"value"});
-    }
-
-    private void prepareTagGeneric(UpDownSelectTag tag) {
-        tag.setList("myMap");
-    }
-
-
-	
-	// ===============================
-	public Action getAction() {
-		return new ActionSupport() {
-			
-			public Map getMyMap() {
-				Map _myMap = new LinkedHashMap();
-				_myMap.put("england", "England");
-				_myMap.put("america", "America");
-				_myMap.put("australia", "Australia");
-				_myMap.put("germany", "Germany");
-				return _myMap;
-			}
-			
-			public List getMySelectedMapIds() {
-				List _mySelectedMapIds = new ArrayList();
-				_mySelectedMapIds.add("america");
-				_mySelectedMapIds.add("germany");
-				return _mySelectedMapIds;
-			}
-			
-			public List getMyAllSelectedMapIds() {
-				List _mySelectedMapIds = new ArrayList();
-				_mySelectedMapIds.add("england");
-				_mySelectedMapIds.add("america");
-				_mySelectedMapIds.add("australia");
-				_mySelectedMapIds.add("germany");
-				return _mySelectedMapIds;
-			}
-		};
-	}
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/User.java b/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/User.java
deleted file mode 100644
index 2f5d2fa..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/User.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jsp.ui;
-
-
-/**
- */
-public class User {
-
-    private String name;
-
-
-    public User() {
-    }
-
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getName() {
-        return name;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java b/trunk/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java
deleted file mode 100755
index 1bdab60..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.util;
-
-import junit.framework.TestCase;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-/**
- * Test case for ContextUtil
- * 
- */
-public class ContextUtilTest extends TestCase {
-
-    public void testAltSyntaxMethod1() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.getContext().put("useAltSyntax", "true");
-        
-        Settings.reset();
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");
-        
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "true");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    
-    public void testAltSyntaxMethod2() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.getContext().put("useAltSyntax", "false");
-        
-        Settings.reset();
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");
-        
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "true");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    
-    public void testAltSyntaxMethod3() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.getContext().put("useAltSyntax", "true");
-        
-        Settings.reset();
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "false");
-        
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "false");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    
-    public void testAltSyntaxMethod4() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.getContext().put("useAltSyntax", "false");
-        
-        Settings.reset();
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "false");
-        
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "false");
-        assertFalse(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    
-    //========================================================
-    
-    public void testAltSyntaxMethod5() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.getContext().put("useAltSyntax", Boolean.TRUE);
-        
-        Settings.reset();
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");
-        
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "true");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    public void testAltSyntaxMethod6() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.getContext().put("useAltSyntax", Boolean.FALSE);
-        
-        Settings.reset();
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");
-        
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "true");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    public void testAltSyntaxMethod7() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.getContext().put("useAltSyntax", Boolean.TRUE);
-        
-        Settings.reset();
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "false");
-        
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "false");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    public void testAltSyntaxMethod8() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.getContext().put("useAltSyntax", Boolean.FALSE);
-        
-        Settings.reset();
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "false");
-        
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "false");
-        assertFalse(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    
-    // ==========================================
-    public void testAltSyntaxMethod9() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
-        stack.getContext().put("useAltSyntax", null);
-        
-        Settings.reset();
-        Settings.set(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");
-        
-        assertEquals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX), "true");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/util/ResourceUtilTest.java b/trunk/core/src/test/java/org/apache/struts2/views/util/ResourceUtilTest.java
deleted file mode 100644
index 2ee6c05..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/util/ResourceUtilTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.util;
-/**
- * <code>ResourceUtilTest</code>
- *
- */
-import javax.servlet.http.HttpServletRequest;
-
-import junit.framework.TestCase;
-
-import org.easymock.MockControl;
-
-public class ResourceUtilTest extends TestCase {
-
-    private MockControl control;
-    private HttpServletRequest requestMock;
-
-    public void testGetResourceBase() throws Exception {
-        control.expectAndReturn(requestMock.getServletPath(), "/mycontext/");
-        control.replay();
-        assertEquals("/mycontext", ResourceUtil.getResourceBase(requestMock));
-        control.verify();
-
-        control.reset();
-
-        control.expectAndReturn(requestMock.getServletPath(), "/mycontext/test.jsp");
-        control.replay();
-        assertEquals("/mycontext", ResourceUtil.getResourceBase(requestMock));
-        control.verify();
-
-    }
-
-
-    protected void setUp() {
-        control = MockControl.createControl(HttpServletRequest.class);
-        requestMock = (HttpServletRequest) control.getMock();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/util/TextUtilTest.java b/trunk/core/src/test/java/org/apache/struts2/views/util/TextUtilTest.java
deleted file mode 100644
index f90086d..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/util/TextUtilTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.util;
-
-import junit.framework.TestCase;
-
-/**
- * Unit test for {@link TextUtil}.
- *
- */
-public class TextUtilTest extends TestCase {
-
-    private static char EURO_SIGN = 0x20AC;
-
-    public void testEscape() throws Exception {
-        assertEquals("", TextUtil.escapeHTML(""));
-        assertEquals("   ", TextUtil.escapeHTML("   "));
-
-        assertEquals("Hello World", TextUtil.escapeHTML("Hello World"));
-        assertEquals("Hello &amp; World", TextUtil.escapeHTML("Hello & World"));
-
-        assertEquals("Cost is 1999&euro; and this is cheap", TextUtil.escapeHTML("Cost is 1999" + EURO_SIGN + " and this is cheap"));
-
-        assertEquals("Now some &lt;&gt; and &lt; - &gt; and we have &lt;/ and /&gt;", TextUtil.escapeHTML("Now some <> and < - > and we have </ and />"));
-        assertEquals("&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;", TextUtil.escapeHTML("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
-    }
-
-    public void testEscapeEmpty() throws Exception {
-        assertEquals("", TextUtil.escapeHTML("", true));
-        assertEquals("   ", TextUtil.escapeHTML("   ", true));
-
-        assertEquals("Hello World", TextUtil.escapeHTML("Hello World", true));
-        assertEquals("Hello &amp; World", TextUtil.escapeHTML("Hello & World", true));
-
-        assertEquals("Cost is 1999&euro; and this is cheap", TextUtil.escapeHTML("Cost is 1999" + EURO_SIGN + " and this is cheap", true));
-
-        assertEquals("Now some &lt;&gt; and &lt; - &gt; and we have &lt;/ and /&gt;", TextUtil.escapeHTML("Now some <> and < - > and we have </ and />", true));
-        assertEquals("&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;", TextUtil.escapeHTML("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", true));
-    }
-
-    public void testLongText() throws Exception {
-        // TextUtil behaves special internally for long texts 
-        String s = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" +
-                   "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" +
-                   "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 and now s" +
-                   "ome < that should be escaped. But this text is to long (> 300)";
-        String res = TextUtil.escapeHTML(s);
-        assertEquals(368, res.length());
-        assertTrue(res.indexOf("<") == -1);
-        assertTrue(res.indexOf(">") == -1);
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java b/trunk/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java
deleted file mode 100644
index 62e2f89..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.util;
-
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.TreeMap;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.config.Settings;
-
-import com.mockobjects.dynamic.Mock;
-
-
-/**
- * Test case for UrlHelper.
- * 
- */
-public class UrlHelperTest extends StrutsTestCase {
-	
-	
-	
-	public void testForceAddSchemeHostAndPort() throws Exception {
-		String expectedUrl = "http://localhost/contextPath/path1/path2/myAction.action";
-		
-		Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
-		mockHttpServletRequest.expectAndReturn("getScheme", "http");
-		mockHttpServletRequest.expectAndReturn("getServerName", "localhost");
-        mockHttpServletRequest.expectAndReturn("getContextPath", "/contextPath");
-
-        Mock mockHttpServletResponse = new Mock(HttpServletResponse.class);
-        mockHttpServletResponse.expectAndReturn("encodeURL", expectedUrl, expectedUrl);
-		
-		String result = UrlHelper.buildUrl("/path1/path2/myAction.action", (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse)mockHttpServletResponse.proxy(), null, "http", true, true, true);
-		assertEquals(expectedUrl, result);
-		mockHttpServletRequest.verify();
-	}
-	
-	public void testDoNotForceAddSchemeHostAndPort() throws Exception {
-		String expectedUrl = "/contextPath/path1/path2/myAction.action";
-		
-		Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
-		mockHttpServletRequest.expectAndReturn("getScheme", "http");
-		mockHttpServletRequest.expectAndReturn("getServerName", "localhost");
-        mockHttpServletRequest.expectAndReturn("getContextPath", "/contextPath");
-
-        Mock mockHttpServletResponse = new Mock(HttpServletResponse.class);
-        mockHttpServletResponse.expectAndReturn("encodeURL", expectedUrl, expectedUrl);
-		
-		String result = UrlHelper.buildUrl("/path1/path2/myAction.action", (HttpServletRequest)mockHttpServletRequest.proxy(), (HttpServletResponse)mockHttpServletResponse.proxy(), null, "http", true, true, false);
-		
-		assertEquals(expectedUrl, result);
-	}
-	
-	
-	public void testBuildParametersStringWithUrlHavingSomeExistingParameters() throws Exception {
-		String expectedUrl = "http://localhost:8080/myContext/myPage.jsp?initParam=initValue&amp;param1=value1&amp;param2=value2";
-		
-		Map parameters = new LinkedHashMap();
-		parameters.put("param1", "value1");
-		parameters.put("param2", "value2");
-		
-		StringBuffer url = new StringBuffer("http://localhost:8080/myContext/myPage.jsp?initParam=initValue");
-		
-		UrlHelper.buildParametersString(parameters, url);
-		
-		assertEquals(
-		   expectedUrl, url.toString());
-	}
-	
-	
-
-    public void testBuildWithRootContext() {
-        String expectedUrl = "/MyAction.action";
-
-        Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
-        mockHttpServletRequest.expectAndReturn("getContextPath", "/");
-        mockHttpServletRequest.expectAndReturn("getScheme", "http");
-
-        Mock mockHttpServletResponse = new Mock(HttpServletResponse.class);
-        mockHttpServletResponse.expectAndReturn("encodeURL", expectedUrl, expectedUrl);
-
-        String actualUrl = UrlHelper.buildUrl(expectedUrl, (HttpServletRequest) mockHttpServletRequest.proxy(),
-                (HttpServletResponse) mockHttpServletResponse.proxy(), new HashMap());
-        assertEquals(expectedUrl, actualUrl);
-    }
-
-    /**
-     * just one &, not &amp;
-     */
-    public void testBuildUrlCorrectlyAddsAmp() {
-        String expectedString = "my.actionName?foo=bar&amp;hello=world";
-        Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
-        mockHttpServletRequest.expectAndReturn("getScheme", "http");
-        Mock mockHttpServletResponse = new Mock(HttpServletResponse.class);
-        mockHttpServletResponse.expectAndReturn("encodeURL", expectedString, expectedString);
-
-        String actionName = "my.actionName";
-        TreeMap params = new TreeMap();
-        params.put("hello", "world");
-        params.put("foo", "bar");
-
-        String urlString = UrlHelper.buildUrl(actionName, (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse) mockHttpServletResponse.proxy(), params);
-        assertEquals(expectedString, urlString);
-    }
-
-    public void testBuildUrlWithStringArray() {
-        String expectedString = "my.actionName?foo=bar&amp;hello=earth&amp;hello=mars";
-        Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
-        mockHttpServletRequest.expectAndReturn("getScheme", "http");
-        Mock mockHttpServletResponse = new Mock(HttpServletResponse.class);
-        mockHttpServletResponse.expectAndReturn("encodeURL", expectedString, expectedString);
-
-        String actionName = "my.actionName";
-        TreeMap params = new TreeMap();
-        params.put("hello", new String[]{"earth", "mars"});
-        params.put("foo", "bar");
-
-        String urlString = UrlHelper.buildUrl(actionName, (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse) mockHttpServletResponse.proxy(), params);
-        assertEquals(expectedString, urlString);
-    }
-
-    /**
-     * The UrlHelper should build a URL that starts with "https" followed by the server name when the scheme of the
-     * current request is "http" and the port for the "https" scheme is 443.
-     */
-    public void testSwitchToHttpsScheme() {
-        String expectedString = "https://www.mydomain.com/mywebapp/MyAction.action?foo=bar&amp;hello=earth&amp;hello=mars";
-
-        Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
-        mockHttpServletRequest.expectAndReturn("getServerName", "www.mydomain.com");
-        mockHttpServletRequest.expectAndReturn("getScheme", "http");
-        mockHttpServletRequest.expectAndReturn("getServerPort", 80);
-        mockHttpServletRequest.expectAndReturn("getContextPath", "/mywebapp");
-
-        Mock mockHttpServletResponse = new Mock(HttpServletResponse.class);
-        mockHttpServletResponse.expectAndReturn("encodeURL", expectedString, expectedString);
-
-        String actionName = "/MyAction.action";
-        TreeMap params = new TreeMap();
-        params.put("hello", new String[]{"earth", "mars"});
-        params.put("foo", "bar");
-
-        String urlString = UrlHelper.buildUrl(actionName, (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse) mockHttpServletResponse.proxy(), params, "https", true, true);
-        assertEquals(expectedString, urlString);
-    }
-
-    /**
-     * The UrlHelper should build a URL that starts with "http" followed by the server name when the scheme of the
-     * current request is "https" and the port for the "http" scheme is 80.
-     */
-    public void testSwitchToHttpScheme() {
-        String expectedString = "http://www.mydomain.com/mywebapp/MyAction.action?foo=bar&amp;hello=earth&amp;hello=mars";
-
-        Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
-        mockHttpServletRequest.expectAndReturn("getServerName", "www.mydomain.com");
-        mockHttpServletRequest.expectAndReturn("getScheme", "https");
-        mockHttpServletRequest.expectAndReturn("getServerPort", 443);
-        mockHttpServletRequest.expectAndReturn("getContextPath", "/mywebapp");
-
-        Mock mockHttpServletResponse = new Mock(HttpServletResponse.class);
-        mockHttpServletResponse.expectAndReturn("encodeURL", expectedString, expectedString);
-
-        String actionName = "/MyAction.action";
-        TreeMap params = new TreeMap();
-        params.put("hello", new String[]{"earth", "mars"});
-        params.put("foo", "bar");
-
-        String urlString = UrlHelper.buildUrl(actionName, (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse) mockHttpServletResponse.proxy(), params, "http", true, true);
-        assertEquals(expectedString, urlString);
-    }
-
-    /**
-     * This test is similar to {@link #testSwitchToHttpsScheme()} with the HTTP port equal to 7001 and the HTTPS port
-     * equal to 7002.
-     */
-    public void testSwitchToHttpsNonDefaultPort() {
-
-        String expectedString = "https://www.mydomain.com:7002/mywebapp/MyAction.action?foo=bar&amp;hello=earth&amp;hello=mars";
-
-        Settings.set(StrutsConstants.STRUTS_URL_HTTP_PORT, "7001");
-        Settings.set(StrutsConstants.STRUTS_URL_HTTPS_PORT, "7002");
-
-        Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
-        mockHttpServletRequest.expectAndReturn("getServerName", "www.mydomain.com");
-        mockHttpServletRequest.expectAndReturn("getScheme", "http");
-        mockHttpServletRequest.expectAndReturn("getServerPort", 7001);
-        mockHttpServletRequest.expectAndReturn("getContextPath", "/mywebapp");
-
-        Mock mockHttpServletResponse = new Mock(HttpServletResponse.class);
-        mockHttpServletResponse.expectAndReturn("encodeURL", expectedString, expectedString);
-
-        String actionName = "/MyAction.action";
-        TreeMap params = new TreeMap();
-        params.put("hello", new String[]{"earth", "mars"});
-        params.put("foo", "bar");
-
-        String urlString = UrlHelper.buildUrl(actionName, (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse) mockHttpServletResponse.proxy(), params, "https", true, true);
-        assertEquals(expectedString, urlString);
-    }
-
-    /**
-     * This test is similar to {@link #testSwitchToHttpScheme()} with the HTTP port equal to 7001 and the HTTPS port
-     * equal to port 7002.
-     */
-    public void testSwitchToHttpNonDefaultPort() {
-
-        String expectedString = "http://www.mydomain.com:7001/mywebapp/MyAction.action?foo=bar&amp;hello=earth&amp;hello=mars";
-
-        Settings.set(StrutsConstants.STRUTS_URL_HTTP_PORT, "7001");
-        Settings.set(StrutsConstants.STRUTS_URL_HTTPS_PORT, "7002");
-
-        Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
-        mockHttpServletRequest.expectAndReturn("getServerName", "www.mydomain.com");
-        mockHttpServletRequest.expectAndReturn("getScheme", "https");
-        mockHttpServletRequest.expectAndReturn("getServerPort", 7002);
-        mockHttpServletRequest.expectAndReturn("getContextPath", "/mywebapp");
-
-        Mock mockHttpServletResponse = new Mock(HttpServletResponse.class);
-        mockHttpServletResponse.expectAndReturn("encodeURL", expectedString, expectedString);
-
-        String actionName = "/MyAction.action";
-        TreeMap params = new TreeMap();
-        params.put("hello", new String[]{"earth", "mars"});
-        params.put("foo", "bar");
-
-        String urlString = UrlHelper.buildUrl(actionName, (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse) mockHttpServletResponse.proxy(), params, "http", true, true);
-        assertEquals(expectedString, urlString);
-    }
-
-    /**
-     * The UrlHelper should build a URL that starts with "https" followed by the server name when the scheme of the
-     * current request is "http" and the port for the "https" scheme is 443. When the request has been forwarded
-     * in a Servlet 2.4 container, the UrlHelper should use the javax.servlet.forward.request_uri request attribute
-     * instead of a call to HttpServletRequest#getRequestURI().
-     */
-    public void testForwardedRequest() {
-        String expectedString = "https://www.example.com/mywebapp/product/widget/promo.html";
-
-        Mock mockHttpServletRequest = new Mock(HttpServletRequest.class);
-        mockHttpServletRequest.expectAndReturn("getServerName", "www.example.com");
-        mockHttpServletRequest.expectAndReturn("getScheme", "http");
-        mockHttpServletRequest.expectAndReturn("getServerPort", 80);
-        mockHttpServletRequest.expectAndReturn("getContextPath", "/mywebapp");
-        mockHttpServletRequest.expectAndReturn("getAttribute", "javax.servlet.forward.request_uri", "/mywebapp/product/widget/");
-        mockHttpServletRequest.expectAndReturn("getRequestURI", "/mywebapp/");
-
-        Mock mockHttpServletResponse = new Mock(HttpServletResponse.class);
-        mockHttpServletResponse.expectAndReturn("encodeURL", expectedString, expectedString);
-
-        String actionName = "promo.html";
-        Map params = new TreeMap();
-
-        String urlString = UrlHelper.buildUrl(actionName, (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse) mockHttpServletResponse.proxy(), params, "https", true, true);
-        assertEquals(expectedString, urlString);
-    }
-    
-    
-    public void testParseQuery() throws Exception {
-    	Map result = UrlHelper.parseQueryString("aaa=aaaval&bbb=bbbval&ccc=");
-    	
-    	assertEquals(result.get("aaa"), "aaaval");
-    	assertEquals(result.get("bbb"), "bbbval");
-    	assertEquals(result.get("ccc"), "");
-    }
-    
-    public void testParseEmptyQuery() throws Exception {
-    	Map result = UrlHelper.parseQueryString("");
-    	
-    	assertNotNull(result);
-    	assertEquals(result.size(), 0);
-    }
-    
-    public void testParseNullQuery() throws Exception {
-    	Map result = UrlHelper.parseQueryString(null);
-    	
-    	assertNotNull(result);
-    	assertEquals(result.size(), 0);
-    }
-    
-    
-    public void testTranslateAndEncode() throws Exception {
-    	String defaultI18nEncoding = Settings.get(StrutsConstants.STRUTS_I18N_ENCODING);
-    	try {
-    		Settings.set(StrutsConstants.STRUTS_I18N_ENCODING, "UTF-8");
-    		String result = UrlHelper.translateAndEncode("\u65b0\u805e");
-    		String expectedResult = "%E6%96%B0%E8%81%9E";
-    	
-    		assertEquals(result, expectedResult);
-    	}
-    	finally {
-    		Settings.set(StrutsConstants.STRUTS_I18N_ENCODING, defaultI18nEncoding);
-    	}
-    }
-    
-    public void testTranslateAndDecode() throws Exception {
-    	String defaultI18nEncoding = Settings.get(StrutsConstants.STRUTS_I18N_ENCODING);
-    	try {
-    		Settings.set(StrutsConstants.STRUTS_I18N_ENCODING, "UTF-8");
-    		String result = UrlHelper.translateAndDecode("%E6%96%B0%E8%81%9E");
-    		String expectedResult = "\u65b0\u805e";
-    	
-    		assertEquals(result, expectedResult);
-    	}
-    	finally {
-    		Settings.set(StrutsConstants.STRUTS_I18N_ENCODING, defaultI18nEncoding);
-    	}
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java b/trunk/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java
deleted file mode 100644
index eca9b55..0000000
--- a/trunk/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.xslt;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.transform.TransformerException;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-import org.springframework.core.io.DefaultResourceLoader;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.mock.web.MockServletContext;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.mock.MockActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-
-/**
- * Unit test for {@link XSLTResult}.
- *
- */
-public class XSLTResultTest extends StrutsTestCase {
-
-    private XSLTResult result;
-    private MockHttpServletResponse response;
-    private MockHttpServletRequest request;
-    private MockServletContext servletContext;
-    private MockActionInvocation mai;
-    private ValueStack stack;
-
-    public void testNoLocation() throws Exception {
-        try {
-            result.setParse(false);
-            result.setLocation(null);
-            result.execute(mai);
-            fail("Should have thrown an IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            // success
-        }
-    }
-
-    public void testNoFileFound() throws Exception {
-        try {
-            result.setParse(false);
-            result.setLocation("nofile.xsl");
-            result.execute(mai);
-            fail("Should have thrown a TransformerException");
-        } catch (TransformerException e) {
-            // success
-        }
-    }
-
-    public void testSimpleTransform() throws Exception {
-        result.setParse(false);
-        result.setLocation("XSLTResultTest.xsl");
-        result.execute(mai);
-
-        String out = response.getContentAsString();
-        assertTrue(out.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
-        assertTrue(out.indexOf("<result xmlns=\"http://www.w3.org/TR/xhtml1/strict\"") > -1);
-    }
-
-    public void testSimpleTransformParse() throws Exception {
-        result.setParse(true);
-        result.setLocation("${top.myLocation}");
-        result.execute(mai);
-
-        String out = response.getContentAsString();
-        assertTrue(out.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
-        assertTrue(out.indexOf("<result xmlns=\"http://www.w3.org/TR/xhtml1/strict\"") > -1);
-    }
-
-    public void testTransform2() throws Exception {
-        result.setParse(false);
-        result.setLocation("XSLTResultTest2.xsl");
-        result.execute(mai);
-
-        String out = response.getContentAsString();
-        assertTrue(out.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
-        assertTrue(out.indexOf("<html xmlns=\"http://www.w3.org/TR/xhtml1/strict\"") > -1);
-        assertTrue(out.indexOf("Hello Santa Claus how are you?") > -1);
-    }
-
-    public void testTransform3() throws Exception {
-        result.setParse(false);
-        result.setLocation("XSLTResultTest3.xsl");
-        result.execute(mai);
-
-        String out = response.getContentAsString();
-        assertTrue(out.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
-        assertTrue(out.indexOf("<html xmlns=\"http://www.w3.org/TR/xhtml1/strict\"") > -1);
-        assertTrue(out.indexOf("Hello Santa Claus how are you?") > -1);
-        assertTrue(out.indexOf("WebWork in Action by Patrick and Jason") > -1);
-        assertTrue(out.indexOf("XWork not in Action by Superman") > -1);
-    }
-
-    protected void setUp() throws Exception {
-        request = new MockHttpServletRequest();
-        response = new MockHttpServletResponse();
-        servletContext = new MockServletContext(new DefaultResourceLoader());
-
-        result = new XSLTResult();
-        stack = ValueStackFactory.getFactory().createValueStack();
-        ActionContext.getContext().setValueStack(stack);
-
-        MyAction action = new MyAction();
-
-        mai = new com.opensymphony.xwork2.mock.MockActionInvocation();
-        mai.setAction(action);
-        mai.setStack(stack);
-        mai.setInvocationContext(ActionContext.getContext());
-        stack.push(action);
-
-        ActionContext.getContext().put(ServletActionContext.HTTP_REQUEST, request);
-        ActionContext.getContext().put(ServletActionContext.HTTP_RESPONSE, response);
-        ActionContext.getContext().put(ServletActionContext.SERVLET_CONTEXT, servletContext);
-    }
-
-    protected void tearDown() {
-        request = null;
-        response = null;
-        servletContext = null;
-        result = null;
-        stack = null;
-        mai = null;
-    }
-
-    private class MyAction implements Action {
-
-        public String execute() throws Exception {
-            return SUCCESS;
-        }
-
-        public String getMyLocation() {
-            return ("XSLTResultTest.xsl");
-        }
-
-        public String getUsername() {
-            return "Santa Claus";
-        }
-
-        public List getBooks() {
-            List list = new ArrayList();
-            list.add(new Book("WebWork in Action", "Patrick and Jason"));
-            list.add(new Book("XWork not in Action", "Superman"));
-            return list;
-        }
-
-    }
-
-    public class Book {
-
-        private String title;
-        private String author;
-
-        public Book(String title, String author) {
-            this.title = title;
-            this.author = author;
-        }
-
-        public String getTitle() {
-            return title;
-        }
-
-        public String getAuthor() {
-            return author;
-        }
-    }
-}
diff --git a/trunk/core/src/test/resources/XSLTResultTest.xsl b/trunk/core/src/test/resources/XSLTResultTest.xsl
deleted file mode 100644
index 6741ccf..0000000
--- a/trunk/core/src/test/resources/XSLTResultTest.xsl
+++ /dev/null
@@ -1,9 +0,0 @@
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns="http://www.w3.org/TR/xhtml1/strict">
-
-    <xsl:template match="/">
-        <result/>
-    </xsl:template>
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/XSLTResultTest2.xsl b/trunk/core/src/test/resources/XSLTResultTest2.xsl
deleted file mode 100644
index 8afa9a7..0000000
--- a/trunk/core/src/test/resources/XSLTResultTest2.xsl
+++ /dev/null
@@ -1,13 +0,0 @@
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns="http://www.w3.org/TR/xhtml1/strict">
-
-    <xsl:template match="result">
-        <html>
-            <body>
-                Hello <xsl:value-of select="username"/> how are you?
-            </body>
-        </html>
-    </xsl:template>
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/XSLTResultTest3.xsl b/trunk/core/src/test/resources/XSLTResultTest3.xsl
deleted file mode 100644
index 3b18dbb..0000000
--- a/trunk/core/src/test/resources/XSLTResultTest3.xsl
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns="http://www.w3.org/TR/xhtml1/strict">
-
-    <xsl:template match="result">
-        <html>
-            <body>
-                Hello <xsl:value-of select="username"/> how are you?
-                <p/>
-                We have the following books:
-                <xsl:for-each select="books/item">
-                    <br/><xsl:value-of select="title"/> by <xsl:value-of select="author"/>.
-                </xsl:for-each>
-            </body>
-        </html>
-    </xsl:template>
-
-</xsl:stylesheet>
diff --git a/trunk/core/src/test/resources/log4j.properties b/trunk/core/src/test/resources/log4j.properties
deleted file mode 100644
index 9c62331..0000000
--- a/trunk/core/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-log4j.rootLogger = WARN, stdout
-
-log4j.appender.stdout = org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Threshold = WARN
-log4j.appender.stdout.Target   = System.out
-log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern = %d{ISO8601} %-5p [%F:%L] : %m%n
diff --git a/trunk/core/src/test/resources/org/apache/struts2/TestAction-validation.xml b/trunk/core/src/test/resources/org/apache/struts2/TestAction-validation.xml
deleted file mode 100644
index 6f53dfb..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/TestAction-validation.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
-<validators>
-    <field name="foo">
-        <field-validator type="required">
-            <message>Foo is required!</message>
-        </field-validator>
-    </field>
-    <field name="user">
-        <field-validator type="visitor">
-            <message/>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/TestAction.properties b/trunk/core/src/test/resources/org/apache/struts2/TestAction.properties
deleted file mode 100644
index 06c4339..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/TestAction.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-simpleKey=Simple Message
-expressionKey=Foo is ${foo}
-messageFormatKey=Params are {0} {1} {2}
-foo.bar.baz=This should start with foo
-bar.baz=No foo here
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/components/template/dummy.properties b/trunk/core/src/test/resources/org/apache/struts2/components/template/dummy.properties
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/components/template/dummy.properties
+++ /dev/null
diff --git a/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughClassPath.properties b/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughClassPath.properties
deleted file mode 100644
index 1b04afa..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughClassPath.properties
+++ /dev/null
@@ -1 +0,0 @@
-parent=xhtml
diff --git a/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughFileSystem.properties b/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughFileSystem.properties
deleted file mode 100644
index 1b04afa..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughFileSystem.properties
+++ /dev/null
@@ -1 +0,0 @@
-parent=xhtml
diff --git a/trunk/core/src/test/resources/org/apache/struts2/components/tempo.properties b/trunk/core/src/test/resources/org/apache/struts2/components/tempo.properties
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/components/tempo.properties
+++ /dev/null
diff --git a/trunk/core/src/test/resources/org/apache/struts2/dispatcher/someJspFile.jsp b/trunk/core/src/test/resources/org/apache/struts2/dispatcher/someJspFile.jsp
deleted file mode 100644
index 6d615cc..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/dispatcher/someJspFile.jsp
+++ /dev/null
@@ -1,12 +0,0 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8"
-    pageEncoding="UTF-8"%>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Insert title here</title>
-</head>
-<body>
-	Some JSP File for PlainTextResult Testing Purposes.
-</body>
-</html>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/interceptor/FileUploadInterceptor.properties b/trunk/core/src/test/resources/org/apache/struts2/interceptor/FileUploadInterceptor.properties
deleted file mode 100644
index a5ad395..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/interceptor/FileUploadInterceptor.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-### Unit test of FileUploadInterceptor
-struts.messages.error.file.too.large=The file is to large to be uploaded {0} {1} {2} {3}
-struts.messages.error.uploading=Error uploading: {0}
diff --git a/trunk/core/src/test/resources/org/apache/struts2/othertest.properties b/trunk/core/src/test/resources/org/apache/struts2/othertest.properties
deleted file mode 100644
index f254366..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/othertest.properties
+++ /dev/null
@@ -1 +0,0 @@
-othertestkey=othertestvalue
diff --git a/trunk/core/src/test/resources/org/apache/struts2/spring/StrutsSpringObjectFactoryTest-applicationContext.xml b/trunk/core/src/test/resources/org/apache/struts2/spring/StrutsSpringObjectFactoryTest-applicationContext.xml
deleted file mode 100644
index af4657f..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/spring/StrutsSpringObjectFactoryTest-applicationContext.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans>
-    <!-- no beans in this unit test -->
-</beans>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-1.txt
deleted file mode 100644
index 0f4b3a4..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-1.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-<tr>
-	<td valign="top" align="right">
-	</td>
-    <td valign="top" align="left">
-		<input type="checkbox" name="foo" value="baz" checked="checked" id="someId" title="mytitle" onfocus="test();"/>
-		<input type="hidden" name="__checkbox_foo" value="baz"/>
-        <label for="someId" class="checkboxLabel">mylabel</label>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-2.txt
deleted file mode 100644
index a5dfce2..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-2.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-<tr>
-	<td valign="top" align="right">
-	</td>
-    <td valign="top" align="left">
-        <input type="checkbox" name="foo" value="baz" id="foo" title="mytitle"/>
-        <input type="hidden" name="__checkbox_foo" value="baz"/>
-        <label for="foo" class="checkboxLabel">mylabel</label>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-3.txt
deleted file mode 100644
index 11a5782..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-3.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-<tr errorFor="foo">
-    <td align="left" valign="top" colspan="2"><span class="errorMessage">Some Foo Error</span></td>
-</tr>
-<tr errorFor="foo">
-    <td align="left" valign="top" colspan="2"><span class="errorMessage">Another Foo Error</span></td>
-</tr>
-<tr>
-	<td valign="top" align="right">
-	
-	</td>
-    <td valign="top" align="left">
-          <input type="checkbox" name="foo" value="baz" checked="checked" id="foo" title="mytitle" onclick="test();" ondblclick="test();"/>
-          <input type="hidden" name="__checkbox_foo" value="baz"/>
-          <label for="foo" class="checkboxErrorLabel">mylabel</label>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-4.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-4.txt
deleted file mode 100644
index 9b36528..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-4.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-<tr>
-    <td colspan="2">
-        <label for="someId" class="checkboxLabel">mylabel:</label>
-    </td>
-</tr>
-<tr>
-    <td colspan="2">
-		<input type="checkbox" name="foo" value="baz" checked="checked" id="someId" title="mytitle" onfocus="test();"/>
-		<input type="hidden" name="__checkbox_foo" value="baz"/>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-5.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-5.txt
deleted file mode 100644
index bce8c7b..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Checkbox-5.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-<tr>
-	<td valign="top" align="right">
-	    <label for="someId" class="checkboxLabel">mylabel:</label>
-	</td>
-    <td valign="top" align="left">
-		<input type="checkbox" name="foo" value="baz" checked="checked" id="someId" title="mytitle" onfocus="test();"/>
-		<input type="hidden" name="__checkbox_foo" value="baz"/>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-1.txt
deleted file mode 100644
index 7edb0d3..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-1.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="foo" class="label">mylabel:</label></td>
-    <td>
-<input type="checkbox" name="foo" value="hello" id="foo-1" checked="checked" title="mytitle" onchange="alert('foo');"/>
-<label for="foo-1" class="checkboxLabel">world</label>
-<input type="checkbox" name="foo" value="foo" id="foo-2" title="mytitle" onchange="alert('foo');"/>
-<label for="foo-2" class="checkboxLabel">bar</label>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-2.txt
deleted file mode 100644
index e48755e..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-2.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="collection" class="label">mylabel:</label></td>
-    <td>
-<input type="checkbox" name="collection" value="hello" id="collection-1" checked="checked"/>
-<label for="collection-1" class="checkboxLabel">world</label>
-<input type="checkbox" name="collection" value="foo" id="collection-2" checked="checked"/>
-<label for="collection-2" class="checkboxLabel">bar</label>
-<input type="checkbox" name="collection" value="cat" id="collection-3"/>
-<label for="collection-3" class="checkboxLabel">dog</label>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-3.txt
deleted file mode 100644
index 00df9b5..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-3.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="collection" class="label">mylabel:</label></td>
-    <td>
-<input type="checkbox" name="collection" value="hello" id="collection-1" checked="checked" disabled="disabled"/>
-<label for="collection-1" class="checkboxLabel">world</label>
-<input type="checkbox" name="collection" value="foo" id="collection-2" checked="checked" disabled="disabled"/>
-<label for="collection-2" class="checkboxLabel">bar</label>
-<input type="checkbox" name="collection" value="cat" id="collection-3" disabled="disabled"/>
-<label for="collection-3" class="checkboxLabel">dog</label>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-4.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-4.txt
deleted file mode 100644
index 47dec92..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/CheckboxList-4.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="foo" class="label">mylabel:</label></td>
-    <td>
-<input type="checkbox" name="foo" value="hello" id="foo-1" checked="checked" disabled="disabled" onchange="alert('foo');"/>
-<label for="foo-1" class="checkboxLabel">world</label>
-<input type="checkbox" name="foo" value="foo" id="foo-2" disabled="disabled" onchange="alert('foo');"/>
-<label for="foo-2" class="checkboxLabel">bar</label>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-1.txt
deleted file mode 100644
index 18b29df..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-1.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="foo" class="label">mylabel:</label></td>
-    <td>
-<script>
-	function autoPopulate_foo(targetElement) {
-		targetElement.form.elements['foo'].value=targetElement.options[targetElement.selectedIndex].value;
-	}
-</script>
-<input type="text" name="foo" value="hello" id="foo"/><br/>
-<select onChange="autoPopulate_foo(this);">
-    <option value="foo">foo</option>
-    <option value="bar">bar</option>
-    <option value="baz">baz</option>
-</select>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-2.txt
deleted file mode 100644
index 0414510b..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-2.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myFavouriteFruit" class="label">My Favourite Fruit:</label></td>
-    <td>
-<script>
-	function autoPopulate_myFavouriteFruit(targetElement) {
-		if (targetElement.options[targetElement.selectedIndex].value == '-1') {
-			return;
-		}
-		if (targetElement.options[targetElement.selectedIndex].value == '') {
-		    return;
-		}
-		targetElement.form.elements['myFavouriteFruit'].value=targetElement.options[targetElement.selectedIndex].value;
-	}
-</script>
-<input type="text" name="myFavouriteFruit" value="banana" id="myFavouriteFruit"/><br/>
-<select onChange="autoPopulate_myFavouriteFruit(this);">
-	<option value="-1">--- Please Select ---</option>
-	<option value=""></option>
-    <option value="apple">apple</option>
-    <option value="banana" selected="selected">banana</option>
-    <option value="pineaple">pineaple</option>
-    <option value="grapes">grapes</option>
-</select>
-    </td>
-</tr>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-3.txt
deleted file mode 100644
index 0414510b..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-3.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myFavouriteFruit" class="label">My Favourite Fruit:</label></td>
-    <td>
-<script>
-	function autoPopulate_myFavouriteFruit(targetElement) {
-		if (targetElement.options[targetElement.selectedIndex].value == '-1') {
-			return;
-		}
-		if (targetElement.options[targetElement.selectedIndex].value == '') {
-		    return;
-		}
-		targetElement.form.elements['myFavouriteFruit'].value=targetElement.options[targetElement.selectedIndex].value;
-	}
-</script>
-<input type="text" name="myFavouriteFruit" value="banana" id="myFavouriteFruit"/><br/>
-<select onChange="autoPopulate_myFavouriteFruit(this);">
-	<option value="-1">--- Please Select ---</option>
-	<option value=""></option>
-    <option value="apple">apple</option>
-    <option value="banana" selected="selected">banana</option>
-    <option value="pineaple">pineaple</option>
-    <option value="grapes">grapes</option>
-</select>
-    </td>
-</tr>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-1.txt
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-1.txt
+++ /dev/null
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-2.txt
deleted file mode 100644
index d436237..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-2.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-<tr>
-	<td class="tdLabel">
-		<label for="myFooValue" class="label">mylabel:</label>
-	</td>
-	<td>
-		<input type="text" name="myname" value="foo" id="myFooValue"/>
-	</td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-3.txt
deleted file mode 100644
index d6f0642..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-3.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-<tr>
-	<td class="tdLabel">
-		<label for="foo" class="label">mylabel:</label>
-	</td>
-	<td>
-		<input type="text" name="myname" value="foo" id="foo"/>
-	</td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-param.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-param.txt
deleted file mode 100644
index 9d257f6..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-param.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-param hello     = world
-param argle     = bargle
-param glip      = glop
-param obj.Class = class org.apache.struts2.views.jsp.ui.ComponentTag
-
-param array[0] = a
-param array[1] = b
-param array[2] = c
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-1.txt
deleted file mode 100644
index 07d23fd..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-1.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-<tr>
-    <td class="tdLabel"></td>
-    <td>
-<script type="text/javascript">
-    dojo.require("dojo.widget.html.DatePicker");
-    dojo.require("struts.widgets.*");
-</script>
-
-    <div dojoType="dropdowndatepicker"
-        iconPath="/struts/dojo/struts/widgets/dateIcon.gif"
-    >
-<input type="text" name="" id=""/>
-    </div>
-</td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-2.txt
deleted file mode 100644
index 5675c68..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-2.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-<tr>
-    <td class="tdLabel"></td>
-    <td>
-<script type="text/javascript">
-    dojo.require("dojo.widget.html.DatePicker");
-    dojo.require("struts.widgets.*");
-</script>
-
-    <div dojoType="dropdowndatepicker"
-        iconPath="/struts/dojo/struts/widgets/dateIcon.gif"
-    >
-<input type="text" name="" id=""/>
-    </div>
-</td>
-</tr>
-
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-1.txt
deleted file mode 100644
index b306be4..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-1.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="foo" class="label">mylabel:</label></td>
-    <td>
-<select name="foo" id="foo" onmousedown="window.status='onmousedown';" onmouseup="window.status='onmouseup';" onmouseover="window.status='onmouseover';" onmousemove="window.status='onmousemove';" onmouseout="window.status='onmouseout';" onchange="fooRedirect(this.options.selectedIndex)">
-    <option value="BE">Belgium</option>
-    <option value="FR">France</option>
-</select>
-<br/>
-<select name="region">
-</select>
-<script type="text/javascript">
-    var fooGroup = new Array(2 + 0);
-    for (i = 0; i < (2 + 0); i++)
-    fooGroup[i] = new Array();
-
-    fooGroup[0][0] = new Option("Antwerp", "AN");
-    fooGroup[0][1] = new Option("Gent", "GN");
-    fooGroup[0][2] = new Option("Brugge", "BRG");
-    fooGroup[1][0] = new Option("Paris", "PA");
-    fooGroup[1][1] = new Option("Bordeaux", "BOR");
-
-    var fooTemp = document.inputForm.region;
-    fooRedirect(0);
-
-    function fooRedirect(x) {
-    	var selected = false;
-        for (m = fooTemp.options.length - 1; m >= 0; m--) {
-            fooTemp.options[m] = null;
-        }
-
-        for (i = 0; i < fooGroup[x].length; i++) {
-            fooTemp.options[i] = new Option(fooGroup[x][i].text, fooGroup[x][i].value);
-        }
-
-        if ((fooTemp.options.length > 0)  && (! selected)) {
-            fooTemp.options[0].selected = true;
-        }
-    }
-</script>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-2.txt
deleted file mode 100644
index 09cea18..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-2.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="foo" class="label">mylabel:</label></td>
-    <td>
-<select name="foo" id="foo" onmousedown="window.status='onmousedown';" onmouseup="window.status='onmouseup';" onmouseover="window.status='onmouseover';" onmousemove="window.status='onmousemove';" onmouseout="window.status='onmouseout';" onchange="fooRedirect(this.options.selectedIndex)">
-    <option value="BE">Belgium</option>
-    <option value="FR" selected="selected">France</option>
-</select>
-<br/>
-<select name="region">
-</select>
-<script type="text/javascript">
-    var fooGroup = new Array(2 + 0);
-    for (i = 0; i < (2 + 0); i++)
-    fooGroup[i] = new Array();
-
-    fooGroup[0][0] = new Option("Antwerp", "AN");
-    fooGroup[0][1] = new Option("Gent", "GN");
-    fooGroup[0][2] = new Option("Brugge", "BRG");
-    fooGroup[1][0] = new Option("Paris", "PA");
-    fooGroup[1][1] = new Option("Bordeaux", "BOR");
-
-    var fooTemp = document.inputForm.region;
-    fooRedirect(1);
-
-    function fooRedirect(x) {
-    	var selected = false;
-        for (m = fooTemp.options.length - 1; m >= 0; m--) {
-            fooTemp.options[m] = null;
-        }
-
-        for (i = 0; i < fooGroup[x].length; i++) {
-            fooTemp.options[i] = new Option(fooGroup[x][i].text, fooGroup[x][i].value);
-            	if (fooTemp.options[i].value == 'BOR') {
-            		fooTemp.options[i].selected = true;
-            		selected = true;
-            	}
-        }
-
-        if ((fooTemp.options.length > 0)  && (! selected)) {
-            fooTemp.options[0].selected = true;
-        }
-    }
-</script>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/File-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/File-1.txt
deleted file mode 100644
index 80da29a..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/File-1.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myname" class="label">mylabel:</label></td>
-    <td><input type="file" name="myname" size="10" value="bar" accept="*.txt" id="myname" title="mytitle"/></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-1.txt
deleted file mode 100644
index 850faa1..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-1.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<form id="myAction" name="myForm" onsubmit="submitMe(); return true;" action="myAction" method="POST" enctype="myEncType" title="mytitle" accept-charset="UTF-8">
-<table class="wwFormTable">
-</table>
-</form>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-10.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-10.txt
deleted file mode 100644
index 5e6c687..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-10.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<form id="testNamespaceAction" name="myForm" onsubmit="submitMe(); return true;" action="/testNamespace/testNamespaceAction.action" method="POST" enctype="myEncType" title="mytitle" accept-charset="UTF-8">
-<table class="wwFormTable">
-</table>
-</form>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-11.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-11.txt
deleted file mode 100644
index 2bec0d1..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-11.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<script src="/struts/xhtml/validation.js"></script>
-<form namespace="" id="myAction" name="myForm" onsubmit="submitMe(); return validateForm_myAction();" action="/myAction.action" method="POST" enctype="myEncType" title="mytitle" accept-charset="UTF-8">
-<table class="wwFormTable"> <tr>
-    <td class="tdLabel"></td>
-    <td>	<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myUpDownSelectTag" size="5" id="myAction_myUpDownSelectTag" multiple="multiple">
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptions(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td>
-</tr>
-</table>
-</form>
-
-
-<script>
-	dojo.require("dojo.event.connect");
-	var containingForm = document.getElementById("myAction");
-	dojo.event.connect(containingForm, "onsubmit", 
-			function(evt) {
-				var updownselectObj = document.getElementById("myAction_myUpDownSelectTag");
-				selectAllOptionsExceptSome(updownselectObj, "key", "");
-			});
-</script>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt
deleted file mode 100644
index 6c351d8..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-<script src="/struts/xhtml/validation.js"></script>
-<form namespace="" id="myAction" name="myForm" onsubmit="submitMe(); return validateForm_myAction();" action="/myAction.action" method="POST" enctype="myEncType" title="mytitle" accept-charset="UTF-8">
-<table class="wwFormTable"> <tr>
-    <td class="tdLabel"></td>
-    <td>	<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myUpDownSelectTag" size="5" id="myAction_myUpDownSelectTag" multiple="multiple">
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptions(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td>
-</tr>
-</table>
-</form>
-
-
-<script>
-	dojo.require("dojo.event.connect");
-	var containingForm = document.getElementById("myAction");
-	dojo.event.connect(containingForm, "onsubmit", 
-			function(evt) {
-				var updownselectObj = document.getElementById("myAction_myUpDownSelectTag");
-				selectAllOptionsExceptSome(updownselectObj, "key", "");
-			});
-</script>
-
-<script>
-    function validateForm_myAction() {
-        form = document.getElementById("myAction");
-        clearErrorMessages(form);
-        clearErrorLabels(form);
-        var errors = false;
-        return !errors; }
-</script>
-
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-3.txt
deleted file mode 100644
index f058b15..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-3.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<form id="testNamespaceAction" name="myForm" onsubmit="return true;" action="/testNamespace/testNamespaceAction.action" method="POST">
-<table class="wwFormTable">
-</table>
-</form>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-4.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-4.txt
deleted file mode 100644
index 6cb85c4..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-4.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<form id="foo" onsubmit="return true;" action="/foo.jsp" method="POST">
-<table class="wwFormTable">
-</table>
-</form>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-5.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-5.txt
deleted file mode 100644
index 9ceee9b..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-5.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<form id="testNamespaceAction" name="myForm"onsubmit="return true;" action="/testNamespace/testNamespaceAction.jspa" method="POST">
-<table class="wwFormTable">
-</table>
-</form>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-6.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-6.txt
deleted file mode 100644
index e0ae67e..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-6.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-<form namespace="" id="myAction" name="myForm" onsubmit="submitMe(); return true;" action="myAction" method="POST" enctype="myEncType" title="mytitle">
-<table class="wwFormTable"> <tr>
-    <td class="tdLabel"></td>
-    <td>	<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myUpDownSelectTag" size="5" id="myAction_myUpDownSelectTag" multiple="multiple">
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptions(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td>
-</tr>
-</table>
-</form>
-
-
-<script>
-	dojo.require("dojo.event.connect");
-	var containingForm = document.getElementById("myAction");
-	dojo.event.connect(containingForm, "onsubmit", 
-			function(evt) {
-				var updownselectObj = document.getElementById("myAction_myUpDownSelectTag");
-				selectAllOptionsExceptSome(updownselectObj, "key", "");
-			});
-</script>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-7.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-7.txt
deleted file mode 100644
index 5cbaf30..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-7.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<form id="test" onsubmit="return true;" action="test.html" method="POST">
-<table class="wwFormTable">
-</table>
-</form>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-8.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-8.txt
deleted file mode 100644
index 9ceee9b..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-8.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<form id="testNamespaceAction" name="myForm"onsubmit="return true;" action="/testNamespace/testNamespaceAction.jspa" method="POST">
-<table class="wwFormTable">
-</table>
-</form>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-9.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-9.txt
deleted file mode 100644
index 6fdb01a..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-9.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<form id="testAction" name="myForm" onsubmit="submitMe(); return true;" action="/testAction.action" method="POST" enctype="myEncType" title="mytitle" accept-charset="UTF-8">
-<table class="wwFormTable">
-</table>
-</form>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-1.txt
deleted file mode 100644
index f4bacbe..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-1.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-<link rel="stylesheet" href="/struts/xhtml/styles.css" type="text/css"/>
-
-<script language="JavaScript" type="text/javascript">
-	// Dojo configuration
-	djConfig={
-		baseRelativePath: "/struts/dojo",
-		isDebug: false,
-		bindEncoding: "ISO-8859-1",
-		debugAtAllCosts:true
-		//not needed, but allows the Venkman debugger to work with the includes};
-</script>
-
-<script language="JavaScript" type="text/javascript" src="/struts/dojo/dojo.js">
-</script>
-
-<script language="JavaScript" type="text/javascript" src="/struts/simple/dojoRequire.js">
-</script>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-2.txt
deleted file mode 100644
index d7c1996..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-2.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-<link rel="stylesheet" href="/struts/xhtml/styles.css" type="text/css"/>
-<script language="JavaScript" type="text/javascript">
-    // Dojo configuration
-    djConfig = {
-        baseRelativePath: "/struts/dojo",
-        isDebug: false,
-        bindEncoding: "ISO-8859-1",
-        debugAtAllCosts: true // not needed, but allows the Venkman debugger to work with the includes
-    };
-</script>
-<script language="JavaScript" type="text/javascript"
-        src="/struts/dojo/dojo.js"></script>
-<script language="JavaScript" type="text/javascript"
-        src="/struts/simple/dojoRequire.js"></script>
-<script language="JavaScript" type="text/javascript"
-        src="/struts/ajax/dojoRequire.js"></script>
-<script language="JavaScript" type="text/javascript"
-        src="/struts/CommonFunctions.js"></script>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-3.txt
deleted file mode 100644
index 3df2327..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-3.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-<link rel="stylesheet" href="/struts/xhtml/styles.css" type="text/css"/>
-<script language="JavaScript" type="text/javascript">
-    // Dojo configuration
-    djConfig = {
-        baseRelativePath: "/struts/dojo",
-        isDebug: true,
-        bindEncoding: "ISO-8859-1",
-        debugAtAllCosts: true // not needed, but allows the Venkman debugger to work with the includes
-    };
-</script>
-<script language="JavaScript" type="text/javascript"
-        src="/struts/dojo/dojo.js"></script>
-<script language="JavaScript" type="text/javascript"
-        src="/struts/simple/dojoRequire.js"></script>
-<script language="JavaScript" type="text/javascript"
-        src="/struts/ajax/dojoRequire.js"></script>
-<script language="JavaScript" type="text/javascript"
-        src="/struts/CommonFunctions.js"></script>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-4.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-4.txt
deleted file mode 100644
index f4bacbe..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/HeadTagTest-4.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-<link rel="stylesheet" href="/struts/xhtml/styles.css" type="text/css"/>
-
-<script language="JavaScript" type="text/javascript">
-	// Dojo configuration
-	djConfig={
-		baseRelativePath: "/struts/dojo",
-		isDebug: false,
-		bindEncoding: "ISO-8859-1",
-		debugAtAllCosts:true
-		//not needed, but allows the Venkman debugger to work with the includes};
-</script>
-
-<script language="JavaScript" type="text/javascript" src="/struts/dojo/dojo.js">
-</script>
-
-<script language="JavaScript" type="text/javascript" src="/struts/simple/dojoRequire.js">
-</script>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Hidden-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Hidden-1.txt
deleted file mode 100644
index 4d6c927..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Hidden-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-<input type="hidden" name="myname" value="bar" id="myname"/>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Label-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Label-1.txt
deleted file mode 100644
index f96bc1c..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Label-1.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myname" class="label">mylabel:</label></td>
-    <td><label id="myname" title="mytitle">bar</label></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Label-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Label-2.txt
deleted file mode 100644
index 81faa64..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Label-2.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="foo" class="label">mylabel:</label></td>
-    <td><label id="foo" for="for">baz</label></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Label-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Label-3.txt
deleted file mode 100644
index b12f19a..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Label-3.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-<tr>
-    <td align="left" valign="top" colspan="2"><label for="myname" class="label">mylabel:</label></td>
-</tr>
-<tr>
-    <td><label id="myname">bar</label></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/OptGroup-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/OptGroup-1.txt
deleted file mode 100644
index 6865d23..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/OptGroup-1.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="mySelection" class="label">My Selection:</label></td>
-    <td>
-<select name="mySelection" id="mySelection">
-    <option value="ONE">one</option>
-    <option value="TWO">two</option>
-    <option value="THREE">three</option>
-
-<optgroup 
-	label="My Label 1"
->
-
-	<option value="AAA"
-	>aaa
-	</option>
-	<option value="BBB"
-	>bbb
-	</option>
-	<option value="CCC"
-	>ccc
-	</option>
-</optgroup>
-<optgroup 
-	label="My Label 2"
->
-
-	<option value="DDD"
-	>ddd
-	</option>
-	<option value="EEE"
-	>eee
-	</option>
-	<option value="FFF"
-	>fff
-	</option>
-</optgroup>
-
-</select>
-</td>
-</tr>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/OptGroup-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/OptGroup-2.txt
deleted file mode 100644
index b8e105e..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/OptGroup-2.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="mySelection" class="label">My Selection:</label></td>
-    <td>
-<select name="mySelection" id="mySelection">
-    <option value="ONE">one</option>
-    <option value="TWO">two</option>
-    <option value="THREE">three</option>
-
-<optgroup 
-	label="My Label 1"
->
-
-	<option value="AAA"
-	>aaa
-	</option>
-	<option value="BBB"
-	>bbb
-	</option>
-	<option value="CCC"
-	>ccc
-	</option>
-</optgroup>
-<optgroup 
-	label="My Label 2"
->
-
-	<option value="DDD"
-	>ddd
-	</option>
-	<option value="EEE"
-	selected="selected"
-	>eee
-	</option>
-	<option value="FFF"
-	>fff
-	</option>
-</optgroup>
-
-</select>
-</td>
-</tr>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/OptGroup-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/OptGroup-3.txt
deleted file mode 100644
index 95b5fea..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/OptGroup-3.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="mySelection" class="label">My Selection:</label></td>
-    <td>
-<select name="mySelection" id="mySelection" multiple="multiple">
-    <option value="ONE">one</option>
-    <option value="TWO" selected="selected">two</option>
-    <option value="THREE">three</option>
-
-<optgroup 
-	label="My Label 1"
->
-
-	<option value="AAA"
-	>aaa
-	</option>
-	<option value="BBB"
-	selected="selected"
-	>bbb
-	</option>
-	<option value="CCC"
-	>ccc
-	</option>
-</optgroup>
-<optgroup 
-	label="My Label 2"
->
-
-	<option value="DDD"
-	>ddd
-	</option>
-	<option value="EEE"
-	selected="selected"
-	>eee
-	</option>
-	<option value="FFF"
-	>fff
-	</option>
-</optgroup>
-
-</select>
-</td>
-</tr>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Password-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Password-1.txt
deleted file mode 100644
index be4c1e0..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Password-1.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myname" class="label">mylabel:</label></td>
-    <td><input type="password" name="myname" id="myname" title="mytitle"/></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-1.txt
deleted file mode 100644
index 0a42dea..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-1.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myname" class="label">mylabel:</label></td>
-    <td>
-<input type="radio" name="myname" id="mynamehello" value="hello"/><label for="mynamehello">world</label>
-<input type="radio" name="myname" id="mynamefoo" value="foo"/><label for="mynamefoo">bar</label>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-2.txt
deleted file mode 100644
index aa82dff..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-2.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myname" class="label">mylabel:</label></td>
-    <td>
-<input type="radio" name="myname" id="myname2" value="2"/><label for="myname2">Two</label>
-<input type="radio" name="myname" id="myname1" checked="checked" value="1"/><label for="myname1">One</label>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-3.txt
deleted file mode 100644
index 746e044..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-3.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myname" class="label">mylabel:</label></td>
-    <td>
-<input type="radio" name="myname" id="mynametrue" checked="checked" value="true"/><label for="mynametrue">male</label>
-<input type="radio" name="myname" id="mynamefalse" value="false"/><label for="mynamefalse">female</label>
-    </td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-1.txt
deleted file mode 100644
index c89899b..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-1.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div align="left"><input type="reset" name="myname" value="bar"/></div></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-2.txt
deleted file mode 100644
index 279c143..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-2.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div align="right"><input type="reset" name="myname" value="Reset" title="mytitle"/></div></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-3.txt
deleted file mode 100644
index 9497bb6..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-3.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div align="right"><button type="reset" name="myname" value="bar">bar</button></div></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-4.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-4.txt
deleted file mode 100644
index 3fa4c37..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Reset-4.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div align="left"><button type="reset" name="myname" value="bar">mylabel</button></div></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-1.txt
deleted file mode 100644
index 7bf1ba5..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-1.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="foo" class="label">mylabel:</label></td>
-    <td><select name="foo" id="foo">
-    <option value="headerKey">headerValue</option>
-    <option value=""></option>
-    <option value="hello" selected="selected">world</option>
-    <option value="foo">bar</option>
-</select></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-2.txt
deleted file mode 100644
index 4256054..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-2.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="collection" class="label">mylabel:</label></td>
-    <td><select name="collection" id="collection" multiple="multiple" onmousedown="alert('onmousedown');" onmouseup="alert('onmouseup');" onmouseover="alert('onmouseover');" onmousemove="alert('onmousemove');" onmouseout="alert('onmouseout');">
-    <option value="hello" selected="selected">world</option>
-    <option value="foo" selected="selected">bar</option>
-    <option value="cat">dog</option>
-</select></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-3.txt
deleted file mode 100644
index 88b14a7..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-3.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="collection" class="label">mylabel:</label></td>
-    <td><select name="collection" id="collection" title="mytitle" multiple="multiple" onmousedown="alert('onmousedown');" onmouseup="alert('onmouseup');" onmouseover="alert('onmouseover');" onmousemove="alert('onmousemove');" onmouseout="alert('onmouseout');">
-    <option value="hello" selected="selected">1</option>
-    <option value="foo" selected="selected">2</option>
-    <option value="&lt;cat&gt;">1.5</option>
-</select></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-4.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-4.txt
deleted file mode 100644
index 93e929f..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-4.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="collection" class="label">tmjee_name:</label></td>
-    <td><select name="collection" id="collection">
-</select></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-5.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-5.txt
deleted file mode 100644
index b27bf1f..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-5.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myId" class="label">media1:</label></td>
-    <td><select name="myName" id="myId" multiple="multiple">
-    <option value=""></option>
-    <option value="aaa">aaa</option>
-    <option value="bbb">bbb</option>
-</select></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-6.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-6.txt
deleted file mode 100644
index bc216c4..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-6.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myId" class="label">media2:</label></td>
-    <td><select name="myName" id="myId">
-    <option value=""></option>
-    <option value="aaa">aaa</option>
-    <option value="bbb">bbb</option>
-</select></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-7.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-7.txt
deleted file mode 100644
index d3688f2..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-7.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="foo" class="label">mylabel:</label></td>
-    <td><select name="foo" id="foo">
-    <option value="headerKey">hello: headerValue</option>
-    <option value=""></option>
-    <option value="hello" selected="selected">hello - world</option>
-    <option value="foo">foo - bar</option>
-</select></td>
-</tr>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-8.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-8.txt
deleted file mode 100644
index b858072..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-8.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-<tr>
-<td class="tdLabel"><label for="myPet" class="label">myLabel:</label></td>
-<td>
-<select name="myPet" id="myPet">
-    <option value="-1" selected="selected">--- Please Select ---</option>
-    <option value="1">Cat</option>
-    <option value="2">Dog</option>
-</select>
-</td>
-</tr>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-1.txt
deleted file mode 100644
index e0f675d..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-1.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div align="left"><input type="submit" id="myname" name="myname" value="bar"/></div></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-2.txt
deleted file mode 100644
index 42e7f1d..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-2.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div align="right"><input type="submit" id="myname" name="myname" value="Submit" title="mytitle"/></div></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-3.txt
deleted file mode 100644
index 0c074b8..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-3.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div align="right"><button type="submit" id="myname" name="myname" value="bar">bar</button></div></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-4.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-4.txt
deleted file mode 100644
index 17b846d..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-4.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div align="left"><button type="submit" id="myname" name="myname" value="bar">mylabel</button></div></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-5.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-5.txt
deleted file mode 100644
index eff2dcd..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-5.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div align="right"><input type="image" alt="bar" id="myname" name="myname" value="bar"/></div></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-6.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-6.txt
deleted file mode 100644
index 59b886d..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Submit-6.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<tr>
-    <td colspan="2"><div align="right"><input type="image" alt="mylabel" src="some.gif" id="myname" name="myname" value="bar"/></div></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/TestAction1.properties b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/TestAction1.properties
deleted file mode 100644
index bd74b5c..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/TestAction1.properties
+++ /dev/null
@@ -1 +0,0 @@
-simpleKey=This is TestBean1
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/TestAction1_de.properties b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/TestAction1_de.properties
deleted file mode 100644
index 0e6ef12..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/TestAction1_de.properties
+++ /dev/null
@@ -1 +0,0 @@
-simpleKey=This is TestBean1 in German
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/TestAction1_fr.properties b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/TestAction1_fr.properties
deleted file mode 100644
index ab55ee9..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/TestAction1_fr.properties
+++ /dev/null
@@ -1 +0,0 @@
-simpleKey=This is TestBean1 in French
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textarea-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textarea-1.txt
deleted file mode 100644
index 5c38c5b..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textarea-1.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="the_id" class="label">mylabel:</label></td>
-    <td><textarea name="myname" cols="20" rows="30" disabled="disabled" readonly="readonly" tabindex="5" id="the_id" title="mytitle" onclick="alert('onclick');" onkeyup="alert('hello');" onchange="alert('goodbye');">bar</textarea></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-1.txt
deleted file mode 100644
index 40dfacf..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-1.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<tr>
-    <td class="tdLabel"><label for="myname" class="label">mylabel:</label></td>
-    <td><input type="text" name="myname" size="10" value="bar" id="myname"/></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-2.txt
deleted file mode 100644
index ae9d79e..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-2.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-<tr errorFor="myId">
-    <td align="center" valign="top" colspan="2"><span class="errorMessage">bar error message</span></td>
-</tr>
-<tr>
-    <td class="tdLabel"><label for="myId" class="errorLabel">mylabel:</label></td>
-    <td><input type="text" name="foo" value="bar" id="myId" title="mytitle"/></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-3.txt
deleted file mode 100644
index c90ae36..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-3.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<tr>
-    <td class="tdLabel"></td>
-    <td><input type="text" name="myname" size="10" value="bar" id="myname" onblur="blahescape('somevalue');"/></td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/User-validation.xml b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/User-validation.xml
deleted file mode 100644
index 1684b43..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/User-validation.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
-<validators>
-    <field name="name">
-        <field-validator type="required">
-            <message key="err.name">You must enter a name.</message>
-        </field-validator>
-    </field>
-</validators>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/User.properties b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/User.properties
deleted file mode 100644
index f0c59ad..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/User.properties
+++ /dev/null
@@ -1 +0,0 @@
-err.name=Please enter a name!
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionerror-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionerror-1.txt
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionerror-1.txt
+++ /dev/null
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionerror-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionerror-2.txt
deleted file mode 100644
index 0259941..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionerror-2.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-<ul>
-	<li><span class="errorMessage">action error number 1</span></li>
-	<li><span class="errorMessage">action error number 2</span></li>
-	<li><span class="errorMessage">action error number 3</span></li>
-</ul>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionmessage-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionmessage-1.txt
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionmessage-1.txt
+++ /dev/null
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionmessage-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionmessage-2.txt
deleted file mode 100644
index 12412e0..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/actionmessage-2.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-<ul>
-	<li><span class="actionMessage">action message number 1</span></li>
-	<li><span class="actionMessage">action message number 2</span></li>
-	<li><span class="actionMessage">action message number 3</span></li>
-</ul>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/div-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/div-1.txt
deleted file mode 100644
index a7730b1..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/div-1.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-<div dojoType='BindDiv'
-	id="mylabel"
-	href="a"
-	loadingHtml="b"
-	errorHtml="c"
-	showTransportError='true'
-	delay='4000'
-	refresh='1000'
-	listenTopics='g'
-	onLoad='h'
-
-></div>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-1.txt
deleted file mode 100644
index b09fdd9..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-1.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-<ul>
-	<li><span class="errorMessage">field error message number 1</span></li>
-	<li><span class="errorMessage">field error message number 2</span></li>
-	<li><span class="errorMessage">field error message number 3</span></li>
-</ul>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-2.txt
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-2.txt
+++ /dev/null
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-3.txt
deleted file mode 100644
index 4e47443..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-3.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<ul>
-	<li><span class="errorMessage">field error message number 1</span></li>
-	<li><span class="errorMessage">field error message number 3</span></li>
-</ul>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-4.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-4.txt
deleted file mode 100644
index cf0a1a7..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-4.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<ul>
-	<li><span class="errorMessage">field error message number 1</span></li>
-	<li><span class="errorMessage">field error message number 2</span></li>
-</ul>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-5.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-5.txt
deleted file mode 100644
index 98fabae..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/fielderror-5.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<ul>
-	<li><span class="errorMessage">field error message number 2</span></li>
-</ul>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/href-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/href-1.txt
deleted file mode 100644
index 5ce3157..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/href-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-<a dojoType="BindAnchor" evalResult="true" id="mylink" href="a" notifyTopics="g" errorHtml="c" showTransportError="true" onLoad="h"></a>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-1.txt
deleted file mode 100644
index 27e8657..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-1.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-<tr> 
-<td class="tdLabel"></td> 
-<td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table border="0">
-<tr>
-<td>
-	<label for="leftTitle">Title Left</label><br/>
-	<select name="collection" size="20" id="id" multiple="multiple">
-    	<option value="Header Key">Header Value</option>
-    	<option value=""></option>
-    	<option value="Left1" selected="selected">Left1</option>
-    	<option value="Left2" selected="selected">Left2</option>
-	</select>
-	<input type="button" onclick="moveOptionDown(document.getElementById('id'), 'key', 'Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('id'), 'key', 'Header Key');" value="^" />
-</td>
-<td valign="middle" align="center">
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Left" onclick="moveSelectedOptions(document.getElementById('doubleId'), document.getElementById('id'), false, 'Double Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Right" onclick="moveSelectedOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Left" onclick="moveAllOptions(document.getElementById('doubleId'), document.getElementById('id'), false, 'Double Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Right" onclick="moveAllOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>	
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Select All" onclick="selectAllOptionsExceptSome(document.getElementById('id'), 'key', 'Header Key');selectAllOptionsExceptSome(document.getElementById('doubleId'), 'key', 'Double Header Key');" /><br/><br/>
-</td> 
-<td>
-	<label for="rightTitle">Title Right</label><br/>
-	<select 
-		name="list2"
-		size="20"		
-		multiple="multiple"
-		id="doubleId"
-	>
-    	<option value="Double Header Key">Double Header Value</option>
-    	<option value=""></option>
-    	<option value="Right1" selected="selected">Right1</option>
-    	<option value="Right2" selected="selected">Right2</option>
-	</select> 
-	<input type="button" onclick="moveOptionDown(document.getElementById('doubleId'), 'key', 'Double Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('doubleId'), 'key', 'Double Header Key');" value="^" />
-</td>
-</tr>
-</table>
-</td> 
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-2.txt
deleted file mode 100644
index a03b0f5..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-2.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-<tr> 
-<td class="tdLabel"></td>
-<td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table border="0">
-<tr>
-<td>
-	<label for="leftTitle">Title Left</label><br/>
-	<select name="collection" size="20" id="id" multiple="multiple">
-    	<option value="Header Key">Header Value</option>
-    	<option value=""></option>
-    	<option value="Left1">Left1</option>
-    	<option value="Left2" selected="selected">Left2</option>
-    	<option value="Left3">Left3</option>
-	</select> 
-	<input type="button" onclick="moveOptionDown(document.getElementById('id'), 'key', 'Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('id'), 'key', 'Header Key');" value="^" />
-</td>
-<td valign="middle" align="center">
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Left" onclick="moveSelectedOptions(document.getElementById('doubleId'), document.getElementById('id'), false, 'Double Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Right" onclick="moveSelectedOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Left" onclick="moveAllOptions(document.getElementById('doubleId'), document.getElementById('id'), false, 'Double Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Right" onclick="moveAllOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>	
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Select All" onclick="selectAllOptionsExceptSome(document.getElementById('id'), 'key', 'Header Key');selectAllOptionsExceptSome(document.getElementById('doubleId'), 'key', 'Double Header Key');" /><br/><br/>
-</td> <td>
-	<label for="rightTitle">Title Right</label><br/>
-	<select 
-		name="list2"
-		size="20"		
-		multiple="multiple"
-		id="doubleId"
-	>
-    	<option value="Double Header Key">Double Header Value</option>
-    	<option value=""></option>
-    	<option value="Right1">Right1</option>
-    	<option value="Right2" selected="selected">Right2</option>
-    	<option value="Right3">Right3</option>
-	</select>
-	<input type="button" onclick="moveOptionDown(document.getElementById('doubleId'), 'key', 'Double Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('doubleId'), 'key', 'Double Header Key');" value="^" />
-</td>
-</tr>
-</table>
-</td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-3.txt
deleted file mode 100644
index e98da10..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-3.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-<tr> 
-<td class="tdLabel"></td>
-<td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table border="0">
-<tr>
-<td>
-	<label for="leftTitle">Title Left</label><br/>
-	<select name="collection" size="20" id="id" multiple="multiple">
-    	<option value=""></option>
-    	<option value="Left1">Left1</option>
-    	<option value="Left2" selected="selected">Left2</option>
-    	<option value="Left3">Left3</option>
-	</select> 
-	<input type="button" onclick="moveOptionDown(document.getElementById('id'), 'key', '');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('id'), 'key', '');" value="^" />
-</td>
-<td valign="middle" align="center">
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Left" onclick="moveSelectedOptions(document.getElementById('doubleId'), document.getElementById('id'), false, '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Right" onclick="moveSelectedOptions(document.getElementById('id'), document.getElementById('doubleId'), false, '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Left" onclick="moveAllOptions(document.getElementById('doubleId'), document.getElementById('id'), false, '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Right" onclick="moveAllOptions(document.getElementById('id'), document.getElementById('doubleId'), false, '')" /><br/><br/>	
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Select All" onclick="selectAllOptions(document.getElementById('id'));selectAllOptions(document.getElementById('doubleId'));" /><br/><br/>
-</td>
-<td>
-	<label for="rightTitle">Title Right</label><br/>
-	<select 
-		name="list2"
-		size="20"		
-		multiple="multiple"
-		id="doubleId"
-	>
-    	<option value=""></option>
-    	<option value="Right1">Right1</option>
-    	<option value="Right2" selected="selected">Right2</option>
-    	<option value="Right3">Right3</option>
-	</select>
-	<input type="button" onclick="moveOptionDown(document.getElementById('doubleId'), 'key', '');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('doubleId'), 'key', '');" value="^" />
-</td>
-</tr>
-</table>
-</td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-4.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-4.txt
deleted file mode 100644
index c60e450..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-4.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-<tr> 
-<td class="tdLabel"></td>
-<td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table border="0">
-<tr>
-<td>
-	<label for="leftTitle">Title Left</label><br/>
-	<select name="collection" size="20" id="id" multiple="multiple">
-    	<option value="Header Key">Header Value</option>
-    	<option value=""></option>
-    	<option value="Left1">Left1</option>
-    	<option value="Left2" selected="selected">Left2</option>
-    	<option value="Left3">Left3</option>
-	</select> 
-	<input type="button" onclick="moveOptionDown(document.getElementById('id'), 'key', 'Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('id'), 'key', 'Header Key');" value="^" />
-</td>
-<td valign="middle" align="center">
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Left" onclick="moveSelectedOptions(document.getElementById('doubleId'), document.getElementById('id'), false, '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Right" onclick="moveSelectedOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Left" onclick="moveAllOptions(document.getElementById('doubleId'), document.getElementById('id'), false, '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Right" onclick="moveAllOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>	
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Select All" onclick="selectAllOptionsExceptSome(document.getElementById('id'), 'key', 'Header Key');selectAllOptions(document.getElementById('doubleId'));" /><br/><br/>
-</td>
-<td>
-	<label for="rightTitle">Title Right</label><br/>
-	<select 
-		name="list2"
-		size="20"		
-		multiple="multiple"
-		id="doubleId"
-	>
-    	<option value=""></option>
-    	<option value="Right1">Right1</option>
-    	<option value="Right2" selected="selected">Right2</option>
-    	<option value="Right3">Right3</option>
-	</select>
-	<input type="button" onclick="moveOptionDown(document.getElementById('doubleId'), 'key', '');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('doubleId'), 'key', '');" value="^" />
-	
-</td>
-</tr>
-</table>
-</td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-5.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-5.txt
deleted file mode 100644
index 04c0609..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-5.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-<tr> 
-<td class="tdLabel"></td> 
-<td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table border="0">
-<tr>
-<td>
-	<label for="leftTitle">Title Left</label><br/>
-	<select name="collection" size="20" id="id" multiple="multiple">
-    	<option value="Header Key">Header Value</option>
-    	<option value="Left1">Left1</option>
-    	<option value="Left2" selected="selected">Left2</option>
-    	<option value="Left3">Left3</option>
-	</select> 
-	<input type="button" onclick="moveOptionDown(document.getElementById('id'), 'key', 'Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('id'), 'key', 'Header Key');" value="^" />
-</td>
-<td valign="middle" align="center">
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Left" onclick="moveSelectedOptions(document.getElementById('doubleId'), document.getElementById('id'), false, 'Double Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Right" onclick="moveSelectedOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Left" onclick="moveAllOptions(document.getElementById('doubleId'), document.getElementById('id'), false, 'Double Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Right" onclick="moveAllOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>	
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Select All" onclick="selectAllOptionsExceptSome(document.getElementById('id'), 'key', 'Header Key');selectAllOptionsExceptSome(document.getElementById('doubleId'), 'key', 'Double Header Key');" /><br/><br/>
-</td>
-<td>
-	<label for="rightTitle">Title Right</label><br/>
-	<select 
-		name="list2"
-		size="20"		
-		multiple="multiple"
-		id="doubleId"
-	>
-    	<option value="Double Header Key">Double Header Value</option>
-    	<option value="Right1">Right1</option>
-    	<option value="Right2" selected="selected">Right2</option>
-    	<option value="Right3">Right3</option>
-	</select>
-	<input type="button" onclick="moveOptionDown(document.getElementById('doubleId'), 'key', 'Double Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('doubleId'), 'key', 'Double Header Key');" value="^" />
-</td>
-</tr>
-</table>
-</td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-6.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-6.txt
deleted file mode 100644
index 511d36e..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-6.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-<tr> 
-<td class="tdLabel"></td>
-<td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table border="0">
-<tr>
-<td>
-	<label for="leftTitle">Title Left</label><br/>
-	<select name="collection" size="20" id="id" multiple="multiple">
-    	<option value="Header Key">Header Value</option>
-    	<option value=""></option>
-    	<option value="Left1">Left1</option>
-    	<option value="Left2" selected="selected">Left2</option>
-    	<option value="Left3">Left3</option>
-	</select> 
-	<input type="button" onclick="moveOptionDown(document.getElementById('id'), 'key', 'Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('id'), 'key', 'Header Key');" value="^" />
-</td>
-<td valign="middle" align="center">
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Left" onclick="moveSelectedOptions(document.getElementById('doubleId'), document.getElementById('id'), false, 'Double Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Right" onclick="moveSelectedOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Left" onclick="moveAllOptions(document.getElementById('doubleId'), document.getElementById('id'), false, 'Double Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="All Right" onclick="moveAllOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>	
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Select All" onclick="selectAllOptionsExceptSome(document.getElementById('id'), 'key', 'Header Key');selectAllOptionsExceptSome(document.getElementById('doubleId'), 'key', 'Double Header Key');" /><br/><br/>
-</td>
-<td>
-	<label for="rightTitle">Title Right</label><br/>
-	<select 
-		name="list2"
-		size="20"		
-		multiple="multiple"
-		id="doubleId"
-	>
-    	<option value="Double Header Key">Double Header Value</option>
-    	<option value="Right1">Right1</option>
-    	<option value="Right2" selected="selected">Right2</option>
-    	<option value="Right3">Right3</option>
-	</select>
-	<input type="button" onclick="moveOptionDown(document.getElementById('doubleId'), 'key', 'Double Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('doubleId'), 'key', 'Double Header Key');" value="^" />
-</td>
-</tr>
-</table>
-</td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-7.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-7.txt
deleted file mode 100644
index bea9f53..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/optiontransferselect-7.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-<tr> 
-<td class="tdLabel"></td>
-<td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table border="0">
-<tr>
-<td>
-	<label for="leftTitle">Title Left</label><br/>
-	<select name="collection" size="20" id="id" multiple="multiple">
-    	<option value="Header Key">Header Value</option>
-    	<option value=""></option>
-    	<option value="Left1">Left1</option>
-    	<option value="Left2" selected="selected">Left2</option>
-    	<option value="Left3">Left3</option>
-	</select> 
-	<input type="button" onclick="moveOptionDown(document.getElementById('id'), 'key', 'Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('id'), 'key', 'Header Key');" value="^" />
-</td>
-<td valign="middle" align="center">
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Left" onclick="moveSelectedOptions(document.getElementById('doubleId'), document.getElementById('id'), false, 'Double Header Key', '')" /><br/><br/>
-	<input type="button" class="buttonCssClass" style="buttonCssStyle"
-			value="Right" onclick="moveSelectedOptions(document.getElementById('id'), document.getElementById('doubleId'), false, 'Header Key', '')" /><br/><br/>
-</td> 
-<td>
-	<label for="rightTitle">Title Right</label><br/>
-	<select 
-		name="list2"
-		size="20"		
-		multiple="multiple"
-		id="doubleId"
-	>
-    	<option value="Double Header Key">Double Header Value</option>
-    	<option value=""></option>
-    	<option value="Right1">Right1</option>
-    	<option value="Right2" selected="selected">Right2</option>
-    	<option value="Right3">Right3</option>
-	</select>
-	<input type="button" onclick="moveOptionDown(document.getElementById('doubleId'), 'key', 'Double Header Key');" value="v" />
-	<input type="button" onclick="moveOptionUp(document.getElementById('doubleId'), 'key', 'Double Header Key');" value="^" />
-</td>
-</tr>
-</table>
-</td>
-</tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/submit-ajax-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/submit-ajax-1.txt
deleted file mode 100644
index a731c7c..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/submit-ajax-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-<tr> <td class="tdLabel"></td><td align="right"><button type="submit" dojoType="BindButton" value="submit" targetDiv="formId" onLoad="alert('form submitted');" notifyTopics="b" listenTopics="a">submit</button></td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tooltip-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tooltip-1.txt
deleted file mode 100644
index e1c09e4..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tooltip-1.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-<form id="myFormId" name="myForm" onsubmit="return true;" action="/testAction.action" method="POST">
- <table class="wwFormTable"> 
-<tr>
-    <td class="tdLabel"><label for="myId" class="label">MyLabel:
-      <img id="_tt1507188919"
-      	src='/struts/tooltip/myTooltip.gif'
-      	alt="myTooltip" 
-      	title="myTooltip" />
-
-      <span dojoType="tooltip" connectId="_tt1507188919" delay="500"
-          caption="myTooltip"></span>
-	  </label></td>
-    <td><input type="text" name="" id="myId"/></td>
-</tr>
-</table>
-</form>
-
-<!-- javascript that is needed for tooltips -->
-<script language="JavaScript" type="text/javascript">dojo.require("dojo.widget.html.Tooltip");dojo.require("dojo.fx.html");</script>
-
-
-
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tooltip-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tooltip-2.txt
deleted file mode 100644
index 847f566..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tooltip-2.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-<form id="myFormId" name="myForm" onsubmit="return true;" action="/testAction.action" method="POST">
- <table class="wwFormTable"> 
-<tr>
-    <td class="tdLabel"><label for="myId" class="label">MyLabel:
-      <img id="_tt1507188919"
-      	src='/struts/tooltip/myTooltip.gif'
-      	alt="myTooltip" 
-      	title="myTooltip" />
-
-      <span dojoType="tooltip" connectId="_tt1507188919" delay="500"
-          caption="myTooltip"></span>
-	  </label></td>
-    <td><input type="text" name="" id="myId"/></td>
-</tr>
-</table>
-</form>
-
-<!-- javascript that is needed for tooltips -->
-<script language="JavaScript" type="text/javascript">dojo.require("dojo.widget.html.Tooltip");dojo.require("dojo.fx.html");</script>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tooltip-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tooltip-3.txt
deleted file mode 100644
index 2a84222..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tooltip-3.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-<form id="myFormId" name="myForm" onsubmit="return true;" action="/testAction.action" method="POST">
- <table class="wwFormTable"> 
-<tr>
-    <td class="tdLabel"><label for="myId" class="label">MyLabel:
-	  <img id="_tt1507188919"
-      	src='/struts/tooltip/myTooltip2.gif'
-      	alt="myTooltip" 
-      	title="myTooltip" />
-
-      <span dojoType="tooltip" connectId="_tt1507188919" delay="5000"
-          caption="myTooltip"></span>
-	  </label></td>
-    <td><input type="text" name="" id="myId"/></td>
-</tr>
-</table>
-</form>
-
-<!-- javascript that is needed for tooltips -->
-<script language="JavaScript" type="text/javascript">dojo.require("dojo.widget.html.Tooltip");dojo.require("dojo.fx.html");</script>
-
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tree-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tree-1.txt
deleted file mode 100644
index 069d7f5..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tree-1.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-<script language="JavaScript" type="text/javascript">
-        <!--
-        dojo.require("dojo.lang.*");
-        dojo.require("dojo.widget.*");
-        dojo.require("dojo.widget.Tree");
-        // dojo.hostenv.writeIncludes();
-        -->
- </script>
-<div dojoType="Tree"   
-		templateCssPath="/struts/tree.css"
-	showGrid="false"
-	showRootGrid="false"
-    id="rootId"
-    toggle="fade"
-    >
-    <div dojoType="TreeNode" title="Root" id="rootId_root"
-    >
-<div dojoType="TreeNode" 
-	    id="child1"
-    title="Child 1">
-</div>
-<div dojoType="TreeNode" 
-	    id="child2"
-    title="Child 2">
-<div dojoType="TreeNode" 
-	    id="gChild1"
-    title="Grand Child 1">
-</div>
-<div dojoType="TreeNode" 
-	    id="gChild2"
-    title="Grand Child 2">
-</div>
-<div dojoType="TreeNode" 
-	    id="gChild3"
-    title="Grand Child 3">
-</div>
-</div>
-<div dojoType="TreeNode" 
-	    id="child3"
-    title="Child 4">
-</div>
-</div></div>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tree-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tree-2.txt
deleted file mode 100644
index bac2e5f..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/tree-2.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-<script language="JavaScript" type="text/javascript">
-        <!--
-        dojo.require("dojo.lang.*");
-        dojo.require("dojo.widget.*");
-        dojo.require("dojo.widget.Tree");
-        // dojo.hostenv.writeIncludes();
-        -->
- </script>
-<div dojoType="Tree"   
-	    id="myTree"
-    toggle="fade"
-    >
-    
-<div dojoType="TreeNode" title="Root" id="1">
-    
-<div dojoType="TreeNode" title="Java" id="2">
-    
-<div dojoType="TreeNode" title="Web Frameworks" id="3">
-    
-<div dojoType="TreeNode" title="Struts" id="4">
-</div>
-    
-<div dojoType="TreeNode" title="Stripes" id="7">
-</div>
-    
-<div dojoType="TreeNode" title="Rife" id="8">
-</div>
-</div>
-    
-<div dojoType="TreeNode" title="Persistence" id="9">
-    
-<div dojoType="TreeNode" title="iBatis" id="10">
-</div>
-    
-<div dojoType="TreeNode" title="Hibernate" id="11">
-</div>
-    
-<div dojoType="TreeNode" title="JDO" id="12">
-</div>
-    
-<div dojoType="TreeNode" title="JDBC" id="13">
-</div>
-</div>
-</div>
-    
-<div dojoType="TreeNode" title="JavaScript" id="14">
-    
-<div dojoType="TreeNode" title="Dojo" id="15">
-</div>
-    
-<div dojoType="TreeNode" title="Prototype" id="16">
-</div>
-    
-<div dojoType="TreeNode" title="Scriptaculous" id="17">
-</div>
-    
-<div dojoType="TreeNode" title="OpenRico" id="18">
-</div>
-    
-<div dojoType="TreeNode" title="DWR" id="19">
-</div>
-</div>
-</div>
-</div>
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-1.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-1.txt
deleted file mode 100644
index 3f51a35..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-1.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-    <option value=""></option>
-    <option value="england" selected="selected">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia" selected="selected">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptions(document.getElementById('myId'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-10.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-10.txt
deleted file mode 100644
index a41c4ec..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-10.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-	<option value=""></option>
-    <option value="england">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="Move Up" onclick="moveOptionUp(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptions(document.getElementById('myId'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-11.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-11.txt
deleted file mode 100644
index bb322b2..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-11.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-	<option value=""></option>
-    <option value="england">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="Move Down" onclick="moveOptionDown(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptions(document.getElementById('myId'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-2.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-2.txt
deleted file mode 100644
index add362f..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-2.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-    <option value="england">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptions(document.getElementById('myId'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-3.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-3.txt
deleted file mode 100644
index 30992b4..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-3.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-	<option value="-1">--- Please Order ---</option>
-	<option value=""></option>
-    <option value="england">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myId'), 'key', '-1');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myId'), 'key', '-1');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptionsExceptSome(document.getElementById('myId'), 'key', '-1');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-4.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-4.txt
deleted file mode 100644
index 5f84a62..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-4.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-	<option value="-1">--- Please Order ---</option>
-    <option value="england">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myId'), 'key', '-1');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myId'), 'key', '-1');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptionsExceptSome(document.getElementById('myId'), 'key', '-1');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-5.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-5.txt
deleted file mode 100644
index 7b80541..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-5.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-	<option value=""></option>
-    <option value="england">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptions(document.getElementById('myId'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-6.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-6.txt
deleted file mode 100644
index c1d8ccd..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-6.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-	<option value=""></option>
-    <option value="england">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myId'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-7.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-7.txt
deleted file mode 100644
index 7b8d635..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-7.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-	<option value=""></option>
-    <option value="england">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptions(document.getElementById('myId'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-8.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-8.txt
deleted file mode 100644
index 3cbfbfc..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-8.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-	<option value=""></option>
-    <option value="england">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="*" onclick="selectAllOptions(document.getElementById('myId'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-9.txt b/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-9.txt
deleted file mode 100644
index d6067ce..0000000
--- a/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/updownselecttag-9.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-<tr> <td class="tdLabel"></td> <td>
-<script language="javascript" src="/struts/optiontransferselect.js"></script>
-<table>
-<tr><td>
-<select name="myName" size="5" id="myId" multiple="multiple">
-	<option value=""></option>
-    <option value="england">England</option>
-    <option value="america" selected="selected">America</option>
-    <option value="australia">Australia</option>
-    <option value="germany" selected="selected">Germany</option>
-</select></td></tr>
-<tr><td>
-		&nbsp;<input type="button" value="^" onclick="moveOptionUp(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="v" onclick="moveOptionDown(document.getElementById('myId'), 'key', '');" />&nbsp;
-		&nbsp;<input type="button" value="Select All" onclick="selectAllOptions(document.getElementById('myId'), 'key', '');" />&nbsp;
-</td></tr>
-</table>
-</td> </tr>
diff --git a/trunk/core/src/test/resources/struts.properties b/trunk/core/src/test/resources/struts.properties
deleted file mode 100644
index 5766ea5..0000000
--- a/trunk/core/src/test/resources/struts.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-struts.i18n.encoding=ISO-8859-1
-struts.locale=de_DE
-struts.multipart.saveDir=\temp
-struts.multipart.maxSize=12345
-
-### Load custom property files (does not override struts.properties!)
-struts.custom.properties=test,org/apache/struts2/othertest
-
-# added the MockTag to the path of Tags that the TagDirective will search through
-struts.velocity.tag.path = org.apache.struts2.views.velocity.ui, org.displaytag.tags
-
-struts.ui.templateDir = template
-
-### Load custom default resource bundles
-struts.custom.i18n.resources=testmessages,testmessages2
-
-### XSLT Cache
-struts.xslt.nocache = true
diff --git a/trunk/core/src/test/resources/struts.xml b/trunk/core/src/test/resources/struts.xml
deleted file mode 100644
index 2d773c6..0000000
--- a/trunk/core/src/test/resources/struts.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE struts PUBLIC
-          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-          "http://struts.apache.org/dtds/struts-2.0.dtd">
-<struts>
-	<include file="struts-default.xml" />
-    <package name="default" extends="struts-default">
-        <action name="hello" class="com.opensymphony.xwork2.ActionSupport">
-            <result name="success">hello.jsp</result>
-            <result name="tutorial" type="redirect">/tutorial/test.action</result>
-        </action>
-    </package>
-
-    <package name="tutorial" namespace="/tutorial" extends="struts-default">
-        <result-types>
-            <result-type name="freemarker" default="true"
-                         class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
-        </result-types>
-
-        <action name="test" class="com.opensymphony.xwork2.ActionSupport">
-            <result name="input">sitegraph/guess-input.ftl</result>
-        </action>
-    </package>
-
-    <package name="sitegraph" namespace="/tutorial/sitegraph" extends="struts-default">
-        <result-types>
-            <result-type name="freemarker" default="true"
-                         class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
-        </result-types>
-
-        <action name="guess" class="com.opensymphony.xwork2.ActionSupport">
-            <result name="success" type="redirect">guess-success.jsp</result>
-            <result name="input">guess-input.ftl</result>
-            <result name="error">guess-error.ftl</result>
-        </action>
-    </package>
-</struts>
diff --git a/trunk/core/src/test/resources/template/test/Component.ftl b/trunk/core/src/test/resources/template/test/Component.ftl
deleted file mode 100644
index dbda224..0000000
--- a/trunk/core/src/test/resources/template/test/Component.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-param hello     = ${parameters.hello}
-param argle     = ${parameters.argle}
-param glip      = ${parameters.glip}
-param obj.Class = ${parameters.obj.class}
-
-<#list parameters.array as element>
-param array[${element_index}] = ${element}
-</#list>
diff --git a/trunk/core/src/test/resources/template/test/checkbox.jsp b/trunk/core/src/test/resources/template/test/checkbox.jsp
deleted file mode 100644
index dc82fcc..0000000
--- a/trunk/core/src/test/resources/template/test/checkbox.jsp
+++ /dev/null
@@ -1,11 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<input type="checkbox" <s:if test="parameters['nameValue']">checked="checked"</s:if>
-   name="<s:property value="parameters['name']"/>"
-   value="<s:property value="parameters['fieldValue']"/>"
-    <s:if test="parameters['disabled']">disabled="disabled"</s:if>
-    <s:if test="parameters['tabindex'] != null">tabindex="<s:property value="parameters['tabindex']"/>"</s:if>
-    <s:if test="parameters['onchange'] != null">onchange="<s:property value="parameters['onchange']"/>"</s:if>
-    <s:if test="parameters['onclick'] != null">onclick="<s:property value="parameters['onclick']"/>"</s:if>
-    <s:if test="parameters['id'] != null">id="<s:property value="parameters['id']"/>"</s:if>
-/>
diff --git a/trunk/core/src/test/resources/test.properties b/trunk/core/src/test/resources/test.properties
deleted file mode 100644
index 8ec9331..0000000
--- a/trunk/core/src/test/resources/test.properties
+++ /dev/null
@@ -1 +0,0 @@
-testkey=testvalue
diff --git a/trunk/core/src/test/resources/testmessages.properties b/trunk/core/src/test/resources/testmessages.properties
deleted file mode 100644
index 3987438..0000000
--- a/trunk/core/src/test/resources/testmessages.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-default.testmessage=This is a test message
-struts.messages.invalid.token=Replaced message for token tag
diff --git a/trunk/core/src/test/resources/testmessages2.properties b/trunk/core/src/test/resources/testmessages2.properties
deleted file mode 100644
index 12472b8..0000000
--- a/trunk/core/src/test/resources/testmessages2.properties
+++ /dev/null
@@ -1 +0,0 @@
-default.testmessage2=This is another test message
diff --git a/trunk/core/src/test/resources/validators.xml b/trunk/core/src/test/resources/validators.xml
deleted file mode 100644
index 4bd0842..0000000
--- a/trunk/core/src/test/resources/validators.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<validators>
-    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
-    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
-    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
-    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
-    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
-    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
-    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
-    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
-    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
-    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
-    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
-    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
-    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
-</validators>
diff --git a/trunk/docs/tags/ActionComponent.html b/trunk/docs/tags/ActionComponent.html
deleted file mode 100644
index 476cfc2..0000000
--- a/trunk/docs/tags/ActionComponent.html
+++ /dev/null
@@ -1,136 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:action /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:action /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Execute an action from within a view
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>This tag enables developers to call actions directly from a JSP page by specifying the action name and an optional namespace. The body content of the tag is used to render the results from the Action. Any result processor defined for this action in xwork.xml will be ignored, <i>unless</i> the executeResult parameter is specified.</p> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>id (String) - the id (if specified) to put the action under stack's context. <li>name* (String) - name of the action to be executed (without the extension suffix eg. .action)</li> <li>namespace (String) - default to the namespace where this action tag is invoked</li> <li>executeResult (Boolean) - default is false. Decides wheather the result of this action is to be executed or not</li> <li>ignoreContextParams (Boolean) - default to false. Decides wheather the request parameters are to be included when the action is invoked</li> </ul> <!-- END SNIPPET: params --> <pre> <!-- START SNIPPET: javacode --> public class ActionTagAction extends ActionSupport { public String execute() throws Exception { return "done"; } public String doDefault() throws Exception { ServletActionContext.getRequest().setAttribute("stringByAction", "This is a String put in by the action's doDefault()"); return "done"; } } <!-- END SNIPPET: javacode --> </pre> <pre> <!-- START SNIPPET: strutsxml --> <xwork> .... <action name="actionTagAction1" class="tmjee.testing.ActionTagAction"> <result name="done">success.jsp</result> </action> <action name="actionTagAction2" class="tmjee.testing.ActionTagAction" method="default"> <result name="done">success.jsp</result> </action> .... </xwork> <!-- END SNIPPET: strutsxml --> </pre> <pre> <!-- START SNIPPET: example --> <div>The following action tag will execute result and include it in this page</div> <br /> <a:action name="actionTagAction" executeResult="true" /> <br /> <div>The following action tag will do the same as above, but invokes method specialMethod in action</div> <br /> <a:action name="actionTagAction!specialMethod" executeResult="true" /> <br /> <div>The following action tag will not execute result, but put a String in request scope under an id "stringByAction" which will be retrieved using property tag</div> <a:action name="actionTagAction!default" executeResult="false" /> <a:property value="#attr.stringByAction" /> <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">the id (if speficied) to put the action under stack's context.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">name of the action to be executed (without the extension suffix eg. .action)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">namespace</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">namespace from where tag is used</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">namespace for action to call</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">executeResult</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">whether the result of this action (probably a view) should be executed/rendered</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ignoreContextParams</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">whether the request parameters are to be included when the action is invoked</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/ActionError.html b/trunk/docs/tags/ActionError.html
deleted file mode 100644
index 5ff5404..0000000
--- a/trunk/docs/tags/ActionError.html
+++ /dev/null
@@ -1,622 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:actionerror /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:actionerror /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render action errors if they exists
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render action errors if they exists the specific layout of the rendering depends on the theme itself. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:actionerror /&gt; &lt;a:form .... &gt;> .... &lt;/a:form&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/ActionMessage.html b/trunk/docs/tags/ActionMessage.html
deleted file mode 100644
index 1c40212..0000000
--- a/trunk/docs/tags/ActionMessage.html
+++ /dev/null
@@ -1,622 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:actionmessage /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:actionmessage /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render action messages if they exists
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render action messages if they exists, specific rendering layout depends on the theme itself. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:actionmessage /&gt; &lt;a:form .... &gt; .... &lt;/a:form&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Anchor.html b/trunk/docs/tags/Anchor.html
deleted file mode 100644
index 663d666..0000000
--- a/trunk/docs/tags/Anchor.html
+++ /dev/null
@@ -1,748 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:a /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:a /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a HTML href element that when clicked calls a URL via remote XMLHttpRequest
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> A tag that creates a HTML &lt;a href='' /&gt; that when clicked calls a URL remote XMLHttpRequest call via the dojo framework. The result from the URL is executed as JavaScript. If a "listenTopics" is supplied, it will publish a 'click' message to that topic when the result is returned. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example1 --> &lt;a:a id="link1" theme="ajax" href="/DoIt.action" errorText="An error ocurred" showErrorTransportText="true"&gt; &lt;img border="none" src="&lt;%=request.getContextPath()%&gt;/images/delete.gif"/&gt; &lt;a:param name="id" value="1"/&gt; &lt;/a:a&gt; <!-- END SNIPPET: example1 --> </pre> </p> <!-- START SNIPPET: exampledescription1 --> Results in <!-- END SNIPPET: exampledescription1 --> </p> <pre> <!-- START SNIPPET: example2 --> &lt;a dojoType="BindAnchor" evalResult="true" id="link1" href="/DoIt.action?id=1" errorHtml="An error ocurred" showTransportError="true"&gt;&lt;/a&gt; <!-- END SNIPPET: example2 --> </pre> </p> <!-- START SNIPPET: exampledescription2 --> Here is an example that uses the postInvokeJS. This example is in altSyntax=true: <!-- END SNIPPET: exampledescription2 --> </p> <pre> <!-- START SNIPPET: example3 --> &lt;a:a id="test" theme="ajax" href="/simpeResult.action" preInvokeJS="confirm(\'You sure\')"&gt; A &lt;/a:a&gt; <!-- END SNIPPET: example3 --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The id to assign the component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">notifyTopics</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Topic names to post an event to after the remote call has been made</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">preInvokeJS</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">A javascript snippet that will be invoked prior to the execution of the target href. If provided must return true or false. True indicates to continue executing target, false says do not execute link target. Possible uses are for confirm dialogs.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme to use for the element. <b>This tag will usually use the ajax theme.</b></td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">href</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The URL to call to obtain the content</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">errorText</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The text to display to the user if the is an error fetching the content</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">showErrorTransportText</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">when to show the error message as content when the URL had problems</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">afterLoading</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Javascript code that will be executed after the content has been fetched</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">openTemplate</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set template to use for opening the rendered html.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/AppendIterator.html b/trunk/docs/tags/AppendIterator.html
deleted file mode 100644
index e1a9b4c..0000000
--- a/trunk/docs/tags/AppendIterator.html
+++ /dev/null
@@ -1,64 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:append /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:append /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Append the values of a list of iterators to one iterator
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>Component for AppendIteratorTag, which jobs is to append iterators to form an appended iterator whereby entries goes from one iterator to another after each respective iterator is exhausted of entries.</p> <p>For example, if there are 3 iterator appended (each iterator has 3 entries), the following will be how the appended iterator entries will be arranged:</p> <ol> <li>First Entry of the First Iterator</li> <li>Second Entry of the First Iterator</li> <li>Third Entry of the First Iterator</li> <li>First Entry of the Second Iterator</li> <li>Second Entry of the Second Iterator</li> <li>Third Entry of the Second Iterator</li> <li>First Entry of the Third Iterator</li> <li>Second Entry of the Third Iterator</li> <li>Third Entry of the Third ITerator</li> </ol> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>id (String) - the id of which if supplied will have the resultant appended iterator stored under in the stack's context</li> </ul> <!-- END SNIPPET: params --> <!-- START SNIPPET: code --> public class AppendIteratorTagAction extends ActionSupport { private List myList1; private List myList2; private List myList3; public String execute() throws Exception { myList1 = new ArrayList(); myList1.add("1"); myList1.add("2"); myList1.add("3"); myList2 = new ArrayList(); myList2.add("a"); myList2.add("b"); myList2.add("c"); myList3 = new ArrayList(); myList3.add("A"); myList3.add("B"); myList3.add("C"); return "done"; } public List getMyList1() { return myList1; } public List getMyList2() { return myList2; } public List getMyList3() { return myList3; } } <!-- END SNIPPET: code --> <!-- START SNIPPET: example --> &lt;a:append id="myAppendIterator"&gt; &lt;a:param value="%{myList1}" /&gt; &lt;a:param value="%{myList2}" /&gt; &lt;a:param value="%{myList3}" /&gt; &lt;/a:append&gt; &lt;a:iterator value="%{#myAppendIterator}"&gt; &lt;a:property /&gt; &lt;/a:iterator&gt; <!-- END SNIPPET: example -->
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">the id of which if supplied will have the resultant appended iterator stored under in the stack's context</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Bean.html b/trunk/docs/tags/Bean.html
deleted file mode 100644
index b70ec41..0000000
--- a/trunk/docs/tags/Bean.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:bean /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:bean /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Instantiate a JavaBean and place it in the context.
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>Instantiates a class that conforms to the JavaBeans specification. This tag has a body which can contain a number of {@link Param} elements to set any mutator methods on that class.</p> <p/> <p>If the id attribute is set on the BeanTag, it will place the instantiated bean into the stack's Context.</p> <p/> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>id - the stack's context id (if supplied) that the created bean will be store under</li> <li>name* - the class name of the bean to be instantiated (must respect JavaBean specification)</li> </ul> <!-- END SNIPPET: params --> <p>Examples:</p> <p/> <pre> <!-- START SNIPPET: examples --> &lt;-- in freemarker form --&gt; [ww.bean name="org.apache.struts2.example.counter.SimpleCounter" id="counter"] [a:param name="foo" value="BAR"/] The value of foo is : [a:property value="foo"/], when inside the bean tag.<br /> [/a:bean] &lt;-- in jsp form --&gt; &lt;a:bean name="org.apache.struts2.example.counter.SimpleCounter" id="counter"&gt; &lt;a:param name="foo" value="BAR" /&gt; The value of foot is : &lt;a:property value="foo"/&gt;, when inside the bean tag &lt;br /&gt; &lt;/a:bean&gt; <!-- END SNIPPET: examples --> </pre> <p/> <!-- START SNIPPET: examplesdescription --> <p>This example instantiates a bean called SimpleCounter and sets the foo property (setFoo('BAR')). The SimpleCounter object is then pushed onto the Valuestack, which means that we can called its accessor methods (getFoo()) with the Property tag and get their values.</p> <p/> <p>In the above example, the id has been set to a value of <i>counter</i>. This means that the SimpleCounter class will be placed into the stack's context. You can access the SimpleCounter class using WW's tag:</p> <p/> <pre> &lt;-- jsp form --&gt; &lt;a:property value="#counter" /&gt; &lt;-- freemarker form --&gt; [a:property value="#counter.foo"/] </pre> <p/> <p>In the property tag example, the <i>#</i> tells Ognl to search the context for the SimpleCounter class which has an id(key) of <i>counter</i></p> <!-- END SNIPPET: examplesdescription -->
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">the class name of the bean to be instantiated (must respect JavaBean specification)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Checkbox.html b/trunk/docs/tags/Checkbox.html
deleted file mode 100644
index a534415..0000000
--- a/trunk/docs/tags/Checkbox.html
+++ /dev/null
@@ -1,640 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:checkbox /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:checkbox /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a checkbox input field
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Renders an HTML input element of type checkbox, populated by the specified property from the OgnlValueStack. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> JSP: &lt;a:checkbox label="checkbox test" name="checkboxField1" value="aBoolean" fieldValue="true"/&gt; Velocity: #tag( Checkbox "label=checkbox test" "name=checkboxField1" "value=aBoolean" ) Resulting HTML (simple template, aBoolean == true): &lt;input type="checkbox" name="checkboxField1" value="true" checked="checked" /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">fieldValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">'true'</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The actual HTML value attribute of the checkbox.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/CheckboxList.html b/trunk/docs/tags/CheckboxList.html
deleted file mode 100644
index b10df56..0000000
--- a/trunk/docs/tags/CheckboxList.html
+++ /dev/null
@@ -1,676 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:checkboxlist /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:checkboxlist /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a list of checkboxes
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Creates a series of checkboxes from a list. Setup is like &lt;a:select /&gt; or &lt;a:radio /&gt;, but creates checkbox tags. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:checkboxlist name="foo" list="bar"/&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">list</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field value from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field content from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/ComboBox.html b/trunk/docs/tags/ComboBox.html
deleted file mode 100644
index 93e3b0b..0000000
--- a/trunk/docs/tags/ComboBox.html
+++ /dev/null
@@ -1,802 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:combobox /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:combobox /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Widget that fills a text box from a select
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> The combo box is basically an HTML INPUT of type text and HTML SELECT grouped together to give you a combo box functionality. You can place text in the INPUT control by using the SELECT control or type it in directly in the text field.<p/> In this example, the SELECT will be populated from id=year attribute. Counter is itself an Iterator. It will span from first to last. The population is done via javascript, and requires that this tag be surrounded by a &lt;form&gt;.<p/> Note that unlike the &lt;a:select/&gt; tag, there is no ability to define the individual &lt;option&gt; tags' id attribute or content separately. Each of these is simply populated from the toString() method of the list item. Presumably this is because the select box isn't intended to actually submit useful data, but to assist the user in filling out the text field.<p/> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> JSP: &lt;-- Example One --&gt; &lt;a:bean name="struts.util.Counter" id="year"&gt; &lt;a:param name="first" value="text('firstBirthYear')"/&gt; &lt;a:param name="last" value="2000"/&gt; &lt;a:combobox label="Birth year" size="6" maxlength="4" name="birthYear" list="#year"/&gt; &lt;/a:bean&gt; &lt;-- Example Two --&gt; <a:combobox label="My Favourite Fruit" name="myFavouriteFruit" list="{'apple','banana','grape','pear'}" headerKey="-1" headerValue="--- Please Select ---" emptyOption="true" value="banana" /> &lt;-- Example Two --&gt; <a:combobox label="My Favourite Color" name="myFavouriteColor" list="#{'red':'red','green':'green','blue':'blue'}" headerKey="-1" headerValue="--- Please Select ---" emptyOption="true" value="green" /> Velocity: #tag( ComboBox "label=Birth year" "size=6" "maxlength=4" "name=birthYear" "list=#year" ) <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">list</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Iteratable source to populate from. If this is missing, the select widget is simply not displayed.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">emptyOption</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decide if an empty option is to be inserted. Default false.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">headerKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set the header key for the header option.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">headerValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set the header value for the header option.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set the key used to retrive the option key.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set the value used to retrive the option value.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">maxlength</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML maxlength attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">maxLength</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Deprecated. Use maxlength instead.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">readonly</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether the input is readonly</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">size</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML size attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Date.html b/trunk/docs/tags/Date.html
deleted file mode 100644
index 2e2e9c7..0000000
--- a/trunk/docs/tags/Date.html
+++ /dev/null
@@ -1,118 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:date /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:date /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a formatted date.
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Format Date object in different ways. <p> The date tag will allow you to format a Date in a quick and easy way. You can specify a <b>custom format</b> (eg. "dd/MM/yyyy hh:mm"), you can generate <b>easy readable notations</b> (like "in 2 hours, 14 minutes"), or you can just fall back on a <b>predefined format</b> with key 'struts.date.format' in your properties file. If that key is not defined, it will finally fall back to the default DateFormat.MEDIUM formatting. <b>Note</b>: If the requested Date object isn't found on the stack, a blank will be returned. </p> Configurable attributes are :- <ul> <li>name</li> <li>nice</li> <li>format</li> </ul> <p/> Following how the date component will work, depending on the value of nice attribute (which by default is false) and the format attribute. <p/> <b><u>Condition 1: With nice attribute as true</u></b> <table border="1"> <tr> <td>i18n key</td> <td>default</td> </tr> <tr> <td>struts.date.format.past</td> <td>{0} ago</td> </tr> <tr> <td>struts.date.format.future</td> <td>in {0}</td> </tr> <tr> <td>struts.date.format.seconds</td> <td>an instant</td> </tr> <tr> <td>struts.date.format.minutes</td> <td>{0,choice,1#one minute|1<{0} minutes}</td> </tr> <tr> <td>struts.date.format.hours</td> <td>{0,choice,1#one hour|1<{0} hours}{1,choice,0#|1#, one minute|1<, {1} minutes}</td> </tr> <tr> <td>struts.date.format.days</td> <td>{0,choice,1#one day|1<{0} days}{1,choice,0#|1#, one hour|1<, {1} hours}</td> </tr> <tr> <td>struts.date.format.years</td> <td>{0,choice,1#one year|1<{0} years}{1,choice,0#|1#, one day|1<, {1} days}</td> </tr> </table> <p/> <b><u>Condition 2: With nice attribute as false and format attribute is specified eg. dd/MM/yyyyy </u></b> <p>In this case the format attribute will be used.</p> <p/> <b><u>Condition 3: With nice attribute as false and no format attribute is specified </u></b> <table border="1"> <tr> <td>i18n key</td> <td>default</td> </tr> <tr> <td>struts.date.format</td> <td>if one is not found DateFormat.MEDIUM format will be used</td> </tr> </table> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:date name="person.birthday" format="dd/MM/yyyy" /&gt; &lt;a:date name="person.birthday" format="%{getText('some.i18n.key')}" /&gt; &lt;a:date name="person.birthday" nice="true" /&gt; &lt;a:date name="person.birthday" /&gt; <!-- END SNIPPET: example --> </pre> <code>Date</code>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">format</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Date or DateTime format pattern</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">nice</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether to print out the date nicely</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The date value to format</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/DatePicker.html b/trunk/docs/tags/DatePicker.html
deleted file mode 100644
index 0460447..0000000
--- a/trunk/docs/tags/DatePicker.html
+++ /dev/null
@@ -1,766 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:datepicker /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:datepicker /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render datepicker
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Renders datepicker element.</p> Check locale and format settings if you used the old widget in your applications. Be sure to include proper stylesheet as described below if you don't want the calender widget to look transparent.</p> <b>Important:</b> Be sure to set the id attributs if not used within a &lt;a:form /&gt; tag, as it takes care of setting the id for you, being required to copy selected date to text input element.</p> Following a reference for the format parameter (copied from jscalendar documentation): <table border=0><tr><td valign=top ></td></tr> <tr><td valign=top ><tt>%a</tt> </td><td valign=top >abbreviated weekday name </td></tr> <tr><td valign=top ><tt>%A</tt> </td><td valign=top >full weekday name </td></tr> <tr><td valign=top ><tt>%b</tt> </td><td valign=top >abbreviated month name </td></tr> <tr><td valign=top ><tt>%B</tt> </td><td valign=top >full month name </td></tr> <tr><td valign=top ><tt>%C</tt> </td><td valign=top >century number </td></tr> <tr><td valign=top ><tt>%d</tt> </td><td valign=top >the day of the month ( 00 .. 31 ) </td></tr> <tr><td valign=top ><tt>%e</tt> </td><td valign=top >the day of the month ( 0 .. 31 ) </td></tr> <tr><td valign=top ><tt>%H</tt> </td><td valign=top >hour ( 00 .. 23 ) </td></tr> <tr><td valign=top ><tt>%I</tt> </td><td valign=top >hour ( 01 .. 12 ) </td></tr> <tr><td valign=top ><tt>%j</tt> </td><td valign=top >day of the year ( 000 .. 366 ) </td></tr> <tr><td valign=top ><tt>%k</tt> </td><td valign=top >hour ( 0 .. 23 ) </td></tr> <tr><td valign=top ><tt>%l</tt> </td><td valign=top >hour ( 1 .. 12 ) </td></tr> <tr><td valign=top ><tt>%m</tt> </td><td valign=top >month ( 01 .. 12 ) </td></tr> <tr><td valign=top ><tt>%M</tt> </td><td valign=top >minute ( 00 .. 59 ) </td></tr> <tr><td valign=top ><tt>%n</tt> </td><td valign=top >a newline character </td></tr> <tr><td valign=top ><tt>%p</tt> </td><td valign=top >``PM'' or ``AM'' </td></tr> <tr><td valign=top ><tt>%P</tt> </td><td valign=top >``pm'' or ``am'' </td></tr> <tr><td valign=top ><tt>%S</tt> </td><td valign=top >second ( 00 .. 59 ) </td></tr> <tr><td valign=top ><tt>%s</tt> </td><td valign=top >number of seconds since Epoch (since Jan 01 1970 00:00:00 UTC) </td></tr> <tr><td valign=top ><tt>%t</tt> </td><td valign=top >a tab character </td></tr> <tr><td valign=top ><tt>%U, %W, %V</tt> </td><td valign=top >the week number</td></tr> <tr><td valign=top ><tt>%u</tt> </td><td valign=top >the day of the week ( 1 .. 7, 1 = MON )</td></tr> <tr><td valign=top ><tt>%w</tt> </td><td valign=top >the day of the week ( 0 .. 6, 0 = SUN )</td></tr> <tr><td valign=top ><tt>%y</tt> </td><td valign=top >year without the century ( 00 .. 99 )</td></tr> <tr><td valign=top ><tt>%Y</tt> </td><td valign=top >year including the century ( ex. 1979 )</td></tr> <tr><td valign=top ><tt>%%</tt> </td><td valign=top >a literal <tt>%</tt> character </td></tr></table><p> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: expl1 --> Date in application's locale format: &lt;a:datepicker name="order.date" id="order.date" /&gt; Date in german locale, with german texts: &lt;a:datepicker name="delivery.date" id="delivery.date" template="datepicker_js.ftl" language="de" /&gt; Date in german locale, with german texts and custom date format, including time: &lt;a:datepicker name="invoice.date" id="invoice.date" template="datepicker_js.ftl" language="de" format="%d. %b &Y %H:%M" showstime="true" /&gt; <!-- END SNIPPET: expl1 --> </pre> <p/> <!-- START SNIPPET: expldesc2 --> If you use this jscalendar based datepicker widget, you might want to use one of the standard stylesheets provided with jscalendar (all distribution stylesheets are included in struts jar). The easiest way to do so is to place the &lt;a:head/&gt; tag in the head of your html page, as it takes care of including calendar css. Otherwise, to manually activate the calendar-blue style, include the following in your stylesheet definition: <!-- END SNIPPET: expldesc2 --> <pre> <!-- START SNIPPET: expl2 --> &lt;link href="&lt;a:url value="/struts/jscalendar/calendar-blue.css" /&gt;" rel="stylesheet" type="text/css" media="all"/&gt; <!-- END SNIPPET: expl2 --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">language</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">The language of the current Locale</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The language to use for the widget texts and localization presets.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">format</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">Dateformat specified by language preset (%Y/%m/%d for en)</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The format to use for date field.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">showstime</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether time selector is to be shown. Valid values are &quot;true&quot;, &quot;false&quot;, &quot;24&quot; and &quot;12&quot;.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">singleclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether to use selected value after single or double click.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">maxlength</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML maxlength attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">maxLength</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Deprecated. Use maxlength instead.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">readonly</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether the input is readonly</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">size</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML size attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Debug.html b/trunk/docs/tags/Debug.html
deleted file mode 100644
index 665753b..0000000
--- a/trunk/docs/tags/Debug.html
+++ /dev/null
@@ -1,604 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:debug /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:debug /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render debug tag
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>Renders an debug tag.</P> The debug information contain mostly stack information: <ul> <li>Value Stack Contents</li> <li>Stack Context</li> </ul> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:debug/&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Div.html b/trunk/docs/tags/Div.html
deleted file mode 100644
index ab36e46..0000000
--- a/trunk/docs/tags/Div.html
+++ /dev/null
@@ -1,784 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:div /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:div /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render HTML div providing content from remote call via AJAX
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> The div tag is primarily an AJAX tag, providing a remote call from the current page to update a section of content without having to refresh the entire page.<p/> It creates a HTML &lt;DIV /&gt; that obtains it's content via a remote XMLHttpRequest call via the dojo framework.<p/> If a "listenTopics" is supplied, it will listen to that topic and refresh it's content when any message is received.<p/> <!-- END SNIPPET: javadoc --> <b>Important:</b> Be sure to setup the page containing this tag to be Configured for AJAX</p> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:div ... /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">updateFreq</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">0</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">How often to re-fetch the content (in milliseconds)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">delay</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">0</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">How long to wait before fetching the content (in milliseconds)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">loadingText</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The text to display to the user while the new content is being fetched (especially good if the content will take awhile)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listenTopics</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Topic name to listen to (comma delimited), that will cause the DIV's content to be re-fetched</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme to use for the element. <b>This tag will usually use the ajax theme.</b></td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">href</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The URL to call to obtain the content</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">errorText</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The text to display to the user if the is an error fetching the content</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">showErrorTransportText</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">when to show the error message as content when the URL had problems</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">afterLoading</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Javascript code that will be executed after the content has been fetched</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">openTemplate</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set template to use for opening the rendered html.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/DoubleSelect.html b/trunk/docs/tags/DoubleSelect.html
deleted file mode 100644
index cd63471..0000000
--- a/trunk/docs/tags/DoubleSelect.html
+++ /dev/null
@@ -1,1324 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:doubleselect /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:doubleselect /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Renders two HTML select elements with second one changing displayed values depending on selected entry of first one.
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Renders two HTML select elements with second one changing displayed values depending on selected entry of first one. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:doubleselect label="doubleselect test1" name="menu" list="{'fruit','other'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" /&gt; &lt;a:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruits', 'other':'Other Dishes'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleList</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The second iterable source to populate from.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleListKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The key expression to use for second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleListValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The value expression to use for second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleName</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name for complete component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The value expression for complete component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">formName</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The form name this component resides in and populates to</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleCssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class for the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleCssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style for the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleHeaderKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The header key for the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleHeaderValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The header value for the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleEmptyOption</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decides if the second list will add an empty option</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleDisabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decides if a disable attribute should be added to the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleId</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The id of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleMultiple</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decides if multiple attribute should be set on the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onblur attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onchange attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onclick attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOndblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the ondbclick attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onfocus attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onkeydown attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onkeypress attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onkeyup attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onmousedown attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onmousemove attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onmouseout attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onmouseover attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onmouseup attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onselect attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleSize</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the size attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleListKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the list key of the second attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">emptyOption</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decides of an empty option is to be inserted in the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">headerKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the header key of the second list. Must not be empty! "'-1'" and "''" is correct, "" is bad.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">headerValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the header value of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">multiple</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">size</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">Size of the element box (# of elements to show)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleAccesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">list</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field value from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field content from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Else.html b/trunk/docs/tags/Else.html
deleted file mode 100644
index d40b272..0000000
--- a/trunk/docs/tags/Else.html
+++ /dev/null
@@ -1,64 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:else /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:else /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Else tag
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>Perform basic condition flow. 'If' tag could be used by itself or with 'Else If' Tag and/or single/multiple 'Else' Tag.</p> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> no params <!-- END SNIPPET: params --> <pre> <!-- START SNIPPET: example --> &lt;a:if test="%{false}"&gt; &lt;div&gt;Will Not Be Executed&lt;/div&gt; &lt;/a:if&gt; &lt;a:elseif test="%{true}"&gt; &lt;div&gt;Will Be Executed&lt;/div&gt; &lt;/a:elseif&gt; &lt;a:else&gt; &lt;div&gt;Will Not Be Executed&lt;/div&gt; &lt;/a:else&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/ElseIf.html b/trunk/docs/tags/ElseIf.html
deleted file mode 100644
index 39cf18c..0000000
--- a/trunk/docs/tags/ElseIf.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:elseif /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:elseif /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Elseif tag
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>Perform basic condition flow. 'If' tag could be used by itself or with 'Else If' Tag and/or single/multiple 'Else' Tag.</p> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>test* (Boolean) - Logic to determined if body of tag is to be displayed</li> </ul> <!-- END SNIPPET: params --> <pre> <!-- START SNIPPET: example --> &lt;a:if test="%{false}"&gt; &lt;div&gt;Will Not Be Executed&lt;/div&gt; &lt;/a:if&gt; &lt;a:elseif test="%{true}"&gt; &lt;div&gt;Will Be Executed&lt;/div&gt; &lt;/a:elseif&gt; &lt;a:else&gt; &lt;div&gt;Will Not Be Executed&lt;/div&gt; &lt;/a:else&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">test</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Expression to determine if body of tag is to be displayed</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/FieldError.html b/trunk/docs/tags/FieldError.html
deleted file mode 100644
index 0916969..0000000
--- a/trunk/docs/tags/FieldError.html
+++ /dev/null
@@ -1,622 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:fielderror /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:fielderror /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render field error (all or partial depending on param tag nested)if they exists
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render field errors if they exists. Specific layout depends on the particular theme. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;!-- example 1 --&gt; &lt;a:fielderror /&gt; &lt;!-- example 2 --&gt; &lt;a:fielderror&gt; &lt;a:param&gt;field1&lt;/a:param&gt; &lt;a:param&gt;field2&lt;/a:param&gt; &lt;/a:fielderror&gt; &lt;a:form .... &gt;> .... &lt;/a:form&gt; OR &lt;a:fielderror&gt; &lt;a:param value="%{'field1'}" /&gt; &lt;a:param value="%{'field2'}" /&gt; &lt;/a:fielderror&gt; &lt;a:form .... &gt;> .... &lt;/a:form&gt; <!-- END SNIPPET: example --> </pre> <p/> <b>Description</b><p/> <pre> <!-- START SNIPPET: description --> Example 1: display all field errors<p/> Example 2: display field errors only for 'field1' and 'field2'<p/> <!-- END SNIPPET: description --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/File.html b/trunk/docs/tags/File.html
deleted file mode 100644
index a02ff1f..0000000
--- a/trunk/docs/tags/File.html
+++ /dev/null
@@ -1,658 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:file /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:file /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a file input field
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Renders an HTML file input element. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:file name="anUploadFile" accept="text/*" /&gt; &lt;a:file name="anohterUploadFIle" accept="text/html,text/plain" /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accept</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML accept attribute to indicate accepted file mimetypes</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">size</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML size attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Form.html b/trunk/docs/tags/Form.html
deleted file mode 100644
index fbaa65e..0000000
--- a/trunk/docs/tags/Form.html
+++ /dev/null
@@ -1,820 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:form /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:form /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Renders an input form
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p/> Renders HTML an input form.<p/> <p/> The remote form allows the form to be submitted without the page being refreshed. The results from the form can be inserted into any HTML element on the page.<p/> <p/> NOTE:<p/> The order / logic in determining the posting url of the generated HTML form is as follows:- <ol> <li> If the action attribute is not specified, then the current request will be used to determine the posting url </li> <li> If the action is given, SAF will try to obtain an ActionConfig. This will be successfull if the action attribute is a valid action alias defined xwork.xml. </li> <li> If the action is given and is not an action alias defined in xwork.xmlm SAF will used the action attribute as if it is the posting url, separting the namespace from it and using UrlHelper to generate the final url. </li> </ol> <p/> <!-- END SNIPPET: javadoc --> <p/> <p/> <b>Examples</b> <p/> <pre> <!-- START SNIPPET: example --> <p/> &lt;a:form ... /&gt; <p/> <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onsubmit</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML onsubmit attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">action</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">current action</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set action nane to submit to, without .action suffix</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">target</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML form target attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">enctype</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML form enctype attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">method</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML form method attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">namespace</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">current namespace</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">namespace for action to submit to</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">validate</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether client side/remote validation should be performed. Only useful with theme xhtml/ajax</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">portletMode</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The portlet mode to display after the form submit</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">windowState</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The window state to display after the form submit</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">acceptcharset</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The accepted charsets for this form. The values may be comma or blank delimited.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">openTemplate</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set template to use for opening the rendered html.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/GenericUIBean.html b/trunk/docs/tags/GenericUIBean.html
deleted file mode 100644
index 8139280..0000000
--- a/trunk/docs/tags/GenericUIBean.html
+++ /dev/null
@@ -1,622 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:component /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:component /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a custom ui widget
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Renders an custom UI widget using the specified templates. Additional objects can be passed in to the template using the param tags.<p/> <b>Freemarker:</b><p/> Objects provided can be retrieve from within the template via $parameters._paramname_.<p/> <b>Jsp:</b><p/> Objects provided can be retrieve from within the template via &lt;s:property value="%{parameters._paramname_}" /&gt;<p/> In the bottom JSP and Velocity samples, two parameters are being passed in to the component. From within the component, they can be accessed as:- <p/> <b>Freemarker:</b><p/> $parameters.get('key1') and $parameters.get('key2') or $parameters.key1 and $parameters.key2<p/> <b>Jsp:</b><p/> &lt;s:property value="%{parameters.key1}" /&gt; and &lt;s:property value="%{'parameters.key2'}" /&gt; or &lt;s:property value="%{parameters.get('key1')}" /&gt; and &lt;s:property value="%{parameters.get('key2')}" /&gt;<p/> Currently, your custom UI components can be written in Velocity, JSP, or Freemarker, and the correct rendering engine will be found based on file extension.<p/> <b>Remember:</b> the value params will always be resolved against the OgnlValueStack so if you mean to pass a string literal to your component, make sure to wrap it in quotes i.e. value="'value1'" otherwise, the the value stack will search for an Object on the stack with a method of getValue1(). (now that i've written this, i'm not entirely sure this is the case. i should verify this manana)<p/> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> JSP &lt;a:component template="/my/custom/component.vm"/&gt; or &lt;a:component template="/my/custom/component.vm"&gt; &lt;a:param name="key1" value="value1"/&gt; &lt;a:param name="key2" value="value2"/&gt; &lt;/a:component&gt; Velocity #s-component( "template=/my/custom/component.vm" ) or #s-component( "template=/my/custom/component.vm" ) #s-param( "name=key1" "value=value1" ) #s-param( "name=key2" "value=value2" ) #end Freemarker &lt;@s.component template="/my/custom/component.ftl" /> or &lt;@s.component template="/my/custom/component.ftl"&gt; &lt;@s.param name="key1" value="%{'value1'}" /&gt; &lt;@s.param name="key2" value="%{'value2'}" /&gt; &lt;/@s.component&gt; <!-- END SNIPPET: example --> </pre> <p/> <b>NOTE:</b> <!-- START SNIPPET: note --> If Jsp is used as the template, the jsp template itself must lie within the webapp itself and not the classpath. Unlike Freemarker or Velocity, JSP template could not be picked up from the classpath. <!-- END SNIPPET: note -->
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Head.html b/trunk/docs/tags/Head.html
deleted file mode 100644
index 6746d4b..0000000
--- a/trunk/docs/tags/Head.html
+++ /dev/null
@@ -1,658 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:head /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:head /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a chunk of HEAD for your HTML file
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Renders parts of the HEAD section for an HTML file. This is useful as some themes require certain CSS and JavaScript includes.<p/> If, for example, your page has ajax components integrated, without having the default theme set to ajax, you might want to use the head tag with <b>theme="ajax"</b> so that the typical ajax header setup will be included in the page.<p/> The tag also includes the option to set a custom datepicker theme if needed. See calendarcss parameter for description for details.<p/> If you use the ajax theme you can turn a debug flag on by setting the debug parameter to <tt>true</tt>. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example1 --> &lt;head&gt; &lt;title&gt;My page&lt;/title&gt; &lt;a:head/&gt; &lt;/head&gt; <!-- END SNIPPET: example1 --> </pre> <pre> <!-- START SNIPPET: example2 --> &lt;head&gt; &lt;title&gt;My page&lt;/title&gt; &lt;a:head theme="ajax" calendarcss="calendar-green"/&gt; &lt;/head&gt; <!-- END SNIPPET: example2 --> </pre> <pre> <!-- START SNIPPET: example3 --> &lt;head&gt; &lt;title&gt;My page&lt;/title&gt; &lt;a:head theme="ajax" debug="true"/&gt; &lt;/head&gt; <!-- END SNIPPET: example3 --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">calendarcss</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The jscalendar css theme to use" default="calendar-blue.css</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">debug</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set to true to enable debugging mode for AJAX themes</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Hidden.html b/trunk/docs/tags/Hidden.html
deleted file mode 100644
index 86424e9..0000000
--- a/trunk/docs/tags/Hidden.html
+++ /dev/null
@@ -1,622 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:hidden /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:hidden /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a hidden input field
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Renders an HTML input element of type hidden, populated by the specified property from the OgnlValueStack. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;-- example one --&gt; &lt;a:hidden name="foo" /&gt; &lt;-- example two --&gt; &lt;a:hidden name="foo" value="bar" /&gt; Example One Resulting HTML (if foo evaluates to bar): &lt;input type="hidden" name="foo" value="bar" /&gt; Example Two Resulting HTML (if getBar method of the action returns 'bar') &lt;input type="hidden" name="foo" value="bar" /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/I18n.html b/trunk/docs/tags/I18n.html
deleted file mode 100644
index e3e61e8..0000000
--- a/trunk/docs/tags/I18n.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:i18n /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:i18n /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Get a resource bundle and place it on the value stack
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Gets a resource bundle and place it on the value stack. This allows the text tag to access messages from any bundle, and not just the bundle associated with the current action. <!-- END SNIPPET: javadoc --> <p/> <!-- START SNIPPET: params--> <ul> <li>name* - the resource bundle's name (eg foo/bar/customBundle)</li> </ul> <!-- END SNIPPET: params --> <p/> Example: <pre> <!-- START SNIPPET: example --> &lt;a:i18n name="myCustomBundle"&gt; The i18n value for key aaa.bbb.ccc in myCustomBundle is &lt;a:property value="text('aaa.bbb.ccc')" /&gt; &lt;/a:i18n&gt; <!-- END SNIPPET: example --> </pre> <pre> <!-- START SNIPPET: i18nExample --> &lt;a:i18n name="some.package.bundle" &gt; &lt;a:text name="some.key" /&gt; &lt;/a:i18n&gt; <!-- END SNIPPET: i18nExample --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">String</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Name of ressource bundle to use (eg foo/bar/customBundle)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/If.html b/trunk/docs/tags/If.html
deleted file mode 100644
index 18f5f9d..0000000
--- a/trunk/docs/tags/If.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:if /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:if /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-If tag
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>Perform basic condition flow. 'If' tag could be used by itself or with 'Else If' Tag and/or single/multiple 'Else' Tag.</p> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>test* (Boolean) - Logic to determined if body of tag is to be displayed</li> </ul> <!-- END SNIPPET: params --> <pre> <!-- START SNIPPET: example --> &lt;a:if test="%{false}"&gt; &lt;div&gt;Will Not Be Executed&lt;/div&gt; &lt;/a:if&gt; &lt;a:elseif test="%{true}"&gt; &lt;div&gt;Will Be Executed&lt;/div&gt; &lt;/a:elseif&gt; &lt;a:else&gt; &lt;div&gt;Will Not Be Executed&lt;/div&gt; &lt;/a:else&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">test</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Expression to determine if body of tag is to be displayed</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Include.html b/trunk/docs/tags/Include.html
deleted file mode 100644
index d321db0..0000000
--- a/trunk/docs/tags/Include.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:include /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:include /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Include a servlet's output (result of servlet or a JSP page)
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>Include a servlet's output (result of servlet or a JSP page).</p> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>value* (String) - jsp page to be included</li> </ul> <!-- END SNIPPET: params --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;-- One: --&gt; &lt;a:include value="myJsp.jsp" /&gt; &lt;-- Two: --&gt; &lt;a:include value="myJsp.jsp"&gt; &lt;a:param name="param1" value="value2" /&gt; &lt;a:param name="param2" value="value2" /&gt; &lt;/a:include&gt; &lt;-- Three: --&gt; &lt;a:include value="myJsp.jsp"&gt; &lt;a:param name="param1"&gt;value1&lt;/a:param&gt; &lt;a:param name="param2"&gt;value2&lt;a:param&gt; &lt;/a:include&gt; <!-- END SNIPPET: example --> <!-- START SNIPPET: exampledescription --> Example one - do an include myJsp.jsp page Example two - do an include to myJsp.jsp page with parameters param1=value1 and param2=value2 Example three - do an include to myJsp.jsp page with parameters param1=value1 and param2=value2 <!-- END SNIPPET: exampledescription --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The jsp/servlet output to include</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/IteratorComponent.html b/trunk/docs/tags/IteratorComponent.html
deleted file mode 100644
index e2b68d0..0000000
--- a/trunk/docs/tags/IteratorComponent.html
+++ /dev/null
@@ -1,100 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:iterator /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:iterator /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Iterate over a iterable value
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>Iterator will iterate over a value. An iterable value can be either of: java.util.Collection, java.util.Iterator, java.util.Enumeration, java.util.Map, array.</p> <p/> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>status (String) - if specified, an instanceof IteratorStatus will be pushed into stack upon each iteration</li> <li>value (Object) - the source to iterate over, must be iteratable, else an the object itself will be put into a newly created List (see MakeIterator#convert(Object)</li> <li>id (String) - if specified the current iteration object will be place with this id in Struts stack's context scope</li> </ul> <!-- END SNIPPET: params --> <!-- START SNIPPET: example1description --> <p>The following example retrieves the value of the getDays() method of the current object on the value stack and uses it to iterate over. The &lt;a:property/&gt; tag prints out the current value of the iterator.</p> <!-- END SNIPPET: example1description --> <pre> <!-- START SNIPPET: example1code --> &lt;a:iterator value="days"&gt; &lt;p&gt;day is: &lt;a:property/&gt;&lt;/p&gt; &lt;/a:iterator&gt; <!-- END SNIPPET: example1code --> </pre> <!-- START SNIPPET: example2description --> <p>The following example uses a {@link Bean} tag and places it into the ActionContext. The iterator tag will retrieve that object from the ActionContext and then calls its getDays() method as above. The status attribute is also used to create a {@link IteratorStatus} object, which in this example, its odd() method is used to alternate row colours:</p> <!-- END SNIPPET: example2description --> <pre> <!-- START SNIPPET: example2code --> &lt;a:bean name="org.apache.struts2.example.IteratorExample" id="it"&gt; &lt;a:param name="day" value="'foo'"/&gt; &lt;a:param name="day" value="'bar'"/&gt; &lt;/a:bean&gt; <p/> &lt;table border="0" cellspacing="0" cellpadding="1"&gt; &lt;tr&gt; &lt;th&gt;Days of the week&lt;/th&gt; &lt;/tr&gt; <p/> &lt;a:iterator value="#it.days" status="rowstatus"&gt; &lt;tr&gt; &lt;a:if test="#rowstatus.odd == true"&gt; &lt;td style="background: grey"&gt;&lt;a:property/&gt;&lt;/td&gt; &lt;/a:if&gt; &lt;a:else&gt; &lt;td&gt;&lt;a:property/&gt;&lt;/td&gt; &lt;/a:else&gt; &lt;/tr&gt; &lt;/a:iterator&gt; &lt;/table&gt; <!-- END SNIPPET: example2code --> </pre> <!--START SNIPPET: example3description --> <p> The next example will further demonstrate the use of the status attribute, using a DAO obtained from the action class through OGNL, iterating over groups and their users (in a security context). The last() method indicates if the current object is the last available in the iteration, and if not, we need to seperate the users using a comma: </p> <!-- END SNIPPET: example3description --> <pre> <!-- START SNIPPET: example3code --> &lt;s:iterator value="groupDao.groups" status="groupStatus"&gt; &lt;tr class="&lt;s:if test="#groupStatus.odd == true "&gt;odd&lt;/s:if&gt;&lt;s:else&gt;even&lt;/s:else&gt;"&gt; &lt;td&gt;&lt;s:property value="name" /&gt;&lt;/td&gt; &lt;td&gt;&lt;s:property value="description" /&gt;&lt;/td&gt; &lt;td&gt; &lt;s:iterator value="users" status="userStatus"&gt; &lt;s:property value="fullName" /&gt;&lt;s:if test="!#userStatus.last"&gt;,&lt;/s:if&gt; &lt;/s:iterator&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/s:iterator&gt; <!-- END SNIPPET: example3code --> </pre> <p> <!-- START SNIPPET: example4description --> </p> The next example iterates over a an action collection and passes every iterator value to another action. The trick here lies in the use of the '[0]' operator. It takes the current iterator value and passes it on to the edit action. Using the '[0]' operator has the same effect as using &gt;a:property /&gt;. (The latter, however, does not work from inside the param tag). </p> <!-- END SNIPPET: example4description --> <pre> <!-- START SNIPPET: example4code --> &lt;a:action name="entries" id="entries"/&gt; &lt;a:iterator value="#entries.entries" &gt; &lt;a:property value="name" /&gt; &lt;a:property /&gt; &lt;a:push value="..."&gt; &lt;a:action name="edit" id="edit" &gt; &lt;a:param name="entry" value="[0]" /&gt; &lt;/a:action&gt; &lt;/push&gt; &lt;/a:iterator&gt; <!-- END SNIPPET: example4code --> </pre> <!-- START SNIPPET: example5description --> </p>To simulate a simple loop with iterator tag, the following could be done. It does the loop 5 times. <!-- END SNIPPET: example5description --> <pre> <!-- START SNIPPET: example5code --> &lt;a:iterator status="stat" value="{1,2,3,4,5}" &gt; &lt;!-- grab the index (start with 0 ... ) --&gt; &lt;a:property value="#stat.index" /&gt; &lt;!-- grab the top of the stack which should be the --&gt; &lt;!-- current iteration value (0, 1, ... 5) --&gt; &lt;a:property value="top" /&gt; &lt;/a:iterator&gt; <!-- END SNIPPET: example5code --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">status</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">if specified, an instanceof IteratorStatus will be pushed into stack upon each iteration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">the iteratable source to iterate over, else an the object itself will be put into a newly created List</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Label.html b/trunk/docs/tags/Label.html
deleted file mode 100644
index dfbfad4..0000000
--- a/trunk/docs/tags/Label.html
+++ /dev/null
@@ -1,640 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:label /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:label /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a label that displays read-only information
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Renders an HTML LABEL that will allow you to output label:name combination that has the same format treatment as the rest of your UI controls.</p> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <p/> <!-- START SNIPPET: exdescription --> In this example, a label is rendered. The label is retrieved from a ResourceBundle by calling ActionSupport's getText() method giving you an output of 'User Name:tm_jee'. Assuming that i18n message user_name corresponds to 'User Name' and the action's getUserName() method returns 'tm_jee'<p/> <!-- END SNIPPET: exdescription --> <pre> <!-- START SNIPPET: example --> &lt;a:label label="%{text('user_name')}" name="userName" /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">for</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML for attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/MergeIterator.html b/trunk/docs/tags/MergeIterator.html
deleted file mode 100644
index a1880e4..0000000
--- a/trunk/docs/tags/MergeIterator.html
+++ /dev/null
@@ -1,64 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:merge /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:merge /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Merge the values of a list of iterators into one iterator
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>Component for MergeIteratorTag, which job is to merge iterators and successive call to the merged iterator will cause each merge iterator to have a chance to expose its element, subsequently next call will allow the next iterator to expose its element. Once the last iterator is done exposing its element, the first iterator is allowed to do so again (unless it is exhausted of entries).</P> <p>Internally the task are delegated to MergeIteratorFilter</p> <p>Example if there are 3 lists being merged, each list have 3 entries, the following will be the logic.</P> <ol> <li>Display first element of the first list</li> <li>Display first element of the second list</li> <li>Display first element of the third list</li> <li>Display second element of the first list</li> <li>Display second element of the second list</li> <li>Display second element of the third list</li> <li>Display third element of the first list</li> <li>Display thrid element of the second list</li> <li>Display third element of the thrid list</li> </ol> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>id (String) - the id where the resultant merged iterator will be stored in the stack's context</li> </ul> <!-- END SNIPPET: params --> <!-- START SNIPPET: javacode --> public class MergeIteratorTagAction extends ActionSupport { private List myList1; private List myList2; private List myList3; public List getMyList1() { return myList1; } public List getMyList2() { return myList2; } public List getMyList3() { return myList3; } public String execute() throws Exception { myList1 = new ArrayList(); myList1.add("1"); myList1.add("2"); myList1.add("3"); myList2 = new ArrayList(); myList2.add("a"); myList2.add("b"); myList2.add("c"); myList3 = new ArrayList(); myList3.add("A"); myList3.add("B"); myList3.add("C"); return "done"; } } <!-- END SNIPPET: javacode --> <!-- START SNIPPET: example --> &lt;a:merge id="myMergedIterator1"&gt; &lt;a:param value="%{myList1}" /&gt; &lt;a:param value="%{myList2}" /&gt; &lt;a:param value="%{myList3}" /&gt; &lt;/a:merge&gt; &lt;a:iterator value="%{#myMergedIterator1}"&gt; &lt;a:property /&gt; &lt;/a:iterator&gt; <!-- END SNIPPET: example --> <!-- START SNIPPET: description --> This wil generate "1aA2bB3cC". <!-- START SNIPPET: description -->
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">the id where the resultant merged iterator will be stored in the stack's context</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/OptGroup.html b/trunk/docs/tags/OptGroup.html
deleted file mode 100644
index cb8ba89..0000000
--- a/trunk/docs/tags/OptGroup.html
+++ /dev/null
@@ -1,154 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:optgroup /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:optgroup /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Renders a Select Tag's OptGroup Tag
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Create a optgroup component which needs to resides within a select tag. <!-- END SNIPPET: javadoc --> <p/> <!-- START SNIPPET: notice --> This component is to be used within a Select component. <!-- END SNIPPET: notice --> <p/> <pre> <!-- START SNIPPET: example --> &lt;ww:select label="My Selection" name="mySelection" value="%{'POPEYE'}" list="%{#{'SUPERMAN':'Superman', 'SPIDERMAN':'spiderman'}}"&gt; &lt;ww:optgroup label="Adult" list="%{#{'SOUTH_PARK':'South Park'}}" /&gt; &lt;ww:optgroup label="Japanese" list="%{#{'POKEMON':'pokemon','DIGIMON':'digimon','SAILORMOON':'Sailormoon'}}" /&gt; &lt;/ww:select&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the label attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the disable attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">list</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the list attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the listKey attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the listValue attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/OptionTransferSelect.html b/trunk/docs/tags/OptionTransferSelect.html
deleted file mode 100644
index de20816..0000000
--- a/trunk/docs/tags/OptionTransferSelect.html
+++ /dev/null
@@ -1,1576 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:optiontransferselect /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:optiontransferselect /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Renders an input form
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Create a option transfer select component which is basically two &lt;select ...&gt; tag with buttons in the middle of them allowing options in each of the &lt;select ...&gt; to be moved between themselves. Will auto-select all its elements upon its containing form submision. <!-- END SNIPPET: javadoc --> <p/> <!-- START SNIPPET: notice --> NOTE: The id and doubleId need not be supplied as they will generated provided that the optiontransferselect tag is being used in a form tag. The generated id and doubleId will be &lt;form_id&gt;_&lt;optiontransferselect_doubleName&gt; and &lt;form_id&gt;_&lt;optiontransferselect_doubleName&gt; respectively. <!-- END SNIPPET: notice --> <p/> <pre> <!-- START SNIPPET: example --> &lt;-- minimum configuration --&gt; &lt;a:optiontransferselect label="Favourite Cartoons Characters" name="leftSideCartoonCharacters" list="{'Popeye', 'He-Man', 'Spiderman'}" doubleName="rightSideCartoonCharacters" doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}" /&gt; &lt;-- possible configuration --&gt; &lt;a:optiontransferselect label="Favourite Cartoons Characters" name="leftSideCartoonCharacters" leftTitle="Left Title" rightTitle="Right Title" list="{'Popeye', 'He-Man', 'Spiderman'}" multiple="true" headerKey="headerKey" headerValue="--- Please Select ---" emptyOption="true" doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}" doubleName="rightSideCartoonCharacters" doubleHeaderKey="doubleHeaderKey" doubleHeaderValue="--- Please Select ---" doubleEmptyOption="true" doubleMultiple="true" /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">addAllToLeftLabel</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set Add To Left button label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">addAllToRightLabel</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set Add All To Right button label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">addToLeftLabel</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set Add To Left button label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">addToRightLabel</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set Add To Right button label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowAddAllToLeft</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">enable Add All To Left button</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowAddAllToRight</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">enable Add All To Right button</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowAddToLeft</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">enable Add To Left button</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowAddToRight</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">enable Add To Right button</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">leftTitle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set Left title</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">rightTitle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set Right title</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowSelectAll</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">enable Select All button</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">selectAllLabel</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set Select All button label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">buttonCssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set buttons css class</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">buttonCssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">set button css style</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleList</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The second iterable source to populate from.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleListKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The key expression to use for second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleListValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The value expression to use for second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleName</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name for complete component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The value expression for complete component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">formName</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The form name this component resides in and populates to</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleCssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class for the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleCssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style for the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleHeaderKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The header key for the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleHeaderValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The header value for the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleEmptyOption</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decides if the second list will add an empty option</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleDisabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decides if a disable attribute should be added to the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleId</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The id of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleMultiple</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decides if multiple attribute should be set on the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onblur attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onchange attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onclick attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOndblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the ondbclick attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onfocus attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onkeydown attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onkeypress attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onkeyup attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onmousedown attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onmousemove attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onmouseout attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onmouseover attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onmouseup attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleOnselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the onselect attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleSize</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the size attribute of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleListKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the list key of the second attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">emptyOption</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decides of an empty option is to be inserted in the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">headerKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the header key of the second list. Must not be empty! "'-1'" and "''" is correct, "" is bad.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">headerValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the header value of the second list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">multiple</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">size</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">Size of the element box (# of elements to show)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">doubleAccesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">list</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field value from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field content from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Panel.html b/trunk/docs/tags/Panel.html
deleted file mode 100644
index 3edc960..0000000
--- a/trunk/docs/tags/Panel.html
+++ /dev/null
@@ -1,838 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:panel /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:panel /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a panel for tabbedPanel
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render a panel for tabbedPanel.</p> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> See the example in {@link TabbedPanel}. <p/>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabName</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The text of the tab to display in the header tab list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">subscribeTopicName</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set subscribeTopicName attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">remote</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">determines whether this is a remote panel (ajax) or a local panel (content loaded into visible/hidden containers)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">updateFreq</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">0</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">How often to re-fetch the content (in milliseconds)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">delay</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">0</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">How long to wait before fetching the content (in milliseconds)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">loadingText</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The text to display to the user while the new content is being fetched (especially good if the content will take awhile)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listenTopics</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Topic name to listen to (comma delimited), that will cause the DIV's content to be re-fetched</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme to use for the element. <b>This tag will usually use the ajax theme.</b></td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">href</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The URL to call to obtain the content</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">errorText</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The text to display to the user if the is an error fetching the content</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">showErrorTransportText</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">when to show the error message as content when the URL had problems</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">afterLoading</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Javascript code that will be executed after the content has been fetched</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">openTemplate</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set template to use for opening the rendered html.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Param.html b/trunk/docs/tags/Param.html
deleted file mode 100644
index db6c92c..0000000
--- a/trunk/docs/tags/Param.html
+++ /dev/null
@@ -1,100 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:param /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:param /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Parametrize other tags
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>This tag can be used to parameterize other tags.</p> The include tag and bean tag are examples of such tags. <p/> The parameters can be added with or without a name as key. If the tag provides a name attribute the parameters are added using the {@link Component#addParameter(String, Object) addParamter} method. For unnamed parameters the Tag must implement the {@link UnnamedParametric} interface defined in this class (e.g. The TextTag does this). <p/> This tag has the following two paramters. <!-- START SNIPPET: params --> <ul> <li>name (String) - the name of the parameter</li> <li>value (Object) - the value of the parameter</li> </ul> <!-- END SNIPPET: params --> <p/> <b>Note:</b> When you declare the param tag, the value can be defined in either a <tt>value</tt> attribute or as text between the start and end tag. Struts behaves a bit different according to these two situations. This is best illustrated using an example: <br/>&lt;param name="color"&gt;blue&lt;/param&gt; &lt;-- (A) --&gt; <br/>&lt;param name="color" value="blue"/&gt; &lt;-- (B) --&gt; <br/>In the first situation (A) the value would be evaluated to the stack as a <tt>java.lang.String</tt> object. And in situation (B) the value would be evaluated to the stack as a <tt>java.lang.Object</tt> object. <br/>For more information see <a href="http://jira.opensymphony.com/browse/WW-808">WW-808</a>. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <!-- START SNIPPET: example --> <pre> &lt;ui:component&gt; &lt;ui:param name="key" value="[0]"/&gt; &lt;ui:param name="value" value="[1]"/&gt; &lt;ui:param name="context" value="[2]"/&gt; &lt;/ui:component&gt; </pre> <!-- END SNIPPET: example --> <p/> <!-- START SNIPPET: exampledescription --> where the key will be the identifier and the value the result of an OGNL expression run against the current OgnlValueStack. <!-- END SNIPPET: exampledescription --> <p/> This second example demonstrates how the text tag can use parameters from this param tag. <!-- START SNIPPET: example2 --> <pre> &lt;a:text name="cart.total.cost"&gt; &lt;a:param value="#session.cartTotal"/&gt; &lt;/a:text&gt; </pre> <!-- END SNIPPET: example2 --> <p/>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Name of Parameter to set</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">The value of evaluating provided name against stack</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Value expression for Parameter to set</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Password.html b/trunk/docs/tags/Password.html
deleted file mode 100644
index e293881..0000000
--- a/trunk/docs/tags/Password.html
+++ /dev/null
@@ -1,712 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:password /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:password /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render an HTML input tag of type password
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render an HTML input tag of type password.</p> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <p/> <!-- START SNIPPET: exdescription --> In this example, a password control is displayed. For the label, we are calling ActionSupport's getText() to retrieve password label from a resource bundle.<p/> <!-- END SNIPPET: exdescription --> <pre> <!-- START SNIPPET: example --> &lt;a:password label="%{text('password')}" name="password" size="10" maxlength="15" /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">showPassword</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether to show input</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">maxlength</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML maxlength attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">maxLength</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Deprecated. Use maxlength instead.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">readonly</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether the input is readonly</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">size</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML size attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Property.html b/trunk/docs/tags/Property.html
deleted file mode 100644
index ed842e5..0000000
--- a/trunk/docs/tags/Property.html
+++ /dev/null
@@ -1,118 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:property /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:property /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Print out expression which evaluates against the stack
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Used to get the property of a <i>value</i>, which will default to the top of the stack if none is specified. <!-- END SNIPPET: javadoc --> <p/> <!-- START SNIPPET: params --> <ul> <li>default (String) - The default value to be used if <u>value</u> attribute is null</li> <li>escape (Boolean) - Escape HTML. Default to true</li> <li>value (Object) - value to be displayed</li> </ul> <!-- END SNIPPET: params --> <pre> <!-- START SNIPPET: example --> <a:push value="myBean"> <!-- Example 1: --> <a:property value="myBeanProperty" /> <!-- Example 2: --> <a:property value="myBeanProperty" default="a default value" /> </a:push> <!-- END SNIPPET: example --> </pre> <pre> <!-- START SNIPPET: exampledescription --> Example 1 prints the result of myBean's getMyBeanProperty() method. Example 2 prints the result of myBean's getMyBeanProperty() method and if it is null, print 'a default value' instead. <!-- END SNIPPET: exampledescription --> </pre> <pre> <!-- START SNIPPET: i18nExample --> &lt;a:property value="getText('some.key')" /&gt; <!-- END SNIPPET: i18nExample --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">default</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The default value to be used if <u>value</u> attribute is null</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">escape</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether to escape HTML</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&lt;top of stack&gt;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object</td>
-
-<!-- Description -->
-<td align="left" valign="top">value to be displayed</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Push.html b/trunk/docs/tags/Push.html
deleted file mode 100644
index 1413066..0000000
--- a/trunk/docs/tags/Push.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:push /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:push /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Push value on stack for simplified usage.
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>Push value on stack for simplified usage.</p> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>value* (Object) - value to be pushed into the top of the stack</li> </ul> <!-- END SNIPPET: params --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example1 --> &lt;a:push value="user"&gt; &lt;a:propery value="firstName" /&gt; &lt;a:propery value="lastName" /&gt; &lt;/a:push&gt; <!-- END SNIPPET: example1 --> </pre> <!-- START SNIPPET: example1description --> Pushed user into the stack, and hence property tag could access user's properties (firstName, lastName etc) since user is not at the top of the stack <!-- END SNIPPET: example1description --> <pre> <!-- START SNIPPET: example2 --> &lt;a:push value="myObject"&gt; ----- (1) &lt;a:bean name="jp.SomeBean" id="myBean"/&gt; ----- (2) &lt;a:param name="myParam" value="top"/&gt; ----- (3) &lt;/a:bean&gt; &lt;/a:push&gt; <!-- END SNIPPET: example2 --> </pre> <pre> <!-- START SNIPPET: example2description --> when in (1), myObject is at the top of the stack when in (2), jp.SomeBean is in the top of stack, also in stack's context with key myBean when in (3), top will get the jp.SomeBean instance <!-- END SNIPPET: example2description --> </pre> <pre> <!-- START SNIPPET: example3 --> &lt;a:push value="myObject"&gt; ---(A) &lt;a:bean name="jp.SomeBean" id="myBean"/&gt; ---(B) &lt;a:param name="myParam" value="top.mySomeOtherValue"/&gt; ---(C) &lt;/a:bean&gt; &lt;/a:push&gt; <!-- END SNIPPET: example3 --> </pre> <pre> <!-- START SNIPPET: example3description --> when in (A), myObject is at the top of the stack when in (B), jp.SomeBean is at the top of the stack, also in context with key myBean when in (C), top refers to jp.SomeBean instance. so top.mySomeOtherValue would invoke SomeBean's mySomeOtherValue() method <!-- END SNIPPET: example3description --> </pre> <pre> <!-- START SNIPPET: example4 --> &lt;a:push value="myObject"&gt; ---- (i) &lt;a:bean name="jp.SomeBean" id="myBean"/&gt; ---- (ii) &lt;a:param name="myParam" value="[1].top"/&gt; -----(iii) &lt;/a:bean&gt; &lt;/a:push&gt; <!-- END SNIPPET: example4 --> </pre> <pre> <!-- START SNIPPET: example4description --> when in (i), myObject is at the top of the stack when in (ii), jp.SomeBean is at the top of the stack, followed by myObject when in (iii), [1].top will returned top of the cut of stack starting from myObject, namely myObject itself <!-- END SNIPPET: example4description --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Value to push on stack</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Radio.html b/trunk/docs/tags/Radio.html
deleted file mode 100644
index 2c00d80..0000000
--- a/trunk/docs/tags/Radio.html
+++ /dev/null
@@ -1,676 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:radio /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:radio /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Renders a radio button input field
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render a radio button input field.</p> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <p/> <!-- START SNIPPET: exdescription --> In this example, a radio control is displayed with a list of genders. The gender list is built from attribute id=genders. WW calls getGenders() which will return a Map. For examples using listKey and listValue attributes, see the section select tag. The default selected one will be determined (in this case) by the getMale() method in the action class which should retun a value similar to the key of the getGenters() map if that particular gender is to be selected.<p/> <!-- END SNIPPET: exdescription --> <pre> <!-- START SNIPPET: example --> &lt;a:action name="GenderMap" id="genders"/&gt; &lt;a:radio label="Gender" name="male" list="#genders.genders"/&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">list</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field value from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field content from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Reset.html b/trunk/docs/tags/Reset.html
deleted file mode 100644
index 34943d7..0000000
--- a/trunk/docs/tags/Reset.html
+++ /dev/null
@@ -1,694 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:reset /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:reset /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a reset button
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render a reset button. The reset tag is used together with the form tag to provide form resetting. The reset can have two different types of rendering: <ul> <li>input: renders as html &lt;input type="reset"...&gt;</li> <li>button: renders as html &lt;button type="reset"...&gt;</li> </ul> Please note that the button type has advantages by adding the possibility to seperate the submitted value from the text shown on the button face, but has issues with Microsoft Internet Explorer at least up to 6.0 <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:reset value="%{'Reset'}" /&gt; <!-- END SNIPPET: example --> </pre> <pre> <!-- START SNIPPET: example2 --> Render an button reset: &lt;a:reset type="button" value="%{'Reset'}" label="Reset the form"/&gt; <!-- END SNIPPET: example2 --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Supply a reset button text apart from reset value. Will have no effect for <i>input</i> type reset, since button text will always be the value parameter.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">action</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set action attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">method</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set method attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">align</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML align attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">type</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">input</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The type of submit to use. Valid values are <i>input</i>, <i>button</i> and <i>image</i>.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/RichTextEditor.html b/trunk/docs/tags/RichTextEditor.html
deleted file mode 100644
index 2ba51c4..0000000
--- a/trunk/docs/tags/RichTextEditor.html
+++ /dev/null
@@ -1,1630 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:richtexteditor /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:richtexteditor /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a rich text editor element
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Create a Rich Text Editor based on FCK editor (www.fckeditor.net). <!-- END SNIPPET: javadoc --> <p/> <pre> <!-- START SNIPPET: example --> &lt;a:richtexteditor toolbarCanCollapse="false" width="700" label="Description 1" name="description1" value="Some Content I keyed In In The Tag Itself" /&gt; <!-- END SNIPPET: example --> </pre> <!-- START SNIPPET: serversidebrowsing --> It is possible to have a rich text editor do server side browsing when for example the image button is clicked. To integrate this functionality with Struts Action Framework, one need to defined the following action definition typically in xwork.xml <pre> &lt;package name="richtexteditor-browse" extends="struts-default" namespace="/struts/richtexteditor/editor/filemanager/browser/default/connectors/jsp"&gt; &lt;action name="connector" class="org.apache.struts2.components.DefaultRichtexteditorConnector" method="browse"> &lt;result name="getFolders" type="richtexteditorGetFolders" /&gt; &lt;result name="getFoldersAndFiles" type="richtexteditorGetFoldersAndFiles" /&gt; &lt;result name="createFolder" type="richtexteditorCreateFolder" /&gt; &lt;result name="fileUpload" type="richtexteditorFileUpload" /&gt; &lt;/action&gt; &lt;/package&gt; </pre> By default whenever a browse command is triggered (eg. by clicking on the 'image' button and then 'browse server' button, the url '/struts/static/richtexteditor/editor/filemanager/browser/default/browser.html?&Type=Image&Connector=connectors/jsp/connector.action'. The page browser.html which comes with FCK Editor will trigger the url '/struts/richtexteditor/editor/filemanager/browser/default/connectors/jsp/connector.action' which will caused the Struts Action Framework's DefaultRichtexteditorConnector to be executed. The trigerring url could be changed by altering the 'imageBrowseURL'. There 3 types of such related url, namely 'imageBrowseURL', 'linkBrowseURL' and 'flashBrowseURL'. It is recomended that the default one being used. One could change the Connector parameter instead. For example <pre> /struts/static/richtexteditor/editor/filemanager/browser/default/browser.html? &Type=Image&Connector=connectors/jsp/connector.action </pre> could be changed to <pre> /struts/static/richtexteditor/editor/filemanager/browser/default/browser.html? &Type=Image&Connector=myLittlePath/myConnector.action </pre> In this case the action will need to have a namespace of '/struts/richtexteditor/editor/filemanager/browser/default/myLittlePath' and action name of 'myConnector' <p/> By default the action method that needs to be defined in xwork.xml needs to be 'browse'. If this needs to be something else say, myBrowse, the following could be used <pre> public String myBrowse() { browse(); } </pre> <!-- END SNIPPET: serversidebrowsing --> <p/> <!-- START SNIPPET: serversideuploading --> It is possible for the richtexteditor to do server side uploading as well. For example when clicking on the 'Image' button and then the 'Upload' tab and then selecting a file from client local machine and the clicking 'Send it to the server'. To integrate this functionality with Struts Action Framework, one need to defined the following action definition typically in xwork.xml <pre> &lt;package name="richtexteditor-upload" extends="struts-default" namespace="/struts/richtexteditor/editor/filemanager/upload"&gt; &lt;action name="uploader" class="org.apache.struts2.components.DefaultRichtexteditorConnector" method="upload"&gt; &lt;result name="richtexteditorFileUpload" /&gt; &lt;/action&gt; &lt;/package&gt; </pre> By default whenever an upload command is triggered, a '/struts/static/richtexteditor/editor/filemanager/upload/uploader.action?Type=Image' will be issued. This could be changed by setting the imageUploadURL attribute of the tag. When this link is issued, the Struts Action Framework action will get executed. There's 3 such related upload url namely, 'imageUploadURL', 'linkUploadURL' and 'flashUploadURL'. It is recomended that the default one being used. However one could change the url, but need to include the Type parameter. For example <pre> /struts/static/richtexteditor/editor/filemanager/upload/uploader.action?Type=Image </pre> could be changed to <pre> /struts/static/richtexteditor/editor/filemanager/upload/aDifferentUploader.action?Type=Image </pre> In this case the action will need to have a namespace of '/struts/static/richtexteditor/editor/filemanager/upload' and action name of 'aDifferentUploader' By default the action method that needs to be defined in xwork.xml needs to be 'upload'. If this needs to be something else say, myUpload, the following could be used <pre> public String myUpload() { upload(); } </pre> <!-- END SNIPPET: serversideuploading --> <!-- START SNIPPET: richtexteditoraction --> The Struts Action Framework action that handles the server-side browsing and uploading needs to extends from AbstractRichtexteditorConnector. There are four abstract methods need to be implemented, namely <p/> <pre> protected abstract String calculateServerPath(String serverPath, String folderPath, String type) throws Exception; protected abstract Folder[] getFolders(String virtualFolderPath, String type) throws Exception; protected abstract FoldersAndFiles getFoldersAndFiles(String virtualFolderPath, String type) throws Exception; protected abstract CreateFolderResult createFolder(String virtualFolderPath, String type, String newFolderName) throws Exception; protected abstract FileUploadResult fileUpload(String virtualFolderPath, String type, String filename, String contentType, java.io.File newFile) throws Exception; protected abstract void unknownCommand(String command, String virtualFolderPath, String type, String filename, String contentType, java.io.File newFile) throws Exception; </pre> <!-- END SNIPPET: richtexteditoraction -->
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">checkBrowser</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether the rich text editor should check for browser compatibility when rendering its toolbar</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">displayError</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether should the rich text editor display error when it fails to render etc.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">autoDetectLanguage</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Tells the editor to automatically detect the user language preferences to adapt its interface language. With Internet Explorer, the language configured in the Windows Control Panel is used. With Firefox, the browser language is used</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">baseHref</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"> </td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Base URL used to resolve links (on images, links, styles, etc.). For example, if BaseHref is set to 'http://www.fredck.com', an image that points to "/images/Logo.gif" will be interpreted by the editor as "http://www.fredck.com/images/Logo.gif", without touching the "src" attribute of the image.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">basePath</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/richtexteditor/</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the dir where the FCKeditor files reside on the server</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">contentLangDirection</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">ltr</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the direction of the editor area contents. Either ltr or rtl</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">customConfigurationsPath</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"> </td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the path of a custom file that can override some configurations. It is recommended to use absolute paths (starting with /), like /myfckconfig.js.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">debug</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Enables the debug window to be shown when calling the FCKDebug.Output() function.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">defaultLanguage</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">en</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the default language used for the editor's interface localization. The default language is used when the AutoDetectLanguage options is disabled or when the user language is not available.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">editorAreaCSS</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">css/fck_editorarea.css</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the CSS styles file to be used in the editing area. In this way you can point to a file that reflects your web site styles</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">enableSourceXHTML</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Tells the editor to process the HTML source to XHTML when switching from WYSIWYG to Source view</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">enableXHTML</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Tells the editor to process the HTML source to XHTML on form post.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">fillEmptyBlocks</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Block elements (like P, DIV, H1, PRE, etc...) are forced to have content (a &amp;nbsp;). Empty blocks are "collapsed" by while browsing, so a empty &lt;p&gt;&lt;/p&gt; is not visible. While editing, the editor "expand" empty blocks so you can insert content inside then. Setting this option to "true" results useful to reflect the same output when browsing and editing.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">flashBrowserURL</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/ richtexteditor/ editor/filemanager/ browser/default/browser.html? Type=Flash& Connector=connectors/jsp/connector.action</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the URL of the page called when the user clicks the 'Browse Server' button in the "Flash" dialog window. In this way, you can create your custom Flash Browser that is well integrated with your system.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">flashUploadURL</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/ richtexteditor/ editor/filemanager/ upload/uploader.action? Type=Flash</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the URL of the upload handler called when the user clicks the 'Send it to server' button in the "Flash" dialog window. In this way, you can create your custom Flash Uploader that is well integrated with your system.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">fontColors</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">000000, 993300, 333300, 003300, 003366, 000080, 333399, 333333, 800000, FF6600, 808000, 808080, 008080, 0000FF, 666699, 808080, FF0000, FF9900, 99CC00, 339966, 33CCCC, 3366FF, 800080, 999999, FF00FF, FFCC00, FFFF00, 00FF00, 00FFFF, 00CCFF, 993366, C0C0C0, FF99CC, FFCC99, FFFF99, CCFFCC, CCFFFF, 99CCFF, CC99FF, FFFFFF</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the colors that must be shown in the colors panels (in the toolbar).</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">fontFormats</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">p; div; pre; address; h1; h2; h3; h4; h5; h6</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the list of formats to be shown in the "Format" toolbar command.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">fontNames</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">Arial; Comic Sans MS; Courier New; Tahoma; Times New Roman; Verdana</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the list of fonts to be shown in the "Font" toolbar command.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">fontSizes</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">1/xx-small; 2/x-small; 3/small; 4/medium; 5/large; 6/x-large; 7/xx-large</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the list of font sizes to be shown in the "Size" toolbar command.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">forcePasteAsPlainText</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Converts the clipboard contents to pure text on pasting operations</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">forceSimpleAmpersand</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Forces the ampersands (&) on tags attributes to not be converted to '&amp;amp;' This conversion is a W3C requirement for XHTML, so it is recommended to leave this option to 'false'.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">formatIndentator</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">' '</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the characters to be used when indenting the HTML source when formatting it. Useful values are a sequence of spaces (' ') or a tab char ('\t').</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">formatOutput</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">The output HTML generated by the editor will be processed and formatted.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">formatSource</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">The HTML shown by the editor, while switching from WYSIWYG to Source views, will be processed and formatted</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">fullPage</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Enables full page editing (from &lt;HTML&gt; to &lt;/HTML&gt;). It also enables the 'Page Properties' toolbar button.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">geckoUseSPAN</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Tells Gecko browsers to use SPAN instead of &lt;B&gt;, &lt;I&gt; and &lt;U&gt; for bold, italic an underline</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">height</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">200</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the height of the rich text editor</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">imageBrowserURL</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/ richtexteditor/ editor/filemanager/ browser/default/browser.html? Type=Image& Connector=connectors/jsp/connector.action</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the URL of the page called when the user clicks the 'Browse Server' button in the 'Image' dialog window. In this way, you can create your custom Image Browser that is well integrated with your system.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">imageUploadURL</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/ richtexteditor/ editor/filemanager/ upload/uploader.action? Type=Image</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the URL of the upload handler called when the user clicks the 'Send it to server' button in the 'Image' dialog window. In this way, you can create your custom Image Uploader that is well integrated with your system.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">linkBrowserURL</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/ richtexteditor/ editor/filemanager/ browser/default/browser.html? Type=File& Connector=connectors/jsp/connector.action</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the URL of the page called when the user clicks the 'Browse Server' button in the 'Link' dialog window. In this way, you can create your custom File Browser that is well integrated with your system.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">linkUploadURL</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/ richtexteditor/ editor/filemanager/ upload/uploader.action? Type=File</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the URL of the upload handler called when the user clicks the 'Send it to server' button in the 'Link' dialog window. In this way, you can create your custom Link Uploader that is well integrated with your system.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">pluginsPath</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/richtexteditor/plugins/</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the base path used when looking for registered plugins.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">skinPath</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/richtexteditor/skins/default</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the path to the skin (graphical interface settings) to be used by the editor.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">startupFocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Forces the editor to get the keyboard input focus on startup (page load)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">stylesXmlPath</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/richtexteditor/fckstyles.xml</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Sets the path to the XML file that has the definitions and rules of the styles used by the 'Style' toolbar command</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabSpaces</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">0</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the number of spaces (&amp;nbsp) to be inserted when the user hits the 'tab' key. This is an Internet Explorer only feature. Other browsers insert spaces automatically by default.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">toolbarCanCollapse</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Tells the editor that the toolbar can be Collapsed/Expanded by the user when clicking the vertical bar placed on the left of it (on the right for 'rtl' languages).</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">toolbarSet</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">Default</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the name of the toolbar to display</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">toolbarStartExpanded</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decide if the toolbar should be expanded when the rich text editor is loaded</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">useBROnCarriageReturn</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Decide if a &lt;br/&gt; should be used in place of the occurence of a carriage return</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">width</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">100%</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">set the width of the rich text editor</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowFlashBrowse</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">determine if to allow flash browsing</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowFlashUpload</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">determine if to allow flash upload</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowImageBrowse</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">determine if to allow image browsing</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowImageUpload</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">determine if to allow image uploading</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowLinkBrowse</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">determine if to allow link browsing</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowLinkUpload</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">determine if to allow link uploading</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">flashUploadAllowedExtension</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">.(swf|fla)$</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">regexp for allowed flash upload file format</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">flashUploadDeniedExtension</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">regexp for deinied flash upload file format</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">imageUploadAllowedExtension</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">.(jpg|gif|jpeg|png)$</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">regexp for allowed image upload file format</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">imageUploadDeniedExtension</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">regexp for denied image upload file format</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">linkUploadAllowedExtension</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">regexp for allowed link upload file format</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">linkUploadDeniedExtension</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">.(php| php3| php5| phtml| asp| aspx| ascx| jsp| cfm| cfc| pl| bat| exe| dll| reg| cgi)$</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">regexp for denied link upload file format</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">smileyImages</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">js array of smilies files to be included</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">items</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">List of items to be included in the toolbar</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">smileyPath</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">/struts/static/ richtexteditor/editor/ images/smiley/msn/</td>
-
-<!-- Type -->
-<td align="left" valign="top">string</td>
-
-<!-- Description -->
-<td align="left" valign="top">path where smilies are located</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Select.html b/trunk/docs/tags/Select.html
deleted file mode 100644
index 97ca645..0000000
--- a/trunk/docs/tags/Select.html
+++ /dev/null
@@ -1,766 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:select /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:select /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a select element
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render an HTML input tag of type select. <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:select label="Pets" name="petIds" list="petDao.pets" listKey="id" listValue="name" multiple="true" size="3" required="true" /&gt; &lt;a:select label="Months" name="months" headerKey="-1" headerValue="Select Month" list="#{'01':'Jan', '02':'Feb', [...]}" value="selectedMonth" required="true" /&gt; // The month id (01, 02, ...) returned by the getSelectedMonth() call // against the stack will be auto-selected <!-- END SNIPPET: example --> </pre> <p/> <!-- START SNIPPET: exnote --> Note: For any of the tags that use lists (select probably being the most ubiquitous), which uses the OGNL list notation (see the "months" example above), it should be noted that the map key created (in the months example, the '01', '02', etc.) is typed. '1' is a char, '01' is a String, "1" is a String. This is important since if the value returned by your "value" attribute is NOT the same type as the key in the "list" attribute, they WILL NOT MATCH, even though their String values may be equivalent. If they don't match, nothing in your list will be auto-selected.<p/> <!-- END SNIPPET: exnote -->
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">emptyOption</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether or not to add an empty (--) option after the header option</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">headerKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Key for first item in list. Must not be empty! "'-1'" and "''" is correct, "" is bad.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">headerValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Value expression for first item in list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">multiple</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute. Passing a Collection may work too? Haven't tested this.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">size</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">Size of the element box (# of elements to show)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">list</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field value from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field content from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Set.html b/trunk/docs/tags/Set.html
deleted file mode 100644
index 47c1f6b..0000000
--- a/trunk/docs/tags/Set.html
+++ /dev/null
@@ -1,118 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:set /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:set /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Assigns a value to a variable in a specified scope
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>The set tag assigns a value to a variable in a specified scope. It is useful when you wish to assign a variable to a complex expression and then simply reference that variable each time rather than the complex expression. This is useful in both cases: when the complex expression takes time (performance improvement) or is hard to read (code readability improvement).</P> The scopes available are as follows :- <ul> <li>application - the value will be set in application scope according to servlet spec. using the name as its key</li> <li>session - the value will be set in session scope according to servlet spec. using the name as key </li> <li>request - the value will be set in request scope according to servlet spec. using the name as key </li> <li>page - the value will be set in request scope according to servlet sepc. using the name as key</li> <li>action - the value will be set in the request scope and SAF's action context using the name as key</li> </ul> NOTE:<p/> If no scope is specified, it will default to action scope. <!-- END SNIPPET: javadoc --> <p/> <b>Parameters</b> <!-- START SNIPPET: params --> <ul> <li>name* (String): The name of the new variable that is assigned the value of <i>value</i></li> <li>value (Object): The value that is assigned to the variable named <i>name</i></li> <li>scope (String): The scope in which to assign the variable. Can be <b>application</b>, <b>session</b>, <b>request</b>, <b>page</b>, or <b>action</b>. By default it is <b>action</b>.</li> </ul> <!-- END SNIPPET: params --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:set name="personName" value="person.name"/&gt; Hello, &lt;a:property value="#personName"/&gt;. How are you? <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name of the new variable that is assigned the value of <i>value</i></td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">scope</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">action</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The scope in which to assign the variable. Can be <b>application</b>, <b>session</b>, <b>request</b>, <b>page</b>, or <b>action</b>.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The value that is assigned to the variable named <i>name</i></td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Submit.html b/trunk/docs/tags/Submit.html
deleted file mode 100644
index 12a8b7d..0000000
--- a/trunk/docs/tags/Submit.html
+++ /dev/null
@@ -1,802 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:submit /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:submit /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a submit button
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render a submit button. The submit tag is used together with the form tag to provide asynchronous form submissions. The submit can have three different types of rendering: <ul> <li>input: renders as html &lt;input type="submit"...&gt;</li> <li>image: renders as html &lt;input type="image"...&gt;</li> <li>button: renders as html &lt;button type="submit"...&gt;</li> </ul> Please note that the button type has advantages by adding the possibility to seperate the submitted value from the text shown on the button face, but has issues with Microsoft Internet Explorer at least up to 6.0 <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:submit value="%{'Submit'}" /&gt; <!-- END SNIPPET: example --> </pre> <pre> <!-- START SNIPPET: example2 --> Render an image submit: &lt;a:submit type="image" value="%{'Submit'}" label="Submit the form" src="submit.gif"/&gt; <!-- END SNIPPET: example2 --> </pre> <pre> <!-- START SNIPPET: example3 --> Render an button submit: &lt;a:submit type="button" value="%{'Submit'}" label="Submit the form"/&gt; <!-- END SNIPPET: example3 --> </pre> <!-- START SNIPPET: ajaxJavadoc --> <B>THE FOLLOWING IS ONLY VALID WHEN AJAX IS CONFIGURED</B> <ul> <li>resultDivId</li> <li>notifyTopics</li> <li>onLoadJS</li> <li>preInvokeJS</li> </ul> The remote form has three basic modes of use, using the resultDivId, the notifyTopics, or the onLoadJS. You can mix and match any combination of them to get your desired result. All of these examples are contained in the Ajax example webapp. Lets go through some scenarios to see how you might use it: <!-- END SNIPPET: ajaxJavadoc --> <!-- START SNIPPET: ajxExDescription1 --> Show the results in another div. If you want your results to be shown in a div, use the resultDivId where the id is the id of the div you want them shown in. This is an inner HTML approah. Your results get jammed into the div for you. Here is a sample of this approach: <!-- END SNIPPET: ajxExDescription1 --> <pre> <!-- START SNIPPET: ajxExample1 --> Remote form replacing another div: &lt;div id='two' style="border: 1px solid yellow;"&gt;Initial content&lt;/div&gt; &lt;a:form id='theForm2' cssStyle="border: 1px solid green;" action='/AjaxRemoteForm.action' method='post' theme="ajax"&gt; &lt;input type='text' name='data' value='Struts User' /&gt; &lt;a:submit value="GO2" theme="ajax" resultDivId="two" /&gt; &lt;/a:form &gt; <!-- END SNIPPET: ajxExample1 --> </pre> <!-- START SNIPPET: ajxExDescription2 --> Notify other controls(divs) of a change. Using an pub-sub model you can notify others that your control changed and they can take the appropriate action. Most likely they will execute some action to refresh. The notifyTopics does this for you. You can have many topic names in a comma delimited list. eg: notifyTopics="newPerson, dataChanged" . Here is an example of this approach: <!-- END SNIPPET: ajxExDescription2 --> <pre> <!-- START SNIPPET: ajxExample2 --> &lt;a:form id="frm1" action="newPersonWithXMLResult" theme="ajax" &gt; &lt;a:textfield label="Name" name="person.name" value="person.name" size="20" required="true" /&gt; &lt;a:submit id="submitBtn" value="Save" theme="ajax" cssClass="primary" notifyTopics="personUpdated, systemWorking" /&gt; &lt;/a:form &gt; &lt;a:div href="/listPeople.action" theme="ajax" errorText="error opps" loadingText="loading..." id="cart-body" &gt; &lt;a:action namespace="" name="listPeople" executeResult="true" /&gt; &lt;/a:div&gt; <!-- END SNIPPET: ajxExample2 --> </pre> <!-- START SNIPPET: ajxExDescription3 --> Massage the results with JavaScript. Say that your result returns some h appy XML and you want to parse it and do lots of cool things with it. The way to do this is with a onLoadJS handler. Here you provide the name of a JavaScript function to be called back with the result and the event type. The only key is that you must use the variable names 'data' and 'type' when defining the callback. For example: onLoadJS="myFancyDancyFunction(data, type)". While I talked about XML in this example, your not limited to XML, the data in the callback will be exactly whats returned as your result. Here is an example of this approach: <!-- END SNIPPET: ajxExDescription3 --> <pre> <!-- START SNIPPET: ajxExample3 --> &lt;script language="JavaScript" type="text/javascript"&gt; function doGreatThings(data, type) { //Do whatever with your returned fragment... //Perhapps.... if xml... var xml = dojo.xml.domUtil.createDocumentFromText(data); var people = xml.getElementsByTagName("person"); for(var i = 0;i < people.length; i ++){ var person = people[i]; var name = person.getAttribute("name") var id = person.getAttribute("id") alert('Thanks dude. Person: ' + name + ' saved great!!!'); } } &lt;/script&gt; &lt;a:form id="frm1" action="newPersonWithXMLResult" theme="ajax" &gt; &lt;a:textfield label="Name" name="person.name" value="person.name" size="20" required="true" /&gt; &lt;a:submit id="submitBtn" value="Save" theme="ajax" cssClass="primary" onLoadJS="doGreatThings(data, type)" /&gt; &lt;/a:form&gt; <!-- END SNIPPET: ajxExample3 --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">resultDivId</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The id of the HTML element to place the result (this can the the form's id or any id on the page.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onLoadJS</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Javascript code that will be executed after the form has been submitted. The format is onLoadJS='yourMethodName(data,type)'. NOTE: the words data and type must be left like that if you want the event type and the returned data.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">notifyTopics</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Topic names to post an event to after the form has been submitted.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listenTopics</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set listenTopics attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">preInvokeJS</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Javascript code that will be executed before invokation. The format is preInvokeJS='yourMethodName(data,type)'.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Supply a submit button text apart from submit value. Will have no effect for <i>input</i> type submit, since button text will always be the value parameter. For the type <i>image</i>, alt parameter will be set to this value.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">src</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Supply an image src for <i>image</i> type submit button. Will have no effect for types <i>input</i> and <i>button</i>.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">action</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set action attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">method</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set method attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">align</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML align attribute.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">type</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">input</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The type of submit to use. Valid values are <i>input</i>, <i>button</i> and <i>image</i>.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/TabbedPanel.html b/trunk/docs/tags/TabbedPanel.html
deleted file mode 100644
index 686139f..0000000
--- a/trunk/docs/tags/TabbedPanel.html
+++ /dev/null
@@ -1,640 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:tabbedPanel /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:tabbedPanel /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a tabbedPanel widget.
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> The tabbedpanel widget is primarily an AJAX component, where each tab can either be local content or remote content (refreshed each time the user selects that tab).</p> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <p/> <!-- START SNIPPET: exdesc --> The following is an example of a tabbedpanel and panel tag utilizing local and remote content.<p/> <!-- END SNIPPET: exdesc --> <pre> <!-- START SNIPPET: example --> &lt;a:tabbedPanel id="test2" theme="simple" &gt; &lt;a:panel id="left" tabName="left" theme="ajax"&gt; This is the left pane&lt;br/&gt; &lt;a:form &gt; &lt;a:textfield name="tt" label="Test Text" /&gt; &lt;br/&gt; &lt;a:textfield name="tt2" label="Test Text2" /&gt; &lt;/a:form&gt; &lt;/a:panel&gt; &lt;a:panel remote="true" href="/AjaxTest.action" id="ryh1" theme="ajax" tabName="remote one" /&gt; &lt;a:panel id="middle" tabName="middle" theme="ajax"&gt; middle tab&lt;br/&gt; &lt;a:form &gt; &lt;a:textfield name="tt" label="Test Text44" /&gt; &lt;br/&gt; &lt;a:textfield name="tt2" label="Test Text442" /&gt; &lt;/a:form&gt; &lt;/a:panel&gt; &lt;a:panel remote="true" href="/AjaxTest.action" id="ryh21" theme="ajax" tabName="remote right" /&gt; &lt;/a:tabbedPanel&gt; <!-- END SNIPPET: example --> </pre> <p/> <b>Additional Configuration</b> <!-- START SNIPPET: exdesc2 --> If you are looking for the "nifty" rounded corner look, there is additional configuration. This assumes that the background color of the tabs is white. If you are using a different color, please modify the parameter in the Rounded() method.<p/> <!-- END SNIPPET: exdesc2 --> <pre> <!-- START SNIPPET: example2 --> &lt;link rel="stylesheet" type="text/css" href="&lt;a:url value="/struts/tabs.css"/&gt;"&gt; &lt;link rel="stylesheet" type="text/css" href="&lt;a:url value="/struts/niftycorners/niftyCorners.css"/&gt;"&gt; &lt;link rel="stylesheet" type="text/css" href="&lt;a:url value="/struts/niftycorners/niftyPrint.css"/&gt;" media="print"&gt; &lt;script type="text/javascript" src="&lt;a:url value="/struts/niftycorners/nifty.js"/&gt;"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; dojo.event.connect(window, "onload", function() { if (!NiftyCheck()) return; Rounded("li.tab_selected", "top", "white", "transparent", "border #ffffffS"); Rounded("li.tab_unselected", "top", "white", "transparent", "border #ffffffS"); // "white" needs to be replaced with the background color }); &lt;/script&gt; <!-- END SNIPPET: example2 --> </pre> <b>Important:</b> Be sure to setup the page containing this tag to be Configured for AJAX
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The id to assign to the component.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">openTemplate</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set template to use for opening the rendered html.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Text.html b/trunk/docs/tags/Text.html
deleted file mode 100644
index ad48695..0000000
--- a/trunk/docs/tags/Text.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:text /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:text /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a I18n text message.
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render a I18n text message. <p/> The message must be in a resource bundle with the same name as the action that it is associated with. In practice this means that you should create a properties file in the same package as your Java class with the same name as your class, but with .properties extension. <p/> If the named message is not found, then the body of the tag will be used as default message. If no body is used, then the name of the message will be used. <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>name* (String) - the i18n message key</li> </ul> <!-- END SNIPPET: params --> <p/> Example: <pre> <!-- START SNIPPET: exdescription --> Accessing messages from a given bundle (the i18n Shop example bundle in the first example) and using bundle defined through ww in the second example.</p> <!-- END SNIPPET: exdescription --> </pre> <pre> <!-- START SNIPPET: example --> &lt;!-- First Example --&gt; &lt;a:i18n name="struts.action.test.i18n.Shop"&gt; &lt;a:text name="main.title"/&gt; &lt;/a:i18n&gt; &lt;!-- Second Example --&gt; &lt;a:text name="main.title" /&gt; <!-- END SNIPPET: example --> </pre> <pre> <!-- START SNIPPET: i18nExample --> &lt;-- Third Example --&gt; &lt;a:text name="some.key" /&gt; &lt;-- Fourth Example --&gt; &lt;a:text name="some.invalid.key" &gt; The Default Message That Will Be Displayed &lt;/a:text&gt; <!-- END SNIPPET: i18nExample --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Name of resource property to fetch</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/TextArea.html b/trunk/docs/tags/TextArea.html
deleted file mode 100644
index fbd4bb4..0000000
--- a/trunk/docs/tags/TextArea.html
+++ /dev/null
@@ -1,694 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:textarea /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:textarea /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render HTML textarea tag.
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render HTML textarea tag.</p> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:textarea label="Comments" name="comments" cols="30" rows="8"/&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cols</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML cols attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">readonly</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether the textarea is readonly</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">rows</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML rows attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">wrap</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML wrap attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/TextField.html b/trunk/docs/tags/TextField.html
deleted file mode 100644
index a3b809e..0000000
--- a/trunk/docs/tags/TextField.html
+++ /dev/null
@@ -1,694 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:textfield /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:textfield /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render an HTML input field of type text
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Render an HTML input field of type text</p> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <p/> <!-- START SNIPPET: exdescription --> In this example, a text control is rendered. The label is retrieved from a ResourceBundle by calling ActionSupport's getText() method.<p/> <!-- END SNIPPET: exdescription --> <pre> <!-- START SNIPPET: example --> &lt;a:textfield label="%{text('user_name')}" name="user" /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">maxlength</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML maxlength attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">maxLength</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Deprecated. Use maxlength instead.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">readonly</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether the input is readonly</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">size</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">HTML size attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Token.html b/trunk/docs/tags/Token.html
deleted file mode 100644
index d551971..0000000
--- a/trunk/docs/tags/Token.html
+++ /dev/null
@@ -1,622 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:token /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:token /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Stop double-submission of forms
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Stop double-submission of forms.</p> The token tag is used to help with the "double click" submission problem. It is needed if you are using the TokenInterceptor or the TokenSessionInterceptor. The a:token tag merely places a hidden element that contains the unique token.</p> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;a:token /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/Tree.html b/trunk/docs/tags/Tree.html
deleted file mode 100644
index 4ccda30..0000000
--- a/trunk/docs/tags/Tree.html
+++ /dev/null
@@ -1,1054 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:tree /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:tree /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a tree widget.
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Renders a tree widget with AJAX support.<p/> The id attribute is normally specified, such that it could be looked up using javascript if necessary.<p/> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt-- statically --&gt; &lt;s:tree id="..." label="..."&gt; &lt;s:treenode id="..." label="..." /&gt; &lt;s:treenode id="..." label="..."&gt; &lt;s:treenode id="..." label="..." /&gt; &lt;s:treenode id="..." label="..." /&gt; &lt;/s:treenode&gt; &lt;s:treenode id="..." label="..." /&gt; &lt;/s:tree&gt; &lt;-- dynamically --&gt; &lt;s:tree id="..." rootNode="..." nodeIdProperty="..." nodeTitleProperty="..." childCollectionProperty="..." /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">toggle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The toggle property (either 'explode' or 'fade'). Default is 'fade'.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">treeSelectedTopic</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The treeSelectedTopic property.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">treeExpandedTopic</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The treeExpandedTopic property.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">treeCollapsedTopic</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The treeCollapsedTopic property.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">rootNode</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The rootNode property.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">childCollectionProperty</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The childCollectionProperty property.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">nodeTitleProperty</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The nodeTitleProperty property.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">nodeIdProperty</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The nodeIdProperty property.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">showRootGrid</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The showRootGrid property (default true).</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">blankIconSrc</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Blank icon image source.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">expandIconSrcMinus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Expand icon (-) image source.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">expandIconSrcPlus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Expand Icon (+) image source.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">gridIconSrcC</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Image source for under child item child icons.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">gridIconSrcL</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Image source for last child grid.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">gridIconSrcP</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Image source for under parent item child icons.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">gridIconSrcV</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Image source for vertical line.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">gridIconSrcX</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Image source for grid for sole root item.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">gridIconSrcY</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Image source for grid for last root item.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">iconHeight</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Icon height (default 18 pixels).</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">iconWidth</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Icon width (default 19 pixels).</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateCssPath</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Template css path (default {contextPath}/struts/tree.css.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">toggleDuration</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Toggle duration (default 150 ms)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">showGrid</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Show grid (default true).</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">openTemplate</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set template to use for opening the rendered html.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/TreeNode.html b/trunk/docs/tags/TreeNode.html
deleted file mode 100644
index 72ffdd4..0000000
--- a/trunk/docs/tags/TreeNode.html
+++ /dev/null
@@ -1,640 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:treenode /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:treenode /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a tree node within a tree widget.
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Renders a tree node within a tree widget with AJAX support.<p/> Either of the following combinations should be used depending on if the tree is to be constrcted dynamically or statically. <p/> <b>Dynamically</b> <ul> <li>id - id of this tree node</li> <li>title - label to be displayed for this tree node</li> </ul> <b>Statically</b> <ul> <li>rootNode - the parent node of which this tree is derived from</li> <li>nodeIdProperty - property to obtained this current tree node's id</li> <li>nodeTitleProperty - property to obtained this current tree node's title</li> <li>childCollectionProperty - property that returnds this current tree node's children</li> </ul> <!-- END SNIPPET: javadoc --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt-- statically --&gt; &lt;ww:tree id="..." label="..."&gt; &lt;ww:treenode id="..." label="..." /&gt; &lt;ww:treenode id="..." label="..."&gt; &lt;ww:treenode id="..." label="..." /&gt; &lt;ww:treenode id="..." label="..." /&gt; &;lt;/ww:treenode&gt; &lt;ww:treenode id="..." label="..." /&gt; &lt;/ww:tree&gt; &lt;-- dynamically --&gt; &lt;ww:tree id="..." rootNode="..." nodeIdProperty="..." nodeTitleProperty="..." childCollectionProperty="..." /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering tree node label.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">openTemplate</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set template to use for opening the rendered html.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/URL.html b/trunk/docs/tags/URL.html
deleted file mode 100644
index d411444..0000000
--- a/trunk/docs/tags/URL.html
+++ /dev/null
@@ -1,280 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:url /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:url /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-This tag is used to create a URL
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> <p>This tag is used to create a URL.</p> <p>You can use the "param" tag inside the body to provide additional request parameters.</p> <b>NOTE:</b> <p>When includeParams is 'all' or 'get', the parameter defined in param tag will take precedence and will not be overriden if they exists in the parameter submitted. For example, in Example 3 below, if there is a id parameter in the url where the page this tag is included like http://<host>:<port>/<context>/editUser.action?id=3333&name=John the generated url will be http://<host>:<port>/context>/editUser.action?id=22&name=John cause the parameter defined in the param tag will take precedence.</p> <!-- END SNIPPET: javadoc --> <!-- START SNIPPET: params --> <ul> <li>action (String) - (value or action choose either one, if both exist value takes precedence) action's name (alias) <li> <li>value (String) - (value or action choose either one, if both exist value takes precedence) the url itself</li> <li>scheme (String) - http scheme (http, https) default to the scheme this request is in</li> <li>namespace - action's namespace</li> <li>method (String) - action's method, default to execute() </li> <li>encode (Boolean) - url encode the generated url. Default is true</li> <li>includeParams (String) - The includeParams attribute may have the value 'none', 'get' or 'all'. Default is 'get'. none - include no parameters in the URL get - include only GET parameters in the URL (default) all - include both GET and POST parameters in the URL </li> <li>includeContext (Boolean) - determine wheather to include the web app context path. Default is true.</li> </ul> <!-- END SNIPPET: params --> <p/> <b>Examples</b> <pre> <!-- START SNIPPET: example --> &lt;-- Example 1 --&gt; &lt;a:url value="editGadget.action"&gt; &lt;a:param name="id" value="%{selected}" /&gt; &lt;/a:url&gt; &lt;-- Example 2 --&gt; &lt;a:url action="editGadget"&gt; &lt;a:param name="id" value="%{selected}" /&gt; &lt;/a:url&gt; &lt;-- Example 3--&gt; &lt;a:url includeParams="get" &gt; &lt:param name="id" value="%{'22'}" /&gt; &lt;/a:url&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">includeParams</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">get</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The includeParams attribute may have the value 'none', 'get' or 'all'.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">scheme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set scheme attribute</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The target value to use, if not using action</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">action</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The action generate url for, if not using value</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">namespace</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The namespace to use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">method</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The method of action to use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">encode</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">whether to encode parameters</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">includeContext</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">whether actual context should be included in url</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">portletMode</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The resulting portlet mode</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">windowState</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The resulting portlet window state</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">portletUrlType</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Specifies if this should be a portlet render or action url</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">anchor</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The anchor for this URL</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/UpDownSelect.html b/trunk/docs/tags/UpDownSelect.html
deleted file mode 100644
index 0b8bd7d..0000000
--- a/trunk/docs/tags/UpDownSelect.html
+++ /dev/null
@@ -1,874 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:updownselect /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:updownselect /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Render a up down select element
-
-</p>
-
-<p>
-<!-- START SNIPPET: javadoc --> Create a Select component with buttons to move the elements in the select component up and down. When the containing form is submited, its elements will be submitted in the order they are arranged (top to bottom). <!-- END SNIPPET: javadoc --> <p/> <pre> <!-- START SNIPPET: example --> &lt;!-- Example 1: simple example --&gt; &lt;a:updownselect list="#{'england':'England', 'america':'America', 'germany':'Germany'}" name="prioritisedFavouriteCountries" headerKey="-1" headerValue="--- Please Order Them Accordingly ---" emptyOption="true" /&gt; &lt;!-- Example 2: more complex example --&gt; &lt;a:updownselect list="defaultFavouriteCartoonCharacters" name="prioritisedFavouriteCartoonCharacters" headerKey="-1" headerValue="--- Please Order ---" emptyOption="true" allowMoveUp="true" allowMoveDown="true" allowSelectAll="true" moveUpLabel="Move Up" moveDownLabel="Move Down" selectAllLabel="Select All" /&gt; <!-- END SNIPPET: example --> </pre>
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowMoveUp</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether move up button should be displayed</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowMoveDown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether move down button should be displayed</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">allowSelectAll</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">true</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether or not select all button should be displayed</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">moveUpLabel</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">^</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Text to display on the move up button</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">moveDownLabel</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">v</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Text to display on the move down button</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">selectAllLabel</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">*</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Text to display on the select all button</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">emptyOption</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether or not to add an empty (--) option after the header option</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">headerKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Key for first item in list. Must not be empty! "'-1'" and "''" is correct, "" is bad.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">headerValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Value expression for first item in list</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">multiple</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute. Passing a Collection may work too? Haven't tested this.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">size</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">Size of the element box (# of elements to show)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">list</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option "value" parameter and the Map value will become the option body.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listKey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field value from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">listValue</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Property of list objects to get field content from</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/WebTable.html b/trunk/docs/tags/WebTable.html
deleted file mode 100644
index 669d024..0000000
--- a/trunk/docs/tags/WebTable.html
+++ /dev/null
@@ -1,694 +0,0 @@
-
-<html>
-<head>
-<title>&lt;a2:table /&gt;</title>
-</head>
-
-<body>
-
-<h1>Tag Name: &lt;a2:table /&gt;</h1>
-
-<h2>Description</h2>
-<p>
-
-Instantiate a JavaBean and place it in the context.
-
-</p>
-
-<p>
-
-</p>
-
-<h2>Attributes</h2>
-<p>
-
-<!-- START SNIPPET: tagattributes -->
-<table width="100%">
-<tr>
-
-<th align="left" valign="top"><h4>Name</h4></th>
-<th align="left" valign="top"><h4>Required</h4></th>
-<th align="left" valign="top"><h4>Default</h4></th>
-<th align="left" valign="top"><h4>Type</h4></th>
-<th align="left" valign="top"><h4>Description</h4></th>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">modelName</td>
-
-<!-- Required -->
-<td align="left" valign="top"><b>true</b></td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name of model to use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">sortColumn</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Integer</td>
-
-<!-- Description -->
-<td align="left" valign="top">Index of column to sort data by</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">sortOrder</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">NONE</td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set sort order. Allowed values are NONE, ASC and DESC</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">sortable</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">Whether the table should be sortable. Requires that model implements org.apache.struts2.components.table.SortableTableModel if set to true.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">templateDir</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template directory.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">theme</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">template</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The template (other than default) to use for rendering the element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssClass</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css class to use for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">cssStyle</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The css style definitions for element ro use</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">title</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html title attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">disabled</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">label</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Label expression used for rendering a element specific label</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">labelposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define label position of form element (top/left)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">requiredposition</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">define required position of required form element (left|right)</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">name</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">The name to set for element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">required</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">false</td>
-
-<!-- Type -->
-<td align="left" valign="top">Boolean</td>
-
-<!-- Description -->
-<td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tabindex</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">value</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Preset the value of input element.</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">ondblclick</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousedown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseover</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmousemove</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onmouseout</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onfocus</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onblur</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onblur attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeypress</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeydown</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onkeyup</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onselect</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">onchange</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">accesskey</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltip</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip of this particular component</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">tooltipConfig</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top"></td>
-
-<!-- Type -->
-<td align="left" valign="top">String</td>
-
-<!-- Description -->
-<td align="left" valign="top">Set the tooltip configuration</td>
-
-</tr>
-
-<tr>
-<!-- Attribute name -->
-<td align="left" valign="top">id</td>
-
-<!-- Required -->
-<td align="left" valign="top">false</td>
-
-<!-- Default -->
-<td align="left" valign="top">&nbsp;</td>
-
-<!-- Type -->
-<td align="left" valign="top">Object/String</td>
-
-<!-- Description -->
-<td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
-
-</tr>
-
-</table>
-<!-- END SNIPPET: tagattributes -->
-
-</p>
-<p>
-<center><a href="index.html">Back to Taglib Index</a></center>
-</p>
-</body>
-</html>
-
diff --git a/trunk/docs/tags/index.html b/trunk/docs/tags/index.html
deleted file mode 100644
index 19facd4..0000000
--- a/trunk/docs/tags/index.html
+++ /dev/null
@@ -1,567 +0,0 @@
-<html>
-<head>
-<title>Struts 2.0.0-SNAPSHOT Taglib Index</title>
-</head>
-
-<body>
-
-<h1>Struts 2.0.0-SNAPSHOT Taglib Index</h1>
-<p>
-<table width="100%">
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="DoubleSelect.html">&lt;doubleselect /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Renders two HTML select elements with second one changing displayed values depending on selected entry of first one.
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Bean.html">&lt;bean /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Instantiate a JavaBean and place it in the context.
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Label.html">&lt;label /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a label that displays read-only information
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="RichTextEditor.html">&lt;richtexteditor /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a rich text editor element
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="TabbedPanel.html">&lt;tabbedPanel /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a tabbedPanel widget.
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Else.html">&lt;else /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Else tag
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="TextField.html">&lt;textfield /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render an HTML input field of type text
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Date.html">&lt;date /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a formatted date.
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Head.html">&lt;head /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a chunk of HEAD for your HTML file
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Password.html">&lt;password /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render an HTML input tag of type password
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Reset.html">&lt;reset /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a reset button
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="TreeNode.html">&lt;treenode /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a tree node within a tree widget.
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="URL.html">&lt;url /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-This tag is used to create a URL
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Include.html">&lt;include /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Include a servlet's output (result of servlet or a JSP page)
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Token.html">&lt;token /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Stop double-submission of forms
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Text.html">&lt;text /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a I18n text message.
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="DatePicker.html">&lt;datepicker /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render datepicker
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Div.html">&lt;div /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render HTML div providing content from remote call via AJAX
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Set.html">&lt;set /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Assigns a value to a variable in a specified scope
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Checkbox.html">&lt;checkbox /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a checkbox input field
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="I18n.html">&lt;i18n /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Get a resource bundle and place it on the value stack
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Submit.html">&lt;submit /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a submit button
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="FieldError.html">&lt;fielderror /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render field error (all or partial depending on param tag nested)if they exists
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="File.html">&lt;file /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a file input field
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="AppendIterator.html">&lt;append /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Append the values of a list of iterators to one iterator
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="GenericUIBean.html">&lt;component /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a custom ui widget
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Push.html">&lt;push /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Push value on stack for simplified usage.
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="OptGroup.html">&lt;optgroup /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Renders a Select Tag's OptGroup Tag
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="WebTable.html">&lt;table /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Instantiate a JavaBean and place it in the context.
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Tree.html">&lt;tree /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a tree widget.
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="TextArea.html">&lt;textarea /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render HTML textarea tag.
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Param.html">&lt;param /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Parametrize other tags
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="ActionMessage.html">&lt;actionmessage /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render action messages if they exists
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Select.html">&lt;select /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a select element
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="ActionComponent.html">&lt;action /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Execute an action from within a view
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Panel.html">&lt;panel /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a panel for tabbedPanel
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="CheckboxList.html">&lt;checkboxlist /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a list of checkboxes
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Form.html">&lt;form /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Renders an input form
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="ActionError.html">&lt;actionerror /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render action errors if they exists
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="ComboBox.html">&lt;combobox /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Widget that fills a text box from a select
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="OptionTransferSelect.html">&lt;optiontransferselect /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Renders an input form
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Property.html">&lt;property /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Print out expression which evaluates against the stack
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Hidden.html">&lt;hidden /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a hidden input field
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="IteratorComponent.html">&lt;iterator /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Iterate over a iterable value
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="MergeIterator.html">&lt;merge /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Merge the values of a list of iterators into one iterator
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="ElseIf.html">&lt;elseif /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Elseif tag
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Radio.html">&lt;radio /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Renders a radio button input field
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="UpDownSelect.html">&lt;updownselect /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a up down select element
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="Anchor.html">&lt;a /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-Render a HTML href element that when clicked calls a URL via remote XMLHttpRequest
-
-</td>
-</tr>
-
-<tr>
-<td align="left" valign="top" width="20%">
-<a href="If.html">&lt;if /&gt;</a>
-</td>
-<td align="left" valign="top" width="*">
-
-If tag
-
-</td>
-</tr>
-
-</table>
-
-</p>
-
-</body>
-</html>
diff --git a/trunk/plugins/config-browser/pom.xml b/trunk/plugins/config-browser/pom.xml
deleted file mode 100644
index a621107..0000000
--- a/trunk/plugins/config-browser/pom.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-config-browser-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 Configuration Browser Plugin</name>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts-core</artifactId>
-            <version>1.3.5</version>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java b/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java
deleted file mode 100644
index e332ffb..0000000
--- a/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config_browser;
-
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-
-/**
- * ActionNamesAction
- *
- */
-public class ActionNamesAction extends ActionSupport {
-	
-	private static final long serialVersionUID = -5389385242431387840L;
-	
-	private Set actionNames;
-    private String namespace = "";
-    private Set namespaces;
-    private String extension;
-
-    public Set getActionNames() {
-        return actionNames;
-    }
-
-    public String getNamespace() {
-        return namespace;
-    }
-
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    public ActionConfig getConfig(String actionName) {
-        return ConfigurationHelper.getActionConfig(namespace, actionName);
-    }
-
-    public Set getNamespaces() {
-        return namespaces;
-    }
-
-    public String getExtension() {
-        if ( extension == null) {
-            String ext = (String) Settings.get(StrutsConstants.STRUTS_ACTION_EXTENSION);
-            if ( ext == null || ext.equals("")) {
-                extension = "action";
-            } else {
-                extension = ext;
-            }
-        }
-        return extension;
-    }
-
-    public String execute() throws Exception {
-        namespaces = ConfigurationHelper.getNamespaces();
-        if (namespaces.size() == 0) {
-            addActionError("There are no namespaces in this configuration");
-            return ERROR;
-        }
-        if (namespace == null) {
-            namespace = "";
-        }
-        actionNames =
-                new TreeSet(ConfigurationHelper.getActionNames(namespace));
-        return SUCCESS;
-    }
-}
diff --git a/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ConfigurationHelper.java b/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ConfigurationHelper.java
deleted file mode 100644
index 09f0b29..0000000
--- a/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ConfigurationHelper.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config_browser;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.struts2.dispatcher.Dispatcher;
-
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-
-/**
- * ConfigurationHelper
- */
-public class ConfigurationHelper {
-
-    public static Set getNamespaces() {
-        Set namespaces = Collections.EMPTY_SET;
-        Map allActionConfigs = Dispatcher.getInstance().getConfigurationManager().getConfiguration().getRuntimeConfiguration().getActionConfigs();
-        if (allActionConfigs != null) {
-            namespaces = allActionConfigs.keySet();
-        }
-        return namespaces;
-    }
-
-    public static Set getActionNames(String namespace) {
-        Set actionNames = Collections.EMPTY_SET;
-        Map allActionConfigs = Dispatcher.getInstance().getConfigurationManager().getConfiguration().getRuntimeConfiguration().getActionConfigs();
-        if (allActionConfigs != null) {
-            Map actionMappings = (Map) allActionConfigs.get(namespace);
-            if (actionMappings != null) {
-                actionNames = actionMappings.keySet();
-            }
-        }
-        return actionNames;
-    }
-
-    public static ActionConfig getActionConfig(String namespace, String actionName) {
-        ActionConfig config = null;
-        Map allActionConfigs = Dispatcher.getInstance().getConfigurationManager().getConfiguration().getRuntimeConfiguration().getActionConfigs();
-        if (allActionConfigs != null) {
-            Map actionMappings = (Map) allActionConfigs.get(namespace);
-            if (actionMappings != null) {
-                config = (ActionConfig) actionMappings.get(actionName);
-            }
-        }
-        return config;
-    }
-}
diff --git a/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java b/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java
deleted file mode 100644
index 8cafe36..0000000
--- a/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config_browser;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.struts2.util.ClassLoaderUtils;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.validator.ActionValidatorManagerFactory;
-
-/**
- * ListValidatorsAction loads the validations for a given class and context
- *
- */
-public class ListValidatorsAction extends ActionSupport {
-	
-	private static final long serialVersionUID = 1L;
-	
-	private String clazz;
-    private String context;
-    List validators = Collections.EMPTY_LIST;
-
-    public String getClazz() {
-        return clazz;
-    }
-
-    public void setClazz(String clazz) {
-        this.clazz = clazz;
-    }
-
-    public String stripPackage(Class clazz) {
-        return clazz.getName().substring(clazz.getName().lastIndexOf('.') + 1);
-    }
-
-    public String stripPackage(String clazz) {
-        return clazz.substring(clazz.lastIndexOf('.') + 1);
-    }
-
-    public String getContext() {
-        return context;
-    }
-
-    public void setContext(String context) {
-        this.context = context;
-    }
-
-    public List getValidators() {
-        return validators;
-    }
-
-    public String execute() throws Exception {
-        loadValidators();
-        return super.execute();
-    }
-
-    protected void loadValidators() {
-        Class value = getClassInstance();
-        if ( value != null ) {
-            validators = ActionValidatorManagerFactory.getInstance().getValidators(value, context);
-        }
-    }
-
-    private Class getClassInstance() {
-        try {
-            return ClassLoaderUtils.loadClass(clazz, ActionContext.getContext().getClass());
-        } catch (Exception e) {
-            LOG.error("Class '" + clazz + "' not found...",e);
-        }
-        return null;
-    }
-}
diff --git a/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java b/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java
deleted file mode 100644
index 94de49c..0000000
--- a/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config_browser;
-
-import java.beans.PropertyDescriptor;
-import java.util.Set;
-import java.util.TreeSet;
-
-import ognl.OgnlRuntime;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-
-/**
- * ShowConfigAction
- */
-public class ShowConfigAction extends ActionNamesAction {
-	
-	private static final long serialVersionUID = -1630527489407671652L;
-
-	private static final PropertyDescriptor[] PDSAT = new PropertyDescriptor[0];
-
-    private String namespace;
-    private String actionName;
-    private ActionConfig config;
-    private Set actionNames;
-    private String detailView = "results";
-    private PropertyDescriptor[] properties;
-    private static Log log = LogFactory.getLog(ShowConfigAction.class);
-
-    public String getDetailView() {
-        return detailView;
-    }
-
-    public void setDetailView(String detailView) {
-        this.detailView = detailView;
-    }
-
-    public Set getActionNames() {
-        return actionNames;
-    }
-
-    public String getNamespace() {
-        return namespace;
-    }
-
-    public String stripPackage(Class clazz) {
-        return clazz.getName().substring(clazz.getName().lastIndexOf('.') + 1);
-    }
-
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    public String getActionName() {
-        return actionName;
-    }
-
-    public void setActionName(String actionName) {
-        this.actionName = actionName;
-    }
-
-    public ActionConfig getConfig() {
-        return config;
-    }
-
-    public PropertyDescriptor[] getProperties() {
-        return properties;
-    }
-
-    public String execute() throws Exception {
-        super.execute();
-        config = ConfigurationHelper.getActionConfig(namespace, actionName);
-        actionNames =
-                new TreeSet(ConfigurationHelper.getActionNames(namespace));
-        try {
-            Class clazz = ObjectFactory.getObjectFactory().getClassInstance(getConfig().getClassName());
-            java.util.Collection pds = OgnlRuntime.getPropertyDescriptors(clazz).values();
-            properties = (PropertyDescriptor[]) pds.toArray(PDSAT);
-        } catch (Exception e) {
-            log.error("Unable to get properties for action " + actionName, e);
-            addActionError("Unable to retrieve action properties: " + e.toString());
-        }
-
-        if (hasErrors()) //super might have set some :)
-            return ERROR;
-        else
-            return SUCCESS;
-    }
-}
-
diff --git a/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java b/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java
deleted file mode 100644
index aa5386b..0000000
--- a/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.config_browser;
-
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-import ognl.Ognl;
-import ognl.OgnlException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.OgnlUtil;
-import com.opensymphony.xwork2.validator.Validator;
-
-/**
- * ShowValidatorAction
- *
- */
-public class ShowValidatorAction extends ListValidatorsAction {
-    private static final long serialVersionUID = 4061534149317835177L;
-
-    private static Log log = LogFactory.getLog(ShowValidatorAction.class);
-
-    Set properties = Collections.EMPTY_SET;
-    int selected = 0;
-
-    public int getSelected() {
-        return selected;
-    }
-
-    public void setSelected(int selected) {
-        this.selected = selected;
-    }
-
-    public Set getProperties() {
-        return properties;
-    }
-
-    public Validator getSelectedValidator() {
-        return (Validator) validators.get(selected);
-    }
-
-    public String execute() throws Exception {
-        loadValidators();
-        Validator validator = getSelectedValidator();
-        properties = new TreeSet();
-        try {
-            Map context = Ognl.createDefaultContext(validator);
-            BeanInfo beanInfoFrom = null;
-            try {
-                beanInfoFrom = Introspector.getBeanInfo(validator.getClass(), Object.class);
-            } catch (IntrospectionException e) {
-                log.error("An error occurred", e);
-                addActionError("An error occurred while introspecting a validator of type " + validator.getClass().getName());
-                return ERROR;
-            }
-
-            PropertyDescriptor[] pds = beanInfoFrom.getPropertyDescriptors();
-
-            for (int i = 0; i < pds.length; i++) {
-                PropertyDescriptor pd = pds[i];
-                String name = pd.getName();
-                Object value = null;
-                if (pd.getReadMethod() == null) {
-                    value = "No read method for property";
-                } else {
-                    try {
-                        Object expr = OgnlUtil.compile(name);
-                        value = Ognl.getValue(expr, context, validator);
-                    } catch (OgnlException e) {
-                        addActionError("Caught OGNL exception while getting property value for '" + name + "' on validator of type " + validator.getClass().getName());
-                    }
-                }
-                properties.add(new PropertyInfo(name, pd.getPropertyType(), value));
-            }
-        } catch (Exception e) {
-            log.warn("Unable to retrieve properties.", e);
-            addActionError("Unable to retrieve properties: " + e.toString());
-        }
-
-        if (hasErrors())
-            return ERROR;
-        else
-            return SUCCESS;
-    }
-
-    public static class PropertyInfo implements Comparable {
-        private String name;
-        private Class type;
-        private Object value;
-
-        public PropertyInfo(String name, Class type, Object value) {
-            if (name == null) {
-                throw new IllegalArgumentException("Name must not be null");
-            }
-            if (type == null) {
-                throw new IllegalArgumentException("Type must not be null");
-            }
-            this.name = name;
-            this.type = type;
-            this.value = value;
-        }
-
-        public Class getType() {
-            return type;
-        }
-
-        public void setType(Class type) {
-            this.type = type;
-        }
-
-        public Object getValue() {
-            return value;
-        }
-
-        public void setValue(Object value) {
-            this.value = value;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof PropertyInfo)) return false;
-
-            final PropertyInfo propertyInfo = (PropertyInfo) o;
-
-            if (!name.equals(propertyInfo.name)) return false;
-            if (!type.equals(propertyInfo.type)) return false;
-            if (value != null ? !value.equals(propertyInfo.value) : propertyInfo.value != null) return false;
-
-            return true;
-        }
-
-        public int hashCode() {
-            int result;
-            result = name.hashCode();
-            result = 29 * result + type.hashCode();
-            result = 29 * result + (value != null ? value.hashCode() : 0);
-            return result;
-        }
-
-        public int compareTo(Object o) {
-            PropertyInfo other = (PropertyInfo) o;
-            return this.name.compareTo(other.name);
-        }
-    }
-}
diff --git a/trunk/plugins/config-browser/src/main/resources/config-browser/actionNames.ftl b/trunk/plugins/config-browser/src/main/resources/config-browser/actionNames.ftl
deleted file mode 100644
index 20f92d6..0000000
--- a/trunk/plugins/config-browser/src/main/resources/config-browser/actionNames.ftl
+++ /dev/null
@@ -1,22 +0,0 @@
-<#include "tigris-macros.ftl">
-<@startPage pageTitle="Actions in namespace"/>
-<h3>Actions in <#if namespace == ""> default namespace <#else> ${namespace} </#if></h3>
-<table>
-	<tr>
-		<td>
-			<ul>
-			<#list actionNames as name>
-                <@s.url id="showConfig" action="showConfig" includeParams="none">
-                    <@s.param name="namespace">${namespace}</@s.param>
-                    <@s.param name="actionName">${name}</@s.param>
-                </@s.url>
-                <li><a href="${showConfig}">${name}</a></li>
-			</#list>
-			</ul>
-		</td>
-		<td>
-			<!-- Placeholder for namespace graph -->
-		</td>
-	</tr>
-</table>
-<@endPage />
diff --git a/trunk/plugins/config-browser/src/main/resources/config-browser/config-styles.css b/trunk/plugins/config-browser/src/main/resources/config-browser/config-styles.css
deleted file mode 100644
index 6fe24fc..0000000
--- a/trunk/plugins/config-browser/src/main/resources/config-browser/config-styles.css
+++ /dev/null
@@ -1,792 +0,0 @@
-<style type="text/css">
-	/* colors, backgrounds, borders, link indication */
-body {
-	background: #fff;
-	color: #000;
-}
-
-.app h3, .app h4, .tabs td, .tabs th, .functnbar {
-	background-image: url(../images/nw_maj_rond.gif);
-	background-repeat: no-repeat;
-}
-
-.functnbar, .functnbar2 {
-	background-color: #aaa;
-}
-
-.functnbar2, .functnbar3 {
-	background-color: #aaa;
-	background-image: url(../images/sw_maj_rond.gif);
-	background-repeat: no-repeat;
-	background-position: bottom left;
-}
-
-.functnbar3 {
-	background-color: #ddd;
-	background-image: url(../images/sw_med_rond.gif);
-}
-
-.functnbar, .functnbar2, .functnbar3 {
-	color: #000;
-}
-
-.functnbar a, .functnbar2 a, .functnbar3 a {
-	color: #000;
-	text-decoration: underline;
-}
-
-#navcolumn .body div, body.docs #toc li li {
-	background-image: url(../images/strich.gif);
-	background-repeat: no-repeat;
-	background-position: .5em .5em;
-}
-
-#searchbox .body div, #navcolumn .body .heading {
-	background-image: none;
-}
-
-a:link, #navcolumn a:visited, .app a:visited, .tasknav a:visited {
-	color: blue;
-}
-
-a:link.selfref, a:visited.selfref {
-	color: #555 !important;
-	text-decoration: none;
-}
-
-a:active, a:hover, #leftcol a:active, #leftcol a:hover {
-	color: #f30 !important;
-}
-
-#leftcol a, #breadcrumbs a {
-	text-decoration: none;
-}
-
-.app h3, .app h4 {
-	color: #fff;
-}
-
-.app h3 {
-	background-color: #333;
-}
-
-.app h3 a:link, .app h3 a:visited, .app h4 a:link, .app h4 a:visited {
-	color: #fff !important;
-	text-decoration: underline;
-}
-
-.app h4 {
-	background-color: #888;
-}
-
-.a td {
-	background: #ddd;
-}
-
-.b td {
-	background: #efefef;
-}
-
-table, th, td {
-	border: none;
-}
-
-div.colbar {
-	background: #eee;
-	border-color: #999 #EEE #EEE #999;
-	border-width: 1px;
-	border-style: solid;
-}
-
-.toolgroup {
-	background: #efefef;
-}
-
-.toolgroup .label {
-	border-bottom: 1px solid #666;
-	border-right: 1px solid #666;
-	background: #ddd;
-	color: #555;
-}
-
-.toolgroup .body {
-	border-right: 1px solid #aaa;
-	border-bottom: 1px solid #aaa;
-}
-
-#breadcrumbs {
-	border-top: 1px solid #fff;
-	background-color: #ccc;
-}
-
-#main {
-	border-top: 1px solid #999;
-}
-
-#rightcol div.www, #rightcol div.help {
-	border: 1px solid #ddd;
-}
-
-body.docs div.docs {
-	background-color: #fff;
-	border-left: 1px solid #ddd;
-	border-top: 1px solid #ddd;
-}
-
-#helptext .label {
-	background-image: url(../images/icon_help_sml.gif);
-	background-repeat: no-repeat;
-	background-position: 97%;
-}
-
-body.docs {
-	background: #eee url(../images/help_logo.gif) top right no-repeat !important;
-}
-
-.docs h3, .docs h4 {
-	border-top: solid 1px #000;
-}
-
-#apphead h2 em {
-	color: #777;
-}
-
-.app th {
-	background-color: #bbb;
-}
-
-.tabs th {
-	border-right: 1px solid #333;
-	background-color: #ddd;
-	color: #fff;
-	border-left: 1px solid #fff;
-}
-
-.tabs td {
-	background-color: #999;
-	border-bottom: 1px solid #fff;
-	border-right: 1px solid #fff;
-	border-left: 1px solid #fff;
-}
-
-.tabs {
-	border-bottom: 6px #ddd solid;
-}
-
-.tabs th, .tabs th a:link, .tabs th a:visited {
-	color: #555;
-}
-
-.tabs td, .tabs td a:link, .tabs td a:visited {
-	color: #fff;
-}
-
-.tabs a {
-	text-decoration: none;
-}
-
-.axial th {
-	background-color: #ddd;
-	color: black;
-}
-
-.alert {
-	background-color: #ff9;
-}
-
-.expandedwaste {
-	background: url(../images/icon_arrowwaste2_sml.gif) no-repeat;
-}
-
-.collapsedwaste {
-	background: url(../images/icon_arrowwaste1_sml.gif) no-repeat;
-}
-
-.filebrowse .expanded, .filebrowse-alt .expanded {
-	background-image: url(../images/icon_arrowfolderopen2_sml.gif);
-	background-repeat: no-repeat;
-}
-
-.filebrowse .collapsed, .filebrowse-alt .collapsed {
-	background-image: url(../images/icon_arrowfolderclosed1_sml.gif);
-	background-repeat: no-repeat;
-}
-
-.filebrowse .leafnode, .filebrowse-alt .leafnode {
-	background-image: url(../images/icon_folder_sml.gif);
-	background-repeat: no-repeat;
-}
-
-.filebrowse .leaf, .filebrowse-alt .leaf {
-	background-image: url(../images/icon_doc_sml.gif);
-	background-repeat: no-repeat;
-}
-
-.sortup {
-	background: url(../images/icon_sortup.gif) no-repeat;
-}
-
-.sortdown {
-	background: url(../images/icon_sortdown.gif) no-repeat;
-}
-
-.collapsedwaste {
-	background: url(../images/icon_arrowwaste1_sml.gif) no-repeat;
-}
-
-body .grid td {
-	border-top: 1px solid #ccc;
-	border-left: 1px solid #ccc;
-	background-color: transparent;
-}
-
-.confirm {
-	color: #090;
-}
-
-.info {
-	color: #069;
-}
-
-.errormessage, .warningmessage, .donemessage, .infomessage {
-	border-top: 5px solid #900;
-	border-left: 1px solid #900;
-	background-image: url(../images/icon_error_lrg.gif);
-	background-repeat: no-repeat;
-	background-position: 5px 1.33em;
-}
-
-.warningmessage {
-	background-image: url(../images/icon_warning_lrg.gif);
-	border-color: #c60;
-}
-
-.donemessage {
-	background-image: url(../images/icon_success_lrg.gif);
-	border-color: #090;
-}
-
-.infomessage {
-	background-image: url(../images/icon_info_lrg.gif);
-	border-color: #069;
-}
-
-.docinfo {
-	background: url(../images/icon_doc_lrg.gif) no-repeat;
-}
-
-.dirinfo {
-	background: url(../images/icon_folder_lrg.gif) no-repeat;
-}
-
-.memberinfo {
-	background: url(../images/icon_members_lrg.gif) no-repeat;
-}
-
-.usergroupinfo {
-	background: url(../images/icon_usergroups_lrg.gif) no-repeat;
-}
-
-.errormark, .warningmark, .donemark, .infomark {
-	background: url(../images/icon_error_sml.gif) no-repeat;
-}
-
-.warningmark {
-	background-image: url(../images/icon_warning_sml.gif);
-}
-
-.donemark {
-	background-image: url(../images/icon_success_sml.gif);
-}
-
-.infomark {
-	background-image: url(../images/icon_info_sml.gif);
-}
-
-.cvsdiff, .cvsblame {
-	background-color: #ccc;
-}
-
-.cvsdiffadd {
-	background-color: #afa;
-}
-
-.cvsdiffremove {
-	background-color: #faa;
-}
-
-.cvsdiffchanges1 {
-	background-color: #ff7;
-}
-
-.cvsdiffchanges2 {
-	background-color: #ff7;
-}
-
-li.selection ul a {
-	background: #fff;
-}
-
-.band1 {
-	color: #fff;
-	background-color: #663;
-}
-
-.band2 {
-	color: #fff;
-	background-color: #66C;
-}
-
-.band3 {
-	background-color: #C99;
-}
-
-.band4 {
-	background-color: #CFF;
-}
-
-.band5 {
-	color: #fff;
-	background-color: #336;
-}
-
-.band6 {
-	color: #fff;
-	background-color: #966;
-}
-
-.band7 {
-	background-color: #9CC;
-}
-
-.band8 {
-	background-color: #FFC;
-}
-
-.band9 {
-	color: #fff;
-	background-color: #633;
-}
-
-.band10 {
-	color: #fff;
-	background-color: #699;
-}
-
-.band11 {
-	background-color: #CC9;
-}
-
-.band12 {
-	background-color: #CCF;
-}
-
-.band13 {
-	color: #fff;
-	background-color: #366;
-}
-
-.band14 {
-	color: #fff;
-	background-color: #996;
-}
-
-.band15 {
-	background-color: #99C;
-}
-
-.band16 {
-	background-color: #FCC;
-}
-
-.app .helplink, #helptext .helplink {
-	cursor: help;
-}
-
-.legend th, .bars th {
-	background-color: #fff;
-}
-
-/* font and text properties, exclusive of link indication, alignment, text-indent */
-body, th, td, input, select {
-	font-family: Verdana, Helvetica, Arial, sans-serif;
-}
-
-code, pre {
-	font-family: 'Andale Mono', Courier, monospace;
-}
-
-body, .app h3, .app h4, #rightcol h3, pre, code, #apphead h2 small {
-	font-size: x-small;
-	voice-family: "\"}\"";
-	voice-family: inherit;
-	font-size: small;
-}
-
-small, div#footer, div#login, div.tabs th, div.tabs td, input, select, .paginate, .functnbar, .functnbar2, .functnbar3, #breadcrumbs, .courtesylinks, #rightcol div.help, .colbar, .tasknav, body.docs div#toc, #leftcol, .legend, .bars {
-	font-size: xx-small;
-	voice-family: "\"}\"";
-	voice-family: inherit;
-	font-size: x-small;
-}
-
-.tabs td, .tabs th, dt, .tasknav .selfref, #login .username, .selection {
-	font-weight: bold;
-}
-
-li.selection ul {
-	font-weight: normal;
-}
-
-h4, table {
-	font-size: 1em;
-}
-
-#apphead h2 em {
-	font-style: normal;
-}
-
-#banner h1 {
-	font-size: 1.25em;
-}
-
-/* box properties (exclusive of borders), positioning, alignments, list types, text-indent */
-#bodycol h2 {
-	margin-top: .3em;
-	margin-bottom: .5em;
-}
-
-p, ul, ol, dl, .bars table {
-	margin-top: .67em;
-	margin-bottom: .67em;
-}
-
-h3, h4 {
-	margin-bottom: 0;
-}
-
-form {
-	margin: 0;
-}
-
-#bodycol {
-	padding-left: 12px;
-	padding-right: 12px;
-	width: 100%;
-	voice-family: "\"}\"";
-	voice-family: inherit;
-	width: auto;
-}
-
-html>body #bodycol {
-	width: auto;
-}
-
-.docs {
-	line-height: 1.4;
-}
-
-ol ol {
-	list-style-type: lower-alpha;
-}
-
-ol ol ol {
-	list-style-type: lower-roman;
-}
-
-.app h3, .app h4 {
-	padding: 5px;
-	margin-right: 2px;
-	margin-left: 2px;
-}
-
-.app td, .app th {
-	padding: 2px 3px;
-}
-
-.h3 p, .h4 p, .h3 dt, .h4 dt {
-	margin-right: 7px;
-	margin-left: 7px;
-}
-
-.tasknav {
-	margin-bottom: 1.33em;
-}
-
-div.colbar {
-	padding: 3px;
-	margin: 2px 2px 0;
-}
-
-.tabs {
-	margin-top: .67em;
-	margin-right: 2px;
-	margin-left: 2px;
-	padding-left: 8px;
-}
-
-.tabs td, .tabs th {
-	padding: 3px 9px;
-}
-
-#rightcol div.www, #rightcol div.help {
-	padding: 0 .5em;
-}
-
-body.docs #toc {
-	position: absolute;
-	top: 15px;
-	left: 0px;
-	width: 120px;
-	padding: 0 20px 0 0;
-}
-
-body.docs #toc ul, #toc ol {
-	margin-left: 0;
-	padding-left: 0;
-}
-
-body.docs #toc li {
-	margin-top: 7px;
-	padding-left: 10px;
-	list-style-type: none;
-}
-
-body.docs div.docs {
-	margin: 61px 0 0 150px;
-	padding: 1em 2em 1em 1em !important;
-}
-
-.docs p+p {
-	text-indent: 5%;
-	margin-top: -.67em;
-}
-
-.docs h3, .docs h4 {
-	margin-bottom: .1em;
-	padding-top: .3em;
-}
-
-.functnbar, .functnbar2, .functnbar3 {
-	padding: 5px;
-	margin: .67em 2px;
-}
-
-.functnbar3 {
-	margin-top: 0;
-}
-
-body {
-	padding: 1em;
-}
-
-body.composite, body.docs {
-	margin: 0;
-	padding: 0;
-}
-
-th, td {
-	text-align: left;
-	vertical-align: top;
-}
-
-.right {
-	text-align: right !important;
-}
-
-.center {
-	text-align: center !important;
-}
-
-.axial th, .axial th .strut {
-	text-align: right;
-}
-
-.app .axial td th {
-	text-align: left;
-}
-
-body .stb {
-	margin-top: 1em;
-	text-indent: 0;
-}
-
-body .mtb {
-	margin-top: 2em;
-	text-indent: 0;
-}
-
-.courtesylinks {
-	margin-top: 1em;
-	padding-top: 1em;
-}
-
-dd {
-	margin-bottom: .67em;
-}
-
-.toolgroup {
-	margin-bottom: 6px;
-}
-
-.toolgroup .body {
-	padding: 4px 4px 4px 0;
-}
-
-.toolgroup .label {
-	padding: 4px;
-}
-
-.toolgroup .body div {
-	padding-bottom: .3em;
-	padding-left: 1em;
-}
-
-.toolgroup .body div div {
-	margin-top: .3em;
-	padding-bottom: 0;
-}
-
-.tier1 {
-	margin-left: 0;
-}
-
-.tier2 {
-	margin-left: 1.5em;
-}
-
-.tier3 {
-	margin-left: 3em;
-}
-
-.tier4 {
-	margin-left: 4.5em;
-}
-
-.tier5 {
-	margin-left: 6em;
-}
-
-.tier6 {
-	margin-left: 7.5em;
-}
-
-.tier7 {
-	margin-left: 9em;
-}
-
-.tier8 {
-	margin-left: 10.5em;
-}
-
-.tier9 {
-	margin-left: 12em;
-}
-
-.tier10 {
-	margin-left: 13.5em;
-}
-
-.filebrowse .expanded, .filebrowse .collapsed {
-	padding-left: 34px;
-}
-
-.filebrowse .leafnode, .filebrowse .leaf {
-	padding-left: 20px;
-}
-
-.messagechild {
-	padding-left: 34px;
-}
-
-.filebrowse-alt .expanded, .filebrowse-alt .collapsed, .filebrowse-alt .leaf, .filebrowse-alt .leafnode, .expandedwaste, .collapsedwaste, .sortup, .sortdown {
-	/* hide from macie5\*/
-	float: left;
-	/* resume */
-	display: inline-block;
-	height: 15px;
-	width: 34px;
-	padding-left: 0 !important;
-}
-
-.filebrowse-alt .leaf, .filebrowse-alt .leafnode, .sortup, .sortdown {
-	width: 20px;
-}
-
-.filebrowse ul, .filebrowse-alt ul {
-	list-style-type: none;
-	padding-left: 0;
-	margin-left: 0;
-}
-
-.filebrowse ul ul, .filebrowse-alt ul ul {
-	margin-left: 1.5em;
-	margin-top: 0;
-	padding-top: .67em;
-}
-
-.filebrowse li, .filebrowse-alt li {
-	margin-bottom: .67em;
-}
-
-td.filebrowse h3 {
-	margin-top: 0;
-}
-
-.errormessage, .warningmessage, .donemessage, .infomessage, .docinfo, .dirinfo, .memberinfo, .usergroupinfo {
-	margin: .67em 0;
-	padding: .33em 0 .67em 42px;
-	min-height: 32px;
-}
-
-.errormark, .warningmark, .donemark, .infomark {
-	padding-left: 20px;
-	min-height: 15px;
-}
-
-.alt {
-	display: none;
-}
-
-#banner h1 {
-	margin: 0;
-}
-
-#leftcol {
-	width: 14em;
-}
-
-.axial th, .axial th .strut, #leftcol .strut {
-	width: 12em;
-}
-
-#breadcrumbs {
-	padding: 2px 8px;
-}
-
-.app h3, .app h4, .bars {
-	clear: both;
-}
-
-.legend {
-	float: right;
-}
-
-.legend th, .bars th {
-	text-align: right;
-	padding-left: 1em;
-}
-
-.bars table {
-	table-layout: fixed;
-}
-
-.bars th {
-	width: 12em;
-}
-
-#projectdocumentlist td.filebrowse-alt {
-	padding-right: .75em;
-}
-
-</style>
diff --git a/trunk/plugins/config-browser/src/main/resources/config-browser/error.ftl b/trunk/plugins/config-browser/src/main/resources/config-browser/error.ftl
deleted file mode 100644
index 63433ad..0000000
--- a/trunk/plugins/config-browser/src/main/resources/config-browser/error.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-<#include "tigris-macros.ftl">
-<@startPage pageTitle="An error occured"/>
-
-<@errorMessageMultiple caption="An error occured" message="Unable to execute ${action.class.name}" errors="${action.actionErrors}"/>
-
-<@endPage/> 
diff --git a/trunk/plugins/config-browser/src/main/resources/config-browser/page-footer.ftl b/trunk/plugins/config-browser/src/main/resources/config-browser/page-footer.ftl
deleted file mode 100644
index 8bead21..0000000
--- a/trunk/plugins/config-browser/src/main/resources/config-browser/page-footer.ftl
+++ /dev/null
@@ -1,16 +0,0 @@
-				</div>
-			</div>
-   		</td>
-	</tr>
-</table>
-<div id="breadcrumbs">
-	<table border="0" cellspacing="0" cellpadding="4" width="100%">
-		<tr>
-			<td align="center"> 
-				<a href="http://struts.apache.org/">Apache Struts Project</a> <a href="http://struts.apache.org/2.0">Struts</a> &copy; 2003 - 2006 | <a href="http://issues.apache.org/struts/">Bugs</a> | <a href="http://struts.apache.org/mail.html">Mailing Lists</a>
-			</td>
-		</tr>
-	</table>
-</div>  
-</body>
-</html>
diff --git a/trunk/plugins/config-browser/src/main/resources/config-browser/page-header.ftl b/trunk/plugins/config-browser/src/main/resources/config-browser/page-header.ftl
deleted file mode 100644
index 09cd518..0000000
--- a/trunk/plugins/config-browser/src/main/resources/config-browser/page-header.ftl
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE html PUBLIC "-//Tigris//DTD XHTML 1.0 Transitional//EN"
-    "${request.contextPath}/template-tigris/css/tigris_transitional.dtd">
-<html>
-<head>
-<title>${pageTitle}</title>
-<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
-<#include "/config-browser/config-styles.css" parse="n"></head>
-<body class="composite" marginwidth="0" marginheight="0" leftmargin="0" topmargin="0">
-
-<div id="breadcrumbs">
-	<table border="0" cellspacing="0" cellpadding="4" width="100%">
-		<tr>
-			<td> 
-				Struts Configuration Browser > ${pageTitle}
-			</td>
-		</tr>
-	</table>
-</div>  
-  
-<table border="0" cellspacing="0" cellpadding="4" width="100%" id="main">
-	<tr valign="top">
-	    <#if !hideNav?exists>		<td id="leftcol" width="20%">
-			<div id="navcolumn">
-				<#-- Quick hack to show menu features :)
--->				<#-- This should be done via contribution from the actions
--->				<#-- themselves. E.g via a collection of MenuItems with url and name
--->				<div id="projecttools" class="toolgroup">
-					<#if namespaces?exists>					<div class="label"><strong>Namespaces</strong></div>
-					<div class="body">
-						<#foreach namespace in namespaces>						<div><@s.url id="namespaceLink" action="actionNames" includeParams="none"><@s.param name="namespace">${namespace}</@s.param></@s.url><a href="${namespaceLink}"><#if namespace == ""> default <#else> ${namespace} </#if></a></div>
-						</#foreach>					</div>
-					</#if>				</div>				
-				<div class="toolgroup">
-					<#if actionNames?exists>					<div class="label"><strong>Actions in <#if namespace == ""> default <#else> ${namespace} </#if></strong></div>
-                        <#foreach name in actionNames>                        <div><@s.url id="actionLink" action="showConfig" includeParams="none"><@s.param name="namespace">${namespace}</@s.param><@s.param name="actionName">${name}</@s.param></@s.url><a href="${actionLink}">${name}</a></div>
-						</#foreach>					</#if>				</div>
-			</div>
-		</td>
-		</#if>		<td>
-			<div id="bodycol">
-				<div id="apphead">
-					<h2>${pageTitle}</h2>
-				</div>
-				<div id="content" class="app">				
diff --git a/trunk/plugins/config-browser/src/main/resources/config-browser/showConfig.ftl b/trunk/plugins/config-browser/src/main/resources/config-browser/showConfig.ftl
deleted file mode 100644
index e913998..0000000
--- a/trunk/plugins/config-browser/src/main/resources/config-browser/showConfig.ftl
+++ /dev/null
@@ -1,116 +0,0 @@
-<#include "tigris-macros.ftl"/>
-<@startPage pageTitle="Action information"/>
-<h3>Action information - ${actionName}</h3>
-
-
-<table>
-	<tr><td>Action name:</td><td>${actionName}</td></tr>
-	<tr><td>Namespace:</td><td> ${namespace}</td></tr>
-	<tr><td>Action class:</td><td> ${config.className}</td></tr>
-	<tr><td>Action method:</td><td> <#if config.methodName?exists>${config.methodName}</#if></td></tr>
-	<tr><td>Parameters:</td><td> <#list config.params?keys as p>
-		${p}
-	</#list></td></tr>
-
-	<tr><td>Default location:</td><td> <a href="${base}${namespace}/${actionName}.${extension}">
-		${base}${namespace}/${actionName}.${extension}
-	</a>
-	</td></tr>
-</table>
-
-<!-- URLTag is faulty -->
-<@s.url id="url" action="showConfig" includeParams="none">
-    <@s.param name="namespace">${namespace}</@s.param>
-    <@s.param name="actionName">${actionName}</@s.param>
-</@s.url>
-<#assign url = url + "&amp;detailView=">
-<!-- Set all to false -->
-<#assign detailsSelected = false>
-<#assign exceptionsSelected = false>
-<#assign interceptorsSelected = false>
-<#assign propertiesSelected = false>
-<#assign validatorsSelected = false>
-<!-- Set selected to true -->
-
-<#if detailView == "results">
-	<#assign detailsSelected = true>
-<#elseif detailView == "exceptions">
-	<#assign exceptionsSelected = true>
-<#elseif detailView == "interceptors">
-	<#assign interceptorsSelected = true>
-<#elseif detailView == "properties">
-	<#assign propertiesSelected = true>
-<#else>
-	<#assign validatorsSelected = true>
-</#if>
-
-<@startTabs/>
-	<#call tab name="Results" url="${url}results" isSelected="${detailsSelected?string}"/>
-	<#call tab name="Exception Mappings" url="${url}exceptions" isSelected="${exceptionsSelected?string}"/>
-	<#call tab name="Interceptors" url="${url}interceptors" isSelected="${interceptorsSelected?string}"/>
-	<#call tab name="Properties" url="${url}properties" isSelected="${propertiesSelected?string}"/>
-	<#call tab name="Validators" url="${url}validators" isSelected="${validatorsSelected?string}"/>
-<@endTabs/>
-
-<#if detailsSelected>	<!-- Action results -->
-    <table width="100%">
-    	<tr><th>Name</th><th>Type</th><th>Parameters</th></tr>
-    	<#assign count=config.results?size>
-    	<#list config.results.values() as r>
-    		<tr <#if r_index%2 gt 0>class="b"<#else>class="a"</#if>>
-    		<td>${r.name}</td>
-    		<td>${r.className}</td>
-    		<td>
-    		<#list r.params.keySet() as p>
-    			${p} = ${r.params[p]}<br>
-    		</#list>
-    		</td>
-    		</tr>
-    	</#list>
-    </table>
-
-<#elseif exceptionsSelected>	<!-- Action exception mappings -->
-    <table width="100%">
-        <tr><th>Name</th><th>Exception Class Name</th><th>Result</th><th>Parameters</th></tr>
-        <#list config.exceptionMappings as e>
-        	<tr <#if e_index%2 gt 0>class="b"<#else>class="a"</#if>>
-    			<td>${e.name}</td>
-    			<td>${e.exceptionClassName}</td>
-    			<td>${e.result}</td>
-    		    <td>
-    		        <#list e.params.keySet() as p>
-    			        ${p} = ${e.params[p]}<br>
-    		        </#list>
-    		    </td>
-    		</tr>
-    	</#list>
-    </table>
-
-<#elseif interceptorsSelected>	<!-- Action interceptors -->
-    <table width="100%">
-        <tr><th>Name</th><th>Type</th></tr>
-        <#list config.interceptors as i>
-        	<tr <#if i_index%2 gt 0>class="b"<#else>class="a"</#if>>
-    			<td>${action.stripPackage(i.interceptor.class)}</td>
-    			<td>${i.interceptor.class.name}</td>
-    		</tr>
-    	</#list>
-    </table>
-<#elseif propertiesSelected>
-	<table width="100%">
-        <tr><th>Name</th><th>Type</th></tr>
-        <#list properties as prop>
-        	<tr <#if prop_index%2 gt 0>class="b"<#else>class="a"</#if>>
-    			<td>${prop.name}</td>
-    			<td>${prop.propertyType.name}</td>
-    		</tr>
-    	</#list>
-    </table>
-<#else>
-    <@s.action name="showValidators" executeResult="true">
-        <@s.param name="clazz" value="'${config.className}'"/>
-        <@s.param name="context" value="'${namespace}'"/>
-    </@s.action>
-</#if>
-
-<#call endPage>
diff --git a/trunk/plugins/config-browser/src/main/resources/config-browser/showValidators.ftl b/trunk/plugins/config-browser/src/main/resources/config-browser/showValidators.ftl
deleted file mode 100644
index d6b62ca..0000000
--- a/trunk/plugins/config-browser/src/main/resources/config-browser/showValidators.ftl
+++ /dev/null
@@ -1,17 +0,0 @@
-<!-- Validators -->
-<table width="100%">
-    <tr><th>Field</th><th>Type</th><th>&nbsp;</th></tr>
-    <#assign row = 0>
-    	<#if validators?exists>
-        <#foreach i in validators>       
-        <tr <#if i_index%2 gt 0>class="b"<#else>class="a"</#if>>
-        	<td>${i.fieldName}</td>
-            <td>${action.stripPackage(i.class)}</td>
-            <td>
-            <a href="#" onClick="window.open('validatorDetails.${extension}?clazz=${clazz}&context=${context}&selected=${row}', 'Validator Details', 'resizable=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,width=640,height=480');">details</a>
-            </td>
-        </tr>
-        <#assign row = row + 1>
-        </#foreach>
-        </#if>
-</table>
diff --git a/trunk/plugins/config-browser/src/main/resources/config-browser/simple-error.ftl b/trunk/plugins/config-browser/src/main/resources/config-browser/simple-error.ftl
deleted file mode 100644
index f131fc9..0000000
--- a/trunk/plugins/config-browser/src/main/resources/config-browser/simple-error.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-<#include "tigris-macros.ftl">
-<@errorMessageMultiple caption="An error occured" message="Unable to execute ${action.class.name}" errors="${action.actionErrors}"/>
diff --git a/trunk/plugins/config-browser/src/main/resources/config-browser/tigris-macros.ftl b/trunk/plugins/config-browser/src/main/resources/config-browser/tigris-macros.ftl
deleted file mode 100644
index 5b23410..0000000
--- a/trunk/plugins/config-browser/src/main/resources/config-browser/tigris-macros.ftl
+++ /dev/null
@@ -1,108 +0,0 @@
-<#-- Display related macros -->
-
-<#macro startPage pageTitle>
-	<#include "page-header.ftl">
-</#macro>
-
-<#macro endPage>
-	<#include "page-footer.ftl">
-</#macro>
-
-<#macro startTabs>
-	<div class="tabs" id="tabs">
-		<table cellpadding="3" cellspacing="0" border="0">
-			<tr>
-</#macro>
-
-<#macro endTabs>
-			</tr>
-		</table>
-	</div>
-</#macro>
-
-<#macro tab name, url, isSelected>
-	<#if isSelected == "true">
-		<th><a href="${url}">${name}</h></td>
-		<#else>
-		<td><a href="${url}">${name}</a></td>
-	</#if>
-</#macro>
-
-<#-- Highlights every other row-->
-<#macro indexedRows count>
-	<#if (count%2>0)>
-		<tr class="a">
- 	<#else>
- 		<tr class="b">
- 	</#if>
-</#macro>
-<#-- Convenience method-->
-<#macro rows count>
-	<#call indexedRows count="${count}">
-</#macro>
-<#-- User feedback macros -->
-<#macro error(text)>
-	<p class="errormark"><strong>${text}</strong></p>
-</#macro>
-
-<#macro done(text)>
-	<p class="donemark"><em>${text}</em></p>
-</#macro>
-<#macro info(text)>
-	<p class="infomark">${text}</em></p>
-</#macro>
-
-<#macro warn(text)>
-	<p class="warningmark"><strong>${text}</strong></p>
-</#macro>
-<#macro errorMessage(caption, message)>
-	<div class="errormessage">
-  		<p>
-			<strong>${caption}</strong></p>
-			${message}
-  		</p>
-	</div>
-</#macro>
-
-<#macro errorMessageMultiple(caption, message, errors)>
-	<div class="errormessage">
-  		<p>
-			<strong>${caption}</strong></p>
-			${message}
-            <#if errors?exists>
-                <@s.iterator id="e" value="errors">
-                    <#assign e = stack.findString('top') />
-                    <#call error(e)>
-                </@s.iterator>
-            </#if>
-        </p>
-	</div>
-</#macro>
-
-<#macro warningMessage(caption, message)>
-	<div class="warningmessage">
-  		<p>
-			<strong>${caption}</strong></p>
-			${message}
-  		</p>
-	</div>
-</#macro>
-
-<#macro infoMessage(caption, message)>
-	<div class="infomessage">
-  		<p>
-			<strong>${caption}</strong></p>
-			${message}
-  	</p>
-	</div>
-</#macro>
-
-<#macro doneMessage(caption, message)>
-	<div class="donemessage">
-  		<p>
-			<strong>${caption}</strong></p>
-		${message}
-  	</p>
-	</div>
-</#macro>
-
diff --git a/trunk/plugins/config-browser/src/main/resources/config-browser/validatorDetails.ftl b/trunk/plugins/config-browser/src/main/resources/config-browser/validatorDetails.ftl
deleted file mode 100644
index a3cee00..0000000
--- a/trunk/plugins/config-browser/src/main/resources/config-browser/validatorDetails.ftl
+++ /dev/null
@@ -1,19 +0,0 @@
-<#include "tigris-macros.ftl">
-<#assign hideNav = true>
-<#call startPage pageTitle="Validator Details"/>
-<table>
-<tr><td>Validated Class:</td><td>${action.stripPackage(clazz)}</td></tr>
-<tr><td>Context:</td><td>${context}</td></tr>
-<tr><td>Validator Number:</td><td>${selected}</td></tr>
-<tr><td>Validator Type:</td><td>${action.stripPackage(selectedValidator.class)}</td></tr>
-</table>
-<table width="100%" title="Properties">
-    <tr><th>Name</th><th>Value</th><th>Type</th></tr>
-    <#foreach prop in properties>
-    	<tr <#if prop_index%2 gt 0>class="b"<#else>class="a"</#if>>
-            <td>${prop.name}</td>
-            <td><#if prop.value?exists> ${prop.value?string} <#else> <b>null</b> </#if></td>
-            <td>${prop.type.name}</td>
-        </tr>
-    </#foreach></table>
-<#call endPage>
diff --git a/trunk/plugins/config-browser/src/main/resources/struts-plugin.xml b/trunk/plugins/config-browser/src/main/resources/struts-plugin.xml
deleted file mode 100644
index fe7bfc0..0000000
--- a/trunk/plugins/config-browser/src/main/resources/struts-plugin.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-    
-<struts>
-    <package name="config-browser" extends="struts-default" namespace="/config-browser">
-        <interceptors>
-            <interceptor-stack name="config-browser-default">
-                <interceptor-ref name="validationWorkflowStack"/>
-            </interceptor-stack>
-        </interceptors>
-        <default-interceptor-ref name="config-browser-default"/>
-
-        <global-results>
-            <result name="error" type="freemarker">/config-browser/error.ftl</result>
-            <result name="input" type="freemarker">/config-browser/error.ftl</result>
-        </global-results>
-
-        <action name="index">
-            <result type="redirect-action">actionNames</result>
-        </action>
-
-        <action name="actionNames" class="org.apache.struts2.config_browser.ActionNamesAction">
-            <result type="freemarker" name="success">/config-browser/actionNames.ftl</result>
-        </action>
-
-        <action name="showConfig" class="org.apache.struts2.config_browser.ShowConfigAction">
-            <result type="freemarker" name="success">/config-browser/showConfig.ftl</result>
-        </action>
-
-        <action name="showValidators" class="org.apache.struts2.config_browser.ListValidatorsAction">
-            <result name="error" type="freemarker">/config-browser/simple-error.ftl</result>
-            <result name="input" type="freemarker">/config-browser/simple-error.ftl</result>
-            <result type="freemarker" name="success">/config-browser/showValidators.ftl</result>
-        </action>
-
-        <action name="validatorDetails" class="org.apache.struts2.config_browser.ShowValidatorAction">
-            <result type="freemarker" name="success">/config-browser/validatorDetails.ftl</result>
-        </action>
-    </package>
-</struts>
diff --git a/trunk/plugins/jasperreports/pom.xml b/trunk/plugins/jasperreports/pom.xml
deleted file mode 100644
index ddd6b06..0000000
--- a/trunk/plugins/jasperreports/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-jasperreports-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 Jasper Reports Plugin</name>
-    
-    <dependencies>
-        <dependency>
-            <groupId>jasperreports</groupId>
-            <artifactId>jasperreports</artifactId>
-            <version>1.2.1</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/CompileReport.java b/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/CompileReport.java
deleted file mode 100644
index 522212d..0000000
--- a/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/CompileReport.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jasperreports;
-
-import net.sf.jasperreports.engine.JRException;
-import net.sf.jasperreports.engine.JasperCompileManager;
-
-/**
- * Ported to Struts:
- *
- */
-public class CompileReport {
-
-    public static void main(String[] args) {
-        if (args.length < 1) {
-            System.out.println("Please supply the name of the report(s) source to compile.");
-            System.exit(-1);
-        }
-
-        try {
-            for (int i = 0; i < args.length; i++) {
-                System.out.println("JasperReports Compiling: " + args[i]);
-                JasperCompileManager.compileReportToFile(args[i]);
-            }
-        } catch (JRException e) {
-            e.printStackTrace();
-            System.exit(-1);
-        }
-
-        System.exit(0);
-    }
-}
diff --git a/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportConstants.java b/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportConstants.java
deleted file mode 100644
index 1c1e2fd..0000000
--- a/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportConstants.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jasperreports;
-
-
-/**
- * <code>JasperReportConstants</code>
- *
- */
-public interface JasperReportConstants {
-
-    /**
-     * PDF format constant
-     */
-    public static final String FORMAT_PDF = "PDF";
-
-    /**
-     * XML format constant
-     */
-    public static final String FORMAT_XML = "XML";
-
-    /**
-     * HTML format constant
-     */
-    public static final String FORMAT_HTML = "HTML";
-
-    /**
-     * XLS format constant
-     */
-    public static final String FORMAT_XLS = "XLS";
-
-    /**
-     * CSV format constant
-     */
-    public static final String FORMAT_CSV = "CSV";
-}
diff --git a/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java b/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java
deleted file mode 100644
index af51f92..0000000
--- a/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jasperreports;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import net.sf.jasperreports.engine.*;
-import net.sf.jasperreports.engine.export.JRCsvExporter;
-import net.sf.jasperreports.engine.export.JRCsvExporterParameter;
-import net.sf.jasperreports.engine.export.JRHtmlExporter;
-import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
-import net.sf.jasperreports.engine.export.JRXlsExporter;
-import net.sf.jasperreports.engine.export.JRXmlExporter;
-import net.sf.jasperreports.engine.util.JRLoader;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.util.TextUtils;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.dispatcher.StrutsResultSupport;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * <!-- START SNIPPET: description -->
- *
- * Generates a JasperReports report using the specified format or PDF if no
- * format is specified.
- *
- * <!-- END SNIPPET: description -->
- * <p />
- * <b>This result type takes the following parameters:</b>
- *
- * <!-- START SNIPPET: params -->
- *
- * <ul>
- *
- * <li><b>location (default)</b> - the location where the compiled jasper report
- * definition is (foo.jasper), relative from current URL.</li>
- *
- * <li><b>dataSource (required)</b> - the EL expression used to retrieve the
- * datasource from the value stack (usually a List).</li>
- *
- * <li><b>parse</b> - true by default. If set to false, the location param will
- * not be parsed for EL expressions.</li>
- *
- * <li><b>format</b> - the format in which the report should be generated. Valid
- * values can be found in {@link JasperReportConstants}. If no format is
- * specified, PDF will be used.</li>
- *
- * <li><b>contentDisposition</b> - disposition (defaults to "inline", values are
- * typically <i>filename="document.pdf"</i>).</li>
- *
- * <li><b>documentName</b> - name of the document (will generate the http header
- * <code>Content-disposition = X; filename=X.[format]</code>).</li>
- *
- * <li><b>delimiter</b> - the delimiter used when generating CSV reports. By
- * default, the character used is ",".</li>
- *
- * <li><b>imageServletUrl</b> - name of the url that, when prefixed with the
- * context page, can return report images.</li>
- *
- * </ul>
- *
- * <p>
- * This result follows the same rules from {@link StrutsResultSupport}.
- * Specifically, all parameters will be parsed if the "parse" parameter is not 
- * set to false.
- * </p>
- * <!-- END SNIPPET: params -->
- *
- * <b>Example:</b>
- *
- * <pre><!-- START SNIPPET: example1 -->
- * &lt;result name="success" type="jasper"&gt;
- *   &lt;param name="location"&gt;foo.jasper&lt;/param&gt;
- *   &lt;param name="dataSource"&gt;mySource&lt;/param&gt;
- *   &lt;param name="format"&gt;CSV&lt;/param&gt;
- * &lt;/result&gt;
- * <!-- END SNIPPET: example1 --></pre>
- * or for pdf
- * <pre><!-- START SNIPPET: example2 -->
- * &lt;result name="success" type="jasper"&gt;
- *   &lt;param name="location"&gt;foo.jasper&lt;/param&gt;
- *   &lt;param name="dataSource"&gt;mySource&lt;/param&gt;
- * &lt;/result&gt;
- * <!-- END SNIPPET: example2 --></pre>
- *
- */
-public class JasperReportsResult extends StrutsResultSupport implements JasperReportConstants {
-	
-	private static final long serialVersionUID = -2523174799621182907L;
-
-
-	private final static Log LOG = LogFactory.getLog(JasperReportsResult.class);
-
-
-    protected String dataSource;
-    protected String format;
-    protected String documentName;
-    protected String contentDisposition;
-    protected String delimiter;
-    protected String imageServletUrl = "/images/"; 
-    
-    public JasperReportsResult() {
-    	super();
-    }
-    
-    public JasperReportsResult(String location) {
-    	super(location);
-    }
-    
-    public String getImageServletUrl() {
-        return imageServletUrl;
-    }
-
-    public JasperReportsResult setImageServletUrl(final String imageServletUrl) {
-        this.imageServletUrl = imageServletUrl;
-        return this;
-    }
-
-    public JasperReportsResult setDataSource(String dataSource) {
-        this.dataSource = dataSource;
-        return this;
-    }
-
-    public JasperReportsResult setFormat(String format) {
-        this.format = format;
-        return this;
-    }
-
-    public JasperReportsResult setDocumentName(String documentName) {
-        this.documentName = documentName;
-        return this;
-    }
-
-    public JasperReportsResult setContentDisposition(String contentDisposition) {
-        this.contentDisposition = contentDisposition;
-        return this;
-    }
-
-    public JasperReportsResult setDelimiter(String delimiter) {
-        this.delimiter = delimiter;
-        return this;
-    }
-
-    protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
-        if (this.format == null) {
-            this.format = FORMAT_PDF;
-        }
-
-        if (dataSource == null) {
-            String message = "No dataSource specified...";
-            LOG.error(message);
-            throw new RuntimeException(message);
-        }
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Creating JasperReport for dataSource = " + dataSource + ", format = " + this.format);
-        }
-
-        HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
-        HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(ServletActionContext.HTTP_RESPONSE);
-
-        //construct the data source for the report
-        ValueStack stack = invocation.getStack();
-        ValueStackDataSource stackDataSource = new ValueStackDataSource(stack, dataSource);
-
-        format = conditionalParse(format, invocation);
-        dataSource = conditionalParse(dataSource, invocation);
-
-        if (contentDisposition != null) {
-            contentDisposition = conditionalParse(contentDisposition, invocation);
-        }
-
-        if (documentName != null) {
-            documentName = conditionalParse(documentName, invocation);
-        }
-
-        // (Map) ActionContext.getContext().getSession().get("IMAGES_MAP");
-        if (!TextUtils.stringSet(format)) {
-            format = FORMAT_PDF;
-        }
-
-        if (!"contype".equals(request.getHeader("User-Agent"))) {
-            // Determine the directory that the report file is in and set the reportDirectory parameter
-            // For WW 2.1.7:
-            //  ServletContext servletContext = ((ServletConfig) invocation.getInvocationContext().get(ServletActionContext.SERVLET_CONFIG)).getServletContext();
-            ServletContext servletContext = (ServletContext) invocation.getInvocationContext().get(ServletActionContext.SERVLET_CONTEXT);
-            String systemId = servletContext.getRealPath(finalLocation);
-            Map parameters = new ValueStackShadowMap(stack);
-            File directory = new File(systemId.substring(0, systemId.lastIndexOf(File.separator)));
-            parameters.put("reportDirectory", directory);
-            parameters.put(JRParameter.REPORT_LOCALE, invocation.getInvocationContext().getLocale());
-
-            byte[] output;
-            JasperPrint jasperPrint;
-
-            // Fill the report and produce a print object
-            try {
-                JasperReport jasperReport = (JasperReport) JRLoader.loadObject(systemId);
-
-                jasperPrint =
-                        JasperFillManager.fillReport(jasperReport,
-                                parameters,
-                                stackDataSource);
-            } catch (JRException e) {
-                LOG.error("Error building report for uri " + systemId, e);
-                throw new ServletException(e.getMessage(), e);
-            }
-
-            // Export the print object to the desired output format
-            try {
-                if (contentDisposition != null || documentName != null) {
-                    final StringBuffer tmp = new StringBuffer();
-                    tmp.append((contentDisposition == null) ? "inline" : contentDisposition);
-
-                    if (documentName != null) {
-                        tmp.append("; filename=");
-                        tmp.append(documentName);
-                        tmp.append(".");
-                        tmp.append(format.toLowerCase());
-                    }
-
-                    response.setHeader("Content-disposition", tmp.toString());
-                }
-
-                if (format.equals(FORMAT_PDF)) {
-                    response.setContentType("application/pdf");
-
-                    // response.setHeader("Content-disposition", "inline; filename=report.pdf");
-                    output = JasperExportManager.exportReportToPdf(jasperPrint);
-                } else {
-                    JRExporter exporter;
-
-                    if (format.equals(FORMAT_CSV)) {
-                        response.setContentType("text/plain");
-                        exporter = new JRCsvExporter();
-                    } else if (format.equals(FORMAT_HTML)) {
-                        response.setContentType("text/html");
-
-                        // IMAGES_MAPS seems to be only supported as "backward compatible" from JasperReports 1.1.0
-                
-                        Map imagesMap = new HashMap();
-
-                        request.getSession(true).setAttribute("IMAGES_MAP", imagesMap);
-                        exporter = new JRHtmlExporter();
-                        exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
-                        exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + imageServletUrl);
-                        // Needed to support chart images:
-                        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
-                        request.getSession().setAttribute("net.sf.jasperreports.j2ee.jasper_print", jasperPrint);
-
-                    } else if (format.equals(FORMAT_XLS)) {
-                        response.setContentType("application/vnd.ms-excel");
-                        exporter = new JRXlsExporter();
-                    } else if (format.equals(FORMAT_XML)) {
-                        response.setContentType("text/xml");
-                        exporter = new JRXmlExporter();
-                    } else {
-                        throw new ServletException("Unknown report format: " + format);
-                    }
-
-                    output = exportReportToBytes(jasperPrint, exporter);
-                }
-            } catch (JRException e) {
-                String message = "Error producing " + format + " report for uri " + systemId;
-                LOG.error(message, e);
-                throw new ServletException(e.getMessage(), e);
-            }
-
-            response.setContentLength(output.length);
-
-            ServletOutputStream ouputStream;
-
-            try {
-                ouputStream = response.getOutputStream();
-                ouputStream.write(output);
-                ouputStream.flush();
-                ouputStream.close();
-            } catch (IOException e) {
-                LOG.error("Error writing report output", e);
-                throw new ServletException(e.getMessage(), e);
-            }
-        } else {
-            // Code to handle "contype" request from IE
-            try {
-                ServletOutputStream outputStream;
-                response.setContentType("application/pdf");
-                response.setContentLength(0);
-                outputStream = response.getOutputStream();
-                outputStream.close();
-            } catch (IOException e) {
-                LOG.error("Error writing report output", e);
-                throw new ServletException(e.getMessage(), e);
-            }
-        }
-    }
-
-    /**
-     * Run a Jasper report to CSV format and put the results in a byte array
-     *
-     * @param jasperPrint The Print object to render as CSV
-     * @param exporter    The exporter to use to export the report
-     * @return A CSV formatted report
-     * @throws net.sf.jasperreports.engine.JRException
-     *          If there is a problem running the report
-     */
-    private byte[] exportReportToBytes(JasperPrint jasperPrint, JRExporter exporter) throws JRException {
-        byte[] output;
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
-        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
-        if (delimiter != null) {
-            exporter.setParameter(JRCsvExporterParameter.FIELD_DELIMITER, delimiter);
-        }
-
-        exporter.exportReport();
-
-        output = baos.toByteArray();
-
-        return output;
-    }
-}
diff --git a/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackDataSource.java b/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackDataSource.java
deleted file mode 100644
index 6f34fa0..0000000
--- a/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackDataSource.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jasperreports;
-
-import org.apache.struts2.util.MakeIterator;
-import com.opensymphony.xwork2.util.ValueStack;
-import net.sf.jasperreports.engine.JRDataSource;
-import net.sf.jasperreports.engine.JRException;
-import net.sf.jasperreports.engine.JRField;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.util.Iterator;
-
-/**
- * Ported to Struts.
- *
- */
-public class ValueStackDataSource implements JRDataSource {
-
-    /**
-     * Logger for this class
-     */
-    private static Log log = LogFactory.getLog(ValueStackDataSource.class);
-
-
-    Iterator iterator;
-    ValueStack valueStack;
-    boolean firstTimeThrough = true;
-
-
-    /**
-     * Create a value stack data source on the given iterable property
-     *
-     * @param valueStack The value stack to base the data source on
-     * @param dataSource The property to iterate over for the report
-     */
-    public ValueStackDataSource(ValueStack valueStack, String dataSource) {
-        this.valueStack = valueStack;
-
-        Object dataSourceValue = valueStack.findValue(dataSource);
-
-        if (dataSourceValue != null) {
-            if (MakeIterator.isIterable(dataSourceValue)) {
-                iterator = MakeIterator.convert(dataSourceValue);
-            } else {
-                Object[] array = new Object[1];
-                array[0] = dataSourceValue;
-                iterator = MakeIterator.convert(array);
-            }
-        } else {
-            log.warn("Data source value for data source " + dataSource + " was null");
-        }
-    }
-
-
-    /**
-     * Get the value of a given field
-     *
-     * @param field The field to get the value for. The expression language to get the value
-     *              of the field is either taken from the description property or from the name of the field
-     *              if the description is <code>null</code>.
-     * @return an <code>Object</code> containing the field value or a new
-     *         <code>ValueStackDataSource</code> object if the field value evaluates to
-     *         an object that can be iterated over.
-     * @throws JRException if there is a problem obtaining the value
-     */
-    public Object getFieldValue(JRField field) throws JRException {
-        //TODO: move the code to return a ValueStackDataSource to a seperate
-        //      method when and if the JRDataSource interface is updated to support
-        //      this.
-        String expression = field.getDescription();
-
-        if (expression == null) {
-            //Description is optional so use the field name as a default
-            expression = field.getName();
-        }
-
-        Object value = valueStack.findValue(expression);
-
-        if (log.isDebugEnabled()) {
-            log.debug("field: " + field.getName() + "/" + value);
-        }
-
-        if (MakeIterator.isIterable(value)) {
-            //                return new ValueStackDataSource(this.valueStack, field.getName());
-            return new ValueStackDataSource(this.valueStack, expression);
-        } else {
-            return value;
-        }
-    }
-
-    /**
-     * Is there any more data
-     *
-     * @return <code>true</code> if there are more elements to iterate over and
-     *         <code>false</code> otherwise
-     * @throws JRException if there is a problem determining whether there
-     *                     is more data
-     */
-    public boolean next() throws JRException {
-        if (firstTimeThrough) {
-            firstTimeThrough = false;
-        } else {
-            valueStack.pop();
-        }
-
-        if ((iterator != null) && (iterator.hasNext())) {
-            valueStack.push(iterator.next());
-            log.debug("Pushed next value: " + valueStack.findValue("."));
-
-            return true;
-        } else {
-            log.debug("No more values");
-
-            return false;
-        }
-    }
-}
diff --git a/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackShadowMap.java b/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackShadowMap.java
deleted file mode 100644
index 819d9df..0000000
--- a/trunk/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackShadowMap.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.jasperreports;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
-import java.util.HashMap;
-import java.util.Set;
-
-
-/**
- * Ported to Struts:
- *
- */
-public class ValueStackShadowMap extends HashMap {
-
-	private static final long serialVersionUID = -167109778490907240L;
-
-	/**
-     * valueStack reference
-     */
-    ValueStack valueStack;
-
-    /**
-     * entries reference
-     */
-    Set entries;
-
-
-    /**
-     * Constructs an instance of ValueStackShadowMap.
-     *
-     * @param valueStack - the underlying valuestack
-     */
-    public ValueStackShadowMap(ValueStack valueStack) {
-        this.valueStack = valueStack;
-    }
-
-
-    /**
-     * Implementation of containsKey(), overriding HashMap implementation.
-     *
-     * @param key - The key to check in HashMap and if not found to check on valueStack.
-     * @return <tt>true</tt>, if conatins key, <tt>false</tt> otherwise.
-     * @see java.util.HashMap#containsKey
-     */
-    public boolean containsKey(Object key) {
-        boolean hasKey = super.containsKey(key);
-
-        if (!hasKey) {
-            if (valueStack.findValue((String) key) != null) {
-                hasKey = true;
-            }
-        }
-
-        return hasKey;
-    }
-
-    /**
-     * Implementation of get(), overriding HashMap implementation.
-     *
-     * @param key - The key to get in HashMap and if not found there from the valueStack.
-     * @return value - The object from HashMap or if null, from the valueStack.
-     * @see java.util.HashMap#get
-     */
-    public Object get(Object key) {
-        Object value = super.get(key);
-
-        if ((value == null) && key instanceof String) {
-            value = valueStack.findValue((String) key);
-        }
-
-        return value;
-    }
-}
diff --git a/trunk/plugins/jasperreports/src/main/resources/org/apache/struts2/views/jasperreports/package.html b/trunk/plugins/jasperreports/src/main/resources/org/apache/struts2/views/jasperreports/package.html
deleted file mode 100644
index 5b3fed8..0000000
--- a/trunk/plugins/jasperreports/src/main/resources/org/apache/struts2/views/jasperreports/package.html
+++ /dev/null
@@ -1 +0,0 @@
-<body>Classes for views using Jasper Reports.</body>
diff --git a/trunk/plugins/jasperreports/src/main/resources/struts-plugin.xml b/trunk/plugins/jasperreports/src/main/resources/struts-plugin.xml
deleted file mode 100644
index 266b18f..0000000
--- a/trunk/plugins/jasperreports/src/main/resources/struts-plugin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-    
-<struts>
-    <package name="jasperreports-default">
-    
-    	<result-types>
-    		<result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"/>
-    	</result-types>
-    </package>
-
-</struts>
diff --git a/trunk/plugins/jfreechart/pom.xml b/trunk/plugins/jfreechart/pom.xml
deleted file mode 100644
index 7e98e8a..0000000
--- a/trunk/plugins/jfreechart/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-jfreechart-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 JFreeChart Plugin</name>
-    
-    <dependencies>
-        <dependency>
-            <groupId>jfree</groupId>
-            <artifactId>jcommon</artifactId>
-            <version>[1.0.0,)</version>
-            <scope>provided</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>gnujaxp</groupId>
-                    <artifactId>gnujaxp</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>jfree</groupId>
-            <artifactId>jfreechart</artifactId>
-            <version>[1.0.0,)</version>
-            <scope>provided</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>gnujaxp</groupId>
-                    <artifactId>gnujaxp</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>mockobjects</groupId>
-            <artifactId>mockobjects-core</artifactId>
-            <version>0.09</version>
-            <scope>test</scope>
-        </dependency>
-
-
-    </dependencies>
-</project>
diff --git a/trunk/plugins/jfreechart/src/main/java/org/apache/struts2/dispatcher/ChartResult.java b/trunk/plugins/jfreechart/src/main/java/org/apache/struts2/dispatcher/ChartResult.java
deleted file mode 100644
index 12be078..0000000
--- a/trunk/plugins/jfreechart/src/main/java/org/apache/struts2/dispatcher/ChartResult.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import org.apache.struts2.ServletActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Result;
-import org.jfree.chart.ChartUtilities;
-import org.jfree.chart.JFreeChart;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.OutputStream;
-
-
-/**
- * A custom Result type for chart data. Built on top of
- * <a href="http://www.jfree.org/jfreechart/" target="_blank">JFreeChart</a>. When executed
- * this Result will write the given chart as a PNG to the servlet output stream.
- *
- */
-public class ChartResult implements Result {
-
-	private static final long serialVersionUID = -6484761870055986612L;
-	
-	JFreeChart chart;
-    boolean chartSet = false;
-    private int height;
-    private int width;
-
-    public ChartResult() {
-    	super();
-    }
-    
-    public ChartResult(JFreeChart chart, int height, int width) {
-    	setChart(chart);
-    	this.height = height;
-    	this.width = width;
-    }
-
-    /**
-     * Sets the JFreeChart to use.
-     *
-     * @param chart a JFreeChart object.
-     */
-    public ChartResult setChart(JFreeChart chart) {
-        this.chart = chart;
-        chartSet = true;
-        return this;
-    }
-
-    /**
-     * Sets the chart height.
-     *
-     * @param height the height of the chart in pixels.
-     */
-    public ChartResult setHeight(int height) {
-        this.height = height;
-        return this;
-    }
-
-    /**
-     * Sets the chart width.
-     *
-     * @param width the width of the chart in pixels.
-     */
-    public ChartResult setWidth(int width) {
-        this.width = width;
-        return this;
-    }
-
-    /**
-     * Executes the result. Writes the given chart as a PNG to the servlet output stream.
-     *
-     * @param invocation an encapsulation of the action execution state.
-     * @throws Exception if an error occurs when creating or writing the chart to the servlet output stream.
-     */
-    public void execute(ActionInvocation invocation) throws Exception {
-        JFreeChart chart = null;
-
-        if (chartSet) {
-            chart = this.chart;
-        } else {
-            chart = (JFreeChart) invocation.getStack().findValue("chart");
-        }
-
-        if (chart == null) {
-            throw new NullPointerException("No chart found");
-        }
-
-        HttpServletResponse response = ServletActionContext.getResponse();
-        OutputStream os = response.getOutputStream();
-        ChartUtilities.writeChartAsPNG(os, chart, width, height);
-        os.flush();
-    }
-}
diff --git a/trunk/plugins/jfreechart/src/main/resources/struts-plugin.xml b/trunk/plugins/jfreechart/src/main/resources/struts-plugin.xml
deleted file mode 100644
index 5a58773..0000000
--- a/trunk/plugins/jfreechart/src/main/resources/struts-plugin.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-    
-<struts>
-    <package name="jfreechart-default">
-    
-    	<result-types>
-    		<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult">
-    			<param name="height">150</param>
-    			<param name="width">200</param>
-    		</result-type>
-    	</result-types>
-    </package>
-
-</struts>
diff --git a/trunk/plugins/jfreechart/src/test/java/org/apache/struts2/dispatcher/ChartResultTest.java b/trunk/plugins/jfreechart/src/test/java/org/apache/struts2/dispatcher/ChartResultTest.java
deleted file mode 100644
index 5e6937b..0000000
--- a/trunk/plugins/jfreechart/src/test/java/org/apache/struts2/dispatcher/ChartResultTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher;
-
-import com.mockobjects.dynamic.Mock;
-import org.apache.struts2.ServletActionContext;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import junit.framework.TestCase;
-import ognl.Ognl;
-import org.jfree.chart.ChartFactory;
-import org.jfree.chart.JFreeChart;
-import org.jfree.data.general.DefaultPieDataset;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-
-/**
- */
-public class ChartResultTest extends TestCase {
-
-    private ActionInvocation actionInvocation;
-    private JFreeChart mockChart;
-    private Mock responseMock;
-    private MockServletOutputStream os;
-
-
-    public void testChart() throws Exception {
-        responseMock.expectAndReturn("getOutputStream", os);
-
-        ChartResult result = new ChartResult();
-
-        result.setChart(mockChart);
-
-        result.setHeight(10);
-        result.setWidth(10);
-        result.execute(actionInvocation);
-
-        responseMock.verify();
-        assertTrue(os.isWritten());
-    }
-
-    public void testChartNotSet() {
-        ChartResult result = new ChartResult();
-
-        // expect exception if chart not set.
-        result.setChart(null);
-
-        try {
-            result.execute(actionInvocation);
-            fail();
-        } catch (Exception e) {
-        }
-
-        responseMock.verify();
-        assertFalse(os.isWritten());
-    }
-
-    protected void setUp() throws Exception {
-        DefaultPieDataset data = new DefaultPieDataset();
-        data.setValue("Java", new Double(43.2));
-        data.setValue("Visual Basic", new Double(0.0));
-        data.setValue("C/C++", new Double(17.5));
-        mockChart = ChartFactory.createPieChart("Pie Chart", data, true, true, false);
-
-        Mock mockActionInvocation = new Mock(ActionInvocation.class);
-        actionInvocation = (ActionInvocation) mockActionInvocation.proxy();
-        os = new MockServletOutputStream();
-        responseMock = new Mock(HttpServletResponse.class);
-
-        ActionContext.setContext(new ActionContext(Ognl.createDefaultContext(null)));
-        ServletActionContext.setResponse((HttpServletResponse) responseMock.proxy());
-    }
-
-    protected void tearDown() throws Exception {
-        actionInvocation = null;
-        os = null;
-        responseMock = null;
-    }
-
-
-    private class MockServletOutputStream extends ServletOutputStream {
-        // very simple check that outputStream was written to.
-        private boolean written = false;
-
-        /**
-         * @return Returns the written.
-         */
-        public boolean isWritten() {
-            return written;
-        }
-
-        public void write(int arg0) throws IOException {
-            written = true;
-        }
-    }
-}
diff --git a/trunk/plugins/jsf/pom.xml b/trunk/plugins/jsf/pom.xml
deleted file mode 100644
index ac5bc2b..0000000
--- a/trunk/plugins/jsf/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-jsf-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 JSF Plugin</name>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts-core</artifactId>
-            <version>1.3.5</version>
-        </dependency>
- 
-        <dependency>
-            <groupId>myfaces</groupId>
-            <artifactId>myfaces-jsf-api</artifactId>
-            <version>1.0.9</version>
-            <scope>provided</scope>
-        </dependency>
-
-     
-        <dependency>
-            <groupId>mockobjects</groupId>
-            <artifactId>mockobjects-core</artifactId>
-            <version>0.09</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/ApplyRequestValuesInterceptor.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/ApplyRequestValuesInterceptor.java
deleted file mode 100644
index 304b0f8..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/ApplyRequestValuesInterceptor.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-
-/**
- * Applies the request values to the component tree
- */
-public class ApplyRequestValuesInterceptor extends FacesInterceptor {
-
-    private static final long serialVersionUID = -1471180154211835323L;
-
-    /**
-     * Apply Request Values (JSF.2.2.2)
-     * 
-     * @param viewId
-     *            The view id
-     * @param facesContext
-     *            The faces context
-     * @return true, if response is complete
-     */
-    protected boolean executePhase(String viewId, FacesContext facesContext)
-            throws FacesException {
-        boolean skipFurtherProcessing = false;
-        if (log.isTraceEnabled())
-            log.trace("entering applyRequestValues");
-
-        informPhaseListenersBefore(facesContext, PhaseId.APPLY_REQUEST_VALUES);
-
-        try {
-            if (isResponseComplete(facesContext, "applyRequestValues", true)) {
-                // have to return right away
-                return true;
-            }
-            if (shouldRenderResponse(facesContext, "applyRequestValues", true)) {
-                skipFurtherProcessing = true;
-            }
-
-            facesContext.getViewRoot().processDecodes(facesContext);
-        } finally {
-            informPhaseListenersAfter(facesContext,
-                    PhaseId.APPLY_REQUEST_VALUES);
-        }
-
-        if (isResponseComplete(facesContext, "applyRequestValues", false)
-                || shouldRenderResponse(facesContext, "applyRequestValues",
-                        false)) {
-            // since this phase is completed we don't need to return right away
-            // even if the response is completed
-            skipFurtherProcessing = true;
-        }
-
-        if (!skipFurtherProcessing && log.isTraceEnabled())
-            log.trace("exiting applyRequestValues");
-        return skipFurtherProcessing;
-    }
-}
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesInterceptor.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesInterceptor.java
deleted file mode 100644
index 2109467..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesInterceptor.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import javax.faces.context.FacesContext;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-
-/**
- * Translates JSF phases into individual interceptors, and adapts their expected
- * workflow to Action 2
- */
-public class FacesInterceptor extends FacesSupport implements Interceptor {
-
-    private static final long serialVersionUID = -5418255964277566516L;
-
-    /**
-     * Not used
-     */
-    public void init() {
-    }
-
-    /**
-     * Adapts the phase workflow to Action 2
-     * 
-     * @param invocation
-     *            The action invocation
-     * @return The string result code
-     */
-    public String intercept(ActionInvocation invocation) throws Exception {
-
-        if (isFacesEnabled(invocation.getInvocationContext())) {
-            FacesContext context = FacesContext.getCurrentInstance();
-
-            if (context.getRenderResponse()) {
-                return invocation.invoke();
-            } else {
-
-                String viewId = invocation.getProxy().getNamespace() + '/'
-                        + invocation.getProxy().getActionName();
-                executePhase(viewId, context);
-
-                if (context.getResponseComplete()) {
-                    // Abort the chain as the result is done
-                    return null;
-                } else {
-                    if (invocation.getResultCode() != null) {
-                        return invocation.getResultCode();
-                    } else {
-                        return invocation.invoke();
-                    }
-                }
-            }
-        } else {
-            return invocation.invoke();
-        }
-    }
-
-    /**
-     * Executes the specific phase. The phase id is constructed as a composite
-     * of the namespace and action name.
-     * 
-     * @param viewId
-     *            The view id
-     * @param facesContext
-     *            The current faces context
-     * @return True if the next phases should be skipped
-     */
-    protected boolean executePhase(String viewId, FacesContext facesContext) {
-        return false;
-    }
-
-    /**
-     * Not used
-     */
-    public void destroy() {
-    }
-
-    /**
-     * Determines whether to process this request with the JSF phases
-     * 
-     * @param ctx The current action context
-     * @return True if it is a faces-enabled request
-     */
-    protected boolean isFacesEnabled(ActionContext ctx) {
-        return ctx.get(FACES_ENABLED) != null;
-    }
-
-}
\ No newline at end of file
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesRender.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesRender.java
deleted file mode 100755
index d38dd22..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesRender.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import java.io.IOException;
-
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.application.ViewHandler;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-
-/**
- * Performs the JSF render lifecycle phase.
- *
- */
-public class FacesRender extends FacesSupport {
-
-	/**
-     * Executes the render phase, borrowed from MyFaces
-     * 
-     * @param facesContext
-     *            The faces context
-     * @throws FacesException
-     *             If anything goes wrong
-     */
-    public void render(FacesContext facesContext) throws FacesException {
-        // if the response is complete we should not be invoking the phase
-        // listeners
-        if (isResponseComplete(facesContext, "render", true)) {
-            return;
-        }
-        if (log.isTraceEnabled())
-            log.trace("entering renderResponse");
-
-        informPhaseListenersBefore(facesContext, PhaseId.RENDER_RESPONSE);
-        try {
-            // also possible that one of the listeners completed the response
-            if (isResponseComplete(facesContext, "render", true)) {
-                return;
-            }
-            Application application = facesContext.getApplication();
-            ViewHandler viewHandler = application.getViewHandler();
-            try {
-                viewHandler
-                        .renderView(facesContext, facesContext.getViewRoot());
-            } catch (IOException e) {
-                throw new FacesException(e.getMessage(), e);
-            }
-        } finally {
-            informPhaseListenersAfter(facesContext, PhaseId.RENDER_RESPONSE);
-        }
-        if (log.isTraceEnabled()) {
-            // Note: DebugUtils Logger must also be in trace level
-            // DebugUtils.traceView("View after rendering");
-        }
-
-        if (log.isTraceEnabled())
-            log.trace("exiting renderResponse");
-    }
-}
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesResult.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesResult.java
deleted file mode 100644
index a0b4f0a..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesResult.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-
-import org.apache.struts2.dispatcher.StrutsResultSupport;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.Result;
-
-/**
- * Executes the JSF render phase
- */
-public class FacesResult extends StrutsResultSupport implements Result {
-
-    private static final long serialVersionUID = -3548970638740937804L;
-
-    public FacesResult() {
-    	super();
-    }
-    
-    public FacesResult(String location) {
-    	super(location);
-    }
-    /**
-     * Checks to see if we need to build a new JSF ViewId from the Struts Result
-     * config and then renders the result by delegating to the
-     * FacesRender.render().
-     * 
-     * @see org.apache.struts2.dispatcher.StrutsResultSupport#doExecute(java.lang.String,
-     *      com.opensymphony.
-     */
-    protected void doExecute(String finalLocation, ActionInvocation invocation)
-            throws Exception {
-        performNavigation(finalLocation, FacesContext.getCurrentInstance());
-        new FacesRender().render(FacesContext.getCurrentInstance());
-    }
-
-    /**
-     * Compares the Struts Result uri to the faces viewId. If they are different
-     * use the Struts uri to build a new faces viewId.
-     * 
-     * @param finalLocation
-     *            The result uri
-     * @param facesContext
-     *            The FacesContext
-     */
-    private void performNavigation(String finalLocation,
-            FacesContext facesContext) {
-        String facesViewId = facesContext.getViewRoot().getViewId();
-        if (finalLocation != null) {
-            if (finalLocation.equals(facesViewId) == false) {
-                ViewHandler viewHandler = facesContext.getApplication()
-                        .getViewHandler();
-                UIViewRoot viewRoot = viewHandler.createView(facesContext,
-                        finalLocation);
-                facesContext.setViewRoot(viewRoot);
-                facesContext.renderResponse();
-            }
-        }
-    }
-
-}
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesSetupInterceptor.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesSetupInterceptor.java
deleted file mode 100644
index 60be411..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesSetupInterceptor.java
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.application.NavigationHandler;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.context.FacesContext;
-import javax.faces.context.FacesContextFactory;
-import javax.faces.el.PropertyResolver;
-import javax.faces.el.VariableResolver;
-import javax.faces.event.ActionListener;
-import javax.faces.lifecycle.Lifecycle;
-import javax.faces.lifecycle.LifecycleFactory;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.util.ClassLoaderUtils;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-
-/**
- * * Initializes the JSF context for this request.
- * <p>
- * </P>
- * The JSF Application can additionaly be configured from the Struts.xml by
- * adding &lt;param&gt; tags to the jsfSetup &lt;interceptor-ref&gt;.
- * <p>
- * </p>
- * <b>Example struts.xml configuration:</b>
- * 
- * <pre>
- *   &lt;interceptor-ref name=&quot;jsfSetup&quot;&gt;
- *       &lt;param name=&quot;actionListener&quot;&gt;&lt;/param&gt;
- *       &lt;param name=&quot;defaultRenderKitId&quot;&gt;&lt;/param&gt;
- *       &lt;param name=&quot;supportedLocale&quot;&gt;&lt;/param&gt;
- *       &lt;param name=&quot;defaultLocale&quot;&gt;&lt;/param&gt;
- *       &lt;param name=&quot;messageBundle&quot;&gt;&lt;/param&gt;
- *       &lt;param name=&quot;navigationHandler&quot;&gt;org.apache.struts2.jsf.StrutsNavigationHandler&lt;/param&gt;
- *       &lt;param name=&quot;propertyResolver&quot;&gt;&lt;/param&gt;
- *       &lt;param name=&quot;stateManager&quot;&gt;&lt;/param&gt;
- *       &lt;param name=&quot;variableResolver&quot;&gt;
- *           org.apache.myfaces.el.VariableResolverImpl
- *          ,org.apache.struts2.jsf.StrutsVariableResolver
- *       &lt;/param&gt;
- *       &lt;param name=&quot;viewHandler;&quot;&gt;org.apache.shale.tiles.TilesViewHandler&lt;/param&gt;
- *   &lt;/interceptor-ref&gt;
- * </pre>
- * 
- * <p>
- * </p>
- * <b>Note: None of the parameters are required but all are shown in the example
- * for completeness.</b>
- */
-public class FacesSetupInterceptor extends FacesSupport implements Interceptor {
-
-    private static final long serialVersionUID = -621512342655103941L;
-
-    private String lifecycleId = LifecycleFactory.DEFAULT_LIFECYCLE;
-
-    private FacesContextFactory facesContextFactory;
-
-    private Lifecycle lifecycle;
-
-    // jsf Application configuration
-    private List<String> actionListener;
-
-    private String defaultRenderKitId;
-
-    private List<String> supportedLocale;
-
-    private String defaultLocale;
-
-    private String messageBundle;
-
-    private List<String> navigationHandler;
-
-    private List<String> propertyResolver;
-
-    private List<String> stateManager;
-
-    private List<String> variableResolver;
-
-    private List<String> viewHandler;
-
-    /**
-     * Sets the lifecycle id
-     * 
-     * @param id
-     *            The id
-     */
-    public void setLifecycleId(String id) {
-        this.lifecycleId = id;
-    }
-
-    /**
-     * Initializes the lifecycle and factories
-     */
-    public void init() {
-        try {
-            facesContextFactory = (FacesContextFactory) FactoryFinder
-                    .getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
-        } catch (Exception ex) {
-            log.debug("Unable to initialize faces", ex);
-            return;
-        }
-
-        // Javadoc says: Lifecycle instance is shared across multiple
-        // simultaneous requests, it must be implemented in a thread-safe
-        // manner.
-        // So we can acquire it here once:
-        LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder
-                .getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-        lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
-
-        Application application = ((ApplicationFactory) FactoryFinder
-                .getFactory(FactoryFinder.APPLICATION_FACTORY))
-                .getApplication();
-
-        if (actionListener != null) {
-            Iterator i = actionListener.iterator();
-            application
-                    .setActionListener((ActionListener) getApplicationObject(
-                            ActionListener.class, i, application
-                                    .getActionListener()));
-        }
-        if (defaultRenderKitId != null && defaultRenderKitId.length() > 0) {
-            application.setDefaultRenderKitId(defaultRenderKitId);
-        }
-        if (messageBundle != null && messageBundle.length() > 0) {
-            application.setMessageBundle(messageBundle);
-        }
-        if (supportedLocale != null) {
-            List<Locale> locales = new ArrayList<Locale>();
-            for (Iterator i = supportedLocale.iterator(); i.hasNext();) {
-                locales.add(toLocale((String) i.next()));
-            }
-            application.setSupportedLocales(locales);
-        }
-        if (defaultLocale != null && defaultLocale.length() > 0) {
-            application.setDefaultLocale(toLocale(defaultLocale));
-        }
-        if (navigationHandler != null) {
-            Iterator i = navigationHandler.iterator();
-            application
-                    .setNavigationHandler((NavigationHandler) getApplicationObject(
-                            NavigationHandler.class, i, application
-                                    .getNavigationHandler()));
-        }
-        if (propertyResolver != null) {
-            Iterator i = propertyResolver.iterator();
-            application
-                    .setPropertyResolver((PropertyResolver) getApplicationObject(
-                            PropertyResolver.class, i, application
-                                    .getPropertyResolver()));
-        }
-        if (stateManager != null) {
-            Iterator i = stateManager.iterator();
-            application.setStateManager((StateManager) getApplicationObject(
-                    StateManager.class, i, application.getStateManager()));
-        }
-        if (variableResolver != null) {
-            Iterator i = variableResolver.iterator();
-            application
-                    .setVariableResolver((VariableResolver) getApplicationObject(
-                            VariableResolver.class, i, application
-                                    .getVariableResolver()));
-        }
-        if (viewHandler != null) {
-            Iterator i = viewHandler.iterator();
-            application.setViewHandler((ViewHandler) getApplicationObject(
-                    ViewHandler.class, i, application.getViewHandler()));
-        }
-    }
-
-    /**
-     * Creates the faces context for other phases.
-     * 
-     * @param invocation
-     *            The action invocation
-     */
-    public String intercept(ActionInvocation invocation) throws Exception {
-        if (facesContextFactory != null) {
-            if (isFacesAction(invocation)) {
-
-                invocation.getInvocationContext().put(
-                        FacesInterceptor.FACES_ENABLED, Boolean.TRUE);
-
-                FacesContext facesContext = facesContextFactory
-                        .getFacesContext(ServletActionContext
-                                .getServletContext(), ServletActionContext
-                                .getRequest(), ServletActionContext
-                                .getResponse(), lifecycle);
-
-                setLifecycle(lifecycle);
-
-                try {
-                    return invocation.invoke();
-                } finally {
-                    facesContext.release();
-                }
-            }
-        } else {
-            throw new StrutsException(
-                    "Unable to initialize jsf interceptors probably due missing JSF implementation libraries",
-                    invocation.getProxy().getConfig());
-        }
-        return invocation.invoke();
-    }
-
-    /**
-     * Cleans up the lifecycle and factories
-     */
-    public void destroy() {
-        facesContextFactory = null;
-        lifecycle = null;
-    }
-
-    /**
-     * Determines if this action mapping will be have a JSF view
-     * 
-     * @param inv
-     *            The action invocation
-     * @return True if the JSF interceptors should fire
-     */
-    protected boolean isFacesAction(ActionInvocation inv) {
-        ActionConfig config = inv.getProxy().getConfig();
-        if (config != null) {
-            ResultConfig resultConfig = config.getResults().get(Action.SUCCESS);
-            Class resClass = null;
-            try {
-                resClass = Class.forName(resultConfig.getClassName());
-            } catch (ClassNotFoundException ex) {
-                log.warn(
-                        "Can't find result class, ignoring as a faces request",
-                        ex);
-            }
-            if (resClass != null) {
-                if (resClass.isAssignableFrom(FacesResult.class)) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Constructs an object from a list of class names. This method supports
-     * creating the objects using constructor delegation, if the requested class
-     * supports it. Classes will be imbedded from top to bottom in the list with
-     * the last class listed being the one that will be returned.
-     * 
-     * @param interfaceClass
-     *            The Class type that is expected to be returned
-     * @param classNamesIterator
-     *            An Iterator for a list of Strings that represent the class
-     *            names
-     * @param defaultObject
-     *            The current Object that the jsf Application has set
-     * @return
-     */
-    private Object getApplicationObject(Class interfaceClass,
-            Iterator classNamesIterator, Object defaultObject) {
-        Object current = defaultObject;
-
-        while (classNamesIterator.hasNext()) {
-            String implClassName = (String) classNamesIterator.next();
-            Class implClass = null;
-
-            try {
-                implClass = ClassLoaderUtils.loadClass(implClassName, this
-                        .getClass());
-            } catch (ClassNotFoundException e1) {
-                throw new IllegalArgumentException("Class " + implClassName
-                        + " was not found.");
-            }
-
-            // check, if class is of expected interface type
-            if (!interfaceClass.isAssignableFrom(implClass)) {
-                throw new IllegalArgumentException("Class " + implClassName
-                        + " is no " + interfaceClass.getName());
-            }
-
-            if (current == null) {
-                // nothing to decorate
-                try {
-                    current = implClass.newInstance();
-                } catch (InstantiationException e) {
-                    log.error(e.getMessage(), e);
-                    throw new StrutsException(e);
-                } catch (IllegalAccessException e) {
-                    log.error(e.getMessage(), e);
-                    throw new StrutsException(e);
-                }
-            } else {
-                // let's check if class supports the decorator pattern
-                try {
-                    Constructor delegationConstructor = implClass
-                            .getConstructor(new Class[] { interfaceClass });
-                    // impl class supports decorator pattern,
-                    try {
-                        // create new decorator wrapping current
-                        current = delegationConstructor
-                                .newInstance(new Object[] { current });
-                    } catch (InstantiationException e) {
-                        log.error(e.getMessage(), e);
-                        throw new StrutsException(e);
-                    } catch (IllegalAccessException e) {
-                        log.error(e.getMessage(), e);
-                        throw new StrutsException(e);
-                    } catch (InvocationTargetException e) {
-                        log.error(e.getMessage(), e);
-                        throw new StrutsException(e);
-                    }
-                } catch (NoSuchMethodException e) {
-                    // no decorator pattern support
-                    try {
-                        current = implClass.newInstance();
-                    } catch (InstantiationException e1) {
-                        log.error(e.getMessage(), e);
-                        throw new StrutsException(e);
-                    } catch (IllegalAccessException e1) {
-                        log.error(e.getMessage(), e);
-                        throw new StrutsException(e);
-                    }
-                }
-            }
-        }
-
-        return current;
-    }
-
-    /**
-     * Takes a comma delimited string of class names and stores the names in an
-     * <code>ArrayList</code>. The incoming <code>String</code> will be
-     * cleaned of any whitespace characters before the class names are stored.
-     * 
-     * @param actionListener
-     *            A comma delimited string of class names
-     */
-    public void setActionListener(String actionListener) {
-        if (this.actionListener == null) {
-            this.actionListener = new ArrayList<String>();
-        }
-        String clean = actionListener.replaceAll("[ \t\r\n]", "");
-        String[] actionListenerNames = clean.split(",");
-
-        for (int i = 0; i < actionListenerNames.length; i++) {
-            this.actionListener.add(actionListenerNames[i]);
-        }
-    }
-
-    /**
-     * A <code>String</code> to be used as the defaultRenderKitId for the jsf
-     * application. The incoming <code>String</code> will be cleaned of
-     * whitespace characters.
-     * 
-     * @param defaultRenderKitId
-     *            The defaultRenderKitId
-     */
-    public void setDefaultRenderKitId(String defaultRenderKitId) {
-        String clean = defaultRenderKitId.replaceAll("[ \t\r\n]", "");
-        this.defaultRenderKitId = clean;
-    }
-
-    /**
-     * Takes a comma delimited string of local names and stores the names in an
-     * <code>ArrayList</code>. The incoming <code>String</code> will be
-     * cleaned of any whitespace characters before the class names are stored.
-     * 
-     * @param supportedLocale
-     *            A comma delimited string of local names
-     */
-    public void setSupportedLocale(String supportedLocale) {
-        if (this.supportedLocale == null) {
-            this.supportedLocale = new ArrayList<String>();
-        }
-        String clean = supportedLocale.replaceAll("[ \t\r\n]", "");
-        String[] supportedLocaleNames = clean.split(",");
-
-        for (int i = 0; i < supportedLocaleNames.length; i++) {
-            this.supportedLocale.add(supportedLocaleNames[i]);
-        }
-    }
-
-    /**
-     * Stores a String representation of the defaultLocale. The incoming
-     * <code>String</code> will be cleaned of any whitespace characters before
-     * the class names are stored.
-     * 
-     * @param defaultLocale
-     *            The default local
-     */
-    public void setDefaultLocale(String defaultLocale) {
-        String clean = defaultLocale.replaceAll("[ \t\r\n]", "");
-        this.defaultLocale = clean;
-    }
-
-    /**
-     * Stores the messageBundle to be used to configure the jsf Application.
-     * 
-     * @param messageBundle
-     *            The messageBundle
-     */
-    public void setMessageBundle(String messageBundle) {
-        String clean = messageBundle.replaceAll("[ \t\r\n]", "");
-        this.messageBundle = clean;
-    }
-
-    /**
-     * Takes a comma delimited string of class names and stores the names in an
-     * <code>ArrayList</code>. The incoming <code>String</code> will be
-     * cleaned of any whitespace characters before the class names are stored.
-     * 
-     * @param navigationHandlerName
-     *            A comma delimited string of class names
-     */
-    public void setNavigationHandler(String navigationHandlerName) {
-        if (navigationHandler == null) {
-            navigationHandler = new ArrayList<String>();
-        }
-        String clean = navigationHandlerName.replaceAll("[ \t\r\n]", "");
-        String[] navigationHandlerNames = clean.split(",");
-
-        for (int i = 0; i < navigationHandlerNames.length; i++) {
-            navigationHandler.add(navigationHandlerNames[i]);
-        }
-    }
-
-    /**
-     * Takes a comma delimited string of class names and stores the names in an
-     * <code>ArrayList</code>. The incoming <code>String</code> will be
-     * cleaned of any whitespace characters before the class names are stored.
-     * 
-     * @param propertyResolverName
-     *            A comma delimited string of class names
-     */
-    public void setPropertyResolver(String propertyResolverName) {
-        if (propertyResolver == null) {
-            propertyResolver = new ArrayList<String>();
-        }
-        String clean = propertyResolverName.replaceAll("[ \t\r\n]", "");
-        String[] propertyResolverNames = clean.split(",");
-
-        for (int i = 0; i < propertyResolverNames.length; i++) {
-            propertyResolver.add(propertyResolverNames[i]);
-        }
-    }
-
-    /**
-     * Takes a comma delimited string of class names and stores the names in an
-     * <code>ArrayList</code>. The incoming <code>String</code> will be
-     * cleaned of any whitespace characters before the class names are stored.
-     * 
-     * @param stateManagerName
-     *            A comma delimited string of class names
-     */
-    public void setStateManager(String stateManagerName) {
-        if (stateManager == null) {
-            stateManager = new ArrayList<String>();
-        }
-        String clean = stateManagerName.replaceAll("[ \t\r\n]", "");
-        String[] stateManagerNames = clean.split(",");
-
-        for (int i = 0; i < stateManagerNames.length; i++) {
-            stateManager.add(stateManagerNames[i]);
-        }
-    }
-
-    /**
-     * Takes a comma delimited string of class names and stores the names in an
-     * <code>ArrayList</code>. The incoming <code>String</code> will be
-     * cleaned of any whitespace characters before the class names are stored.
-     * 
-     * @param variableResolverName
-     *            A comma delimited string of class names
-     */
-    public void setVariableResolver(String variableResolverName) {
-        if (variableResolver == null) {
-            variableResolver = new ArrayList<String>();
-        }
-        String clean = variableResolverName.replaceAll("[ \t\r\n]", "");
-        String[] variableResolverNames = clean.split(",");
-
-        for (int i = 0; i < variableResolverNames.length; i++) {
-            variableResolver.add(variableResolverNames[i]);
-        }
-    }
-
-    /**
-     * Takes a comma delimited string of class names and stores the names in an
-     * <code>ArrayList</code>. The incoming <code>String</code> will be
-     * cleaned of any whitespace characters before the class names are stored.
-     * 
-     * @param viewHandlerName
-     *            A comma delimited string of class names
-     */
-    public void setViewHandler(String viewHandlerName) {
-        if (viewHandler == null) {
-            viewHandler = new ArrayList<String>();
-        }
-        String[] viewHandlerNames = viewHandlerName
-                .split(",^[ \t\r\n]+|[ \t\r\n]+$");
-
-        for (int i = 0; i < viewHandlerNames.length; i++) {
-            viewHandler.add(viewHandlerNames[i]);
-        }
-    }
-
-    /**
-     * Converts a locale string to <code>Locale</code> class. Accepts both '_'
-     * and '-' as separators for locale components.
-     * 
-     * @param localeString
-     *            string representation of a locale
-     * @return Locale instance, compatible with the string representation
-     */
-    private Locale toLocale(String localeString) {
-        if ((localeString == null) || (localeString.length() == 0)) {
-            Locale locale = Locale.getDefault();
-            if (log.isWarnEnabled())
-                log
-                        .warn("Locale name in faces-config.xml null or empty, setting locale to default locale : "
-                                + locale.toString());
-            return locale;
-        }
-
-        int separatorCountry = localeString.indexOf('_');
-        char separator;
-        if (separatorCountry >= 0) {
-            separator = '_';
-        } else {
-            separatorCountry = localeString.indexOf('-');
-            separator = '-';
-        }
-
-        String language, country, variant;
-        if (separatorCountry < 0) {
-            language = localeString;
-            country = variant = "";
-        } else {
-            language = localeString.substring(0, separatorCountry);
-
-            int separatorVariant = localeString.indexOf(separator,
-                    separatorCountry + 1);
-            if (separatorVariant < 0) {
-                country = localeString.substring(separatorCountry + 1);
-                variant = "";
-            } else {
-                country = localeString.substring(separatorCountry + 1,
-                        separatorVariant);
-                variant = localeString.substring(separatorVariant + 1);
-            }
-        }
-
-        return new Locale(language, country, variant);
-    }
-}
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesSupport.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesSupport.java
deleted file mode 100644
index 97c873e..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/FacesSupport.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-import javax.faces.lifecycle.Lifecycle;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionContext;
-
-/**
- * Provides common lifecycle phase methods needed by interceptors and results.
- */
-public class FacesSupport {
-
-	private static final String LIFECYCLE_KEY = "lifecycle";
-
-	/** Log instance for each class */
-	protected Log log;
-
-    /**
-     * Marker key for the ActionContext to dictate whether to treat the request
-     * as a JSF faces request and therefore process the Faces phases
-     */
-    protected static final String FACES_ENABLED = "facesEnabled";
-
-    /** Initializes log instance for the instance object */
-    protected FacesSupport() {
-        log = LogFactory.getLog(getClass());
-    }
-
-	/**
-	 * Gets the shared lifecycle for this request
-	 *
-	 * @return The lifecycle
-	 */
-	private Lifecycle getLifecycle() {
-		return (Lifecycle) ActionContext.getContext().get(LIFECYCLE_KEY);
-	}
-
-	/**
-	 * Sets the lifecycle for this request
-	 *
-	 * @param lifecycle
-	 *            The lifecycle
-	 */
-	protected void setLifecycle(Lifecycle lifecycle) {
-		ActionContext.getContext().put(LIFECYCLE_KEY, lifecycle);
-	}
-
-	/**
-	 * Informs phase listeners before a phase is executed
-	 *
-	 * @param facesContext
-	 *            The current faces context
-	 * @param phaseId
-	 *            The phase id about to be executed
-	 */
-	protected void informPhaseListenersBefore(FacesContext facesContext,
-			PhaseId phaseId) {
-		Lifecycle lifecycle = getLifecycle();
-		PhaseListener[] phaseListeners = lifecycle.getPhaseListeners();
-		for (int i = 0; i < phaseListeners.length; i++) {
-			PhaseListener phaseListener = phaseListeners[i];
-			int listenerPhaseId = phaseListener.getPhaseId().getOrdinal();
-			if (listenerPhaseId == PhaseId.ANY_PHASE.getOrdinal()
-					|| listenerPhaseId == phaseId.getOrdinal()) {
-				phaseListener.beforePhase(new PhaseEvent(FacesContext
-						.getCurrentInstance(), phaseId, lifecycle));
-			}
-		}
-
-	}
-
-	/**
-	 * Informs phase listeners after a phase is executed
-	 *
-	 * @param facesContext
-	 *            The current faces context
-	 * @param phaseId
-	 *            The phase id that was executed
-	 */
-	protected void informPhaseListenersAfter(FacesContext facesContext,
-			PhaseId phaseId) {
-		Lifecycle lifecycle = getLifecycle();
-		PhaseListener[] phaseListeners = lifecycle.getPhaseListeners();
-		for (int i = 0; i < phaseListeners.length; i++) {
-			PhaseListener phaseListener = phaseListeners[i];
-			int listenerPhaseId = phaseListener.getPhaseId().getOrdinal();
-			if (listenerPhaseId == PhaseId.ANY_PHASE.getOrdinal()
-					|| listenerPhaseId == phaseId.getOrdinal()) {
-				phaseListener.afterPhase(new PhaseEvent(FacesContext
-						.getCurrentInstance(), phaseId, lifecycle));
-			}
-		}
-
-	}
-
-	/**
-	 * Checks to see if the response has been completed. Mainly used for better
-	 * debugging messages.
-	 *
-	 * @param facesContext
-	 *            The current faces context
-	 * @param phase
-	 *            The phase id in execution
-	 * @param before
-	 *            Whether the phase has been executed or not
-	 * @return True if the response is complete
-	 */
-	protected boolean isResponseComplete(FacesContext facesContext,
-			String phase, boolean before) {
-		boolean flag = false;
-		if (facesContext.getResponseComplete()) {
-			if (log.isDebugEnabled())
-				log
-						.debug("exiting from lifecycle.execute in "
-								+ phase
-								+ " because getResponseComplete is true from one of the "
-								+ (before ? "before" : "after") + " listeners");
-			flag = true;
-		}
-		return flag;
-	}
-
-	/**
-	 * Checks to see the render phase should be executed next. Mainly used for
-	 * better debugging messages.
-	 *
-	 * @param facesContext
-	 *            The current faces context
-	 * @param phase
-	 *            The phase id in execution
-	 * @param before
-	 *            Whether the phase has been executed or not
-	 * @return True if the response is complete
-	 */
-	protected boolean shouldRenderResponse(FacesContext facesContext,
-			String phase, boolean before) {
-		boolean flag = false;
-		if (facesContext.getRenderResponse()) {
-			if (log.isDebugEnabled())
-				log.debug("exiting from lifecycle.execute in " + phase
-						+ " because getRenderResponse is true from one of the "
-						+ (before ? "before" : "after") + " listeners");
-			flag = true;
-		}
-		return flag;
-	}
-}
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/InvokeApplicationInterceptor.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/InvokeApplicationInterceptor.java
deleted file mode 100644
index edb50ee..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/InvokeApplicationInterceptor.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-
-/**
- * Invokes the application
- */
-public class InvokeApplicationInterceptor extends FacesInterceptor {
-
-    private static final long serialVersionUID = -7388153356410171208L;
-
-    /**
-     * Invoke Application (JSF.2.2.5)
-     * 
-     * @param viewId
-     *            The view id
-     * @param facesContext
-     *            The faces context
-     * @return true, if response is complete
-     */
-    protected boolean executePhase(String viewId, FacesContext facesContext)
-            throws FacesException {
-        boolean skipFurtherProcessing = false;
-        if (log.isTraceEnabled())
-            log.trace("entering invokeApplication");
-
-        informPhaseListenersBefore(facesContext, PhaseId.INVOKE_APPLICATION);
-
-        try {
-            if (isResponseComplete(facesContext, "invokeApplication", true)) {
-                // have to return right away
-                return true;
-            }
-            if (shouldRenderResponse(facesContext, "invokeApplication", true)) {
-                skipFurtherProcessing = true;
-            }
-
-            facesContext.getViewRoot().processApplication(facesContext);
-        } finally {
-            informPhaseListenersAfter(facesContext, PhaseId.INVOKE_APPLICATION);
-        }
-
-        if (isResponseComplete(facesContext, "invokeApplication", false)
-                || shouldRenderResponse(facesContext, "invokeApplication",
-                        false)) {
-            // since this phase is completed we don't need to return right away
-            // even if the response is completed
-            skipFurtherProcessing = true;
-        }
-
-        if (!skipFurtherProcessing && log.isTraceEnabled())
-            log.trace("exiting invokeApplication ");
-
-        return skipFurtherProcessing;
-    }
-}
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/ProcessValidationsInterceptor.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/ProcessValidationsInterceptor.java
deleted file mode 100644
index 64963d2..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/ProcessValidationsInterceptor.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-
-/**
- * Processes validations on the component tree
- */
-public class ProcessValidationsInterceptor extends FacesInterceptor {
-
-	private static final long serialVersionUID = 8785236570688278147L;
-
-	/**
-	 * Process Validations (JSF.2.2.3)
-	 * 
-	 * @param viewId
-	 *            The view id
-	 * @param facesContext
-	 *            The faces context
-	 * @return true, if response is complete
-	 */
-	protected boolean executePhase(String viewId, FacesContext facesContext)
-			throws FacesException {
-		boolean skipFurtherProcessing = false;
-		if (log.isTraceEnabled())
-			log.trace("entering processValidations");
-
-		informPhaseListenersBefore(facesContext, PhaseId.PROCESS_VALIDATIONS);
-
-        try {
-        		if (isResponseComplete(facesContext, "processValidations", true)) {
-        			// have to return right away
-        			return true;
-        		}
-        		if (shouldRenderResponse(facesContext, "processValidations", true)) {
-        			skipFurtherProcessing = true;
-        		}
-        
-        		facesContext.getViewRoot().processValidators(facesContext);
-        } finally {
-            informPhaseListenersAfter(facesContext, PhaseId.PROCESS_VALIDATIONS);
-        }
-
-		if (isResponseComplete(facesContext, "processValidations", false)
-				|| shouldRenderResponse(facesContext, "processValidations",
-						false)) {
-			// since this phase is completed we don't need to return right away
-			// even if the response is completed
-			skipFurtherProcessing = true;
-		}
-
-		if (!skipFurtherProcessing && log.isTraceEnabled())
-			log.trace("exiting processValidations");
-		return skipFurtherProcessing;
-	}
-}
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/RestoreViewInterceptor.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/RestoreViewInterceptor.java
deleted file mode 100644
index e77bfb1..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/RestoreViewInterceptor.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.Iterator;
-
-import javax.faces.FacesException;
-import javax.faces.application.Application;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-import javax.faces.event.PhaseId;
-
-/**
- * Restores the view or component tree
- */
-public class RestoreViewInterceptor extends FacesInterceptor {
-
-    private static final long serialVersionUID = -1500785113037140668L;
-
-    /**
-     * Restore View (JSF.2.2.1)
-     * 
-     * @param viewId
-     *            The view id
-     * @param facesContext
-     *            The faces context
-     * @return true, if immediate rendering should occur
-     */
-    protected boolean executePhase(String viewId, FacesContext facesContext) {
-        boolean skipFurtherProcessing = false;
-        if (log.isTraceEnabled())
-            log.trace("entering restoreView");
-
-        informPhaseListenersBefore(facesContext, PhaseId.RESTORE_VIEW);
-
-        try {
-            if (isResponseComplete(facesContext, "restoreView", true)) {
-                // have to skips this phase
-                return true;
-            }
-            if (shouldRenderResponse(facesContext, "restoreView", true)) {
-                skipFurtherProcessing = true;
-            }
-
-            ExternalContext externalContext = facesContext.getExternalContext();
-            String defaultSuffix = externalContext
-                    .getInitParameter(ViewHandler.DEFAULT_SUFFIX_PARAM_NAME);
-            String suffix = defaultSuffix != null ? defaultSuffix
-                    : ViewHandler.DEFAULT_SUFFIX;
-            if (viewId != null) {
-                viewId += suffix;
-            }
-
-            if (viewId == null) {
-                if (!externalContext.getRequestServletPath().endsWith("/")) {
-                    try {
-                        externalContext.redirect(externalContext
-                                .getRequestServletPath()
-                                + "/");
-                        facesContext.responseComplete();
-                        return true;
-                    } catch (IOException e) {
-                        throw new FacesException("redirect failed", e);
-                    }
-                }
-            }
-
-            Application application = facesContext.getApplication();
-            ViewHandler viewHandler = application.getViewHandler();
-
-            // boolean viewCreated = false;
-            UIViewRoot viewRoot = viewHandler.restoreView(facesContext, viewId);
-            if (viewRoot == null) {
-                viewRoot = viewHandler.createView(facesContext, viewId);
-                viewRoot.setViewId(viewId);
-                facesContext.renderResponse();
-                // viewCreated = true;
-            }
-
-            facesContext.setViewRoot(viewRoot);
-
-            /*
-             * This section has been disabled because it causes some bug. Be
-             * careful if you need to re-enable it. Furthermore, for an unknown
-             * reason, it seems that by default it is executed (i.e.
-             * log.isTraceEnabled() is true). Bug example : This traceView
-             * causes DebugUtil.printComponent to print all the attributes of
-             * the view components. And if you have a data table within an
-             * aliasBean, this causes the data table to initialize it's value
-             * attribute while the alias isn't set. So, the value initializes
-             * with an UIData.EMPTY_DATA_MODEL, and not with the aliased one.
-             * But as it's initialized, it will not try to get the value from
-             * the ValueBinding next time it needs to. I expect this to cause
-             * more similar bugs. TODO : Completely remove or be SURE by default
-             * it's not executed, and it has no more side-effects.
-             * 
-             * if (log.isTraceEnabled()) { //Note: DebugUtils Logger must also
-             * be in trace level DebugUtils.traceView(viewCreated ? "Newly
-             * created view" : "Restored view"); }
-             */
-
-            if (facesContext.getExternalContext().getRequestParameterMap()
-                    .isEmpty()) {
-                // no POST or query parameters --> set render response flag
-                facesContext.renderResponse();
-            }
-
-            recursivelyHandleComponentReferencesAndSetValid(facesContext,
-                    viewRoot);
-        } finally {
-            informPhaseListenersAfter(facesContext, PhaseId.RESTORE_VIEW);
-        }
-
-        if (isResponseComplete(facesContext, "restoreView", false)
-                || shouldRenderResponse(facesContext, "restoreView", false)) {
-            // since this phase is completed we don't need to return right away
-            // even if the response is completed
-            skipFurtherProcessing = true;
-        }
-
-        if (!skipFurtherProcessing && log.isTraceEnabled())
-            log.trace("exiting restoreView ");
-        return skipFurtherProcessing;
-    }
-
-    /**
-     * Walk the component tree, executing any component-bindings to reattach
-     * components to their backing beans. Also, any UIInput component is marked
-     * as Valid.
-     * <p>
-     * Note that this method effectively breaks encapsulation; instead of asking
-     * each component to update itself and its children, this method just
-     * reaches into each component. That makes it impossible for any component
-     * to customise its behaviour at this point.
-     * <p>
-     * This has been filed as an issue against the spec. Until this issue is
-     * resolved, we'll add a new marker-interface for components to allow them
-     * to define their interest in handling children bindings themselves.
-     */
-    protected void recursivelyHandleComponentReferencesAndSetValid(
-            FacesContext facesContext, UIComponent parent) {
-        recursivelyHandleComponentReferencesAndSetValid(facesContext, parent,
-                false);
-    }
-
-    protected void recursivelyHandleComponentReferencesAndSetValid(
-            FacesContext facesContext, UIComponent parent, boolean forceHandle) {
-        Method handleBindingsMethod = getBindingMethod(parent);
-
-        if (handleBindingsMethod != null && !forceHandle) {
-            try {
-                handleBindingsMethod.invoke(parent, new Object[] {});
-            } catch (Throwable th) {
-                log.error(
-                        "Exception while invoking handleBindings on component with client-id:"
-                                + parent.getClientId(facesContext), th);
-            }
-        } else {
-            for (Iterator it = parent.getFacetsAndChildren(); it.hasNext();) {
-                UIComponent component = (UIComponent) it.next();
-
-                ValueBinding binding = component.getValueBinding("binding"); // TODO:
-                // constant
-                if (binding != null && !binding.isReadOnly(facesContext)) {
-                    binding.setValue(facesContext, component);
-                }
-
-                if (component instanceof UIInput) {
-                    ((UIInput) component).setValid(true);
-                }
-
-                recursivelyHandleComponentReferencesAndSetValid(facesContext,
-                        component);
-            }
-        }
-    }
-
-    /**
-     * This is all a hack to work around a spec-bug which will be fixed in
-     * JSF2.0
-     * 
-     * @param parent
-     * @return true if this component is bindingAware (e.g. aliasBean)
-     */
-    private static Method getBindingMethod(UIComponent parent) {
-        Class[] clazzes = parent.getClass().getInterfaces();
-
-        for (int i = 0; i < clazzes.length; i++) {
-            Class clazz = clazzes[i];
-
-            if (clazz.getName().indexOf("BindingAware") != -1) {
-                try {
-                    return parent.getClass().getMethod("handleBindings",
-                            new Class[] {});
-                } catch (NoSuchMethodException e) {
-                    // return
-                }
-            }
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java
deleted file mode 100644
index 4e8df70..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import java.util.Map;
-
-import javax.faces.application.NavigationHandler;
-import javax.faces.context.FacesContext;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-
-/**
- * Overrides the JFS navigation by delegating the result to handling by the core
- * result code lookup and execution.  If a result cannot be found, the previous
- * NavigationHandler is called.
- */
-public class StrutsNavigationHandler extends NavigationHandler {
-    
-    private NavigationHandler parent;
-    
-    /**
-     * Creates the handler
-     * 
-     * @param handler The old NavigationHandler to possibly delegate to
-     */
-    public StrutsNavigationHandler(NavigationHandler handler) {
-        this.parent = handler;
-    }
-
-	/**
-	 * Stores any outcomes as the result code, failing over to the old
-     * NavigationHandler
-	 * 
-	 * @param facesContext The faces context
-	 * @param fromAction The action we are coming from
-	 * @param outcome The String return code
-	 */
-	@Override
-	public void handleNavigation(FacesContext facesContext, String fromAction, String outcome) {
-		ActionContext ctx = ActionContext.getContext();
-		if (outcome != null) {
-            ActionConfig config = ctx.getActionInvocation().getProxy().getConfig();
-            Map results = config.getResults();
-
-            ResultConfig resultConfig = null;
-
-            synchronized (config) {
-                try {
-                    resultConfig = (ResultConfig) results.get(outcome);
-                } catch (NullPointerException e) {
-                }
-                if (resultConfig == null) {
-                    // If no result is found for the given resultCode, try to get a wildcard '*' match.
-                    resultConfig = (ResultConfig) results.get("*");
-                }
-            }
-            if (resultConfig != null) {
-                ctx.getActionInvocation().setResultCode(outcome);
-            } else {
-                // Failing over to parent handler
-                parent.handleNavigation(facesContext, fromAction, outcome);
-            }
-		}
-	}
-
-}
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsVariableResolver.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsVariableResolver.java
deleted file mode 100644
index e513d1b..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsVariableResolver.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import javax.faces.context.FacesContext;
-import javax.faces.el.EvaluationException;
-import javax.faces.el.VariableResolver;
-
-import com.opensymphony.xwork2.util.OgnlValueStack;
-import com.opensymphony.xwork2.ActionContext;
-
-/**
- * Will return a reference to the current action if the action name matches the
- * requested variable name. Otherwise it will attempt to resolve the name from
- * the value stack. Otherwise it will delegate to the original jsf resolver.
- */
-public class StrutsVariableResolver extends VariableResolver {
-
-    /** The original <code>VariableResolver</code> passed to our constructor. */
-    private VariableResolver original = null;
-
-    /** The variable name of our Struts action */
-    private static final String STRUTS_VARIABLE_NAME = "action";
-
-    /**
-     * Constructor
-     * 
-     * @param original
-     *            Original resolver to delegate to.
-     */
-    public StrutsVariableResolver(VariableResolver original) {
-
-        this.original = original;
-
-    }
-
-    /**
-     * <p>
-     * Will return a reference to the current action if the action name matches
-     * the requested variable name. Otherwise it will attempt to resolve the
-     * name from the value stack. Otherwise it will delegate to the original jsf
-     * resolver.
-     * </p>
-     * 
-     * @param name
-     *            Variable name to be resolved
-     */
-    public Object resolveVariable(FacesContext context, String name)
-            throws EvaluationException {
-
-        if (STRUTS_VARIABLE_NAME.equals(name)) {
-            return ActionContext.getContext().getActionInvocation().getAction();
-        }
-        
-        Object obj = ActionContext.getContext().getValueStack().findValue(name);
-        if (obj != null) {
-            return obj;
-        } else {
-            return original.resolveVariable(context, name);
-        }
-
-    }
-
-}
diff --git a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/UpdateModelValuesInterceptor.java b/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/UpdateModelValuesInterceptor.java
deleted file mode 100644
index ea5e838..0000000
--- a/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/UpdateModelValuesInterceptor.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.jsf;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseId;
-
-/**
- * Updates the model values from the component tree
- */
-public class UpdateModelValuesInterceptor extends FacesInterceptor {
-
-    private static final long serialVersionUID = 4011504235094251077L;
-
-    /**
-     * Update Model Values (JSF.2.2.4)
-     * 
-     * @param viewId
-     *            The view id
-     * @param facesContext
-     *            The faces context
-     * @return true, if response is complete
-     */
-    protected boolean executePhase(String viewId, FacesContext facesContext)
-            throws FacesException {
-        boolean skipFurtherProcessing = false;
-        if (log.isTraceEnabled())
-            log.trace("entering updateModelValues");
-
-        informPhaseListenersBefore(facesContext, PhaseId.UPDATE_MODEL_VALUES);
-
-        try {
-            if (isResponseComplete(facesContext, "updateModelValues", true)) {
-                // have to return right away
-                return true;
-            }
-            if (shouldRenderResponse(facesContext, "updateModelValues", true)) {
-                skipFurtherProcessing = true;
-            }
-
-            facesContext.getViewRoot().processUpdates(facesContext);
-        } finally {
-            informPhaseListenersAfter(facesContext, PhaseId.UPDATE_MODEL_VALUES);
-        }
-
-        if (isResponseComplete(facesContext, "updateModelValues", false)
-                || shouldRenderResponse(facesContext, "updateModelValues",
-                        false)) {
-            // since this phase is completed we don't need to return right away
-            // even if the response is completed
-            skipFurtherProcessing = true;
-        }
-
-        if (!skipFurtherProcessing && log.isTraceEnabled())
-            log.trace("exiting updateModelValues");
-
-        return skipFurtherProcessing;
-    }
-}
diff --git a/trunk/plugins/jsf/src/main/resources/org/apache/struts2/jsf/package.html b/trunk/plugins/jsf/src/main/resources/org/apache/struts2/jsf/package.html
deleted file mode 100644
index 0b6bccd..0000000
--- a/trunk/plugins/jsf/src/main/resources/org/apache/struts2/jsf/package.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<body>
-Integrates the JSF library into Struts.  The overall approach
-	splits the JSF lifecycle into an Interceptor stack and Result, delegating
-	navigation and general controller functions to Struts.
-<p>
-	Most of this code was borrowed from MyFaces, and as such, will need to be synchronized 
-	occassionally with the original code.
-</p>
-</body>
diff --git a/trunk/plugins/jsf/src/main/resources/struts-plugin.xml b/trunk/plugins/jsf/src/main/resources/struts-plugin.xml
deleted file mode 100644
index df5a8a1..0000000
--- a/trunk/plugins/jsf/src/main/resources/struts-plugin.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-    
-<struts>
-    <package name="jsf-default" extends="struts-default">
-
-        <result-types>
-            <result-type name="jsf" class="org.apache.struts2.jsf.FacesResult" />
-        </result-types>
-        <interceptors>
-            <interceptor class="org.apache.struts2.jsf.FacesSetupInterceptor" name="jsfSetup" />
-            <interceptor class="org.apache.struts2.jsf.RestoreViewInterceptor" name="jsfRestore" />
-            <interceptor class="org.apache.struts2.jsf.ApplyRequestValuesInterceptor" name="jsfApply" />
-            <interceptor class="org.apache.struts2.jsf.ProcessValidationsInterceptor" name="jsfValidate" />
-            <interceptor class="org.apache.struts2.jsf.UpdateModelValuesInterceptor" name="jsfUpdate" />
-            <interceptor class="org.apache.struts2.jsf.InvokeApplicationInterceptor" name="jsfInvoke" />
-
-            <interceptor-stack name="jsfStack">
-                <interceptor-ref name="jsfSetup">
-                    <param name="variableResolver">org.apache.struts2.jsf.StrutsVariableResolver</param>
-                    <param name="navigationHandler">org.apache.struts2.jsf.StrutsNavigationHandler</param>
-                </interceptor-ref>
-                <interceptor-ref name="jsfRestore" />
-                <interceptor-ref name="jsfApply" />
-                <interceptor-ref name="jsfValidate" />
-                <interceptor-ref name="jsfUpdate" />
-                <interceptor-ref name="jsfInvoke" />
-            </interceptor-stack>
-        </interceptors>
-        
-        <default-interceptor-ref name="jsfStack"/>
-        
-    </package>
-
-</struts>
diff --git a/trunk/plugins/pell-multipart/pom.xml b/trunk/plugins/pell-multipart/pom.xml
deleted file mode 100644
index 50a8a6f..0000000
--- a/trunk/plugins/pell-multipart/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-pell-multipart-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 Pell Multipart Plugin</name>
-    
-    <dependencies>
-        <dependency>
-            <groupId>opensymphony</groupId>
-            <artifactId>pell-multipart</artifactId>
-            <version>2.1.5</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java b/trunk/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java
deleted file mode 100644
index 0f14840..0000000
--- a/trunk/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.dispatcher.multipart;
-
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.StrutsConstants;
-import http.utils.multipartrequest.ServletMultipartRequest;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.File;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-
-
-/**
- * Multipart form data request adapter for Jason Pell's multipart utils package.
- *
- */
-public class PellMultiPartRequest extends MultiPartRequest {
-
-    private ServletMultipartRequest multi;
-
-
-    /**
-     * Creates a new request wrapper to handle multi-part data using methods adapted from Jason Pell's
-     * multipart classes (see class description).
-     *
-     * @param maxSize        maximum size post allowed
-     * @param saveDir        the directory to save off the file
-     * @param servletRequest the request containing the multipart
-     */
-    public PellMultiPartRequest(HttpServletRequest servletRequest, String saveDir, int maxSize) throws IOException {
-        //this needs to be synchronised, as we should not change the encoding at the same time as
-        //calling the constructor.  See javadoc for MultipartRequest.setEncoding().
-        synchronized (this) {
-            setEncoding();
-            multi = new ServletMultipartRequest(servletRequest, saveDir, maxSize);
-        }
-    }
-
-
-    public Enumeration getFileParameterNames() {
-        return multi.getFileParameterNames();
-    }
-
-    public String[] getContentType(String fieldName) {
-        return new String[]{multi.getContentType(fieldName)};
-    }
-
-    public File[] getFile(String fieldName) {
-        return new File[]{multi.getFile(fieldName)};
-    }
-
-    public String[] getFileNames(String fieldName) {
-
-        // TODO - not sure about this - is this the filename of the actual file or
-        // TODO - the uploaded filename as provided by the browser?
-        // TODO - Not sure what version of Pell this class uses as it doesn't seem to be the latest
-        return new String[]{multi.getFile(fieldName).getName()};
-    }
-
-    public String[] getFilesystemName(String fieldName) {
-        return new String[]{multi.getFileSystemName(fieldName)};
-    }
-
-    public String getParameter(String name) {
-        return multi.getURLParameter(name);
-    }
-
-    public Enumeration getParameterNames() {
-        return multi.getParameterNames();
-    }
-
-    public String[] getParameterValues(String name) {
-        Enumeration enumeration = multi.getURLParameters(name);
-
-        if (!enumeration.hasMoreElements()) {
-            return null;
-        }
-
-        List values = new ArrayList();
-
-        while (enumeration.hasMoreElements()) {
-            values.add(enumeration.nextElement());
-        }
-
-        return (String[]) values.toArray(new String[values.size()]);
-    }
-
-    public List getErrors() {
-        return Collections.EMPTY_LIST;
-    }
-
-    /**
-     * Sets the encoding for the uploaded params.  This needs to be set if you are using character sets other than
-     * ASCII.
-     * <p/>
-     * The encoding is looked up from the configuration setting 'struts.i18n.encoding'.  This is usually set in
-     * default.properties & struts.properties.
-     */
-    private static void setEncoding() {
-        String encoding = null;
-
-        try {
-            encoding = Settings.get(StrutsConstants.STRUTS_I18N_ENCODING);
-
-            if (encoding != null) {
-                //NB: This should never be called at the same time as the constructor for
-                //ServletMultiPartRequest, as it can cause problems.
-                //See javadoc for MultipartRequest.setEncoding()
-                http.utils.multipartrequest.MultipartRequest.setEncoding(encoding);
-            } else {
-                http.utils.multipartrequest.MultipartRequest.setEncoding("UTF-8");
-            }
-        } catch (IllegalArgumentException e) {
-            log.info("Could not get encoding property 'struts.i18n.encoding' for file upload.  Using system default");
-        } catch (UnsupportedEncodingException e) {
-            log.error("Encoding " + encoding + " is not a valid encoding.  Please check your struts.properties file.");
-        }
-    }
-}
diff --git a/trunk/plugins/plexus/pom.xml b/trunk/plugins/plexus/pom.xml
deleted file mode 100644
index dd8a678..0000000
--- a/trunk/plugins/plexus/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-plexus-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 Plexus Plugin</name>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
-            <version>1.0-alpha-10-SNAPSHOT</version>
-            <optional>true</optional>
-        </dependency>
-   </dependencies>
-</project>
diff --git a/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusFilter.java b/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusFilter.java
deleted file mode 100644
index fb4e060..0000000
--- a/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusFilter.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.plexus;
-
-import java.io.IOException;
-import java.util.Collections;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.plexus.PlexusContainer;
-
-/**
- * Creates a plexus container for the application, session, and request
- */
-public class PlexusFilter implements Filter {
-    private static final Log log = LogFactory.getLog(PlexusObjectFactory.class);
-    private static final String CHILD_CONTAINER_NAME = "request";
-
-    private static boolean loaded = false;
-
-    private ServletContext ctx;
-
-    /**
-     * @return Returns if the container is loaded.
-     */
-    public static boolean isLoaded() {
-        return loaded;
-    }
-
-    /* (non-Javadoc)
-     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
-     */
-    public void init(FilterConfig filterConfig) throws ServletException {
-        ctx = filterConfig.getServletContext();
-        loaded = true;
-    }
-
-    /* (non-Javadoc)
-     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
-     */
-    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
-        PlexusContainer child = null;
-        try {
-            try {
-                HttpServletRequest request = (HttpServletRequest) req;
-                HttpSession session = request.getSession(false);
-                PlexusContainer parent;
-                if (session != null) {
-                    parent = (PlexusContainer) session.getAttribute(PlexusLifecycleListener.KEY);
-                } else {
-                    parent = (PlexusContainer) ctx.getAttribute(PlexusLifecycleListener.KEY);
-                }
-
-                if (parent.hasChildContainer(CHILD_CONTAINER_NAME)) {
-                    log.warn("Plexus container (scope: request) alredy exist.");
-                    child = parent.getChildContainer(CHILD_CONTAINER_NAME);
-                } else {
-                    child = parent.createChildContainer(CHILD_CONTAINER_NAME, Collections.EMPTY_LIST, Collections.EMPTY_MAP);
-                    PlexusUtils.configure(child, "plexus-request.xml");
-                    child.initialize();
-                    child.start();
-                }
-                PlexusThreadLocal.setPlexusContainer(child);
-            } catch (Exception e) {
-                log.error("Error initializing plexus container (scope: request)", e);
-            }
-
-            chain.doFilter(req, res);
-        }
-        finally {
-            try {
-                if (child != null) {
-                    child.dispose();
-                }
-                PlexusThreadLocal.setPlexusContainer(null);
-            } catch (Exception e) {
-                log.error("Error disposing plexus container (scope: request)", e);
-            }
-        }
-    }
-
-    /* (non-Javadoc)
-     * @see javax.servlet.Filter#destroy()
-     */
-    public void destroy() {
-    }
-}
diff --git a/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusLifecycleListener.java b/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusLifecycleListener.java
deleted file mode 100644
index 90aea4c..0000000
--- a/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusLifecycleListener.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.plexus;
-
-import java.util.Collections;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.plexus.DefaultPlexusContainer;
-import org.codehaus.plexus.PlexusContainer;
-
-/**
- * Manages the Plexus lifecycle for the servlet and session contexts
- */
-public class PlexusLifecycleListener implements ServletContextListener, HttpSessionListener {
-    private static final Log log = LogFactory.getLog(PlexusObjectFactory.class);
-
-    private static boolean loaded = false;
-    public static final String KEY = "struts.plexus.container";
-
-    /**
-     * @return Returns if the container is loaded.
-     */
-    public static boolean isLoaded() {
-        return loaded;
-    }
-
-    /* (non-Javadoc)
-     * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
-     */
-    public void contextInitialized(ServletContextEvent servletContextEvent) {
-        loaded = true;
-
-        try {
-            PlexusContainer pc = new DefaultPlexusContainer();
-            PlexusUtils.configure(pc, "plexus-application.xml");
-            ServletContext ctx = servletContextEvent.getServletContext();
-            ctx.setAttribute(KEY, pc);
-
-            pc.initialize();
-            pc.start();
-        } catch (Exception e) {
-            log.error("Error initializing plexus container (scope: application)", e);
-        }
-    }
-
-    /* (non-Javadoc)
-     * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
-     */
-    public void contextDestroyed(ServletContextEvent servletContextEvent) {
-        try {
-            ServletContext ctx = servletContextEvent.getServletContext();
-            PlexusContainer pc = (PlexusContainer) ctx.getAttribute(KEY);
-            pc.dispose();
-        } catch (Exception e) {
-            log.error("Error disposing plexus container (scope: application)", e);
-        }
-    }
-
-    /* (non-Javadoc)
-     * @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
-     */
-    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
-        try {
-            HttpSession session = httpSessionEvent.getSession();
-            ServletContext ctx = session.getServletContext();
-            PlexusContainer parent = (PlexusContainer) ctx.getAttribute(KEY);
-            PlexusContainer child = parent.createChildContainer("session", Collections.EMPTY_LIST, Collections.EMPTY_MAP);
-            session.setAttribute(KEY, child);
-            PlexusUtils.configure(child, "plexus-session.xml");
-            child.initialize();
-            child.start();
-        } catch (Exception e) {
-            log.error("Error initializing plexus container (scope: session)", e);
-        }
-    }
-
-    /* (non-Javadoc)
-     * @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent)
-     */
-    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
-        try {
-            HttpSession session = httpSessionEvent.getSession();
-            PlexusContainer child = (PlexusContainer) session.getAttribute(KEY);
-            child.dispose();
-        } catch (Exception e) {
-            log.error("Error initializing plexus container (scope: session)", e);
-        }
-    }
-}
diff --git a/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusObjectFactory.java b/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusObjectFactory.java
deleted file mode 100644
index 3fc478f..0000000
--- a/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusObjectFactory.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.plexus;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.util.ObjectFactoryInitializable;
-import org.codehaus.plexus.PlexusContainer;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.InterceptorConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-import com.opensymphony.xwork2.util.OgnlUtil;
-import com.opensymphony.xwork2.validator.Validator;
-
-/**
- * Plexus integartion. You need three optional files: plexus-request.xml, plexus-session.xml, and
- * plexus-application.xml.
- * <p/>
- * The syntax of these files is:
- * <p/>
- * <pre>
- * &lt;plexus&gt;
- * &lt;components&gt;
- *  &lt;component&gt;
- *      &lt;role&gt;com.acme.MyBean&lt;/role&gt;
- *      &lt;implementation&gt;com.acme.MyBean|com.acme.MyBeanImpl&lt;/implementation&gt;
- *      &lt;componentComposer&gt;field|setter|?&lt;/componentComposer&gt;
- *      &lt;requirements&gt;
- *          &lt;requirement&gt;
- *              &lt;role&gt;com.acme.MyOtherBean&lt;/role&gt;
- *          &lt;/requirement&gt;
- *      &lt;/requirements&gt;
- *      &lt;configuration&gt;
- *          &lt;foo&gt;123&lt;/foo&gt;
- *          &lt;bar&gt;hello, world&lt;/bar&gt;
- *      &lt;/configuration&gt;
- *      &lt;/component&gt;
- *  &lt;/components&gt;
- * &lt;/plexus&gt;
- * </pre>
- *
- * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
- */
-public class PlexusObjectFactory extends ObjectFactory implements ObjectFactoryInitializable {
-    private static final Log log = LogFactory.getLog(PlexusObjectFactory.class);
-
-    private static final String PLEXUS_COMPONENT_TYPE = "plexus.component.type";
-
-    private PlexusContainer base;
-
-    /* (non-Javadoc)
-     * @see org.apache.struts2.util.ObjectFactoryInitializable#init(javax.servlet.ServletContext)
-     */
-    public void init(ServletContext servletContext) {
-        if (!PlexusLifecycleListener.isLoaded() || !PlexusFilter.isLoaded()) {
-            // uh oh! looks like the lifecycle listener wasn't installed. Let's inform the user
-            String message = "********** FATAL ERROR STARTING UP PLEXUS-STRUTS INTEGRATION **********\n" +
-                    "Looks like the Plexus listener was not configured for your web app! \n" +
-                    "You need to add the following to web.xml: \n" +
-                    "\n" +
-                    "    <!-- this should be before the Struts filter -->\n" +
-                    "    <filter>\n" +
-                    "        <filter-name>plexus</filter-name>\n" +
-                    "        <filter-class>org.apache.struts2.plexus.PlexusFilter</filter-class>\n" +
-                    "    </filter>\n" +
-                    "\n" +
-                    "...\n" +
-                    "\n" +
-                    "    <!-- this should be before the Struts filter -->\n" +
-                    "    <filter-mapping>\n" +
-                    "        <filter-name>plexus</filter-name>\n" +
-                    "        <url-pattern>/*</url-pattern>\n" +
-                    "    </filter-mapping>\n" +
-                    "\n" +
-                    "...\n" +
-                    "\n" +
-                    "    <listener>\n" +
-                    "        <listener-class>org.apache.struts2.plexus.PlexusLifecycleListener</listener-class>\n" +
-                    "    </listener>";
-            log.fatal(message);
-            return;
-        }
-
-        base = (PlexusContainer) servletContext.getAttribute(PlexusLifecycleListener.KEY);
-    }
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.ObjectFactory#buildAction(java.lang.String, java.lang.String, com.opensymphony.xwork2.config.entities.ActionConfig, java.util.Map)
-     */
-    public Object buildAction(String actionName, String namespace, ActionConfig config, Map extraContext)
-            throws Exception {
-        if (extraContext == null) {
-            extraContext = new HashMap();
-        }
-
-        extraContext.put(PLEXUS_COMPONENT_TYPE, Action.class.getName());
-
-        return super.buildAction(actionName, namespace, config, extraContext);
-    }
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.ObjectFactory#buildInterceptor(com.opensymphony.xwork2.config.entities.InterceptorConfig, java.util.Map)
-     */
-    public Interceptor buildInterceptor(InterceptorConfig interceptorConfig, Map interceptorRefParams)
-            throws ConfigurationException {
-        String interceptorClassName = interceptorConfig.getClassName();
-        Map thisInterceptorClassParams = interceptorConfig.getParams();
-        Map params = (thisInterceptorClassParams == null) ? new HashMap() : new HashMap(thisInterceptorClassParams);
-        params.putAll(interceptorRefParams);
-
-        String message;
-        Throwable cause;
-
-        try {
-            Map extraContext = new HashMap();
-            extraContext.put(PLEXUS_COMPONENT_TYPE, Interceptor.class.getName());
-            Interceptor interceptor = (Interceptor) buildBean(interceptorClassName, extraContext);
-            OgnlUtil.setProperties(params, interceptor);
-            interceptor.init();
-
-            return interceptor;
-        }
-        catch (InstantiationException e) {
-            cause = e;
-            message = "Unable to instantiate an instance of Interceptor class [" + interceptorClassName + "].";
-        }
-        catch (IllegalAccessException e) {
-            cause = e;
-            message = "IllegalAccessException while attempting to instantiate an instance of Interceptor class [" + interceptorClassName + "].";
-        }
-        catch (ClassCastException e) {
-            cause = e;
-            message = "Class [" + interceptorClassName + "] does not implement com.opensymphony.xwork2.interceptor.Interceptor";
-        }
-        catch (Exception e) {
-            cause = e;
-            message = "Caught Exception while registering Interceptor class " + interceptorClassName;
-        }
-        catch (NoClassDefFoundError e) {
-            cause = e;
-            message = "Could not load class " + interceptorClassName + ". Perhaps it exists but certain dependencies are not available?";
-        }
-
-        throw new ConfigurationException(message, cause);
-    }
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.ObjectFactory#buildResult(com.opensymphony.xwork2.config.entities.ResultConfig, java.util.Map)
-     */
-    public Result buildResult(ResultConfig resultConfig, Map extraContext)
-            throws Exception {
-        if (extraContext == null) {
-            extraContext = new HashMap();
-        }
-
-        extraContext.put(PLEXUS_COMPONENT_TYPE, Result.class.getName());
-
-        return super.buildResult(resultConfig, extraContext);
-    }
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.ObjectFactory#buildValidator(java.lang.String, java.util.Map, java.util.Map)
-     */
-    public Validator buildValidator(String className, Map params, Map extraContext)
-            throws Exception {
-        Map context = new HashMap();
-        context.put(PLEXUS_COMPONENT_TYPE, Validator.class.getName());
-        Validator validator = (Validator) buildBean(className, context);
-        OgnlUtil.setProperties(params, validator);
-
-        return validator;
-    }
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.ObjectFactory#buildBean(java.lang.Class, java.util.Map)
-     */
-    public Object buildBean(Class clazz, Map extraContext)
-            throws Exception {
-        try {
-            return lookup(clazz.getName(), extraContext);
-        }
-        catch (Exception e) {
-            if (extraContext != null) {
-                String type = (String) extraContext.get(PLEXUS_COMPONENT_TYPE);
-
-                if (type != null) {
-                    return lookup(type, clazz.getName(), extraContext);
-                }
-            }
-
-            throw e;
-        }
-    }
-
-    /* (non-Javadoc)
-     * @see com.opensymphony.xwork2.ObjectFactory#getClassInstance(java.lang.String)
-     */
-    public Class getClassInstance(String className)
-            throws ClassNotFoundException {
-        PlexusContainer pc = PlexusThreadLocal.getPlexusContainer();
-
-        if (pc == null) {
-            pc = base;
-        }
-
-        try {
-            return pc.lookup(className).getClass();
-        }
-        catch (Exception e1) {
-            try {
-                return pc.lookup(Action.class.getName(), className).getClass();
-            }
-            catch (Exception e2) {
-                try {
-                    return pc.lookup(Interceptor.class.getName(), className).getClass();
-                }
-                catch (Exception e3) {
-                    try {
-                        return pc.lookup(Validator.class.getName(), className).getClass();
-                    }
-                    catch (Exception e4) {
-                        try {
-                            return pc.lookup(Result.class.getName(), className).getClass();
-                        }
-                        catch (Exception e5) {
-                            return super.getClassInstance(className);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Looks up an object
-     * 
-     * @param role The role name
-     * @param extraContext The extra context
-     * @return The object
-     * @throws Exception If the lookup fails
-     */
-    private Object lookup(String role, Map extraContext)
-            throws Exception {
-        return lookup(role, null, extraContext);
-    }
-
-    /**
-     * Looks up an object
-     * 
-     * @param role The role name
-     * @param roleHint The role hint
-     * @param extraContext The extra context
-     * @return The object
-     * @throws Exception If the lookup fails
-     */
-    private Object lookup(String role, String roleHint, Map extraContext)
-            throws Exception {
-        PlexusContainer pc = PlexusThreadLocal.getPlexusContainer();
-
-        if (pc == null) {
-            pc = base;
-        }
-
-        try {
-            return pc.lookup(role, roleHint);
-        }
-        catch (Exception e) {
-            log.debug("Can't load component (" + role + "/" + roleHint + ") with plexus, try now with struts.", e);
-            Object o = super.buildBean(super.getClassInstance(role), extraContext);
-            pc.autowire(o);
-            return o;
-        }
-    }
-}
diff --git a/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusThreadLocal.java b/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusThreadLocal.java
deleted file mode 100644
index 196e7c1..0000000
--- a/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusThreadLocal.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.plexus;
-
-import org.codehaus.plexus.PlexusContainer;
-
-/**
- * Stores and retrieves the plexus container in the thread
- */
-public class PlexusThreadLocal {
-    private static ThreadLocal<PlexusContainer> ptl = new ThreadLocal<PlexusContainer>();
-
-    /**
-     * @param pc The plexus container for this thread
-     */
-    public static void setPlexusContainer(PlexusContainer pc) {
-        ptl.set(pc);
-    }
-
-    /**
-     * @return The plexus container for this thread
-     */
-    public static PlexusContainer getPlexusContainer() {
-        return ptl.get();
-    }
-}
diff --git a/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusUtils.java b/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusUtils.java
deleted file mode 100644
index 45d3629..0000000
--- a/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusUtils.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.plexus;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.configuration.PlexusConfigurationResourceException;
-
-/**
- * Utility methods for dealing with Plexus
- */
-public class PlexusUtils {
-    private static final Log log = LogFactory.getLog(PlexusObjectFactory.class);
-
-    /**
-     * Configures the container with the configuration file
-     * 
-     * @param pc The plexus container
-     * @param file The file path
-     * @throws PlexusConfigurationResourceException If the plexus configuration can't be loaded
-     */
-    public static void configure(PlexusContainer pc, String file) throws PlexusConfigurationResourceException {
-        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(file);
-        if (is == null) {
-            log.info("Could not find " + file + ", skipping");
-            is = new ByteArrayInputStream("<plexus><components></components></plexus>".getBytes());
-        }
-        pc.setConfigurationResource(new InputStreamReader(is));
-    }
-}
diff --git a/trunk/plugins/pom.xml b/trunk/plugins/pom.xml
deleted file mode 100644
index fbe6a76..0000000
--- a/trunk/plugins/pom.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-parent</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-plugins</artifactId>
-    <packaging>pom</packaging>
-    <name>Struts Plugins</name>
-    <modules>
-        <module>config-browser</module>
-        <module>jasperreports</module>
-        <module>jfreechart</module>
-        <module>jsf</module>
-        <module>pell-multipart</module>
-        <module>plexus</module>
-        <module>quickstart</module>
-        <module>struts1</module>
-        <module>sitegraph</module>
-        <module>sitemesh</module>
-        <module>tiles</module>
-    </modules>
-    
-    <dependencies>
-
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-core</artifactId>
-            <version>${pom.version}</version>
-        </dependency>
-
-        <!-- Test dependencies -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>compile</scope>
-            <version>3.8.1</version>
-            <!-- has to be compile for StrutsTestCase, which is part of the base package so others can write unit tests -->
-            <optional>true</optional>
-        </dependency>
-
-
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-
-
-    </dependencies>
-    
-</project>
diff --git a/trunk/plugins/quickstart/pom.xml b/trunk/plugins/quickstart/pom.xml
deleted file mode 100644
index 058025d..0000000
--- a/trunk/plugins/quickstart/pom.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-quickstart-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 Quickstart Plugin</name>
-    
-    <dependencies>
-
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>jsp-api</artifactId>
-            <version>2.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- Quickstart -->
-        <dependency>
-            <groupId>jetty</groupId>
-            <artifactId>org.mortbay.jetty</artifactId>
-            <version>5.1.4</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>eclipse</groupId>
-            <artifactId>jdtcore</artifactId>
-            <version>3.1.0</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>ant</groupId>
-            <artifactId>ant</artifactId>
-            <version>1.6.5</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>tomcat</groupId>
-            <artifactId>jasper-compiler</artifactId>
-            <version>5.5.12</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>tomcat</groupId>
-            <artifactId>jasper-runtime</artifactId>
-            <version>5.5.12</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>tomcat</groupId>
-            <artifactId>jasper-compiler-jdt</artifactId>
-            <version>5.5.12</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-el</groupId>
-            <artifactId>commons-el</artifactId>
-            <version>1.0</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>1.0</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.1</version>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- QuickStart -->
-        <dependency>
-            <groupId>xstream</groupId>
-            <artifactId>xstream</artifactId>
-            <version>1.1.2</version>
-            <optional>true</optional>
-        </dependency>
-
-       <dependency>
-            <groupId>commons-digester</groupId>
-            <artifactId>commons-digester</artifactId>
-            <version>1.7</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.9</version>
-            <scope>test</scope>
-        </dependency>
-
-        <!-- Test dependencies -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-            <version>3.8.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>1.2.8</version>
-            <scope>test</scope>
-        </dependency>
-
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-mock</artifactId>
-            <version>1.2.8</version>
-            <scope>test</scope>
-        </dependency>
- 
-
-    </dependencies>
-</project>
diff --git a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/Main.java b/trunk/plugins/quickstart/src/main/java/org/apache/struts2/Main.java
deleted file mode 100644
index 4621c58..0000000
--- a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/Main.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Struts comes with various related tools included in the struts-core-VERSION.jar file. You can access these
- * tools by simply unpacking the Struts distribution and running <b>java -jar struts-core-VERSION.jar</b>.
- * Struts will automatically include all jars in the same directory as the struts-core-VERSION.jar file as well as all
- * jars in the <i>lib</i> directory. This means you can invoke these tools either from within the standard directory
- * structure found in the Struts distribution, or from within your WEB-INF/lib directory.
- *
- * <p/> You can access the help information for these tools by simply running the jar without any arguments.
- *
- * <!-- END SNIPPET: javadoc -->
- */
-public class Main {
-    public static void main(String[] args) {
-        if (args.length == 0) {
-            System.out.println("Usage:");
-            System.out.println("  java -jar struts-toolbox.jar [command] (optional command args)");
-            System.out.println("");
-            System.out.println("Where [command] is one of the following:");
-            System.out.println("  quickstart");
-            System.out.println("  quickstart:xxx");
-            System.out.println("");
-            System.out.println("Execute the commands for additional usage instructions.");
-            System.out.println("Note: the *:xxx commands are just shortcuts for ");
-            System.out.println("      running the command on a webapp in the apps dir.");
-            System.out.println("      For example, 'quickstart:sandbox' will start QuickStart");
-            System.out.println("      automatically for the webapp 'sandbox'.");
-            return;
-        }
-
-        // check the JDK version
-        String version = System.getProperty("java.version");
-        boolean jdk15 = version.indexOf("1.5") != -1;
-
-        String javaHome = System.getProperty("java.home");
-        ArrayList<URL> urls = new ArrayList<URL>();
-        try {
-            findJars(new File("lib"), urls);
-
-            // use all the jars in the current that aren't the src jar
-            File wd = new File(".");
-            File[] jars = wd.listFiles(new FilenameFilter() {
-                public boolean accept(File dir, String name) {
-                    return name.endsWith(".jar") && name.indexOf("-src.") == -1;
-                }
-            });
-            for (int i = 0; i < jars.length; i++) {
-                File jar = jars[i];
-                urls.add(jar.toURL());
-            }
-
-            // ... but there might not be any (ie: we're in development in IDEA), so use this as backup
-            urls.add(new File(System.getProperty("struts.classes", "build/java")).toURL());
-            urls.add(new File(System.getProperty("xwork.classes", "../xwork/build/java/")).toURL());
-
-            // load tools.jar from JAVA_HOME
-            File tools = new File(javaHome, "lib/tools.jar");
-            if (!tools.exists()) {
-                // hmm, not there, how about java.home?
-                tools = new File(javaHome, "../lib/tools.jar");
-            }
-            if (!tools.exists()) {
-                // try the OS X common path
-                tools = new File(javaHome, "../Classes/classes.jar");
-            }
-            if (!tools.exists()) {
-                // try the other OS X common path
-                tools = new File(javaHome, "../Classes/classes.jar");
-            }
-            if (!tools.exists()) {
-                // did the user specify it by hand?
-                String prop = System.getProperty("tools");
-                if (prop != null) {
-                    tools = new File(prop);
-                }
-            }
-            if (!tools.exists()) {
-                System.out.println("Error: Could not find tools.jar! Please do one of the following: ");
-                System.out.println("");
-                System.out.println("        - Use the JDK's JVM (ie: c:\\jdk1.5.0\\bin\\java)");
-                System.out.println("        - Specify JAVA_HOME to point to your JDK 1.5 home");
-                System.out.println("        - Specify a direct path to tools.jar via, as shown below:");
-                System.out.println("");
-                System.out.println("       java -Dtools=/path/to/tools.jar -jar struts.jar ...");
-                return;
-            }
-
-            // finally, add the verified tools.jar
-            urls.add(tools.toURL());
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-            System.out.println("Could not find URLs -- see stack trace.");
-        }
-
-        String command = args[0];
-        String[] programArgs = new String[args.length - 1];
-        System.arraycopy(args, 1, programArgs, 0, programArgs.length);
-        if (command.startsWith("quickstart:")) {
-            command = "quickstart";
-            String name = checkWebAppArgs(args);
-            programArgs = new String[]{"/" + name,
-                    "apps/" + name + "/src/main/webapp",
-                    "apps/" + name + "/src/main/java",
-                    "apps/" + name + "/src/main/resources"};
-        }
-
-        if (command.startsWith("sitegraph:")) {
-            command = "sitegraph";
-            String name = checkWebAppArgs(args);
-            programArgs = new String[]{"-config", "apps/" + name + "/src/webapp/WEB-INF/classes",
-                    "-views", "apps/" + name + "/src/webapp",
-                    "-output", "."};
-        }
-
-        if ("sitegraph".equals(command)) {
-            launch("org.apache.struts2.sitegraph.SiteGraph", programArgs, urls);
-        }
-    }
-
-    private static String checkWebAppArgs(String[] args) {
-        int colon = args[0].indexOf(':');
-        String name = null;
-        try {
-            name = args[0].substring(colon + 1);
-        } catch (Exception e) {
-            //this is OK to skip
-        }
-        if (name == null || name.equals("")) {
-            System.out.println("Error: you must specify the webapp you wish");
-            System.out.println("       to deploy. The webapp name must be the");
-            System.out.println("       name of the directory found in apps/.");
-            System.out.println("");
-            System.out.println("Example: java -jar struts-core-VERSION.jar quickstart:sandbox");
-            System.exit(1);
-        }
-
-        return name;
-    }
-
-    private static void launch(String program, String[] programArgs, List<URL> urls) {
-        Collections.reverse(urls);
-        URL[] urlArray = urls.toArray(new URL[urls.size()]);
-        URLClassLoader cl = new MainClassLoader(urlArray);
-        Thread.currentThread().setContextClassLoader(cl);
-        try {
-            Class clazz = cl.loadClass(program);
-            Method main = clazz.getDeclaredMethod("main", new Class[]{String[].class});
-            main.invoke(null, new Object[]{programArgs});
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private static void findJars(File file, ArrayList<URL> urls) throws MalformedURLException {
-        File[] files = file.listFiles();
-        if (files == null) {
-            return;
-        }
-
-        for (int i = 0; i < files.length; i++) {
-            File f = files[i];
-            if (f.isDirectory()) {
-                findJars(f, urls);
-            } else if (f.getName().endsWith(".jar")) {
-                if (isValid(f.getName())) {
-                    urls.add(f.toURL());
-                }
-            }
-        }
-    }
-
-    private static boolean isValid(String name) {
-        return !"dom.jar".equals(name);
-    }
-
-    /**
-     * Reverses the typical order of classloading to defer only to the parent if the current class loader can't be
-     * found. This is required to allow for the launcher to be embedded within struts.jar (otherwise the dependencies
-     * wouldn't be found by the system ClassLoader when invoking using "java -jar struts-core-VERSION.jar ...").
-     */
-    public static class MainClassLoader extends URLClassLoader {
-        public MainClassLoader(URL[] urls) {
-            super(urls);
-        }
-
-        public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
-            if (name.startsWith("org.xml.") || name.startsWith("org.w3c.")
-                    || name.startsWith("java.") || name.startsWith("javax.")
-                    || name.startsWith("sun.") || name.startsWith("com.sun.")) {
-                return super.loadClass(name, resolve);
-            }
-
-            ClassLoader parent = getParent();
-            // First, check if the class has already been loaded
-            Class c = findLoadedClass(name);
-            if (c == null) {
-                try {
-                    c = findClass(name);
-                } catch (Throwable t) {
-                    // If still not found, only then ask the parent
-                    c = parent.loadClass(name);
-                }
-            }
-            if (resolve) {
-                resolveClass(c);
-            }
-
-            return c;
-        }
-    }
-}
diff --git a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/Configuration.java b/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/Configuration.java
deleted file mode 100644
index 2ce54cf..0000000
--- a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/Configuration.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.quickstart;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.apache.commons.collections.MultiHashMap;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-import com.thoughtworks.xstream.XStream;
-
-/**
- * Configuration for the QuickStart program.
- */
-public class Configuration implements Serializable {
-
-	private static final long serialVersionUID = 9159115401614443449L;
-
-	String ideaConfig;
-    String extendsConfig;
-    String resolver;
-    Integer port;
-    String context;
-    List libs;
-    List classDirs;
-    List sources;
-    List webDirs;
-    Map mappings;
-    List pathPriority;
-
-    public String getIdeaConfig() {
-        return ideaConfig;
-    }
-
-    public void setIdeaConfig(String ideaConfig) {
-        this.ideaConfig = ideaConfig;
-    }
-
-    public String getExtendsConfig() {
-        return extendsConfig;
-    }
-
-    public void setExtendsConfig(String extendsConfig) {
-        this.extendsConfig = extendsConfig;
-    }
-
-    public String getResolver() {
-        return resolver;
-    }
-
-    public void setResolver(String resolver) {
-        this.resolver = resolver;
-    }
-
-    public List getLibs() {
-        return libs;
-    }
-
-    public void setLibs(List libs) {
-        this.libs = libs;
-    }
-
-    public List getClassDirs() {
-        return classDirs;
-    }
-
-    public void setClassDirs(List classDirs) {
-        this.classDirs = classDirs;
-    }
-
-    public List getSources() {
-        return sources;
-    }
-
-    public void setSources(List sources) {
-        this.sources = sources;
-    }
-
-    public Map getMappings() {
-        return mappings;
-    }
-
-    public List getPathPriority() {
-        return pathPriority;
-    }
-
-    public List getWebDirs() {
-        return webDirs;
-    }
-
-    public void setWebDirs(List webDirs) {
-        this.webDirs = webDirs;
-    }
-
-    public Integer getPort() {
-        return port;
-    }
-
-    public void setPort(Integer port) {
-        this.port = port;
-    }
-
-    public String getContext() {
-        return context;
-    }
-
-    public void setContext(String context) {
-        this.context = context;
-    }
-
-    public void resolveDirs(String wd) {
-        if (ideaConfig != null) {
-            String[] paths = ideaConfig.split(",");
-            for (String path : paths) {
-                String full = resolveDir(path, wd);
-
-                try {
-                    DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-                    Document doc = db.parse(full);
-                    NodeList components = doc.getElementsByTagName("root");
-                    List jars = new ArrayList();
-                    for (int i = 0; i < components.getLength(); i++) {
-                        Element e = (Element) components.item(i);
-                        String value = e.getAttribute("url");
-                        if (value != null && value.startsWith("jar://") && value.endsWith(".jar!/")) {
-                            value = value.substring(6, value.length() - 2);
-                            if (value.startsWith("$MODULE_DIR$")) {
-                                value = value.substring(13);
-                            }
-                            jars.add(value);
-                        }
-                    }
-
-                    if (this.libs != null) {
-                        this.libs.addAll(jars);
-                    } else {
-                        this.libs = jars;
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-        resolve(this.libs, wd);
-        resolve(this.classDirs, wd);
-        resolve(this.sources, wd);
-
-        // now resolve the web dirs
-        for (Iterator iterator = webDirs.iterator(); iterator.hasNext();) {
-            Mapping mapping = (Mapping) iterator.next();
-            String path = mapping.getPath();
-            String dir = mapping.getDir();
-            dir = resolveDir(dir, wd);
-
-            // if the ${dir}/WEB-INF/classes dir exists and isn't already added to the classDirs, let's do it
-            // ... but make sure we put it at the front (to obey the class loading behaviors)
-            File classDir = new File(dir, "WEB-INF/classes");
-            if (classDir.exists()) {
-                String fullClassDir = getFullPath(classDir);
-                if (this.classDirs == null) {
-                    this.classDirs = new ArrayList();
-                }
-
-                if (!classDirs.contains(fullClassDir)) {
-                    classDirs.add(0, fullClassDir);
-                }
-            }
-
-            if (this.mappings == null) {
-                this.mappings = new MultiHashMap();
-                this.pathPriority = new ArrayList();
-            }
-
-            if (!this.pathPriority.contains(path)) {
-                this.pathPriority.add(path);
-            }
-            this.mappings.put(path, dir);
-        }
-    }
-
-    private void resolve(List list, String wd) {
-        if (list != null) {
-            for (int i = 0; i < list.size(); i++) {
-                String s = (String) list.get(i);
-                list.set(i, resolveDir(s, wd));
-            }
-        }
-    }
-
-    private String resolveDir(String dir, String wd) {
-        File file = new File(wd, dir);
-        if (!file.exists() && new File(dir).exists()) {
-            file = new File(dir);
-        }
-
-        return getFullPath(file);
-    }
-
-    private String getFullPath(File file) {
-        try {
-            return file.getCanonicalPath();
-        } catch (IOException e) {
-            return file.getAbsolutePath();
-        }
-    }
-
-    public void resolveExtensions(String wd, XStream xstream) throws FileNotFoundException {
-        if (extendsConfig != null) {
-            File config = new File(wd, extendsConfig);
-            Configuration c = (Configuration) xstream.fromXML(new FileReader(config));
-            c.resolveDirs(config.getParent());
-            c.resolveExtensions(config.getParent(), xstream);
-
-            // now copy over the props
-            if (c.getResolver() != null) {
-                this.resolver = c.getResolver();
-            }
-
-            if (port == null) {
-                this.port = c.getPort();
-            }
-
-            if (c.getContext() != null) {
-                this.context = c.getContext();
-            }
-
-            if (c.getLibs() != null) {
-                if (this.libs != null) {
-                    this.libs.addAll(c.getLibs());
-                } else {
-                    this.libs = c.getLibs();
-                }
-            }
-
-            if (c.getClassDirs() != null) {
-                if (this.classDirs != null) {
-                    this.classDirs.addAll(c.getClassDirs());
-                } else {
-                    this.classDirs = c.getClassDirs();
-                }
-            }
-
-            if (c.getSources() != null) {
-                if (this.sources != null) {
-                    this.sources.addAll(c.getSources());
-                } else {
-                    this.sources = c.getSources();
-                }
-            }
-
-            for (Iterator iterator = c.getMappings().entrySet().iterator(); iterator.hasNext();) {
-                Map.Entry entry = (Map.Entry) iterator.next();
-                List list = (List) this.mappings.get(entry.getKey());
-                if (list != null) {
-                    list.addAll((List) entry.getValue());
-                } else {
-                    this.mappings.put(entry.getKey(), (List) entry.getValue());
-                }
-            }
-
-            // add only new paths
-            for (Iterator iterator = c.getPathPriority().iterator(); iterator.hasNext();) {
-                String path = (String) iterator.next();
-                if (!this.pathPriority.contains(path)) {
-                    this.pathPriority.add(path);
-                }
-            }
-        }
-    }
-
-    public boolean validate() {
-        boolean error = false;
-
-        if (port == null) {
-            System.out.println("Port must be greater than 0");
-            error = true;
-        }
-
-        if (!context.startsWith("/")) {
-            System.out.println("Context must start with /");
-            error = true;
-        }
-
-
-        if (verifyList("Library", libs, false)) {
-            error = true;
-        }
-
-        if (verifyList("ClassDir", classDirs, false)) {
-            error = true;
-        }
-
-        if (verifyList("Sources", sources, true)) {
-            error = true;
-        }
-
-        if (verifyMap("WebApp", mappings)) {
-            error = true;
-        }
-
-        return error;
-    }
-
-    private boolean verifyMap(String name, Map map) {
-        boolean error = false;
-        if (map == null || map.size() == 0) {
-            System.out.println(name + " must be specified");
-            return true;
-        }
-
-        for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            List list = (List) entry.getValue();
-            verifyList(name, list, false);
-        }
-
-        return error;
-    }
-
-    private boolean verifyList(String name, List list, boolean allowEmpty) {
-        boolean error = false;
-        if (!allowEmpty) {
-            if (list == null || list.size() == 0) {
-                System.out.println(name + " must be specified");
-                return true;
-            }
-        }
-
-        if (list != null) {
-            for (Iterator iterator = list.iterator(); iterator.hasNext();) {
-                String s = (String) iterator.next();
-                if (!new File(s).exists()) {
-                    System.out.println(name + " doesn't exist: " + s);
-                    error = true;
-                }
-            }
-        }
-
-        return error;
-    }
-}
diff --git a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/JettyServer.java b/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/JettyServer.java
deleted file mode 100644
index 3f19c84..0000000
--- a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/JettyServer.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.quickstart;
-
-import java.io.File;
-import java.util.List;
-import java.util.Map;
-
-import org.mortbay.http.SocketListener;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.servlet.WebApplicationContext;
-
-/**
- * To start a Jetty server used by the QuickStart application.
- */
-public class JettyServer {
-    /**
-     * The system property name used to specify a directory of webapps.
-     */
-    public static final String WEBAPPS_DIR_PROPERTY = "webapps.dir";
-
-    public static void startServer(int port, String context, List pathPriority, Map paths, String resolver) throws Exception {
-        try {
-            Server server = new Server();
-            SocketListener socketListener = new SocketListener();
-            socketListener.setPort(port);
-            server.addListener(socketListener);
-
-            WebApplicationContext ctx;
-            if (resolver == null) {
-                ctx = new MultiWebApplicationContext(pathPriority, paths);
-            } else {
-                ctx = new MultiWebApplicationContext(pathPriority, paths, resolver);
-            }
-            ctx.setClassLoader(Thread.currentThread().getContextClassLoader());
-            ctx.setContextPath(context);
-            server.addContext(null, ctx);
-
-            // Add in extra webapps dir (see WW-1387)
-            String webappsDir = System.getProperty(WEBAPPS_DIR_PROPERTY);
-            if (webappsDir != null && new File(webappsDir).exists()) {
-                server.addWebApplications(webappsDir);
-            }
-
-            server.start();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}
diff --git a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/Mapping.java b/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/Mapping.java
deleted file mode 100644
index 1bc2e7b..0000000
--- a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/Mapping.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.quickstart;
-
-/**
- * Used for mapping configuration for the QuickStart application.
- *
- */
-public class Mapping {
-    String path;
-    String dir;
-
-    public Mapping(String path, String dir) {
-        this.path = path;
-        this.dir = dir;
-    }
-
-    public Mapping() {
-    }
-
-    public String getPath() {
-        return path;
-    }
-
-    public void setPath(String path) {
-        this.path = path;
-    }
-
-    public String getDir() {
-        return dir;
-    }
-
-    public void setDir(String dir) {
-        this.dir = dir;
-    }
-}
diff --git a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/MultiDirClassLoader.java b/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/MultiDirClassLoader.java
deleted file mode 100644
index 98f709e..0000000
--- a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/MultiDirClassLoader.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.quickstart;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-
-/**
- * Integration with Jetty.
- *
- */
-public class MultiDirClassLoader extends URLClassLoader {
-    private ClassLoader parent;
-
-    public MultiDirClassLoader(String[] dirs, String[] cps, ClassLoader parent) throws MalformedURLException {
-        super(getAllURLs(dirs, cps), parent);
-        this.parent = parent;
-    }
-
-    public Class loadClass(String name) throws ClassNotFoundException {
-        Class aClass;
-
-        try {
-            aClass = parent.loadClass(name);
-            if (aClass != null) {
-                return aClass;
-            }
-        } catch (ClassNotFoundException e) {
-            // ok, keep trying
-        }
-
-        return super.loadClass(name);
-    }
-
-    public URL getResource(String name) {
-        URL url = findResource(name);
-        if (url == null && parent != null) {
-            url = parent.getResource(name);
-        }
-
-        return url;
-    }
-
-
-    private static URL[] getAllURLs(String[] dirs, String[] cps) throws MalformedURLException {
-        ArrayList urls = new ArrayList();
-
-        for (int i = 0; i < cps.length; i++) {
-            String cp = cps[i];
-            urls.add(new File(cp).toURL());
-        }
-
-        for (int i = 0; i < dirs.length; i++) {
-            String dir = dirs[i];
-            File file = new File(dir);
-            findJars(file, urls);
-        }
-
-        return (URL[]) urls.toArray(new URL[urls.size()]);
-    }
-
-    private static void findJars(File file, ArrayList fileList) throws MalformedURLException {
-        if (file.isDirectory()) {
-            File[] files = file.listFiles();
-            for (int i = 0; i < files.length; i++) {
-                File f = files[i];
-                findJars(f, fileList);
-            }
-        }
-        else if (file.getName().endsWith(".jar")) {
-            // Manually exclude the local license file so that it's possible to run
-            // clustering.
-            if (!file.getName().equals("tangosol-license-local.jar")) {
-                fileList.add(file.toURL());
-            }
-        }
-    }
-}
diff --git a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/MultiDirResource.java b/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/MultiDirResource.java
deleted file mode 100644
index d2c8710..0000000
--- a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/MultiDirResource.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.quickstart;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.mortbay.util.Resource;
-
-/**
- */
-public class MultiDirResource extends Resource {
-	
-	private static final long serialVersionUID = -7571068340424106599L;
-	
-	MultiWebApplicationContext ctx;
-    File[] files;
-    String uri;
-
-    public MultiDirResource(MultiWebApplicationContext ctx, String uri, List pathPriority, Map paths) {
-        this.ctx = ctx;
-        this.uri = uri;
-        ArrayList files = new ArrayList();
-        for (Iterator iterator = pathPriority.iterator(); iterator.hasNext();) {
-            String path = (String) iterator.next();
-            List dirs = (List) paths.get(path);
-
-            if (uri.startsWith(path) || (uri.equals("") && path.equals("/"))) {
-                for (Iterator iterator1 = dirs.iterator(); iterator1.hasNext();) {
-                    String s = (String) iterator1.next();
-
-                    if (uri.startsWith(path)) {
-                        // cut off the path from the start of the URI
-                        files.add(new File(s, uri.substring(path.length())));
-                    } else {
-                        files.add(new File(s, uri));
-                    }
-                }
-            }
-        }
-
-        this.files = (File[]) files.toArray(new File[files.size()]);
-    }
-
-    public void release() {
-    }
-
-    public boolean exists() {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    public boolean isDirectory() {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                return file.isDirectory();
-            }
-        }
-
-        return false;
-    }
-
-    public long lastModified() {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                return file.lastModified();
-            }
-        }
-
-        return 0;
-    }
-
-    public long length() {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                return file.length();
-            }
-        }
-
-        return 0;
-    }
-
-    public URL getURL() {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                try {
-                    return file.toURL();
-                } catch (MalformedURLException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-
-        return null;
-    }
-
-    public File getFile() throws IOException {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                return file;
-            }
-        }
-
-        return null;
-    }
-
-    public String getName() {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                return file.getName();
-            }
-        }
-
-        return null;
-    }
-
-    public InputStream getInputStream() throws IOException {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                return new FileInputStream(file);
-            }
-        }
-
-        return null;
-    }
-
-    public OutputStream getOutputStream() throws IOException, SecurityException {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                return new FileOutputStream(file);
-            }
-        }
-
-        return null;
-    }
-
-    public boolean delete() throws SecurityException {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                return file.delete();
-            }
-        }
-
-        return false;
-    }
-
-    public boolean renameTo(Resource resource) throws SecurityException {
-        return false;
-    }
-
-    public String[] list() {
-        HashSet set = new HashSet();
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.exists()) {
-                String[] files = file.list();
-                for (int j = 0; j < files.length; j++) {
-                    String s = files[j];
-                    set.add(s);
-                }
-            }
-        }
-
-        return (String[]) set.toArray(new String[set.size()]);
-    }
-
-    public Resource addPath(String string) throws IOException, MalformedURLException {
-        return ctx.newResolver(uri + string);
-    }
-}
diff --git a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/MultiWebApplicationContext.java b/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/MultiWebApplicationContext.java
deleted file mode 100644
index d262b0c..0000000
--- a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/MultiWebApplicationContext.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.quickstart;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.List;
-import java.util.Map;
-
-import org.mortbay.jetty.servlet.WebApplicationContext;
-import org.mortbay.util.FileResource;
-import org.mortbay.util.JarResource;
-import org.mortbay.util.Resource;
-
-/**
- */
-public class MultiWebApplicationContext extends WebApplicationContext {
-
-	private static final long serialVersionUID = -4732081314967099271L;
-
-	private List pathPriority;
-    private Map paths;
-    private Class resolver;
-
-    public MultiWebApplicationContext() {
-    }
-
-    public MultiWebApplicationContext(List pathPriority, Map paths) {
-        super(getFirstRoot(paths));
-        this.pathPriority = pathPriority;
-        this.paths = paths;
-    }
-
-    public MultiWebApplicationContext(List pathPriority, Map paths, String resolver) {
-        super(getFirstRoot(paths));
-        this.pathPriority = pathPriority;
-        this.paths = paths;
-        try {
-            this.resolver = loadClass(resolver, getClass());
-        } catch (ClassNotFoundException e) {
-            e.printStackTrace();
-        }
-    }
-
-    private static String getFirstRoot(Map paths) {
-        return (String) ((List) paths.get("/")).get(0);
-    }
-
-    public Resource getResource(String uriInContext) throws IOException {
-        if (uriInContext.startsWith("/WEB-INF/lib/")) {
-            String jar = uriInContext.substring("/WEB-INF/lib/".length());
-            ClassLoader parent = Thread.currentThread().getContextClassLoader();
-            while (parent != null) {
-                if (parent instanceof URLClassLoader) {
-                    URL[] urls = ((URLClassLoader) parent).getURLs();
-                    for (int i = 0; i < urls.length; i++) {
-                        URL url = urls[i];
-                        if (url.toExternalForm().endsWith(jar)) {
-                            return JarResource.newResource(url);
-                        }
-                    }
-                }
-
-                parent = parent.getParent();
-            }
-        }
-
-        // still haven't found what we're looking for?
-        // Alright, let's just hack this to work in IDEA
-        if (uriInContext.equals("/tags")) {
-            // we do this check to support both "quickstart:showcase" and "quickstart" (using quickstart.xml)
-            if (new File("../../core/src/main/resources/META-INF/tags.tld").exists()) {
-                return FileResource.newResource("../../core/src/main/resources/META-INF/tags.tld");
-            } else {
-                return FileResource.newResource("src/main/resources/META-INF/tags.tld");
-            }
-        }
-
-        MultiDirResource resource = newResolver(uriInContext);
-        if (resource.exists()) {
-            return resource;
-        }
-
-        String aliasedUri= getResourceAlias(uriInContext);
-        if (aliasedUri != null) {
-            return super.getResource(aliasedUri);
-        }
-
-        return resource;
-    }
-
-    public MultiDirResource newResolver(String uriInContext) {
-        if (resolver == null) {
-            return new MultiDirResource(this, uriInContext, pathPriority, paths);
-        } else {
-            try {
-                Constructor c = resolver.getDeclaredConstructor(new Class[]{
-                        MultiWebApplicationContext.class,
-                        String.class,
-                        List.class,
-                        Map.class,
-                });
-                return (MultiDirResource) c.newInstance(new Object[] {
-                        this,
-                        uriInContext,
-                        pathPriority,
-                        paths,
-                });
-            } catch (Exception e) {
-                e.printStackTrace();
-                return null;
-            }
-        }
-    }
-
-    public Resource getBaseResource() {
-        return newResolver("");
-    }
-
-    public static Class loadClass(String className, Class callingClass)
-            throws ClassNotFoundException {
-        try {
-            return Thread.currentThread().getContextClassLoader().loadClass(className);
-        }
-        catch (ClassNotFoundException e) {
-            try {
-                return Class.forName(className);
-            }
-            catch (ClassNotFoundException ex) {
-                try {
-                    return MultiWebApplicationContext.class.getClassLoader().loadClass(className);
-                }
-                catch (ClassNotFoundException exc) {
-                    return callingClass.getClassLoader().loadClass(className);
-                }
-
-            }
-        }
-    }
-}
diff --git a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/QuickStart.java b/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/QuickStart.java
deleted file mode 100644
index 38800bd..0000000
--- a/trunk/plugins/quickstart/src/main/java/org/apache/struts2/quickstart/QuickStart.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.quickstart;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.xml.DomDriver;
-
-/**
- * The QuickStart main program.
- *
- */
-public class QuickStart {
-    public static void main(String[] args) throws FileNotFoundException, MalformedURLException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
-        if (args.length != 3 && args.length != 0) {
-            System.err.println("QuickStart must be either invoked with three arguments or no arguments:");
-            System.err.println("[contextPath] [webapp] [sources]");
-            System.err.println("");
-            System.err.println("Ex: java -jar struts.jar \\");
-            System.err.println("    quickstart /sandbox sandbox/src/webapp sandbox/src/java");
-            System.err.println("");
-            System.err.println("OR");
-            System.err.println("");
-            System.err.println("Ex: java -jar struts.jar quickstart");
-            System.err.println(" Where a 'quickstart.xml' file exists in your working directory");
-            return;
-        }
-
-        Configuration c;
-        if (args.length == 0) {
-            XStream xstream = new XStream(new DomDriver());
-            xstream.alias("configuration", Configuration.class);
-            xstream.alias("extendsConfig", String.class);
-            xstream.alias("port", int.class);
-            xstream.alias("context", String.class);
-            xstream.alias("dir", String.class);
-            xstream.alias("path", String.class);
-            xstream.alias("webDir", Mapping.class);
-            File config = new File("quickstart.xml");
-            if (!config.exists()) {
-                // uh oh, time to stop
-                System.err.println("Could not find quickstart.xml!");
-                System.err.println("Tip: quickstart.xml must exist in your working directory");
-                System.err.println("");
-                System.err.println("Alternatively, if you your deployment is simple, try launching");
-                System.err.println("QuickStart using the simple command line options rather than");
-                System.err.println("Relying on quickstart.xml existing");
-                return;
-            }
-
-            c = (Configuration) xstream.fromXML(new FileReader(config));
-            c.resolveDirs(config.getParent());
-            c.resolveExtensions(config.getParent(), xstream);
-        } else {
-            c = new Configuration();
-            c.setContext(args[0]);
-            c.setPort(new Integer(8080));
-            ArrayList webDirs = new ArrayList();
-            webDirs.add(new Mapping("/", args[1]));
-            c.setWebDirs(webDirs);
-            ArrayList sources = new ArrayList();
-            sources.add(args[2]);
-            c.setSources(sources);
-            ArrayList classDirs = new ArrayList();
-            classDirs.add(args[1] + "/WEB-INF/classes");
-            classDirs.add(args[2]);
-            c.setClassDirs(classDirs);
-            ArrayList libs = new ArrayList();
-            libs.add("lib");
-            c.setLibs(libs);
-
-            c.resolveDirs(new File(".").getParent());
-        }
-
-        // validate the configuration
-        if (c.validate()) {
-            return;
-        }
-
-        // explain what is being executed
-        System.out.println("Launching Jetty with the following configuration:");
-        System.out.println("Jars/Directory of jars:");
-        for (Iterator iterator = c.getLibs().iterator(); iterator.hasNext();) {
-            String s = (String) iterator.next();
-            System.out.println("    " + s);
-        }
-        System.out.println("Directories of classes:");
-        for (Iterator iterator = c.getClassDirs().iterator(); iterator.hasNext();) {
-            String s = (String) iterator.next();
-            System.out.println("    " + s);
-        }
-        if (c.getSources() != null) {
-            System.out.println("Sources:");
-            for (Iterator iterator = c.getSources().iterator(); iterator.hasNext();) {
-                String s = (String) iterator.next();
-                System.out.println("    " + s);
-            }
-        }
-        System.out.println("WebApp directories:");
-        for (Iterator iterator = c.getMappings().entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            System.out.println(entry.getKey() + "  ->  " + entry.getValue());
-        }
-
-        // prepare the classloader
-        List libs = c.getLibs();
-        List classDirs = c.getClassDirs();
-        ClassLoader parent = new MultiDirClassLoader((String[]) libs.toArray(new String[libs.size()]),
-                (String[]) classDirs.toArray(new String[classDirs.size()]),
-                Thread.currentThread().getContextClassLoader());
-
-        if (c.getSources() != null) {
-            System.out.print("Automatic compiling of classes no longer supported.");
-        }
-        URLClassLoader url = new MyURLClassLoader(parent);
-        Thread.currentThread().setContextClassLoader(url);
-
-        Class clazz = url.loadClass("org.apache.struts2.quickstart.JettyServer");
-        Method method = clazz.getDeclaredMethod("startServer",
-                new Class[]{int.class, String.class, List.class, Map.class, String.class});
-        method.invoke(null, new Object[]{c.port, c.getContext(), c.getPathPriority(), c.getMappings(), c.getResolver()});
-
-        System.out.println("");
-        System.out.println("********************************************************");
-        System.out.println("Quick-started at http://localhost:" + c.getPort() + c.getContext());
-        System.out.println("You may now edit your Java classes and web files without");
-        System.out.println(" deploying or restarting.");
-        System.out.println("********************************************************");
-    }
-
-    static class MyURLClassLoader extends URLClassLoader {
-        private ClassLoader parent;
-
-        public MyURLClassLoader(ClassLoader parent) {
-            super(new URL[0], parent);
-            this.parent = parent;
-        }
-
-        public Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
-            if (name.startsWith("org.xml.") || name.startsWith("org.w3c.")
-                    || name.startsWith("java.") || name.startsWith("javax.")
-                    || name.startsWith("sun.") || name.startsWith("com.sun.")) {
-                return super.loadClass(name, resolve);
-            }
-
-            ClassLoader parent = getParent();
-            // First, check if the class has already been loaded
-            Class c = findLoadedClass(name);
-            if (c == null) {
-                try {
-                    c = findClass(name);
-                } catch (Throwable t) {
-                    // If still not found, only then ask the parent
-                    c = parent.loadClass(name);
-                }
-            }
-            if (resolve) {
-                resolveClass(c);
-            }
-
-            return c;
-        }
-
-        public URL getResource(String name) {
-            URL url = findResource(name);
-            if (url == null && parent != null) {
-                url = parent.getResource(name);
-            }
-
-            return url;
-        }
-    }
-}
diff --git a/trunk/plugins/sitegraph/pom.xml b/trunk/plugins/sitegraph/pom.xml
deleted file mode 100644
index df1ff53..0000000
--- a/trunk/plugins/sitegraph/pom.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-sitegraph-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 Sitegraph Plugin</name>
-    
-    <dependencies>
-
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>jsp-api</artifactId>
-            <version>2.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- Quickstart -->
-        <dependency>
-            <groupId>jetty</groupId>
-            <artifactId>org.mortbay.jetty</artifactId>
-            <version>5.1.4</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>eclipse</groupId>
-            <artifactId>jdtcore</artifactId>
-            <version>3.1.0</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>ant</groupId>
-            <artifactId>ant</artifactId>
-            <version>1.6.5</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>tomcat</groupId>
-            <artifactId>jasper-compiler</artifactId>
-            <version>5.5.12</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>tomcat</groupId>
-            <artifactId>jasper-runtime</artifactId>
-            <version>5.5.12</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>tomcat</groupId>
-            <artifactId>jasper-compiler-jdt</artifactId>
-            <version>5.5.12</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-el</groupId>
-            <artifactId>commons-el</artifactId>
-            <version>1.0</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>1.0</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.1</version>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- Test dependencies -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-            <version>3.8.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>1.2.8</version>
-            <scope>test</scope>
-        </dependency>
-
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-mock</artifactId>
-            <version>1.2.8</version>
-            <scope>test</scope>
-        </dependency>
- 
-
-    </dependencies>
-</project>
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/Main.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/Main.java
deleted file mode 100644
index 3a51261..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/Main.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * <!-- START SNIPPET: javadoc -->
- *
- * Struts comes with various related tools included in the struts-core-VERSION.jar file. You can access these
- * tools by simply unpacking the Struts distribution and running <b>java -jar struts-core-VERSION.jar</b>.
- * Struts will automatically include all jars in the same directory as the struts-core-VERSION.jar file as well as all
- * jars in the <i>lib</i> directory. This means you can invoke these tools either from within the standard directory
- * structure found in the Struts distribution, or from within your WEB-INF/lib directory.
- *
- * <p/> You can access the help information for these tools by simply running the jar without any arguments.
- *
- * <!-- END SNIPPET: javadoc -->
- */
-public class Main {
-    public static void main(String[] args) {
-        if (args.length == 0) {
-            System.out.println("Usage:");
-            System.out.println("  java -jar struts-toolbox.jar [command] (optional command args)");
-            System.out.println("");
-            System.out.println("Where [command] is one of the following:");
-            System.out.println("  sitegraph");
-            System.out.println("  sitegraph:xxx");
-            System.out.println("");
-            System.out.println("Execute the commands for additional usage instructions.");
-            System.out.println("Note: the *:xxx commands are just shortcuts for ");
-            System.out.println("      running the command on a webapp in the apps dir.");
-            return;
-        }
-
-        // check the JDK version
-        String version = System.getProperty("java.version");
-        boolean jdk15 = version.indexOf("1.5") != -1;
-
-        String javaHome = System.getProperty("java.home");
-        ArrayList<URL> urls = new ArrayList<URL>();
-        try {
-            findJars(new File("lib"), urls);
-
-            // use all the jars in the current that aren't the src jar
-            File wd = new File(".");
-            File[] jars = wd.listFiles(new FilenameFilter() {
-                public boolean accept(File dir, String name) {
-                    return name.endsWith(".jar") && name.indexOf("-src.") == -1;
-                }
-            });
-            for (int i = 0; i < jars.length; i++) {
-                File jar = jars[i];
-                urls.add(jar.toURL());
-            }
-
-            // ... but there might not be any (ie: we're in development in IDEA), so use this as backup
-            urls.add(new File(System.getProperty("struts.classes", "build/java")).toURL());
-            urls.add(new File(System.getProperty("xwork.classes", "../xwork/build/java/")).toURL());
-
-            // load tools.jar from JAVA_HOME
-            File tools = new File(javaHome, "lib/tools.jar");
-            if (!tools.exists()) {
-                // hmm, not there, how about java.home?
-                tools = new File(javaHome, "../lib/tools.jar");
-            }
-            if (!tools.exists()) {
-                // try the OS X common path
-                tools = new File(javaHome, "../Classes/classes.jar");
-            }
-            if (!tools.exists()) {
-                // try the other OS X common path
-                tools = new File(javaHome, "../Classes/classes.jar");
-            }
-            if (!tools.exists()) {
-                // did the user specify it by hand?
-                String prop = System.getProperty("tools");
-                if (prop != null) {
-                    tools = new File(prop);
-                }
-            }
-            if (!tools.exists()) {
-                System.out.println("Error: Could not find tools.jar! Please do one of the following: ");
-                System.out.println("");
-                System.out.println("        - Use the JDK's JVM (ie: c:\\jdk1.5.0\\bin\\java)");
-                System.out.println("        - Specify JAVA_HOME to point to your JDK 1.5 home");
-                System.out.println("        - Specify a direct path to tools.jar via, as shown below:");
-                System.out.println("");
-                System.out.println("       java -Dtools=/path/to/tools.jar -jar struts.jar ...");
-                return;
-            }
-
-            // finally, add the verified tools.jar
-            urls.add(tools.toURL());
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-            System.out.println("Could not find URLs -- see stack trace.");
-        }
-
-        String command = args[0];
-        String[] programArgs = new String[args.length - 1];
-        System.arraycopy(args, 1, programArgs, 0, programArgs.length);
-
-        if (command.startsWith("sitegraph:")) {
-            command = "sitegraph";
-            String name = checkWebAppArgs(args);
-            programArgs = new String[]{"-config", "apps/" + name + "/src/webapp/WEB-INF/classes",
-                    "-views", "apps/" + name + "/src/webapp",
-                    "-output", "."};
-        }
-
-        if ("sitegraph".equals(command)) {
-            launch("org.apache.struts2.sitegraph.SiteGraph", programArgs, urls);
-        }
-    }
-
-    private static String checkWebAppArgs(String[] args) {
-        int colon = args[0].indexOf(':');
-        String name = null;
-        try {
-            name = args[0].substring(colon + 1);
-        } catch (Exception e) {
-            //this is OK to skip
-        }
-        if (name == null || name.equals("")) {
-            System.out.println("Error: you must specify the webapp you wish");
-            System.out.println("       to deploy. The webapp name must be the");
-            System.out.println("       name of the directory found in apps/.");
-            System.out.println("");
-            System.out.println("Example: java -jar struts-core-VERSION.jar quickstart:sandbox");
-            System.exit(1);
-        }
-
-        return name;
-    }
-
-    private static void launch(String program, String[] programArgs, List<URL> urls) {
-        Collections.reverse(urls);
-        URL[] urlArray = urls.toArray(new URL[urls.size()]);
-        URLClassLoader cl = new MainClassLoader(urlArray);
-        Thread.currentThread().setContextClassLoader(cl);
-        try {
-            Class clazz = cl.loadClass(program);
-            Method main = clazz.getDeclaredMethod("main", new Class[]{String[].class});
-            main.invoke(null, new Object[]{programArgs});
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private static void findJars(File file, ArrayList<URL> urls) throws MalformedURLException {
-        File[] files = file.listFiles();
-        if (files == null) {
-            return;
-        }
-
-        for (int i = 0; i < files.length; i++) {
-            File f = files[i];
-            if (f.isDirectory()) {
-                findJars(f, urls);
-            } else if (f.getName().endsWith(".jar")) {
-                if (isValid(f.getName())) {
-                    urls.add(f.toURL());
-                }
-            }
-        }
-    }
-
-    private static boolean isValid(String name) {
-        return !"dom.jar".equals(name);
-    }
-
-    /**
-     * Reverses the typical order of classloading to defer only to the parent if the current class loader can't be
-     * found. This is required to allow for the launcher to be embedded within struts.jar (otherwise the dependencies
-     * wouldn't be found by the system ClassLoader when invoking using "java -jar struts-core-VERSION.jar ...").
-     */
-    public static class MainClassLoader extends URLClassLoader {
-        public MainClassLoader(URL[] urls) {
-            super(urls);
-        }
-
-        public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
-            if (name.startsWith("org.xml.") || name.startsWith("org.w3c.")
-                    || name.startsWith("java.") || name.startsWith("javax.")
-                    || name.startsWith("sun.") || name.startsWith("com.sun.")) {
-                return super.loadClass(name, resolve);
-            }
-
-            ClassLoader parent = getParent();
-            // First, check if the class has already been loaded
-            Class c = findLoadedClass(name);
-            if (c == null) {
-                try {
-                    c = findClass(name);
-                } catch (Throwable t) {
-                    // If still not found, only then ask the parent
-                    c = parent.loadClass(name);
-                }
-            }
-            if (resolve) {
-                resolveClass(c);
-            }
-
-            return c;
-        }
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/SiteGraph.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/SiteGraph.java
deleted file mode 100644
index 0daf7c8..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/SiteGraph.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Created on Aug 12, 2004 by mgreer
- */
-package org.apache.struts2.sitegraph;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Writer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.sitegraph.renderers.DOTRenderer;
-
-/**
- * // START SNIPPET: javadocs-intro
- * SiteGraph is a tool that renders out GraphViz-generated images depicting your
- * Struts-powered web application's flow. SiteGraph requires GraphViz be installed
- * and that the "dot" executable be in your command path. You can find GraphViz
- * at http://www.graphviz.org.
- * // END SNIPPET: javadocs-intro
- * <p/>
- * // START SNIPPET: javadocs-api
- * If you wish to use SiteGraph through its API rather than through the command line,
- * you can do that as well. All you need to do is create a new SiteGraph instance,
- * optionally specify a {@link Writer} to output the dot content to, and then call
- * {@link #prepare()}.
- * // END SNIPPET: javadocs-api
- */
-public class SiteGraph {
-
-    private static final Log LOG = LogFactory.getLog(SiteGraph.class);
-
-    private String configDir;
-    private String views;
-    private String output;
-    private String namespace;
-    private Writer writer;
-
-    public SiteGraph(String configDir, String views, String output, String namespace) {
-        this.configDir = configDir;
-        this.views = views;
-        this.output = output;
-        this.namespace = namespace;
-    }
-
-    public static void main(String[] args) throws IOException {
-        LOG.info("SiteGraph starting...");
-
-        if (args.length != 8 && args.length != 6) {
-            InputStream is = SiteGraph.class.getResourceAsStream("sitegraph-usage.txt");
-            byte[] buffer = new byte[2048];
-            int length = -1;
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            while ((length = is.read(buffer)) != -1) {
-                baos.write(buffer, 0, length);
-            }
-            is.close();
-            baos.close();
-
-            String usage = baos.toString();
-            System.out.println(usage.replaceAll("//.*", ""));
-            return;
-        }
-
-        String configDir = getArg(args, "config");
-        String views = getArg(args, "views");
-        String output = getArg(args, "output");
-        String namespace = getArg(args, "ns");
-
-        // START SNIPPET: example-api
-        SiteGraph siteGraph = new SiteGraph(configDir, views, output, namespace);
-        siteGraph.prepare();
-        siteGraph.render();
-        // END SNIPPET: example-api
-    }
-
-    private static String getArg(String[] args, String arg) {
-        for (int i = 0; i < args.length; i++) {
-            if (("-" + arg).equals(args[i]) && ((i + 1) < args.length)) {
-                return args[i + 1];
-            }
-        }
-
-        return "";
-    }
-
-    /**
-     * Prepares the dot generated content and writes out to the provided writer
-     * object. If no writer has been given, that a {@link FileWriter} pointing to "out.dot"
-     * in the specified output directly shall be used.
-     */
-    public void prepare() {
-        if (writer == null) {
-            try {
-                writer = new FileWriter(output + "/out.dot");
-            } catch (IOException e) {
-                throw new StrutsException(e);
-            }
-        }
-
-        StrutsConfigRetriever.setConfiguration(configDir, views.split("[, ]+"));
-        DOTRenderer renderer = new DOTRenderer(writer);
-        renderer.render(namespace);
-    }
-
-    /**
-     * Invokes the dot command, cause GraphViz to render out.dot in the form of out.gif,
-     * located in the specified output directory. If an error occurs during this process,
-     * the error is logged and the method completes without throwing an exception.
-     */
-    public void render() {
-        try {
-            Runtime.getRuntime().exec("dot -o" + output + "/out.gif -Tgif " + output + "/out.dot");
-        } catch (IOException e) {
-            LOG.error("Could not invoke dot", e);
-        }
-    }
-
-    public void setWriter(Writer writer) {
-        this.writer = writer;
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java
deleted file mode 100644
index 4700f71..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Created on Aug 14, 2004 by mgreer
- */
-package org.apache.struts2.sitegraph;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.config.StrutsXmlConfigurationProvider;
-import org.apache.struts2.sitegraph.entities.FreeMarkerView;
-import org.apache.struts2.sitegraph.entities.JspView;
-import org.apache.struts2.sitegraph.entities.VelocityView;
-import org.apache.struts2.sitegraph.entities.View;
-
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.ConfigurationProvider;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-
-/**
- * Initializes and retrieves XWork config elements
- */
-public class StrutsConfigRetriever {
-
-    private static final Log LOG = LogFactory.getLog(StrutsConfigRetriever.class);
-    private static String configDir;
-    private static String[] views;
-    private static boolean isXWorkStarted = false;
-    private static Map viewCache = new LinkedHashMap();
-    private static ConfigurationManager cm;
-
-    /**
-     * Returns a Map of all action names/configs
-     *
-     * @return Map of all action names/configs
-     */
-    public static Map getActionConfigs() {
-        if (!isXWorkStarted)
-            initXWork();
-        return cm.getConfiguration().getRuntimeConfiguration().getActionConfigs();
-    }
-
-    private static void initXWork() {
-        String configFilePath = configDir + "/struts.xml";
-        File configFile = new File(configFilePath);
-        try {
-            ConfigurationProvider configProvider = new StrutsXmlConfigurationProvider(configFile.getCanonicalPath(), true);
-            cm = new ConfigurationManager();
-            cm.addConfigurationProvider(configProvider);
-            isXWorkStarted = true;
-        } catch (IOException e) {
-            LOG.error("IOException", e);
-        }
-    }
-
-    public static Set getNamespaces() {
-        Set namespaces = Collections.EMPTY_SET;
-        Map allActionConfigs = getActionConfigs();
-        if (allActionConfigs != null) {
-            namespaces = allActionConfigs.keySet();
-        }
-        return namespaces;
-    }
-
-    /**
-     * Return a Set of the action names for this namespace.
-     *
-     * @param namespace
-     * @return Set of the action names for this namespace.
-     */
-    public static Set getActionNames(String namespace) {
-        Set actionNames = Collections.EMPTY_SET;
-        Map allActionConfigs = getActionConfigs();
-        if (allActionConfigs != null) {
-            Map actionMappings = (Map) allActionConfigs.get(namespace);
-            if (actionMappings != null) {
-                actionNames = actionMappings.keySet();
-            }
-        }
-        return actionNames;
-    }
-
-    /**
-     * Returns the ActionConfig for this action name at this namespace.
-     *
-     * @param namespace
-     * @param actionName
-     * @return The ActionConfig for this action name at this namespace.
-     */
-    public static ActionConfig getActionConfig(String namespace, String actionName) {
-        ActionConfig config = null;
-        Map allActionConfigs = getActionConfigs();
-        if (allActionConfigs != null) {
-            Map actionMappings = (Map) allActionConfigs.get(namespace);
-            if (actionMappings != null) {
-                config = (ActionConfig) actionMappings.get(actionName);
-            }
-        }
-        return config;
-    }
-
-    public static ResultConfig getResultConfig(String namespace, String actionName,
-                                               String resultName) {
-        ResultConfig result = null;
-        ActionConfig actionConfig = getActionConfig(namespace, actionName);
-        if (actionConfig != null) {
-            Map resultMap = actionConfig.getResults();
-            result = (ResultConfig) resultMap.get(resultName);
-        }
-        return result;
-    }
-
-    public static File getViewFile(String namespace, String actionName, String resultName) {
-        ResultConfig result = getResultConfig(namespace, actionName, resultName);
-        String location = (String) result.getParams().get("location");
-        for (int i = 0; i < views.length; i++) {
-            String viewRoot = views[i];
-            File viewFile = getViewFileInternal(viewRoot, location, namespace);
-            if (viewFile != null) {
-                return viewFile;
-            }
-        }
-
-        return null;
-    }
-
-    private static File getViewFileInternal(String root, String location, String namespace) {
-        StringBuffer filePath = new StringBuffer(root);
-        if (!location.startsWith("/")) {
-            filePath.append(namespace + "/");
-        }
-        filePath.append(location);
-        File viewFile = new File(filePath.toString());
-        if (viewFile.exists()) {
-            return viewFile;
-        } else {
-            return null;
-        }
-    }
-
-    public static View getView(String namespace, String actionName, String resultName, int type) {
-        String viewId = namespace + "/" + actionName + "/" + resultName;
-        View view = (View) viewCache.get(viewId);
-        if (view == null) {
-            File viewFile = StrutsConfigRetriever.getViewFile(namespace, actionName, resultName);
-            if (viewFile != null) {
-                switch (type) {
-                    case View.TYPE_JSP:
-                        view = new JspView(viewFile);
-                        break;
-                    case View.TYPE_FTL:
-                        view = new FreeMarkerView(viewFile);
-                        break;
-                    case View.TYPE_VM:
-                        view = new VelocityView(viewFile);
-                        break;
-                    default:
-                        return null;
-                }
-
-                viewCache.put(viewId, view);
-            }
-        }
-        return view;
-    }
-
-    public static void setConfiguration(String configDir, String[] views) {
-        StrutsConfigRetriever.configDir = configDir;
-        StrutsConfigRetriever.views = views;
-        isXWorkStarted = false;
-        viewCache = new LinkedHashMap();
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/FileBasedView.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/FileBasedView.java
deleted file mode 100644
index b41aaee..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/FileBasedView.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.entities;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.sitegraph.model.Link;
-
-/**
- */
-public abstract class FileBasedView implements View {
-    private String name;
-    private String contents;
-    
-    private static final Log log = LogFactory.getLog(FileBasedView.class);
-
-    public FileBasedView(File file) {
-        this.name = file.getName();
-        // get the contents as a single line
-        this.contents = readFile(file).replaceAll("[\r\n ]+", " ");
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public Set getTargets() {
-        TreeSet targets = new TreeSet();
-
-        // links
-        matchPatterns(getLinkPattern(), targets, Link.TYPE_HREF);
-
-        // actions
-        matchPatterns(getActionPattern(), targets, Link.TYPE_ACTION);
-
-        // forms
-        matchPatterns(getFormPattern(), targets, Link.TYPE_FORM);
-
-        return targets;
-    }
-
-    protected Pattern getLinkPattern() {
-        Object ext = Settings.get(StrutsConstants.STRUTS_ACTION_EXTENSION);
-        String actionRegex = "([A-Za-z0-9\\._\\-\\!]+\\." + ext + ")";
-        return Pattern.compile(actionRegex);
-    }
-
-    private void matchPatterns(Pattern pattern, Set targets, int type) {
-        Matcher matcher = pattern.matcher(contents);
-        while (matcher.find()) {
-            String target = matcher.group(1);
-            targets.add(new Target(target, type));
-        }
-    }
-
-    protected abstract Pattern getActionPattern();
-
-    protected abstract Pattern getFormPattern();
-    
-    protected String readFile(File file) {
-        try {
-            BufferedReader in = new BufferedReader(new FileReader(file));
-
-            String s = new String();
-            StringBuffer buffer = new StringBuffer();
-
-            while ((s = in.readLine()) != null) {
-                buffer.append(s + "\n");
-            }
-
-            in.close();
-
-            return buffer.toString();
-        } catch (FileNotFoundException e) {
-            log.warn("File not found");
-        } catch (IOException e) {
-            log.error(e);
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/FreeMarkerView.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/FreeMarkerView.java
deleted file mode 100644
index c80cb2f..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/FreeMarkerView.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.apache.struts2.sitegraph.entities;
-
-import java.io.File;
-import java.util.regex.Pattern;
-
-/**
- */
-public class FreeMarkerView extends FileBasedView {
-    public FreeMarkerView(File file) {
-        super(file);
-    }
-
-    protected Pattern getActionPattern() {
-        return Pattern.compile("<\\@s.action [^>]*name=\"([^\"]+)\"[^>]*>");
-    }
-
-    protected Pattern getFormPattern() {
-        return Pattern.compile("<\\@s.form [^>]*action=\"([^\"]+)\"[^>]*>");
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/JspView.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/JspView.java
deleted file mode 100644
index d0dcc72..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/JspView.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.entities;
-
-import java.io.File;
-import java.util.regex.Pattern;
-
-/**
- */
-public class JspView extends FileBasedView {
-    public JspView(File file) {
-        super(file);
-    }
-
-    protected Pattern getActionPattern() {
-        return Pattern.compile("<a:action [^>]*name=\"([^\"]+)\"[^>]*>");
-    }
-
-    protected Pattern getFormPattern() {
-        return Pattern.compile("<a:form [^>]*action=\"([^\"]+)\"[^>]*>");
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/Target.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/Target.java
deleted file mode 100644
index 4d865bf..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/Target.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.entities;
-
-
-/**
- */
-public class Target {
-    private String target;
-    private int type;
-
-    public Target(String target, int type) {
-        this.target = target;
-        this.type = type;
-    }
-
-    public String getTarget() {
-        return target;
-    }
-
-    public int getType() {
-        return type;
-    }
-
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof Target)) return false;
-
-        final Target target1 = (Target) o;
-
-        if (type != target1.type) return false;
-        if (target != null ? !target.equals(target1.target) : target1.target != null) return false;
-
-        return true;
-    }
-
-    public int hashCode() {
-        int result;
-        result = (target != null ? target.hashCode() : 0);
-        result = 29 * result + type;
-        return result;
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/VelocityView.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/VelocityView.java
deleted file mode 100644
index 0148b8b..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/VelocityView.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.entities;
-
-import java.io.File;
-import java.util.regex.Pattern;
-
-/**
- */
-public class VelocityView extends FileBasedView {
-    public VelocityView(File file) {
-        super(file);
-    }
-
-    protected Pattern getActionPattern() {
-        return Pattern.compile("#tag( Action [^)]*name=\"([^\"]+)\"[^)]*)");
-    }
-
-    protected Pattern getFormPattern() {
-        return Pattern.compile("#tag \\(Form [^)]*action=\"([^\"]+)\"[^)]*\\)");
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/View.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/View.java
deleted file mode 100644
index 8d03a81..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/entities/View.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.entities;
-
-import java.util.Set;
-
-/**
- * TODO Describe View
- */
-public interface View {
-    public static final int TYPE_JSP = 0;
-    public static final int TYPE_VM = 1;
-    public static final int TYPE_FTL = 2;
-
-    /**
-     * Name of view file
-     *
-     * @return The name of the view file.
-     */
-    public String getName();
-
-    /**
-     * Returns Set of Commands linked to by this view
-     *
-     * @return a set of Targets
-     */
-    public Set getTargets();
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/ActionNode.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/ActionNode.java
deleted file mode 100644
index 64d3963..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/ActionNode.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.model;
-
-/**
- */
-public class ActionNode extends SiteGraphNode {
-    public ActionNode(String name) {
-        super(name);
-    }
-
-    public String getColor() {
-        return "coral1";
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/Graph.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/Graph.java
deleted file mode 100644
index cd1eb16..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/Graph.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.model;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- */
-public class Graph extends SubGraph {
-    private Set links;
-    public static Map nodeMap = new LinkedHashMap();
-
-    public Graph() {
-        super("");
-        this.links = new TreeSet();
-    }
-
-    public void addLink(Link link) {
-        links.add(link);
-    }
-
-    public void render(IndentWriter writer) throws IOException {
-        // write out the header
-        writer.write("digraph mygraph {", true);
-        writer.write("fontsize=10;");
-        writer.write("fontname=helvetica;");
-        writer.write("node [fontsize=10, fontname=helvetica, style=filled, shape=rectangle]");
-        writer.write("edge [fontsize=10, fontname=helvetica]");
-
-        // render all the subgraphs
-        for (Iterator iterator = subGraphs.iterator(); iterator.hasNext();) {
-            SubGraph subGraph = (SubGraph) iterator.next();
-            subGraph.render(new IndentWriter(writer));
-        }
-
-        // render all the nodes
-        for (Iterator iterator = nodes.iterator(); iterator.hasNext();) {
-            SiteGraphNode siteGraphNode = (SiteGraphNode) iterator.next();
-            siteGraphNode.render(writer);
-        }
-
-        // finally, render the links
-        for (Iterator iterator = links.iterator(); iterator.hasNext();) {
-            Link link = (Link) iterator.next();
-            link.render(writer);
-        }
-
-        // and now the footer
-        writer.write("}", true);
-    }
-
-    public SiteGraphNode findNode(String location, SiteGraphNode ref) {
-        if (location.startsWith("/")) {
-            location = location.substring(1);
-        } else {
-            // not absolute, so use the reference node
-            String prefix = null;
-            if (ref.getParent() != null) {
-                prefix = ref.getParent().getPrefix();
-                location = prefix + "_" + location;
-            }
-        }
-
-        location = location.replaceAll("[\\.\\/\\-\\$\\{\\}]", "_");
-
-        return (SiteGraphNode) nodeMap.get(location);
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/IndentWriter.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/IndentWriter.java
deleted file mode 100644
index 58d07c4..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/IndentWriter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.model;
-
-import java.io.IOException;
-import java.io.Writer;
-
-/**
- */
-public class IndentWriter extends Writer {
-    Writer writer;
-
-    public IndentWriter(Writer writer) {
-        this.writer = writer;
-    }
-
-    public void close() throws IOException {
-        writer.close();
-    }
-
-    public void flush() throws IOException {
-        writer.flush();
-    }
-
-    public void write(String str) throws IOException {
-        write(str, false);
-    }
-
-    public void write(String str, boolean noIndent) throws IOException {
-        if (!noIndent) {
-            str = "    " + str;
-        }
-
-        if (writer instanceof IndentWriter) {
-            ((IndentWriter) writer).write(str, false);
-        } else {
-            writer.write(str + "\n");
-        }
-    }
-
-    public void write(char cbuf[], int off, int len) throws IOException {
-        writer.write(cbuf, off, len);
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/Link.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/Link.java
deleted file mode 100644
index 35d4a27..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/Link.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.model;
-
-import java.io.IOException;
-
-/**
- */
-public class Link implements Render, Comparable {
-    public static final int TYPE_FORM = 0;
-    public static final int TYPE_ACTION = 1;
-    public static final int TYPE_HREF = 2;
-    public static final int TYPE_RESULT = 3;
-    public static final int TYPE_REDIRECT = 4;
-
-    private SiteGraphNode from;
-    private SiteGraphNode to;
-    private int type;
-    private String label;
-
-    public Link(SiteGraphNode from, SiteGraphNode to, int type, String label) {
-        this.from = from;
-        this.to = to;
-        this.type = type;
-        this.label = label;
-    }
-
-    public void render(IndentWriter writer) throws IOException {
-        writer.write(from.getFullName() + " -> " + to.getFullName() + " [label=\"" + getRealLabel() + "\"" + getColor() + "];");
-    }
-
-    private String getRealLabel() {
-        switch (type) {
-            case TYPE_ACTION:
-                return "action" + label;
-            case TYPE_FORM:
-                return "form" + label;
-            case TYPE_HREF:
-                return "href" + label;
-            case TYPE_REDIRECT:
-                return "redirect: " + label;
-            case TYPE_RESULT:
-                return label;
-        }
-
-        return "";
-    }
-
-    private String getColor() {
-        if (type == TYPE_RESULT || type == TYPE_ACTION) {
-            return ",color=\"darkseagreen2\"";
-        } else {
-            return "";
-        }
-    }
-
-    public int compareTo(Object o) {
-        Link other = (Link) o;
-        int result = from.compareTo(other.from);
-        if (result != 0) {
-            return result;
-        }
-
-        result = to.compareTo(other.to);
-        if (result != 0) {
-            return result;
-        }
-
-        result = label.compareTo(other.label);
-        if (result != 0) {
-            return result;
-        }
-
-        return new Integer(type).compareTo(new Integer(other.type));
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/Render.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/Render.java
deleted file mode 100644
index d07d6b6..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/Render.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.model;
-
-import java.io.IOException;
-
-/**
- */
-public interface Render {
-    public void render(IndentWriter writer) throws IOException;
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/SiteGraphNode.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/SiteGraphNode.java
deleted file mode 100644
index 43fac94..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/SiteGraphNode.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.model;
-
-import java.io.IOException;
-
-/**
- */
-public abstract class SiteGraphNode implements Render, Comparable {
-    private String name;
-    private SubGraph parent;
-
-    public SiteGraphNode(String name) {
-        this.name = name;
-    }
-
-    public SubGraph getParent() {
-        return parent;
-    }
-
-    public void setParent(SubGraph parent) {
-        this.parent = parent;
-    }
-
-    public void render(IndentWriter writer) throws IOException {
-        writer.write(getFullName() + " [label=\"" + name + "\",color=\"" + getColor() + "\"];");
-    }
-
-    public String getFullName() {
-        String prefix = "";
-        if (parent != null) {
-            String parentPrefix = parent.getPrefix();
-            if (!parentPrefix.equals("")) {
-                prefix = parentPrefix + "_";
-            }
-        }
-        return prefix + cleanName();
-    }
-
-    private String cleanName() {
-        return name.replaceAll("[\\.\\/\\-\\$\\{\\}]", "_");
-    }
-
-    public abstract String getColor();
-
-    public int compareTo(Object o) {
-        return name.compareTo(((SiteGraphNode) o).name);
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/SubGraph.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/SubGraph.java
deleted file mode 100644
index 25fc6ce..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/SubGraph.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.model;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- */
-public class SubGraph implements Render {
-    protected String name;
-    protected SubGraph parent;
-    protected List subGraphs;
-    protected List nodes;
-
-    public SubGraph(String name) {
-        this.name = name;
-        this.subGraphs = new ArrayList();
-        this.nodes = new ArrayList();
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void addSubGraph(SubGraph subGraph) {
-        subGraph.setParent(this);
-        subGraphs.add(subGraph);
-    }
-
-    public void setParent(SubGraph parent) {
-        this.parent = parent;
-    }
-
-    public void addNode(SiteGraphNode node) {
-        node.setParent(this);
-        Graph.nodeMap.put(node.getFullName(), node);
-        nodes.add(node);
-    }
-
-    public void render(IndentWriter writer) throws IOException {
-        // write the header
-        writer.write("subgraph cluster_" + getPrefix() + " {", true);
-        writer.write("color=grey;");
-        writer.write("fontcolor=grey;");
-        writer.write("label=\"" + name + "\";");
-
-        // write out the subgraphs
-        for (Iterator iterator = subGraphs.iterator(); iterator.hasNext();) {
-            SubGraph subGraph = (SubGraph) iterator.next();
-            subGraph.render(new IndentWriter(writer));
-        }
-
-        // write out the actions
-        for (Iterator iterator = nodes.iterator(); iterator.hasNext();) {
-            SiteGraphNode siteGraphNode = (SiteGraphNode) iterator.next();
-            siteGraphNode.render(writer);
-        }
-
-        // .. footer
-        writer.write("}", true);
-    }
-
-    public String getPrefix() {
-        if (parent == null) {
-            return name;
-        } else {
-            String prefix = parent.getPrefix();
-            if (prefix.equals("")) {
-                return name;
-            } else {
-                return prefix + "_" + name;
-            }
-        }
-    }
-
-    public SubGraph create(String namespace) {
-        if (namespace.equals("")) {
-            return this;
-        }
-
-        String[] parts = namespace.split("\\/");
-        SubGraph last = this;
-        for (int i = 0; i < parts.length; i++) {
-            String part = parts[i];
-            if (part.equals("")) {
-                continue;
-            }
-
-            SubGraph subGraph = findSubGraph(part);
-            if (subGraph == null) {
-                subGraph = new SubGraph(part);
-                last.addSubGraph(subGraph);
-            }
-
-            last = subGraph;
-        }
-
-        return last;
-    }
-
-    private SubGraph findSubGraph(String name) {
-        for (Iterator iterator = subGraphs.iterator(); iterator.hasNext();) {
-            SubGraph subGraph = (SubGraph) iterator.next();
-            if (subGraph.getName().equals(name)) {
-                return subGraph;
-            }
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/ViewNode.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/ViewNode.java
deleted file mode 100644
index 26cc7df..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/model/ViewNode.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.model;
-
-/**
- */
-public class ViewNode extends SiteGraphNode {
-    public ViewNode(String name) {
-        super(name);
-    }
-
-    public String getColor() {
-        return "darkseagreen2";
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/renderers/DOTRenderer.java b/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/renderers/DOTRenderer.java
deleted file mode 100644
index f9d24d4..0000000
--- a/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/renderers/DOTRenderer.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph.renderers;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.sitegraph.StrutsConfigRetriever;
-import org.apache.struts2.sitegraph.entities.Target;
-import org.apache.struts2.sitegraph.entities.View;
-import org.apache.struts2.sitegraph.model.ActionNode;
-import org.apache.struts2.sitegraph.model.Graph;
-import org.apache.struts2.sitegraph.model.IndentWriter;
-import org.apache.struts2.sitegraph.model.Link;
-import org.apache.struts2.sitegraph.model.SiteGraphNode;
-import org.apache.struts2.sitegraph.model.SubGraph;
-import org.apache.struts2.sitegraph.model.ViewNode;
-
-import com.opensymphony.xwork2.ActionChainResult;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-
-/**
- * Renders flow diagram to the console at info level
- */
-public class DOTRenderer {
-
-    private Writer writer;
-    private List links = new ArrayList();
-
-    public DOTRenderer(Writer writer) {
-        this.writer = writer;
-    }
-
-    public void render(String ns) {
-        Graph graph = new Graph();
-
-        TreeMap viewMap = new TreeMap(new Comparator() {
-            public int compare(Object o1, Object o2) {
-                ViewNode v1 = (ViewNode) o1;
-                ViewNode v2 = (ViewNode) o2;
-
-                return v1.getFullName().compareTo(v2.getFullName());
-            }
-        });
-
-        Set namespaces = StrutsConfigRetriever.getNamespaces();
-        for (Iterator iter = namespaces.iterator(); iter.hasNext();) {
-            String namespace = (String) iter.next();
-
-            if (!namespace.startsWith(ns)) {
-                continue;
-            }
-
-            SubGraph subGraph = graph.create(namespace);
-
-            Set actionNames = StrutsConfigRetriever.getActionNames(namespace);
-            for (Iterator iterator = actionNames.iterator(); iterator.hasNext();) {
-                String actionName = (String) iterator.next();
-                ActionConfig actionConfig = StrutsConfigRetriever.getActionConfig(namespace,
-                        actionName);
-
-                ActionNode action = new ActionNode(actionName);
-                subGraph.addNode(action);
-
-                Set resultNames = actionConfig.getResults().keySet();
-                for (Iterator iterator2 = resultNames.iterator(); iterator2.hasNext();) {
-                    String resultName = (String) iterator2.next();
-                    ResultConfig resultConfig = ((ResultConfig) actionConfig.getResults().get(resultName));
-                    String resultClassName = resultConfig.getClassName();
-
-                    if (resultClassName.equals(ActionChainResult.class.getName())) {
-
-                    } else if (resultClassName.indexOf("Dispatcher") != -1
-                            || resultClassName.indexOf("Velocity") != -1
-                            || resultClassName.indexOf("Freemarker") != -1) {
-                        if (resultConfig.getParams().get("location") == null) {
-                            continue;
-                        }
-
-                        String location = getViewLocation((String) resultConfig.getParams().get("location"), namespace);
-                        if (location.endsWith((String) Settings.get(StrutsConstants.STRUTS_ACTION_EXTENSION))) {
-                            addTempLink(action, location, Link.TYPE_RESULT, resultConfig.getName());
-                        } else {
-                            ViewNode view = new ViewNode(stripLocation(location));
-                            subGraph.addNode(view);
-
-                            addTempLink(action, location, Link.TYPE_RESULT, resultConfig.getName());
-
-                            View viewFile = getView(namespace, actionName, resultName, location);
-                            if (viewFile != null) {
-                                viewMap.put(view, viewFile);
-                            }
-                        }
-                    } else if (resultClassName.indexOf("Jasper") != -1) {
-
-                    } else if (resultClassName.indexOf("XSLT") != -1) {
-
-                    } else if (resultClassName.indexOf("Redirect") != -1) {
-                        // check if the redirect is to an action -- if so, link it
-                        String location = getViewLocation((String) resultConfig.getParams().get("location"), namespace);
-                        if (location.endsWith((String) Settings.get(StrutsConstants.STRUTS_ACTION_EXTENSION))) {
-                            addTempLink(action, location, Link.TYPE_REDIRECT, resultConfig.getName());
-                        } else {
-                            ViewNode view = new ViewNode(stripLocation(location));
-                            subGraph.addNode(view);
-
-                            addTempLink(action, location, Link.TYPE_REDIRECT, resultConfig.getName());
-
-                            View viewFile = getView(namespace, actionName, resultName, location);
-                            if (viewFile != null) {
-                                viewMap.put(view, viewFile);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        // now look for links in the view
-        for (Iterator iterator = viewMap.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            ViewNode view = (ViewNode) entry.getKey();
-            View viewFile = (View) entry.getValue();
-            Set targets = viewFile.getTargets();
-            for (Iterator iterator1 = targets.iterator(); iterator1.hasNext();) {
-                Target target = (Target) iterator1.next();
-                String viewTarget = target.getTarget();
-                addTempLink(view, viewTarget, target.getType(), "");
-            }
-        }
-
-        // finally, let's match up these links as real Link objects
-        for (Iterator iterator = links.iterator(); iterator.hasNext();) {
-            TempLink temp = (TempLink) iterator.next();
-            String location = temp.location;
-            if (location.endsWith((String) Settings.get(StrutsConstants.STRUTS_ACTION_EXTENSION))) {
-                location = location.substring(0, location.indexOf((String) Settings.get(StrutsConstants.STRUTS_ACTION_EXTENSION)) - 1);
-
-                if (location.indexOf('!') != -1) {
-                    temp.label = temp.label + "\\n(" + location.substring(location.indexOf('!')) + ")";
-                    location = location.substring(0, location.indexOf('!'));
-                }
-            }
-            SiteGraphNode to = graph.findNode(location, temp.node);
-            if (to != null) {
-                graph.addLink(new Link(temp.node, to, temp.typeResult, temp.label));
-            }
-        }
-
-        try {
-            //writer.write(graph.to_s(true));
-            graph.render(new IndentWriter(writer));
-            writer.flush();
-            writer.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-    private void addTempLink(SiteGraphNode node, String location, int type, String label) {
-        links.add(new TempLink(node, location, type, label));
-    }
-
-    private String stripLocation(String location) {
-        return location.substring(location.lastIndexOf('/') + 1);
-    }
-
-    private View getView(String namespace, String actionName, String resultName, String location) {
-        int type = View.TYPE_JSP;
-        if (location.endsWith(".fm") || location.endsWith(".ftl")) {
-            type = View.TYPE_FTL;
-        } else if (location.endsWith(".vm")) {
-            type = View.TYPE_VM;
-        }
-        return StrutsConfigRetriever.getView(namespace, actionName, resultName, type);
-    }
-
-    private String getViewLocation(String location, String namespace) {
-        String view = null;
-        if (!location.startsWith("/")) {
-            view = namespace + "/" + location;
-        } else {
-            view = location;
-        }
-
-        if (view.indexOf('?') != -1) {
-            view = view.substring(0, view.indexOf('?'));
-        }
-
-        return view;
-    }
-
-    class TempLink {
-        SiteGraphNode node;
-        String location;
-        int typeResult;
-        String label;
-
-        public TempLink(SiteGraphNode node, String location, int typeResult, String label) {
-            this.node = node;
-            this.location = location;
-            this.typeResult = typeResult;
-            this.label = label;
-        }
-
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (!(o instanceof TempLink)) return false;
-
-            final TempLink tempLink = (TempLink) o;
-
-            if (typeResult != tempLink.typeResult) return false;
-            if (label != null ? !label.equals(tempLink.label) : tempLink.label != null) return false;
-            if (location != null ? !location.equals(tempLink.location) : tempLink.location != null) return false;
-            if (node != null ? !node.equals(tempLink.node) : tempLink.node != null) return false;
-
-            return true;
-        }
-
-        public int hashCode() {
-            int result;
-            result = (node != null ? node.hashCode() : 0);
-            result = 29 * result + (location != null ? location.hashCode() : 0);
-            result = 29 * result + typeResult;
-            result = 29 * result + (label != null ? label.hashCode() : 0);
-            return result;
-        }
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/test/java/org/apache/struts2/sitegraph/SiteGraphTest.java b/trunk/plugins/sitegraph/src/test/java/org/apache/struts2/sitegraph/SiteGraphTest.java
deleted file mode 100644
index c1ef289..0000000
--- a/trunk/plugins/sitegraph/src/test/java/org/apache/struts2/sitegraph/SiteGraphTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitegraph;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.net.URL;
-
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.dispatcher.Dispatcher;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-
-/**
- */
-public class SiteGraphTest extends StrutsTestCase {
-    public void testWebFlow() throws Exception {
-        Dispatcher.getInstance().getConfigurationManager().clearConfigurationProviders();
-        // use the classloader rather than relying on the
-        // working directory being an assumed value when
-        // running the test:  so let's get this class's parent dir 
-        URL url = ClassLoaderUtil.getResource("org/apache/struts2/sitegraph/struts.xml", SiteGraphTest.class);
-        File file = new File(url.toString().substring(5));
-        String dir = file.getParent();
-
-        SiteGraph siteGraph = new SiteGraph(dir, dir, dir, "");
-        StringWriter writer = new StringWriter();
-        siteGraph.setWriter(writer);
-        siteGraph.prepare();
-
-        URL compare = SiteGraphTest.class.getResource("out.txt");
-        StringBuffer buffer = new StringBuffer(128);
-        InputStream in = compare.openStream();
-        byte[] buf = new byte[4096];
-        int nbytes;
-
-        while ((nbytes = in.read(buf)) > 0) {
-            buffer.append(new String(buf, 0, nbytes));
-        }
-
-        in.close();
-        assertEquals(buffer.toString().replaceAll("\r\n", "\n"), writer.toString().replaceAll("\r\n", "\n"));
-    }
-}
diff --git a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/hello.jsp b/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/hello.jsp
deleted file mode 100644
index a024f35..0000000
--- a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/hello.jsp
+++ /dev/null
@@ -1 +0,0 @@
-nothing here, move along...
diff --git a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/out.txt b/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/out.txt
deleted file mode 100644
index 9760051..0000000
--- a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/out.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-digraph mygraph {
-    fontsize=10;
-    fontname=helvetica;
-    node [fontsize=10, fontname=helvetica, style=filled, shape=rectangle]
-    edge [fontsize=10, fontname=helvetica]
-    subgraph cluster_tutorial {
-        color=grey;
-        fontcolor=grey;
-        label="tutorial";
-        subgraph cluster_tutorial_sitegraph {
-            color=grey;
-            fontcolor=grey;
-            label="sitegraph";
-            tutorial_sitegraph_guess [label="guess",color="coral1"];
-            tutorial_sitegraph_guess_error_ftl [label="guess-error.ftl",color="darkseagreen2"];
-            tutorial_sitegraph_guess_input_ftl [label="guess-input.ftl",color="darkseagreen2"];
-            tutorial_sitegraph_guess_success_jsp [label="guess-success.jsp",color="darkseagreen2"];
-        }
-        tutorial_test [label="test",color="coral1"];
-        tutorial_guess_input_ftl [label="guess-input.ftl",color="darkseagreen2"];
-    }
-    hello [label="hello",color="coral1"];
-    hello_jsp [label="hello.jsp",color="darkseagreen2"];
-    tutorial_sitegraph_guess -> tutorial_sitegraph_guess_error_ftl [label="error",color="darkseagreen2"];
-    tutorial_sitegraph_guess -> tutorial_sitegraph_guess_input_ftl [label="input",color="darkseagreen2"];
-    tutorial_sitegraph_guess -> tutorial_sitegraph_guess_success_jsp [label="redirect: success"];
-    tutorial_sitegraph_guess_input_ftl -> tutorial_sitegraph_guess [label="form"];
-    tutorial_sitegraph_guess_success_jsp -> tutorial_sitegraph_guess [label="href\n(!default)"];
-    hello -> hello_jsp [label="success",color="darkseagreen2"];
-    hello -> tutorial_test [label="redirect: tutorial"];
-    tutorial_test -> tutorial_sitegraph_guess_input_ftl [label="input",color="darkseagreen2"];
-}
diff --git a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/struts.xml b/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/struts.xml
deleted file mode 100644
index 402ba34..0000000
--- a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/struts.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE struts PUBLIC
-          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-          "http://struts.apache.org/dtds/struts-2.0.dtd">
-          
-<struts>
-    <include file="struts-default.xml"/>
-
-    <package name="default" extends="struts-default">
-        <action name="hello" class="com.opensymphony.xwork2.ActionSupport">
-            <result name="success">hello.jsp</result>
-            <result name="tutorial" type="redirect">/tutorial/test.action</result>
-        </action>
-    </package>
-
-    <package name="tutorial" namespace="/tutorial" extends="struts-default">
-        <result-types>
-            <result-type name="freemarker" default="true"
-                         class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
-        </result-types>
-
-        <action name="test" class="com.opensymphony.xwork2.ActionSupport">
-            <result name="input">sitegraph/guess-input.ftl</result>
-        </action>
-    </package>
-
-    <package name="sitegraph" namespace="/tutorial/sitegraph" extends="struts-default">
-        <result-types>
-            <result-type name="freemarker" default="true"
-                         class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
-        </result-types>
-
-        <action name="guess" class="com.opensymphony.xwork2.ActionSupport">
-            <result name="success" type="redirect">guess-success.jsp</result>
-            <result name="input">guess-input.ftl</result>
-            <result name="error">guess-error.ftl</result>
-        </action>
-    </package>
-</struts>
diff --git a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-error.ftl b/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-error.ftl
deleted file mode 100644
index 5ebf4af..0000000
--- a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-error.ftl
+++ /dev/null
@@ -1 +0,0 @@
-Error!
diff --git a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-input.ftl b/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-input.ftl
deleted file mode 100644
index b031ee2..0000000
--- a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-input.ftl
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<head>
-    <title>Guess a number</title>
-</head>
-
-<body>
-<@s.form action="guess" method="post">
-    <@s.textfield label="Guess a number" name="guess"/>
-    <@s.submit value="Guess"/>
-</@s.form>
-</body>
-</html>
diff --git a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-success.jsp b/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-success.jsp
deleted file mode 100644
index 74ec1c6..0000000
--- a/trunk/plugins/sitegraph/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-success.jsp
+++ /dev/null
@@ -1 +0,0 @@
-You guessed correctly! Want to play <a href="guess!default.action">again</a>?
diff --git a/trunk/plugins/sitemesh/pom.xml b/trunk/plugins/sitemesh/pom.xml
deleted file mode 100644
index 7f703cb..0000000
--- a/trunk/plugins/sitemesh/pom.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-sitemesh-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 Sitemesh Plugin</name>
-    
-    <dependencies>
-        <dependency>
-            <groupId>opensymphony</groupId>
-            <artifactId>sitemesh</artifactId>
-            <version>2.2.1</version>
-        </dependency>
-        <!-- Velocity -->
-        <dependency>
-            <groupId>velocity</groupId>
-            <artifactId>velocity</artifactId>
-            <version>1.4</version>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>velocity-tools</groupId>
-            <artifactId>velocity-tools</artifactId>
-            <version>1.1</version>
-            <optional>true</optional>
-        </dependency>
-
-
-   </dependencies>
-</project>
diff --git a/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreeMarkerPageFilter.java b/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreeMarkerPageFilter.java
deleted file mode 100644
index aa48d22..0000000
--- a/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreeMarkerPageFilter.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitemesh;
-
-import java.io.IOException;
-import java.util.Locale;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.views.freemarker.FreemarkerManager;
-
-import com.opensymphony.module.sitemesh.Decorator;
-import com.opensymphony.module.sitemesh.HTMLPage;
-import com.opensymphony.module.sitemesh.Page;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.LocaleProvider;
-import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
-
-import freemarker.template.Configuration;
-import freemarker.template.SimpleHash;
-import freemarker.template.Template;
-
-/**
- *  Applies FreeMarker-based sitemesh decorators.
- *  
- *  <!-- START SNIPPET: javadoc -->
- *  
- *  The following variables are available to the decorating freemarker page :-
- *  <ul>
- *      <li>${title}           - content of &lt;title&gt; tag in the decorated page</li>
- *      <li>${head}            - content of &lt;head&gt; tag in the decorated page</li>
- *      <li>${body}            - content of t&lt;body&gt; tag in the decorated page</li>
- *      <li>${page.properties} - content of the page properties</li>
- *  </ul>
- *  <p/>
- *  With the following decorated page :-
- *  <pre>
- *  &lt;html&gt;
- *      &lt;meta name="author" content="tm_jee" /&gt;
- *      &lt;head&gt;
- *          &lt;title&gt;My Title&lt;/title&gt;
- *          &lt;link rel="stylesheet" type="text/css" href="mycss.css" /&gt;
- *          &lt;style type="text/javascript" language="javascript" src="myjavascript.js"&gt;&lt;/script&gt;
- *      &lt;/head&gt;
- *      &lt;body&lt;
- *          &lt;h1&gt;Sample&lt;/h1&gt;
- *      &lt;/body&gt;
- *  &lt;/html&gt;
- *  </pre>
- *  <p/>
- *  <table border="1">
- *      <tr>
- *          <td>Properties</td>
- *          <td>Content</td>
- *      </tr>
- *      <tr>
- *          <td>${title}</td>
- *          <td>My Title</td>
- *      </tr>
- *      <tr>
- *          <td>${head}</td>
- *          <td>
- *              &lt;link rel="stylesheet" type="text/css" href="mycss.css" /&gt;
- *              &lt;style type="text/javascript" language="javascript" src="myjavascript.js"&gt;&lt;/script&gt;
- *          </td>
- *      </tr>
- *      <tr>
- *          <td>${body}</td>
- *          <td>
- *              &lt;h1&gt;Sample&lt;/h1&gt;
- *          </td>
- *      </tr>
- *      <tr>
- *          <td>${page.properties.meta.author}</td>
- *          <td>tm_jee</td>
- *      </tr>
- *  </table>
- *  
- *  <!-- END SNIPPET: javadoc -->
- *  
- *  @version $Date$ $Id$
- */
-public class FreeMarkerPageFilter extends TemplatePageFilter {
-    private static final Log LOG = LogFactory.getLog(FreeMarkerPageFilter.class);
-
-    /**
-     *  Applies the decorator, using the relevent contexts
-     * 
-     * @param page The page
-     * @param decorator The decorator
-     * @param req The servlet request
-     * @param res The servlet response
-     * @param servletContext The servlet context
-     * @param ctx The action context for this request, populated with the server state
-     */
-    protected void applyDecorator(Page page, Decorator decorator,
-                                  HttpServletRequest req, HttpServletResponse res,
-                                  ServletContext servletContext, ActionContext ctx)
-            throws ServletException, IOException {
-    	
-    	String timerKey = "FreemarkerPageFilter_applyDecorator: ";
-        try {
-        	UtilTimerStack.push(timerKey);
-        	
-            FreemarkerManager fmm = FreemarkerManager.getInstance();
-
-            // get the configuration and template
-            Configuration config = fmm.getConfiguration(servletContext);
-            Template template = config.getTemplate(decorator.getPage(), getLocale(ctx.getActionInvocation(), config)); // WW-1181
-
-            // get the main hash
-            SimpleHash model = fmm.buildTemplateModel(ctx.getValueStack(), null, servletContext, req, res, config.getObjectWrapper());
-
-            // populate the hash with the page
-            model.put("page", page);
-            if (page instanceof HTMLPage) {
-                HTMLPage htmlPage = ((HTMLPage) page);
-                model.put("head", htmlPage.getHead());
-            }
-            model.put("title",page.getTitle());
-            model.put("body",page.getBody());
-            model.put("page.properties", new SimpleHash(page.getProperties()));
-
-            // finally, render it
-            template.process(model, res.getWriter());
-        } catch (Exception e) {
-            String msg = "Error applying decorator: " + e.getMessage();
-            LOG.error(msg, e);
-            throw new ServletException(msg, e);
-        }
-        finally {
-        	UtilTimerStack.pop(timerKey);
-        }
-    }
-    
-    /**
-     * Returns the locale used for the {@link Configuration#getTemplate(String, Locale)} call. The base implementation
-     * simply returns the locale setting of the action (assuming the action implements {@link LocaleProvider}) or, if
-     * the action does not the configuration's locale is returned. Override this method to provide different behaviour,
-     */
-    protected Locale getLocale(ActionInvocation invocation, Configuration configuration) {
-        if (invocation.getAction() instanceof LocaleProvider) {
-            return ((LocaleProvider) invocation.getAction()).getLocale();
-        } else {
-            return configuration.getLocale();
-        }
-    }
- 
-}
diff --git a/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/TemplatePageFilter.java b/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/TemplatePageFilter.java
deleted file mode 100644
index 4a56d20..0000000
--- a/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/TemplatePageFilter.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitemesh;
-
-import java.io.IOException;
-
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.config.Settings;
-import org.apache.struts2.dispatcher.Dispatcher;
-
-import com.opensymphony.module.sitemesh.Decorator;
-import com.opensymphony.module.sitemesh.Page;
-import com.opensymphony.module.sitemesh.filter.PageFilter;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.interceptor.PreResultListener;
-import com.opensymphony.xwork2.util.OgnlValueStack;
-
-/**
- *  An abstract template page filter that sets up the proper contexts for
- *  template processing.
- * 
- */
-public abstract class TemplatePageFilter extends PageFilter {
-    
-    private FilterConfig filterConfig;
-
-    public void init(FilterConfig filterConfig) {
-        super.init(filterConfig);
-        this.filterConfig = filterConfig;
-    }
-
-    /**
-     *  Applies the decorator, using the relevent contexts
-     * 
-     * @param page The page
-     * @param decorator The decorator
-     * @param req The servlet request
-     * @param res The servlet response
-     * @param servletContext The servlet context
-     * @param ctx The action context for this request, populated with the server state
-     */
-    protected abstract void applyDecorator(Page page, Decorator decorator,
-                                  HttpServletRequest req, HttpServletResponse res,
-                                  ServletContext servletContext, ActionContext ctx)
-            throws ServletException, IOException;
-    
-    /**
-     *  Applies the decorator, creating the relevent contexts and delegating to
-     *  the extended applyDecorator().
-     * 
-     * @param page The page
-     * @param decorator The decorator
-     * @param req The servlet request
-     * @param res The servlet response
-     */
-    protected void applyDecorator(Page page, Decorator decorator,
-                                  HttpServletRequest req, HttpServletResponse res)
-            throws ServletException, IOException {
-            
-        ServletContext servletContext = filterConfig.getServletContext();
-        ActionContext ctx = ServletActionContext.getActionContext(req);
-        if (ctx == null) {
-            // ok, one isn't associated with the request, so let's get a ThreadLocal one (which will create one if needed)
-            OgnlValueStack vs = new OgnlValueStack();
-            vs.getContext().putAll(Dispatcher.getInstance().createContextMap(req, res, null, servletContext));
-            ctx = new ActionContext(vs.getContext());
-            if (ctx.getActionInvocation() == null) {
-                // put in a dummy ActionSupport so basic functionality still works
-                ActionSupport action = new ActionSupport();
-                vs.push(action);
-                ctx.setActionInvocation(new DummyActionInvocation(action));
-            }
-        }
-
-        // delegate to the actual page decorator
-        applyDecorator(page, decorator, req, res, servletContext, ctx);
-    }
-
-    
-    /**
-     *  Gets the L18N encoding of the system.  The default is UTF-8.
-     */
-    protected String getEncoding() {
-        String encoding = (String) Settings.get(StrutsConstants.STRUTS_I18N_ENCODING);
-        if (encoding == null) {
-            encoding = System.getProperty("file.encoding");
-        }
-        if (encoding == null) {
-            encoding = "UTF-8";
-        }
-        return encoding;
-    }
-
-    static class DummyActionInvocation implements ActionInvocation {
-    	
-		private static final long serialVersionUID = -4808072199157363028L;
-		
-		ActionSupport action;
-
-        public DummyActionInvocation(ActionSupport action) {
-            this.action = action;
-        }
-
-        public Object getAction() {
-            return action;
-        }
-
-        public boolean isExecuted() {
-            return false;
-        }
-
-        public ActionContext getInvocationContext() {
-            return null;
-        }
-
-        public ActionProxy getProxy() {
-            return null;
-        }
-
-        public Result getResult() throws Exception {
-            return null;
-        }
-
-        public String getResultCode() {
-            return null;
-        }
-
-        public void setResultCode(String resultCode) {
-        }
-
-        public OgnlValueStack getStack() {
-            return null;
-        }
-
-        public void addPreResultListener(PreResultListener listener) {
-        }
-
-        public String invoke() throws Exception {
-            return null;
-        }
-
-        public String invokeActionOnly() throws Exception {
-            return null;
-        }
-    }
-}
diff --git a/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/VelocityPageFilter.java b/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/VelocityPageFilter.java
deleted file mode 100644
index 0272ba2..0000000
--- a/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/VelocityPageFilter.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.sitemesh;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.views.velocity.VelocityManager;
-import org.apache.velocity.Template;
-import org.apache.velocity.context.Context;
-
-import com.opensymphony.module.sitemesh.Decorator;
-import com.opensymphony.module.sitemesh.HTMLPage;
-import com.opensymphony.module.sitemesh.Page;
-import com.opensymphony.xwork2.ActionContext;
-
-
-/**
- *  Applies Velocity-based decorators
- * 
- */
-public class VelocityPageFilter extends TemplatePageFilter {
-    private static final Log LOG = LogFactory.getLog(VelocityPageFilter.class);
-
-    /**
-     *  Applies the decorator, using the relevent contexts
-     * 
-     * @param page The page
-     * @param decorator The decorator
-     * @param req The servlet request
-     * @param res The servlet response
-     * @param servletContext The servlet context
-     * @param ctx The action context for this request, populated with the server state
-     */
-    protected void applyDecorator(Page page, Decorator decorator,
-                                  HttpServletRequest req, HttpServletResponse res,
-                                  ServletContext servletContext, ActionContext ctx)
-            throws ServletException, IOException {
-        try {
-            VelocityManager vm = VelocityManager.getInstance();
-
-            // init (if needed)
-            vm.init(servletContext);
-
-            // get encoding
-            String encoding = getEncoding();
-
-            // get the template and context
-            Template template = vm.getVelocityEngine().getTemplate(decorator.getPage(), encoding);
-            Context context = vm.createContext(ctx.getValueStack(), req, res);
-
-            // put the page in the context
-            context.put("page", page);
-            if (page instanceof HTMLPage) {
-                HTMLPage htmlPage = ((HTMLPage) page);
-                context.put("head", htmlPage.getHead());
-            }
-            context.put("title",page.getTitle());
-            context.put("body",page.getBody());
-
-            // finally, render it
-            PrintWriter writer = res.getWriter();
-            template.merge(context, writer);
-            writer.flush();
-        } catch (Exception e) {
-            String msg = "Error applying decorator: " + e.getMessage();
-            LOG.error(msg, e);
-            throw new ServletException(msg, e);
-        }
-    }
-}
diff --git a/trunk/plugins/struts1/pom.xml b/trunk/plugins/struts1/pom.xml
deleted file mode 100644
index 7d4cf68..0000000
--- a/trunk/plugins/struts1/pom.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-struts1-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 Struts 1 Plugin</name>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts-core</artifactId>
-            <version>1.3.5</version>
-        </dependency>
-      
-        <dependency>
-            <groupId>mockobjects</groupId>
-            <artifactId>mockobjects-core</artifactId>
-            <version>0.09</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/ActionFormResetInterceptor.java b/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/ActionFormResetInterceptor.java
deleted file mode 100644
index 45fab1e..0000000
--- a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/ActionFormResetInterceptor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * $Id: Action.java 240373 2005-08-27 01:58:39Z jmitchell $
- *
- * Copyright 2000-2004 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.struts2.s1;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.dispatcher.Dispatcher;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-import com.opensymphony.xwork2.interceptor.ScopedModelDriven;
-
-/**
- *  Calls the reset() method on the ActionForm, if it exists.
- */
-public class ActionFormResetInterceptor extends AbstractInterceptor {
-
-    @Override
-    public String intercept(ActionInvocation invocation) throws Exception {
-        Object action = invocation.getAction();
-
-        if (action instanceof ScopedModelDriven) {
-            ScopedModelDriven modelDriven = (ScopedModelDriven) action;
-            Object model = modelDriven.getModel();
-            if (model != null && model instanceof ActionForm) {
-                Struts1Factory factory = new Struts1Factory(Dispatcher.getInstance().getConfigurationManager().getConfiguration());
-                ActionMapping mapping = factory.createActionMapping(invocation.getProxy().getConfig());
-                HttpServletRequest req = ServletActionContext.getRequest();
-                ((ActionForm)model).reset(mapping, req);
-            }
-        }
-        return invocation.invoke();
-    }
-}
diff --git a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/ActionFormValidationInterceptor.java b/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/ActionFormValidationInterceptor.java
deleted file mode 100644
index bc92f1e..0000000
--- a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/ActionFormValidationInterceptor.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * $Id: Action.java 240373 2005-08-27 01:58:39Z jmitchell $
- *
- * Copyright 2000-2004 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.struts2.s1;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.UnavailableException;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.validator.ValidatorResources;
-import org.apache.struts.Globals;
-import org.apache.struts.action.ActionErrors;
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionServlet;
-import org.apache.struts.config.ModuleConfig;
-import org.apache.struts.validator.ValidatorPlugIn;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.util.ServletContextAware;
-import org.xml.sax.SAXException;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.TextProvider;
-import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-import com.opensymphony.xwork2.interceptor.ScopedModelDriven;
-
-/**
- *  Calls the validate() method on the ActionForm, if it exists.  The errors are handled
- *  like regular XWork validation errors.  Action-level validation flag supported if the
- *  action is a subclass of Struts1Action.
- */
-public class ActionFormValidationInterceptor extends AbstractInterceptor {
-
-    private String pathnames;
-    private boolean stopOnFirstError;
-    private boolean initialized = false;
-    
-    private static final Log log = LogFactory.getLog(ActionFormValidationInterceptor.class);
-    
-    /**
-     * Delimitter for Validator resources.
-     */
-    private final static String RESOURCE_DELIM = ",";
-    
-    /**
-     * Initializes the validation resources
-     */
-    private void initResources(ServletContext servletContext) {
-        if (pathnames != null) {
-            ActionContext ctx = ActionContext.getContext();
-            try {
-                
-                ValidatorResources resources = this.loadResources(servletContext);
-    
-                
-                String prefix = ctx.getActionInvocation().getProxy().getNamespace();
-                
-                
-                servletContext.setAttribute(ValidatorPlugIn.VALIDATOR_KEY + prefix, resources);
-    
-                servletContext.setAttribute(ValidatorPlugIn.STOP_ON_ERROR_KEY + '.'
-                    + prefix,
-                    (this.stopOnFirstError ? Boolean.TRUE : Boolean.FALSE));
-            } catch (Exception e) {
-                throw new StrutsException(
-                    "Cannot load a validator resource from '" + pathnames + "'", e);
-            }
-        }
-    }
-
-    @Override
-    public String intercept(ActionInvocation invocation) throws Exception {
-        // Lazy load the resources because the servlet context isn't available at init() time
-        synchronized (this) {
-            if (!initialized) {
-                initResources(ServletActionContext.getServletContext());
-                initialized = true;
-            }
-        }
-        Object action = invocation.getAction();
-
-        
-        if ((action instanceof ScopedModelDriven) &&
-            (!(action instanceof Struts1Action) || ((Struts1Action)action).isValidate())) {
-            ScopedModelDriven modelDriven = (ScopedModelDriven) action;
-            Object model = modelDriven.getModel();
-            if (model != null) {
-                HttpServletRequest req = ServletActionContext.getRequest();
-                Struts1Factory strutsFactory = new Struts1Factory(Dispatcher.getInstance().getConfigurationManager().getConfiguration());
-                ActionMapping mapping = strutsFactory.createActionMapping(invocation.getProxy().getConfig());
-                ModuleConfig moduleConfig = strutsFactory.createModuleConfig(invocation.getProxy().getConfig().getPackageName());
-                req.setAttribute(Globals.MODULE_KEY, moduleConfig);
-                req.setAttribute(Globals.MESSAGES_KEY, new WrapperMessageResources((TextProvider)invocation.getAction()));
-                
-                mapping.setAttribute(modelDriven.getScopeKey());
-                
-                ActionForm form = (ActionForm) model;
-                form.setServlet(new ActionServlet(){
-                    public ServletContext getServletContext() {
-                        return ServletActionContext.getServletContext();
-                    }
-                });
-                ActionErrors errors = form.validate(mapping, req);
-                strutsFactory.convertErrors(errors, action);                
-            }
-        }
-        return invocation.invoke();
-    }
-    
-    /**
-     * Initialize the validator resources for this module.
-     *
-     * @throws IOException      if an input/output error is encountered
-     * @throws ServletException if we cannot initialize these resources
-     */
-    protected ValidatorResources loadResources(ServletContext ctx)
-        throws IOException, ServletException {
-        if ((pathnames == null) || (pathnames.length() <= 0)) {
-            return null;
-        }
-
-        StringTokenizer st = new StringTokenizer(pathnames, RESOURCE_DELIM);
-
-        List urlList = new ArrayList();
-        ValidatorResources resources = null;
-        try {
-            while (st.hasMoreTokens()) {
-                String validatorRules = st.nextToken().trim();
-
-                if (log.isInfoEnabled()) {
-                    log.info("Loading validation rules file from '"
-                        + validatorRules + "'");
-                }
-
-                URL input =
-                    ctx.getResource(validatorRules);
-
-                // If the config isn't in the servlet context, try the class
-                // loader which allows the config files to be stored in a jar
-                if (input == null) {
-                    input = getClass().getResource(validatorRules);
-                }
-
-                if (input != null) {
-                    urlList.add(input);
-                } else {
-                    throw new ServletException(
-                        "Skipping validation rules file from '"
-                        + validatorRules + "'.  No url could be located.");
-                }
-            }
-
-            int urlSize = urlList.size();
-            String[] urlArray = new String[urlSize];
-
-            for (int urlIndex = 0; urlIndex < urlSize; urlIndex++) {
-                URL url = (URL) urlList.get(urlIndex);
-
-                urlArray[urlIndex] = url.toExternalForm();
-            }
-
-            resources =  new ValidatorResources(urlArray);
-        } catch (SAXException sex) {
-            log.error("Skipping all validation", sex);
-            throw new StrutsException("Skipping all validation because the validation files cannot be loaded", sex);
-        }
-        return resources;
-    }
-
-    /**
-     * @return the pathnames
-     */
-    public String getPathnames() {
-        return pathnames;
-    }
-
-    /**
-     * @param pathnames the pathnames to set
-     */
-    public void setPathnames(String pathNames) {
-        this.pathnames = pathNames;
-    }
-
-    /**
-     * @return the stopOnFirstError
-     */
-    public boolean isStopOnFirstError() {
-        return stopOnFirstError;
-    }
-
-    /**
-     * @param stopOnFirstError the stopOnFirstError to set
-     */
-    public void setStopOnFirstError(boolean stopOnFirstError) {
-        this.stopOnFirstError = stopOnFirstError;
-    }
-
-}
diff --git a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/DynaBeanPropertyAccessor.java b/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/DynaBeanPropertyAccessor.java
deleted file mode 100644
index 0758d25..0000000
--- a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/DynaBeanPropertyAccessor.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * $Id$
- * Copyright 2004 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.struts2.s1;
-
-import java.io.Serializable;
-import org.apache.commons.beanutils.DynaBean;
-import org.apache.commons.beanutils.DynaClass;
-import ognl.OgnlException;
-import ognl.PropertyAccessor;
-import java.util.Map;
-
-/**
- * Provides access to DynaBean properties in OGNL
- */
-public class DynaBeanPropertyAccessor implements PropertyAccessor {
-
-    public Object getProperty(Map context, Object target, Object name) throws OgnlException {
-        
-        if (target instanceof DynaBean && name != null) {
-            DynaBean bean = (DynaBean)target;
-            DynaClass cls = bean.getDynaClass();
-            String key = name.toString();
-            if (cls.getDynaProperty(key) != null) {
-                return bean.get(key);
-            }
-        }
-        return null;
-    }    
-
-    public void setProperty(Map context, Object target, Object name, Object value) throws OgnlException {
-        
-        if (target instanceof DynaBean && name != null) {
-            DynaBean bean = (DynaBean)target;
-            String key = name.toString();
-            bean.set(key, value);
-        }
-    }    
-
-}
diff --git a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/Struts1Action.java b/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/Struts1Action.java
deleted file mode 100644
index 99d817e..0000000
--- a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/Struts1Action.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright 2004 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.
- *
- * $Header:$
- */
-package org.apache.struts2.s1;
-
-import java.util.Arrays;
-import java.util.Iterator;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.Globals;
-import org.apache.struts.action.Action;
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionMessage;
-import org.apache.struts.action.ActionMessages;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.dispatcher.DefaultActionSupport;
-import org.apache.struts2.dispatcher.Dispatcher;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.interceptor.ScopedModelDriven;
-
-/**
- * Wraps legacy Struts 1.3 Actions.  Supports the following features:
- * <ul>
- *  <li>ActionForms</li>
- *  <li>ActionForwards that have the same name as a result</li>
- *  <li>ActionMessages stored in the request, converted to Struts 2 messages</li>
- *  <li>Action-level validation flag</li>
- * </ul>
- * Still to do:
- * <ul>
- *  <li>Custom ActionForward instances that don't have an associated result config</li>
- *  <li>setServlet() calls for the Action</li>
- *  <li>Most everything else...</li>
- * </ul>
- */
-public class Struts1Action extends DefaultActionSupport implements ScopedModelDriven<ActionForm> {
-
-    private ActionForm actionForm;
-    private String className;
-    private boolean validate;
-    private String scopeKey;
-    
-    public String execute() throws Exception {
-        ActionContext ctx = ActionContext.getContext();
-        ActionConfig actionConfig = ctx.getActionInvocation().getProxy().getConfig();
-        Action action = null;
-        try {
-            action = (Action) ObjectFactory.getObjectFactory().buildBean(className, null);
-        } catch (Exception e) {
-            throw new StrutsException("Unable to create the legacy Struts Action", e, actionConfig);
-        }
-        
-        // We should call setServlet() here, but let's stub that out later
-        
-        Struts1Factory strutsFactory = new Struts1Factory(Dispatcher.getInstance().getConfigurationManager().getConfiguration());
-        ActionMapping mapping = strutsFactory.createActionMapping(actionConfig);
-        HttpServletRequest request = ServletActionContext.getRequest();
-        HttpServletResponse response = ServletActionContext.getResponse();
-        ActionForward forward = action.execute(mapping, actionForm, request, response);
-        
-        ActionMessages messages = (ActionMessages) request.getAttribute(Globals.MESSAGE_KEY);
-        if (messages != null) {
-            for (Iterator i = messages.get(); i.hasNext(); ) {
-                ActionMessage msg = (ActionMessage) i.next();
-                if (msg.getValues() != null && msg.getValues().length > 0) {
-                    addActionMessage(getText(msg.getKey(), Arrays.asList(msg.getValues())));
-                } else {
-                    addActionMessage(getText(msg.getKey()));
-                }
-            }
-        }
-        
-        if (forward instanceof WrapperActionForward || actionConfig.getResults().containsKey(forward.getName())) {
-            return forward.getName();
-        } else {
-            throw new StrutsException("Unable to handle action forwards that don't have an associated result", actionConfig);
-        }
-    }
-    
-    public void setModel(ActionForm model) {
-        actionForm = model;
-    }
-
-    public ActionForm getModel() {
-        return actionForm;
-    }
-    
-    /**
-     * @return the validate
-     */
-    public boolean isValidate() {
-        return validate;
-    }
-
-    /**
-     * @param validate the validate to set
-     */
-    public void setValidate(boolean validate) {
-        this.validate = validate;
-    }
-
-    /**
-     * @param className the className to set
-     */
-    public void setClassName(String className) {
-        this.className = className;
-    }
-
-    public String getScopeKey() {
-        return scopeKey;
-    }
-
-    public void setScopeKey(String key) {
-        this.scopeKey = key;
-    }
-}
diff --git a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/Struts1Factory.java b/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/Struts1Factory.java
deleted file mode 100644
index 29bfe28..0000000
--- a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/Struts1Factory.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * $Id$
- * Copyright 2004 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.struts2.s1;
-
-import com.opensymphony.xwork2.*;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig;
-
-import org.apache.struts.Globals;
-import org.apache.struts.action.*;
-import org.apache.struts.config.*;
-
-import java.util.Iterator;
-import java.util.Arrays;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-
-/**
- *  Provides conversion methods between the Struts Action 1.x and XWork
- *  classes.
- */
-public class Struts1Factory {
-    
-    private Configuration configuration;
-
-    public Struts1Factory(Configuration config) {
-        this.configuration = config;
-    }
-    
-    /**
-     * Create a Struts 1.x ModuleConfig based on an XWork package configuration.
-     * 
-     * @param packageName the name of the XWork package configuration to wrap.  This becomes the module prefix for the
-     *     newly-created ModuleConfig.
-     * @return a wrapper Struts 1.x ModuleConfig.
-     */
-    public ModuleConfig createModuleConfig(String packageName) {
-        assert packageName != null;
-        return new WrapperModuleConfig(this, configuration.getPackageConfig(packageName));
-    }
-    
-    /**
-     * Create a Struts 1.x ActionMapping from an XWork ActionConfig.
-     * 
-     * @param cfg the XWork ActionConfig.
-     * @return a wrapper Struts 1.x ActionMapping.
-     */
-    public ActionMapping createActionMapping(ActionConfig cfg) {
-        assert cfg != null;
-        return new WrapperActionMapping(this, cfg);
-    }
-
-    /**
-     * Create a Struts 1.x ActionMapping from an XWork ActionConfig.  This version provides an existing action path
-     * and ModuleConfig.  Package-protected for now; may not need to be exposed publicly.
-     * 
-     * @param cfg the XWork ActionConfig.
-     * @param actionPath the Struts 1.x-style action path ('/' + action-name).
-     * @param moduleConfig the Struts 1.x ModuleConfig that contains the ActionMapping.
-     * @return a wrapper Struts 1.x ActionMapping.
-     */
-    ActionMapping createActionMapping(ActionConfig cfg, String actionPath, ModuleConfig moduleConfig) {
-        assert cfg != null;
-        assert moduleConfig != null;
-        return new WrapperActionMapping(this, cfg, actionPath, moduleConfig);
-    }
-
-    /**
-     * Create a Struts 1.x ActionForward from an XWork ResultConfig.
-     * 
-     * @param cfg the XWork ResultConfig.
-     * @return a wrapper Struts 1.x ActionMapping.
-     */
-    public ActionForward createActionForward(ResultConfig cfg) {
-        assert cfg != null;
-        return new WrapperActionForward(cfg);
-    }
-
-    /**
-     * Create a Struts 1.x ExceptionConfig from an XWork ExceptionMappingConfig.
-     * 
-     * @param cfg the XWork ExceptionMappingConfig.
-     * @return a wrapper Struts 1.x ExceptionConfig.
-     */
-    public ExceptionConfig createExceptionConfig(ExceptionMappingConfig cfg) {
-        assert cfg != null;
-        return new WrapperExceptionConfig(cfg);
-    }
-
-    public void convertErrors(ActionErrors errors, Object action) {
-        ValidationAware vaction = null;
-        TextProvider text = null;
-
-        if (action instanceof ValidationAware) {
-            vaction = (ValidationAware)action;
-        }
-        if (action instanceof TextProvider) {
-            text = (TextProvider)action;
-        }
-
-        ActionMessage error = null;
-        String field = null;
-        String msg = null;
-        Object[] values = null;
-        for (Iterator i = errors.properties(); i.hasNext(); ) {
-            field = (String) i.next();
-            for (Iterator it = errors.get(field); it.hasNext(); ) {
-                error = (ActionMessage) it.next();
-                msg = error.getKey();
-                if (error.isResource() && text != null) {
-                    values = error.getValues();
-                    if (values != null) {
-                        msg = text.getText(error.getKey(), Arrays.asList(values));
-                    } else {
-                        msg = text.getText(error.getKey());
-                    }
-                }
-                if (vaction != null) {
-                    if (field == errors.GLOBAL_MESSAGE) {
-                        vaction.addActionError(msg);
-                    } else {
-                        vaction.addFieldError(field, msg);
-                    }
-                } else {
-                    // should do something here
-                }
-            }
-        }
-    }
-}
diff --git a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperActionForward.java b/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperActionForward.java
deleted file mode 100644
index e3226ba..0000000
--- a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperActionForward.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2004 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.
- *
- * $Header:$
- */
-package org.apache.struts2.s1;
-
-import org.apache.struts.action.ActionForward;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-
-/**
- * Wrapper for a Struts 1.x ActionForward based on an XWork ResultConfig.  Using a wrapper object
- * allows us to be explicit about what is and isn't implemented.
- */
-class WrapperActionForward extends ActionForward {
-
-    private ResultConfig delegate;
-    
-    public WrapperActionForward(ResultConfig delegate) {
-        super(delegate.getName());
-        this.delegate = delegate;
-        freeze();
-    }
-
-    public String getName() {
-        return delegate.getName();
-    }
-
-    public String getPath() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public String getModule() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public boolean getRedirect() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public String toString() {
-        return "wrapper -> " + delegate.toString();
-    }
-}
diff --git a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperActionMapping.java b/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperActionMapping.java
deleted file mode 100644
index 4821448..0000000
--- a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperActionMapping.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright 2004 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.
- *
- * $Header:$
- */
-package org.apache.struts2.s1;
-
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.config.ModuleConfig;
-import org.apache.struts.config.ExceptionConfig;
-import org.apache.struts.config.ForwardConfig;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig;
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.List;
-import java.util.HashMap;
-
-/**
- * Wrapper for a Struts 1.x ActionMapping based on an XWork ActionConfig.  Using a wrapper object
- * allows us to be explicit about what is and isn't implemented.
- */
-class WrapperActionMapping extends ActionMapping {
-
-    private ActionConfig delegate;
-    private String actionPath;
-    private String attribute;
-    private Struts1Factory strutsFactory;
-
-    public WrapperActionMapping(Struts1Factory factory, ActionConfig delegate) {
-        this.delegate = delegate;
-        this.strutsFactory = factory;
-        forwards = null;
-        exceptions = null;
-    }
-
-    public WrapperActionMapping(Struts1Factory factory, ActionConfig delegate, String actionPath, ModuleConfig moduleConfig) {
-        this(factory, delegate);
-        this.moduleConfig = moduleConfig;
-        this.actionPath = actionPath;
-    }
-
-    /**
-     * Add Struts ForwardConfigs (from XWork ResultConfigs).
-     */
-    private void initActionForwards() {
-        if (forwards == null) {
-            forwards = new HashMap();
-            Map results = delegate.getResults();
-            for (Iterator i = results.entrySet().iterator(); i.hasNext();) {
-                Map.Entry entry = (Map.Entry) i.next();
-                ActionForward wrapper = strutsFactory.createActionForward((ResultConfig) entry.getValue());
-                forwards.put(wrapper.getName(), wrapper);
-            }
-        }
-    }
-                
-    /**
-     * Add XWork ExceptionConfigs (from XWork ExceptionMappingConfigs)
-     */
-    private void initExceptionConfigs() {
-        if (exceptions == null) {
-            exceptions = new HashMap();
-            List exceptionMappings = delegate.getExceptionMappings();
-            for (Iterator i = exceptionMappings.iterator(); i.hasNext();) {
-                ExceptionConfig wrapper = strutsFactory.createExceptionConfig((ExceptionMappingConfig) i.next());
-                exceptions.put(wrapper.getType(), wrapper);
-            }
-        }
-    }
-
-    public ActionForward findForward(String name) {
-        initActionForwards();
-        return super.findForward(name);
-    }
-
-    public String[] findForwards() {
-        initActionForwards();
-        return super.findForwards();
-    }
-
-    public ForwardConfig findForwardConfig(String name) {
-        initActionForwards();
-        return super.findForwardConfig(name);
-    }
-
-    public ForwardConfig[] findForwardConfigs() {
-        initActionForwards();
-        return super.findForwardConfigs();
-    }
-
-    public ExceptionConfig findExceptionConfig(String type) {
-        initExceptionConfigs();
-        return super.findExceptionConfig(type);
-    }
-
-    public ExceptionConfig[] findExceptionConfigs() {
-        initExceptionConfigs();
-        return super.findExceptionConfigs();
-    }
-
-    public ExceptionConfig findException(Class type) {
-        initExceptionConfigs();
-        return super.findException(type);
-    }
-
-    public ActionForward getInputForward() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public ModuleConfig getModuleConfig() {
-        if (moduleConfig == null) {
-            moduleConfig = strutsFactory.createModuleConfig(delegate.getPackageName());
-        }
-
-        return moduleConfig;
-    }
-
-    public void setModuleConfig(ModuleConfig moduleConfig) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getAttribute() {
-        return attribute;
-    }
-
-    public void setAttribute(String attribute) {
-        this.attribute = attribute;
-    }
-
-    public String getForward() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setForward(String forward) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getInclude() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setInclude(String include) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getInput() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setInput(String input) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getMultipartClass() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setMultipartClass(String multipartClass) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getName() {
-        // Note: in Struts, this is a name reference to a form bean defined in the config file.
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setName(String name) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getParameter() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setParameter(String parameter) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getPath() {
-        return actionPath;
-    }
-
-    public void setPath(String path) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getPrefix() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setPrefix(String prefix) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getRoles() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setRoles(String roles) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String[] getRoleNames() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public String getScope() {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void setScope(String scope) {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public String getSuffix() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setSuffix(String suffix) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getType() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setType(String type) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public boolean getUnknown() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setUnknown(boolean unknown) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public boolean getValidate() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setValidate(boolean validate) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void removeExceptionConfig(ExceptionConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void removeForwardConfig(ForwardConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void addExceptionConfig(ExceptionConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void addForwardConfig(ForwardConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String toString() {
-        return "wrapper -> " + delegate.toString();
-    }
-}
diff --git a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperExceptionConfig.java b/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperExceptionConfig.java
deleted file mode 100644
index a2ddf0b..0000000
--- a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperExceptionConfig.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2004 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.
- *
- * $Header:$
- */
-package org.apache.struts2.s1;
-
-import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig;
-import org.apache.struts.config.ExceptionConfig;
-
-/**
- * Wrapper for a Struts 1.x ExceptionConfig based on an XWork ExceptionMappingConfig.  Using a
- * wrapper object allows us to be explicit about what is and isn't implemented.
- */
-class WrapperExceptionConfig extends ExceptionConfig {
-
-    private ExceptionMappingConfig delegate;
-
-    public WrapperExceptionConfig(ExceptionMappingConfig delegate) {
-        this.delegate = delegate;
-        freeze();
-    }
-
-    public String getBundle() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public String getHandler() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public String getKey() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public String getPath() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public String getScope() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public String getType() {
-        return delegate.getExceptionClassName();
-    }
-
-    public String toString() {
-        return "wrapper -> " + delegate.toString();
-    }
-}
diff --git a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperMessageResources.java b/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperMessageResources.java
deleted file mode 100644
index 9146c87..0000000
--- a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperMessageResources.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * $Id$
- * Copyright 2004 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.struts2.s1;
-
-import java.util.Locale;
-
-import org.apache.struts.util.MessageResources;
-
-import com.opensymphony.xwork2.TextProvider;
-
-/**
- * Wraps the Struts 1 message resources, delegating to Struts 2 resources
- */
-public class WrapperMessageResources extends MessageResources {
-
-    private TextProvider textProvider;
-
-    public WrapperMessageResources(TextProvider provider) {
-        super(null, null, true);
-        this.textProvider = provider;
-    }
-
-    @Override
-    public String getMessage(Locale locale, String key) {
-        String msg = textProvider.getText(key);
-        return msg; 
-    }
-
-}
diff --git a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperModuleConfig.java b/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperModuleConfig.java
deleted file mode 100644
index 51a1f93..0000000
--- a/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/WrapperModuleConfig.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright 2004 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.
- *
- * $Header:$
- */
-package org.apache.struts2.s1;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.struts.config.ActionConfig;
-import org.apache.struts.config.ControllerConfig;
-import org.apache.struts.config.ExceptionConfig;
-import org.apache.struts.config.FormBeanConfig;
-import org.apache.struts.config.ForwardConfig;
-import org.apache.struts.config.MessageResourcesConfig;
-import org.apache.struts.config.ModuleConfig;
-import org.apache.struts.config.PlugInConfig;
-
-import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-
-/**
- * Wrapper for a Struts 1.x ModuleConfig based on an XWork PackageConfig.  Using a wrapper object
- * allows us to be explicit about what is and isn't implemented.
- */
-class WrapperModuleConfig implements ModuleConfig {
-
-    private Struts1Factory strutsFactory;
-    private PackageConfig delegate;
-    private Map _actionMappings;
-    private Map _exceptionConfigs;
-    private Map _actionForwards;
-
-    public WrapperModuleConfig(Struts1Factory factory, PackageConfig config) {
-        delegate = config;
-        this.strutsFactory = factory;
-    }
-
-    /**
-     * Add Struts ActionMappings (from XWork ExceptionConfigs).
-     */
-    private void initActionMappings() {
-
-        if (_actionMappings == null) {
-            _actionMappings = new HashMap();
-            for (Iterator i = delegate.getActionConfigs().entrySet().iterator(); i.hasNext();) {
-                Map.Entry entry = (Map.Entry) i.next();
-                String actionPath = '/' + (String) entry.getKey();
-                com.opensymphony.xwork2.config.entities.ActionConfig actionConfig =
-                        (com.opensymphony.xwork2.config.entities.ActionConfig) entry.getValue();
-                _actionMappings.put(actionPath, strutsFactory.createActionMapping(actionConfig, actionPath, this));
-            }
-        }
-    }
-
-    /**
-     * Add Struts ExceptionConfigs (from XWork ExceptionMappingConfigs).
-     */
-    private void initExceptionConfigs() {
-        if (_exceptionConfigs == null) {
-            _exceptionConfigs = new HashMap();
-            for (Iterator i = delegate.getGlobalExceptionMappingConfigs().iterator(); i.hasNext();) {
-                ExceptionMappingConfig config = (ExceptionMappingConfig) i.next();
-                _exceptionConfigs.put(config.getExceptionClassName(), strutsFactory.createExceptionConfig(config));
-            }
-        }
-    }
-
-    /**
-     * Add Struts ActionForwards (from XWork ResultConfigs).
-     */
-    private void initActionForwards() {
-        if (_actionForwards == null) {
-            _actionForwards = new HashMap();
-            for (Iterator i = delegate.getGlobalResultConfigs().entrySet().iterator(); i.hasNext();) {
-                Map.Entry entry = (Map.Entry) i.next();
-                String name = (String) entry.getKey();
-                ResultConfig config = (ResultConfig) entry.getValue();
-                _actionForwards.put(name, strutsFactory.createActionForward(config));
-            }
-        }
-    }
-
-    public String getPrefix() {
-        return delegate.getNamespace();
-    }
-
-    public void setPrefix(String prefix) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public boolean getConfigured() {
-        return true;
-    }
-
-    public ControllerConfig getControllerConfig() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setControllerConfig(ControllerConfig cc) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getActionFormBeanClass() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setActionFormBeanClass(String actionFormBeanClass) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getActionMappingClass() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setActionMappingClass(String actionMappingClass) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void addActionConfig(ActionConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void addExceptionConfig(ExceptionConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void addFormBeanConfig(FormBeanConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public String getActionForwardClass() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void setActionForwardClass(String actionForwardClass) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void addForwardConfig(ForwardConfig config) {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void addMessageResourcesConfig(MessageResourcesConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void addPlugInConfig(PlugInConfig plugInConfig) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public ActionConfig findActionConfig(String path) {
-        initActionMappings();
-        return (ActionConfig) _actionMappings.get(path);
-    }
-
-    public ActionConfig[] findActionConfigs() {
-        initActionMappings();
-        return (ActionConfig[]) _actionMappings.values().toArray(new ActionConfig[_actionMappings.size()]);
-    }
-
-    public ExceptionConfig findExceptionConfig(String type) {
-        initExceptionConfigs();
-        return (ExceptionConfig) _exceptionConfigs.get(type);
-    }
-
-    public ExceptionConfig[] findExceptionConfigs() {
-        initExceptionConfigs();
-        return (ExceptionConfig[]) _exceptionConfigs.values().toArray(new ExceptionConfig[_exceptionConfigs.size()]);
-    }
-
-    public FormBeanConfig findFormBeanConfig(String name) {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public FormBeanConfig[] findFormBeanConfigs() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public ForwardConfig findForwardConfig(String name) {
-        initActionForwards();
-        return (ForwardConfig) _actionForwards.get(name);
-    }
-
-    public ForwardConfig[] findForwardConfigs() {
-        initActionForwards();
-        return (ForwardConfig[]) _actionForwards.values().toArray(new ForwardConfig[_actionForwards.size()]);
-    }
-
-    public MessageResourcesConfig findMessageResourcesConfig(String key) {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public MessageResourcesConfig[] findMessageResourcesConfigs() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public PlugInConfig[] findPlugInConfigs() {
-        throw new UnsupportedOperationException("NYI");
-    }
-
-    public void freeze() {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void removeActionConfig(ActionConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void removeExceptionConfig(ExceptionConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void removeFormBeanConfig(FormBeanConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void removeForwardConfig(ForwardConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public void removeMessageResourcesConfig(MessageResourcesConfig config) {
-        throw new UnsupportedOperationException("Not implemented - immutable");
-    }
-
-    public ExceptionConfig findException(Class arg0) {
-        throw new UnsupportedOperationException("NYI");
-    }
-}
diff --git a/trunk/plugins/struts1/src/main/resources/struts-plugin.xml b/trunk/plugins/struts1/src/main/resources/struts-plugin.xml
deleted file mode 100644
index 2d7bfae..0000000
--- a/trunk/plugins/struts1/src/main/resources/struts-plugin.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-    
-<struts>
-    <package name="struts1-default" extends="struts-default">
-
-        <interceptors>
-            <interceptor name="actionForm-reset" class="org.apache.struts2.s1.ActionFormResetInterceptor"/>
-            <interceptor name="actionForm-validation" class="org.apache.struts2.s1.ActionFormValidationInterceptor"/>
-            <interceptor name="actionForm-commonsValidation" class="org.apache.struts2.s1.ActionFormValidationInterceptor">
-            	<param name="pathnames">/org/apache/struts/validator/validator-rules.xml,/WEB-INF/validation.xml</param>
-            </interceptor>
-            <interceptor-stack name="struts1Stack">
-	    		<interceptor-ref name="static-params"/>
-	    		<interceptor-ref name="scoped-model-driven"/>
-	    		<interceptor-ref name="model-driven"/>
-                <interceptor-ref name="actionForm-reset"/>
-                <interceptor-ref name="basicStack"/>
-                <interceptor-ref name="actionForm-validation"/>
-                <interceptor-ref name="workflow"/>
-	    	</interceptor-stack>
-        </interceptors>
-        
-        <default-interceptor-ref name="struts1Stack"/>
-    </package>
-
-</struts>
diff --git a/trunk/plugins/struts1/src/test/java/org/apache/struts2/s1/DynaBeanPropertyAccessorTest.java b/trunk/plugins/struts1/src/test/java/org/apache/struts2/s1/DynaBeanPropertyAccessorTest.java
deleted file mode 100644
index 3c74bd0..0000000
--- a/trunk/plugins/struts1/src/test/java/org/apache/struts2/s1/DynaBeanPropertyAccessorTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package org.apache.struts2.s1;
-
-import junit.framework.*;
-import java.io.*;
-import java.util.*;
-import org.apache.commons.beanutils.*;
-
-import ognl.*;
-
-/**  Description of the Class */
-public class DynaBeanPropertyAccessorTest extends TestCase {
-
-    protected DynaBean bean = null;
-    
-    public DynaBeanPropertyAccessorTest(String name) throws Exception {
-        super(name);
-    }
-
-
-    public static void main(String args[]) {
-        junit.textui.TestRunner.run(DynaBeanPropertyAccessorTest.class);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() throws Exception {
-
-        // Instantiate a new DynaBean instance
-        DynaClass dynaClass = createDynaClass();
-        bean = dynaClass.newInstance();
-
-        // Initialize the DynaBean's property values (like TestBean)
-        bean.set("booleanProperty", new Boolean(true));
-        bean.set("booleanSecond", new Boolean(true));
-        bean.set("doubleProperty", new Double(321.0));
-        bean.set("floatProperty", new Float((float) 123.0));
-        int intArray[] = { 0, 10, 20, 30, 40 };
-        bean.set("intArray", intArray);
-        int intIndexed[] = { 0, 10, 20, 30, 40 };
-        bean.set("intIndexed", intIndexed);
-        bean.set("intProperty", new Integer(123));
-        List listIndexed = new ArrayList();
-        listIndexed.add("String 0");
-        listIndexed.add("String 1");
-        listIndexed.add("String 2");
-        listIndexed.add("String 3");
-        listIndexed.add("String 4");
-        bean.set("listIndexed", listIndexed);
-        bean.set("longProperty", new Long((long) 321));
-        HashMap mappedProperty = new HashMap();
-        mappedProperty.put("First Key", "First Value");
-        mappedProperty.put("Second Key", "Second Value");
-        bean.set("mappedProperty", mappedProperty);
-        HashMap mappedIntProperty = new HashMap();
-        mappedIntProperty.put("One", new Integer(1));
-        mappedIntProperty.put("Two", new Integer(2));
-        bean.set("mappedIntProperty", mappedIntProperty);
-        // Property "nullProperty" is not initialized, so it should return null
-        bean.set("shortProperty", new Short((short) 987));
-        String stringArray[] =
-                { "String 0", "String 1", "String 2", "String 3", "String 4" };
-        bean.set("stringArray", stringArray);
-        String stringIndexed[] =
-                { "String 0", "String 1", "String 2", "String 3", "String 4" };
-        bean.set("stringIndexed", stringIndexed);
-        bean.set("stringProperty", "This is a string");
-
-    }
-
-
-
-
-    public void testGetProperty() throws Exception {
-        
-        DynaBeanPropertyAccessor trans = new DynaBeanPropertyAccessor();
-        assertTrue("This is a string".equals(trans.getProperty(null, bean, "stringProperty"))); 
-        assertTrue(trans.getProperty(null, bean, "listIndexed") instanceof List); 
-        
-    }
-
-    public void testSetProperty() throws Exception {
-        
-        DynaBeanPropertyAccessor trans = new DynaBeanPropertyAccessor();
-        trans.setProperty(null, bean, "stringProperty", "bob");
-        assertTrue("bob".equals(trans.getProperty(null, bean, "stringProperty"))); 
-        
-    }
-
-    public void testOGNL() throws Exception {
-        
-        OgnlRuntime.setPropertyAccessor(DynaBean.class, new DynaBeanPropertyAccessor());
-
-        assertTrue("This is a string".equals(Ognl.getValue("stringProperty", bean)));
-
-    }
-
-
-    /**
-     * Create and return a <code>DynaClass</code> instance for our test
-     * <code>DynaBean</code>.
-     */
-    protected DynaClass createDynaClass() {
-
-        int intArray[] = new int[0];
-        String stringArray[] = new String[0];
-
-        DynaClass dynaClass = new BasicDynaClass
-                ("TestDynaClass", null,
-                        new DynaProperty[]{
-                            new DynaProperty("booleanProperty", Boolean.TYPE),
-                            new DynaProperty("booleanSecond", Boolean.TYPE),
-                            new DynaProperty("doubleProperty", Double.TYPE),
-                            new DynaProperty("floatProperty", Float.TYPE),
-                            new DynaProperty("intArray", intArray.getClass()),
-                            new DynaProperty("intIndexed", intArray.getClass()),
-                            new DynaProperty("intProperty", Integer.TYPE),
-                            new DynaProperty("listIndexed", List.class),
-                            new DynaProperty("longProperty", Long.TYPE),
-                            new DynaProperty("mappedProperty", Map.class),
-                            new DynaProperty("mappedIntProperty", Map.class),
-                            new DynaProperty("nullProperty", String.class),
-                            new DynaProperty("shortProperty", Short.TYPE),
-                            new DynaProperty("stringArray", stringArray.getClass()),
-                            new DynaProperty("stringIndexed", stringArray.getClass()),
-                            new DynaProperty("stringProperty", String.class),
-                        });
-        return (dynaClass);
-
-    }
-
-
-}
-
diff --git a/trunk/plugins/struts1/src/test/java/org/apache/struts2/s1/Struts1FactoryTest.java b/trunk/plugins/struts1/src/test/java/org/apache/struts2/s1/Struts1FactoryTest.java
deleted file mode 100644
index e1441b5..0000000
--- a/trunk/plugins/struts1/src/test/java/org/apache/struts2/s1/Struts1FactoryTest.java
+++ /dev/null
@@ -1,234 +0,0 @@
-package org.apache.struts2.s1;
-
-import java.lang.reflect.InvocationTargetException;
-
-import junit.framework.TestCase;
-
-import org.apache.struts.action.ActionErrors;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionMessage;
-import org.apache.struts.config.ActionConfig;
-import org.apache.struts.config.ExceptionConfig;
-import org.apache.struts.config.ForwardConfig;
-import org.apache.struts.config.ModuleConfig;
-import org.apache.struts2.config.StrutsXmlConfigurationProvider;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.ConfigurationProvider;
-import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-
-/**
- * Test of Struts1Factory, which creates Struts 1.x wrappers around XWork config objects.
- */
-public class Struts1FactoryTest extends TestCase {
-
-    private static final String PACKAGE_NAME = "org/apache/struts2/s1";
-    
-    protected Struts1Factory factory = null;
-    protected Configuration config;
-
-    public Struts1FactoryTest(String name) throws Exception {
-        super(name);
-    }
-
-
-    public static void main(String args[]) {
-        junit.textui.TestRunner.run(Struts1FactoryTest.class);
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    public void setUp() {
-        ConfigurationManager manager = new ConfigurationManager();
-        ConfigurationProvider provider = new StrutsXmlConfigurationProvider(PACKAGE_NAME + "/test-struts-factory.xml", true);
-        manager.addConfigurationProvider(provider);
-        config = manager.getConfiguration();
-        factory = new Struts1Factory(config);
-    }
-
-    /**
-     * Test the creation of a Struts 1.x ModuleConfig wrapper around an XWork PackageConfig.
-     * The PackageConfig is loaded from test-struts-factory.xml.
-     */
-    public void testCreateModuleConfig() {
-        ModuleConfig moduleConfig = factory.createModuleConfig(PACKAGE_NAME);
-        assertNotNull(moduleConfig);
-        
-        assertEquals("/"+PACKAGE_NAME, moduleConfig.getPrefix());
-        
-        ActionConfig actionConfig = moduleConfig.findActionConfig("/action1");
-        assertNotNull(actionConfig);
-        assertEquals("/action1", actionConfig.getPath());
-        
-        ActionConfig[] actionConfigs = moduleConfig.findActionConfigs();
-        assertNotNull(actionConfigs);
-        assertEquals(2, actionConfigs.length);
-        
-        ExceptionConfig exceptionConfig = moduleConfig.findExceptionConfig(Exception.class.getName());
-        assertNotNull(exceptionConfig);
-        assertEquals(Exception.class.getName(), exceptionConfig.getType());
-        
-        ExceptionConfig[] exceptionConfigs = moduleConfig.findExceptionConfigs();
-        assertNotNull(exceptionConfigs);
-        assertEquals(1, exceptionConfigs.length);
-        
-        ForwardConfig fwdConfig = moduleConfig.findForwardConfig("globalResult");
-        assertNotNull(fwdConfig);
-        assertEquals("globalResult", fwdConfig.getName());
-        
-        // These methods are currently not implemented -- replace as functionality is added.
-        assertNYI(moduleConfig, "getControllerConfig", null);
-        assertNYI(moduleConfig, "getActionFormBeanClass", null);
-        assertNYI(moduleConfig, "getActionMappingClass", null);
-        assertNYI(moduleConfig, "getActionForwardClass", null);
-        assertNYI(moduleConfig, "findException", Class.class);
-        assertNYI(moduleConfig, "findFormBeanConfig", String.class);
-        assertNYI(moduleConfig, "findFormBeanConfigs", null);
-        assertNYI(moduleConfig, "findMessageResourcesConfig", String.class);
-        assertNYI(moduleConfig, "findMessageResourcesConfigs", null);
-        assertNYI(moduleConfig, "findPlugInConfigs", null);
-    }
-    
-    /**
-     * Test the creation of a Struts 1.x ActionMapping wrapper around an XWork ActionConfig.
-     * The ActionConfig is loaded from test-struts-factory.xml.
-     */
-    public void testCreateActionMapping() {
-        PackageConfig packageConfig = config.getPackageConfig(PACKAGE_NAME);
-        com.opensymphony.xwork2.config.entities.ActionConfig actionConfig =
-                (com.opensymphony.xwork2.config.entities.ActionConfig) packageConfig.getActionConfigs().get("action1");
-        ActionMapping mapping = factory.createActionMapping(actionConfig);
-        assertNotNull(mapping);
-
-        assertNotNull(mapping.findForward("result1"));
-        assertNotNull(mapping.findForwardConfig("result2"));
-
-        ForwardConfig[] configs = mapping.findForwardConfigs();
-        assertNotNull(configs);
-        assertEquals(2, configs.length);
-
-        String[] forwards = mapping.findForwards();
-        assertNotNull(forwards);
-        assertEquals(2, forwards.length);
-        
-        ActionForward fwd = mapping.findForward("result1");
-        assertNotNull(fwd);
-        assertEquals("result1", fwd.getName());
-
-        assertNotNull(mapping.findException(NullPointerException.class));
-        assertNotNull(mapping.findExceptionConfig("java.lang.IllegalStateException"));
-
-        ExceptionConfig[] exceptionConfigs = mapping.findExceptionConfigs();
-        assertNotNull(exceptionConfigs);
-        assertEquals(3, exceptionConfigs.length);
-        
-        ModuleConfig moduleConfig = mapping.getModuleConfig();
-        assertNotNull(moduleConfig);
-        
-        // For now, the path will be null if the ActionMapping was created on its own (as opposed to from a
-        // WrapperModuleConfig, which knows the path).
-        assertNull(mapping.getPath());
-        
-        // These methods are currently not implemented -- replace as functionality is added.
-        assertNYI(mapping, "getInputForward", null);
-        assertNYI(mapping, "getForward", null);
-        assertNYI(mapping, "getInclude", null);
-        assertNYI(mapping, "getInput", null);
-        assertNYI(mapping, "getMultipartClass", null);
-        assertNYI(mapping, "getName", null);
-        assertNYI(mapping, "getParameter", null);
-        assertNYI(mapping, "getPrefix", null);
-        assertNYI(mapping, "getRoles", null);
-        assertNYI(mapping, "getRoleNames", null);
-        assertNYI(mapping, "getScope", null);
-        assertNYI(mapping, "getSuffix", null);
-        assertNYI(mapping, "getType", null);
-        assertNYI(mapping, "getUnknown", null);
-        assertNYI(mapping, "getValidate", null);
-    }
-
-    /**
-     * Test the creation of a Struts 1.x ActionForward wrapper around an XWork ResultConfig.
-     * The ResultConfig is loaded from test-struts-factory.xml.
-     */
-    public void testCreateActionForward() {
-        PackageConfig packageConfig = config.getPackageConfig(PACKAGE_NAME);
-        ResultConfig resultConfig = (ResultConfig) packageConfig.getGlobalResultConfigs().get("globalResult");
-        ActionForward fwd = factory.createActionForward(resultConfig);
-        assertNotNull(fwd);
-        assertEquals("globalResult", fwd.getName());
-        
-        // These methods are currently not implemented -- replace as functionality is added.
-        assertNYI(fwd, "getPath", null);
-        assertNYI(fwd, "getModule", null);
-        assertNYI(fwd, "getRedirect", null);
-    }
-
-    /**
-     * Test the creation of a Struts 1.x ExceptionConfig wrapper around an XWork ExceptionHandlerConfig.
-     * The ExceptionConfig is loaded from test-struts-factory.xml.
-     */
-    public void testCreateExceptionConfig() {
-        PackageConfig packageConfig = config.getPackageConfig(PACKAGE_NAME);
-        ExceptionMappingConfig cfg = (ExceptionMappingConfig) packageConfig.getGlobalExceptionMappingConfigs().get(0);
-        ExceptionConfig exceptionConfig = factory.createExceptionConfig(cfg);
-        assertNotNull(exceptionConfig);
-        assertEquals(Exception.class.getName(), exceptionConfig.getType());
-
-        assertNYI(exceptionConfig, "getBundle", null);
-        assertNYI(exceptionConfig, "getHandler", null);
-        assertNYI(exceptionConfig, "getKey", null);
-        assertNYI(exceptionConfig, "getPath", null);
-        assertNYI(exceptionConfig, "getScope", null);
-    }
-
-    public void testConvertErrors() throws Exception {
-
-        ActionMessage err1 = new ActionMessage("error1");
-        ActionMessage err2 = new ActionMessage("error2", new Integer(1));
-        ActionErrors errors = new ActionErrors();
-        errors.add(errors.GLOBAL_MESSAGE, err1);
-        errors.add("foo", err2);
-
-        ActionSupport action = new ActionSupport();
-        factory.convertErrors(errors, action);
-
-        assertTrue(1 == action.getActionErrors().size());
-        assertTrue(1 == action.getFieldErrors().size());
-    }
-
-    /**
-     * Assert that the given method throws UnsupportedOperationException.
-     */
-    private void assertNYI(Object o, String methodName, Class argType) {
-        try {
-            Class[] argTypes = argType != null ? new Class[]{argType} : null;
-            
-            Object[] args = null;
-            if (argType != null) {
-                if (Class.class == argType) {
-                    args = new Object[]{argType};
-                } else {
-                    args = new Object[]{argType.newInstance()};
-                }
-            }
-            o.getClass().getMethod(methodName, argTypes).invoke(o, args);
-        } catch (InvocationTargetException e) {
-            Throwable cause = e.getCause();
-            assertEquals(cause.getMessage(), UnsupportedOperationException.class, cause.getClass());
-            
-            // OK -- it's what we expected
-            return;
-        } catch (Exception e) {
-            fail(e.getClass().getName() + ": " + e.getMessage());
-        }
-
-        fail("Expected UnsupportedOperationException for " + methodName + "() on " + o.getClass().getName());
-    }
-}
diff --git a/trunk/plugins/struts1/src/test/resources/org/apache/struts2/s1/test-struts-factory.xml b/trunk/plugins/struts1/src/test/resources/org/apache/struts2/s1/test-struts-factory.xml
deleted file mode 100644
index 5d18860..0000000
--- a/trunk/plugins/struts1/src/test/resources/org/apache/struts2/s1/test-struts-factory.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-    "http://struts.apache.org/dtds/struts-2.0.dtd">
-        
-<!-- Used by the TestStrutsFactory TestCase. -->
-<struts>
-  <package name="org/apache/struts2/s1" namespace="/org/apache/struts2/s1">
-    <result-types>
-      <result-type class="org.apache.struts2.dispatcher.ServletDispatcherResult" name="servletDispatcherResult"/>
-    </result-types>
-    <global-results>
-      <result name="globalResult" type="servletDispatcherResult">
-        <param name="location">noexist.jsp</param>
-      </result>
-    </global-results>
-    <global-exception-mappings>
-      <exception-mapping
-        name="globalException"
-        exception="java.lang.Exception"
-        result="globalResult"/>
-    </global-exception-mappings>
-    <action class="com.opensymphony.xwork2.ActionSupport" name="action1">
-      <result name="result1" type="servletDispatcherResult">
-        <param name="location">result1.jsp</param>
-      </result>
-      <result name="result2" type="servletDispatcherResult">
-        <param name="location">result1.jsp</param>
-      </result>
-      <exception-mapping
-        name="exception1"
-        exception="java.lang.NullPointerException"
-        result="someResult"/>
-      <exception-mapping
-        name="exception2"
-        exception="java.lang.IllegalStateException"
-        result="anotherResult"/>
-    </action>
-    <action class="com.opensymphony.xwork2.ActionSupport" name="action2"/>
-  </package>
-</struts>
-
diff --git a/trunk/plugins/tiles/pom.xml b/trunk/plugins/tiles/pom.xml
deleted file mode 100644
index 7d38a81..0000000
--- a/trunk/plugins/tiles/pom.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.struts</groupId>
-        <artifactId>struts2-plugins</artifactId>
-        <version>2.0.1</version>
-    </parent>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-tiles-plugin</artifactId>
-    <packaging>jar</packaging>
-    <name>Struts 2 Tiles Plugin</name>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.struts.tiles</groupId>
-            <artifactId>tiles-core</artifactId>
-            <version>2.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>jsp-api</artifactId>
-            <version>2.0</version>
-            <scope>provided</scope>
-        </dependency>
-
-    </dependencies>
-</project>
diff --git a/trunk/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesListener.java b/trunk/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesListener.java
deleted file mode 100644
index 3831d07..0000000
--- a/trunk/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesListener.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * $Id: StrutsSpringObjectFactory.java 439747 2006-09-03 09:22:46Z mrdon $
- *
- * Copyright 2006 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.struts2.tiles;
-
-import org.apache.tiles.listener.TilesListener;
-import org.apache.tiles.TilesUtilImpl;
-import org.apache.tiles.TilesUtil;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContext;
-
-/**
- * Custom TilesListener which can be used to allow freemarker
- * invocation from tiles components.
- *
- * @version $Rev: 397992 $ $Date$
- */
-public class StrutsTilesListener extends TilesListener {
-
-    /**
-     * The key used to identify the freemarker mask.
-     */
-    public static final String MASK_INIT_PARAM = "freemarker-mask";
-
-    /**
-     * Configured mask;
-     */
-    private String mask;
-
-    /**
-     * Initialize the tiles system, overriding the TilesUtilImpl
-     * @param servletContextEvent
-     */
-    public void contextInitialized(ServletContextEvent servletContextEvent) {
-        ServletContext context = servletContextEvent.getServletContext();
-        mask = context.getInitParameter(MASK_INIT_PARAM);
-
-        if(mask == null) {
-            mask = ".ftl";
-        }
-
-        TilesUtilImpl tilesUtil = new StrutsTilesUtilImpl();
-        TilesUtil.setTilesUtil(tilesUtil);
-        super.contextInitialized(servletContextEvent);
-    }
-}
diff --git a/trunk/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesUtilImpl.java b/trunk/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesUtilImpl.java
deleted file mode 100644
index 00b8deb..0000000
--- a/trunk/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesUtilImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * $Id: StrutsSpringObjectFactory.java 439747 2006-09-03 09:22:46Z mrdon $
- *
- * Copyright 2006 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.struts2.tiles;
-
-import org.apache.tiles.TilesUtilImpl;
-import org.apache.struts2.views.freemarker.FreemarkerResult;
-import org.apache.struts2.ServletActionContext;
-
-import javax.servlet.jsp.PageContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import freemarker.template.TemplateException;
-
-/**
- *
- * Default implementation of TilesUtil.
- * This class contains default implementation of utilities. This implementation
- * is intended to be used without Struts.
- *
- * TilesUtilImpl implementation used to intercept .ftl requests and
- * ensure that they are setup properly to take advantage of the
- * {@link FreemarkerResult}.
- *
- * @version $Id$
- *
- */
-public class StrutsTilesUtilImpl extends TilesUtilImpl {
-
-    /**
-     * The mask used to detect requests which should be intercepted.
-     */
-    private String mask;
-
-    /**
-     * Default constructor.
-     * Sets the mask to '.ftl'
-     */
-    public StrutsTilesUtilImpl() {
-        mask = ".ftl";
-    }
-
-    /**
-     * Optional constructor used to specify a specific mask.
-     * @param mask
-     */
-    public StrutsTilesUtilImpl(String mask) {
-        this.mask = mask;
-    }
-
-    /**
-     * Enhancement of the default include which allows for freemarker
-     * templates to be intercepted so that the FreemarkerResult can
-     * be used in order to setup the appropriate model.
-     *
-     * @param string the included resource
-     * @param pageContext the current page context
-     * @param b whether or not a flush should occur
-     * @throws IOException
-     * @throws ServletException
-     * @throws Exception 
-     */
-    public void doInclude(String string, PageContext pageContext, boolean b) throws Exception {
-        if(string.endsWith(".ftl")) {
-            HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
-            ActionInvocation invocation = ServletActionContext.getActionContext(request).getActionInvocation();
-            FreemarkerResult result = new FreemarkerResult();
-            try {
-                result.doExecute(string, invocation);
-            } catch (TemplateException e) {
-                log.error("Error invoking Freemarker template", e);
-                throw new ServletException("Error invoking Freemarker template.", e);
-            }
-        }
-        else {
-            super.doInclude(string, pageContext, b);
-        }
-    }
-}
diff --git a/trunk/plugins/tiles/src/main/java/org/apache/struts2/views/tiles/TilesResult.java b/trunk/plugins/tiles/src/main/java/org/apache/struts2/views/tiles/TilesResult.java
deleted file mode 100644
index 86fedc5..0000000
--- a/trunk/plugins/tiles/src/main/java/org/apache/struts2/views/tiles/TilesResult.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006 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.struts2.views.tiles;
-
-import java.util.Locale;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.dispatcher.ServletDispatcherResult;
-import org.apache.tiles.*;
-import org.apache.tiles.context.servlet.ServletTilesContext;
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.LocaleProvider;
-
-/**
- * <!-- START SNIPPET: description -->
- * Renders a view using struts-tiles.
- * <!-- END SNIPPET: description -->
- *
- * <!-- START SNIPPET: webxml -->
- * In your web.xml file, you need to add a servlet entry for TilesServlet to load the tiles
- * definitions into the ServletContext.
- *
- * &lt;servlet&gt;
- *      &lt;servlet-name&gt;tiles&lt;/servlet-name&gt;
- *      &lt;servlet-class&gt;org.apache.tiles.servlets.TilesServlet&lt;/servlet-class&gt;
- *      &lt;init-param&gt;
- *          &lt;param-name&gt;definitions-config&lt;/param-name&gt;
- *          &lt;param-value&gt;/WEB-INF/tiles-config.xml&lt;/param-value&gt;
- *      &lt;/init-param&gt;
- *      &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
- * &lt;/servlet&gt;
- * <!-- END SNIPPET: webxml -->
- *
- * <!-- START SNIPPET: strutsxml -->
- * In struts.xml, use type="tiles" on your &lt;result&gt;.
- *
- * &lt;action name="editUser" class="userAction" method="edit"&gt;
- *      &lt;result name="success" type="tiles"&gt;userForm&lt;/result&gt;
- *      &lt;result name="input" type="tiles"&gt;userList&lt;/result&gt;
- * &lt;/action&gt;
- * <!-- END SNIPPET: strutsxml -->
- *
- *
- * <!-- START SNIPPET: packageconfig -->
- *
- * Making this result type the default for the current package.
- *
- * &lt;result-types&gt;
- *      &lt;result-type name="tiles"
- * class="org.apache.struts2.views.tiles.TilesResult" default="true" /&gt;
- * &lt;/result-types&gt;
- * <!-- END SNIPPET: packageconfig -->
- *
- */
-public class TilesResult extends ServletDispatcherResult {
-
-	private static final long serialVersionUID = -3806939435493086243L;
-
-	private static final Log log = LogFactory.getLog(TilesResult.class);
-
-    protected ActionInvocation invocation;
-    private DefinitionsFactory definitionsFactory;
-
-    public TilesResult() {
-    	super();
-    }
-    
-    public TilesResult(String location) {
-    	super(location);
-    }
-    /**
-     * Dispatches to the given location. Does its forward via a RequestDispatcher. If the
-     * dispatch fails a 404 error will be sent back in the http response.
-     *
-     * @param location the location to dispatch to.
-     * @param invocation    the execution state of the action
-     * @throws Exception if an error occurs. If the dispatch fails the error will go back via the
-     *                   HTTP request.
-     */
-    public void doExecute(String location, ActionInvocation invocation) throws Exception {
-        setLocation(location);
-        this.invocation = invocation;
-
-        HttpServletRequest request = ServletActionContext.getRequest();
-        HttpServletResponse response = ServletActionContext.getResponse();
-        ServletContext servletContext = ServletActionContext.getServletContext();
-        TilesContext tilesContext = new ServletTilesContext(servletContext, request, response);
-
-        this.definitionsFactory =
-                (DefinitionsFactory) servletContext.getAttribute(TilesUtilImpl.DEFINITIONS_FACTORY);
-
-        // get component definition
-        ComponentDefinition definition = getComponentDefinition(location, this.definitionsFactory, request);
-        if (definition == null) {
-            throw new ServletException("No Tiles definition found for name '" + location + "'");
-        }
-
-        // get current component context
-        ComponentContext context = getComponentContext(definition, tilesContext);
-        ComponentContext.setContext(context, tilesContext);
-
-        // execute component controller associated with definition, if any
-        Controller controller = getController(definition, request);
-        if (controller != null) {
-            if (log.isDebugEnabled()) {
-                log.debug("Executing Tiles controller [" + controller + "]");
-            }
-            executeController(controller, context, tilesContext);
-        }
-
-        // determine the path of the definition
-        String path = getDispatcherPath(definition, request);
-        if (path == null) {
-            throw new ServletException(
-                    "Could not determine a path for Tiles definition '" + definition.getName() + "'");
-        }
-
-        super.doExecute(path, invocation);
-    }
-
-    protected Locale deduceLocale(HttpServletRequest request) {
-        if (invocation.getAction() instanceof LocaleProvider) {
-            return ((LocaleProvider) invocation.getAction()).getLocale();
-        } else {
-            return request.getLocale();
-        }
-    }
-
-    /**
-     * Determine the Tiles component definition for the given Tiles
-     * definitions factory.
-     *
-     * @param factory the Tiles definitions factory
-     * @param request current HTTP request
-     * @return the component definition
-     */
-    protected ComponentDefinition getComponentDefinition(String location, DefinitionsFactory factory, HttpServletRequest request)
-            throws Exception {
-        ComponentDefinitions definitions = factory.readDefinitions();
-        return definitions.getDefinition(location, deduceLocale(request));
-    }
-
-    /**
-     * Determine the Tiles component context for the given Tiles definition.
-     *
-     * @param definition the Tiles definition to render
-     * @param tilesContext    current TilesContext
-     * @return the component context
-     * @throws Exception if preparations failed
-     */
-    protected ComponentContext getComponentContext(ComponentDefinition definition, TilesContext tilesContext)
-            throws Exception {
-        ComponentContext context = ComponentContext.getContext(tilesContext);
-        if (context == null) {
-            context = new ComponentContext(definition.getAttributes());
-            ComponentContext.setContext(context, tilesContext);
-        } else {
-            context.addMissing(definition.getAttributes());
-        }
-        return context;
-    }
-
-    /**
-     * Determine and initialize the Tiles component controller for the
-     * given Tiles definition, if any.
-     *
-     * @param definition the Tiles definition to render
-     * @param request    current HTTP request
-     * @return the component controller to execute, or <code>null</code> if none
-     * @throws Exception if preparations failed
-     */
-    protected Controller getController(ComponentDefinition definition, HttpServletRequest request)
-            throws Exception {
-        return definition.getOrCreateController();
-    }
-
-    /**
-     * Execute the given Tiles controller.
-     *
-     * @param controller the component controller to execute
-     * @param context    the component context
-     * @param tilesContext   current tilesContext
-     * @throws Exception if controller execution failed
-     */
-    protected void executeController(
-            Controller controller, ComponentContext context, TilesContext tilesContext)
-            throws Exception {
-        controller.execute(tilesContext, context);
-    }
-
-    /**
-     * Determine the dispatcher path for the given Tiles definition,
-     * i.e. the request dispatcher path of the layout page.
-     * @param definition the Tiles definition to render
-     * @param request current HTTP request
-     * @return the path of the layout page to render
-     * @throws Exception if preparations failed
-     */
-    protected String getDispatcherPath(ComponentDefinition definition, HttpServletRequest request)
-            throws Exception {
-        Object pathAttr = null;
-        return (pathAttr != null ? pathAttr.toString() : definition.getPath());
-	}
-}
diff --git a/trunk/plugins/tiles/src/main/resources/struts-plugin.xml b/trunk/plugins/tiles/src/main/resources/struts-plugin.xml
deleted file mode 100644
index 8cb5e62..0000000
--- a/trunk/plugins/tiles/src/main/resources/struts-plugin.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE struts PUBLIC
-        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-        "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-    <package name="tiles-default" extends="struts-default">
-        <result-types>
-            <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
-        </result-types>
-    </package>
-</struts>
diff --git a/trunk/pom.xml b/trunk/pom.xml
deleted file mode 100644
index 48e195c..0000000
--- a/trunk/pom.xml
+++ /dev/null
@@ -1,318 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
- * Copyright 2006 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.
- * 
- * $Id$
- */
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-   <parent>
-      <groupId>org.apache.struts</groupId>
-      <artifactId>struts-master</artifactId>
-      <version>3</version>
-   </parent>
-
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.struts</groupId>
-    <artifactId>struts2-parent</artifactId>
-    <version>2.0.1</version>
-    <packaging>pom</packaging>
-    <name>Struts 2</name>
-    <url>http://struts.apache.org/struts2</url>
-    <description>Apache Struts Framework 2</description>
-
-    <inceptionYear>2000</inceptionYear>
-    
-    <!--
-    <description>
-        Struts 2 is a Java web-application development framework.
-        It is built specifically with developer productivity and
-        code simplicity in mind, providing robust support for building
-        reusable UI templates, such as form controls, UI themes,
-        internationalization, dynamic form parameter mapping to JavaBeans,
-        robust client and server side validation, and much more.
-    </description>
-    -->
-
-    <scm>
-       <connection>scm:svn:http://svn.apache.org/repos/asf/struts/struts2/trunk</connection>
-       <developerConnection>scm:svn:https://svn.apache.org/repos/asf/struts/struts2/trunk</developerConnection>
-       <url>http://svn.apache.org/viewcvs.cgi/struts/struts2/trunk</url>
-    </scm>
-
-    <issueManagement>
-        <system>JIRA</system>
-        <url>http://issues.apache.org/struts/</url>
-    </issueManagement>
-
-    <ciManagement/>
-    <distributionManagement>
-        <repository>
-           <id>apache.snapshots</id>
-           <name>Apache Maven Repository (Snapshots and Test Builds)</name>
-           <url>scp://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
-        </repository>
-        <snapshotRepository>
-           <id>apache.snapshots</id>
-           <uniqueVersion>false</uniqueVersion>
-           <name>Apache Maven Repository (Snapshots and Test Builds)</name>
-           <url>scp://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
-        </snapshotRepository>
-        <site>
-            <id>apache-site</id>
-            <url>scp://people.apache.org/www/struts.apache.org/2.x/</url>
-        </site>
-    </distributionManagement>
-
-    <modules>
-        <module>core</module>
-        <!--<module>assembly</module>-->
-        <module>api</module>
-    </modules>
-
-    <licenses>
-        <license>
-            <name>The Apache Software License, Version 2.0</name>
-            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-            <distribution>repo</distribution>
-            <comments/>
-        </license>
-    </licenses>
-
-    <organization>
-        <name>Apache Software Foundation</name>
-        <url>http://www.apache.org</url>
-    </organization>
-
-    <profiles>
-        <profile>
-            <id>apps</id>
-            <activation>
-                <property>
-                    <name>apps</name>
-                </property>
-            </activation>
-            <modules>
-                <module>apps</module>
-            </modules>
-        </profile>
-        <profile>
-            <id>plugins</id>
-            <modules>
-                <module>plugins</module>
-            </modules>
-        </profile>
-        <profile>
-            <id>all</id>
-            <modules>
-                <module>all</module>
-                <module>plugins</module>
-                <module>apps</module>
-            </modules>
-        </profile>
-        <profile>
-            <id>xwork</id>
-            <modules>
-                <module>../xwork</module>
-            </modules>
-        </profile>
-        <profile>
-            <id>1.4-backport</id>
-            <activation>
-                <jdk>1.4</jdk>
-            </activation>
-            <dependencies>
-                <!-- should have the org.w3c.dom dependency here -->
-            </dependencies>
-        </profile>
-    </profiles>
-
-
-    <build>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-idea-plugin</artifactId>
-                    <configuration>
-                        <jdkName>1.5</jdkName>
-                        <exclude>target,test-output,.clover</exclude>
-                        <useShortDependencyNames>true</useShortDependencyNames>
-                        <!--
-                        <libraries>
-                            <library>
-                                <name>xwork</name>
-                                <sources>file://$xwork$/src/java</sources>
-                            </library>
-                            <library>
-                                <name>xwork-tiger</name>
-                                <sources>file://$xwork$/tiger/src/java</sources>
-                            </library>
-                        </libraries>
-                        -->
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-site-plugin</artifactId>
-                    <version>2.0-beta-5</version>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <configuration>
-                      <source>1.5</source>
-                      <target>1.5</target>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <configuration>
-                        <includes>
-                            <include>**/*Test.java</include>
-                        </includes>
-                        <excludes>
-                            <exclude>**/TestBean.java</exclude>
-                        </excludes>
-                    </configuration>
-                </plugin>
-                <plugin>
-                  <groupId>org.codehaus.mojo</groupId>
-                  <artifactId>retrotranslator-maven-plugin</artifactId>
-                  <version>1.0-SNAPSHOT</version>
-                  <executions>
-                    <execution>
-                        <phase>process-classes</phase>
-                        <goals>
-                            <goal>translate</goal>
-                        </goals>
-                        <configuration>
-                            <includes>
-                                <include>
-                                    <directory>${pom.basedir}/target/classes</directory>
-                                </include>
-                            </includes>
-                        </configuration>
-                    </execution>
-                  </executions>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-
-        <defaultGoal>install</defaultGoal>
-
-    </build>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-project-info-reports-plugin</artifactId>
-             </plugin>
-            <plugin>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <version>2.0</version>
-                <!--
-                <configuration>
-                    <aggregate>true</aggregate>
-                </configuration>
-                -->
-            </plugin>
-            <plugin>
-                <artifactId>maven-surefire-report-plugin</artifactId>
-            </plugin>
-            <!--
-            <plugin>
-                <artifactId>maven-checkstyle-plugin</artifactId>
-                <configuration>
-                  <configLocation>http://svn.apache.org/repos/asf/struts/maven/trunk/build/struts_checks.xml</configLocation>
-                </configuration>
-            </plugin>
-            -->
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>jxr-maven-plugin</artifactId>
-            </plugin>
-            <!--
-            <plugin>
-                <artifactId>maven-pmd-plugin</artifactId>
-            </plugin>
-            -->
-        </plugins>
-    </reporting>
-
-    <repositories>
-        <repository>
-            <id>snapshots-maven-codehaus</id>
-            <name>snapshots-maven-codehaus</name>
-            <snapshots>
-                <enabled>true</enabled>
-                <updatePolicy>always</updatePolicy>
-                <checksumPolicy>ignore</checksumPolicy>
-            </snapshots>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-            <url>http://snapshots.maven.codehaus.org/maven2</url>
-        </repository>
-        <repository>
-            <id>apache.snapshots</id>
-            <name>Apache Maven Repository (Snapshots and Test Builds)</name>
-            <url>http://people.apache.org/repo/m2-snapshot-repository</url>
-            <releases><enabled>true</enabled></releases>
-            <snapshots><enabled>true</enabled></snapshots>
-        </repository>
-        <repository>
-            <id>opensymphony</id>
-            <name>opensymphony</name>
-            <layout>legacy</layout>
-            <snapshots>
-                <enabled>true</enabled>
-                <updatePolicy>always</updatePolicy>
-                <checksumPolicy>ignore</checksumPolicy>
-            </snapshots>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-            <url>http://maven.opensymphony.com</url>
-        </repository>
-          <repository>
-            <id>Maven Snapshots</id>
-            <url>http://snapshots.maven.codehaus.org/maven2/</url>
-            <snapshots>
-              <enabled>true</enabled>
-            </snapshots>
-            <releases>
-              <enabled>false</enabled>
-            </releases>
-          </repository>
-    </repositories>
-    <pluginRepositories>
-      <pluginRepository>
-        <id>Maven Snapshots</id>
-        <url>http://snapshots.maven.codehaus.org/maven2/</url>
-        <snapshots>
-          <enabled>true</enabled>
-        </snapshots>
-        <releases>
-          <enabled>false</enabled>
-        </releases>
-      </pluginRepository>
-    </pluginRepositories>
-
-</project>
diff --git a/trunk/src/main/idea/project.xml b/trunk/src/main/idea/project.xml
deleted file mode 100644
index 3828139..0000000
--- a/trunk/src/main/idea/project.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4" relativePaths="false">
-  <component name="CodeStyleManager">
-    <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true" />
-    <option name="CODE_STYLE_SCHEME" value="" />
-  </component>
-  <component name="CodeStyleSettingsManager">
-    <option name="PER_PROJECT_SETTINGS">
-      <value />
-    </option>
-    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
-  </component>
-</project>
-
diff --git a/trunk/src/main/idea/workspace.xml b/trunk/src/main/idea/workspace.xml
deleted file mode 100644
index 9678b89..0000000
--- a/trunk/src/main/idea/workspace.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4" relativePaths="false">
-    <component name="RunManager">
-        <activeType name="JUnit"/>
-        <configuration selected="false" default="true" type="JUnit" factoryName="JUnit">
-            <module name=""/>
-            <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false"/>
-            <option name="ALTERNATIVE_JRE_PATH"/>
-            <option name="PACKAGE_NAME"/>
-            <option name="MAIN_CLASS_NAME"/>
-            <option name="METHOD_NAME"/>
-            <option name="TEST_OBJECT" value="class"/>
-            <option name="VM_PARAMETERS"/>
-            <option name="PARAMETERS"/>
-            <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>
-            <option name="ADDITIONAL_CLASS_PATH"/>
-            <option name="TEST_SEARCH_SCOPE">
-                <value defaultName="wholeProject"/>
-            </option>
-        </configuration>
-        <configuration selected="false" default="true" type="Remote" factoryName="Remote">
-            <option name="USE_SOCKET_TRANSPORT" value="true"/>
-            <option name="SERVER_MODE" value="false"/>
-            <option name="SHMEM_ADDRESS" value="javadebug"/>
-            <option name="HOST" value="localhost"/>
-            <option name="PORT" value="5005"/>
-        </configuration>
-        <configuration selected="false" default="true" type="Application" factoryName="Application">
-            <option name="MAIN_CLASS_NAME"/>
-            <option name="VM_PARAMETERS"/>
-            <option name="PROGRAM_PARAMETERS"/>
-            <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>
-            <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false"/>
-            <option name="ALTERNATIVE_JRE_PATH"/>
-            <module name=""/>
-        </configuration>
-        <configuration selected="false" default="true" type="Applet" factoryName="Applet">
-            <module name=""/>
-            <option name="MAIN_CLASS_NAME"/>
-            <option name="HTML_FILE_NAME"/>
-            <option name="HTML_USED" value="false"/>
-            <option name="WIDTH" value="400"/>
-            <option name="HEIGHT" value="300"/>
-            <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy"/>
-            <option name="VM_PARAMETERS"/>
-            <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false"/>
-            <option name="ALTERNATIVE_JRE_PATH"/>
-        </configuration>
-        <configuration selected="true" default="false" name="Struts Core Tests" type="JUnit" factoryName="JUnit">
-            <module name="struts2-core"/>
-            <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false"/>
-            <option name="ALTERNATIVE_JRE_PATH" value=""/>
-            <option name="PACKAGE_NAME" value="org.apache.struts2"/>
-            <option name="MAIN_CLASS_NAME" value=""/>
-            <option name="METHOD_NAME" value=""/>
-            <option name="TEST_OBJECT" value="package"/>
-            <option name="VM_PARAMETERS" value=""/>
-            <option name="PARAMETERS" value=""/>
-            <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$"/>
-            <option name="ADDITIONAL_CLASS_PATH"/>
-            <option name="TEST_SEARCH_SCOPE">
-                <value defaultName="singleModule"/>
-            </option>
-            <RunnerSettings RunnerId="Run"/>
-            <ConfigurationWrapper RunnerId="Run"/>
-        </configuration>
-        <configuration selected="true" default="false" name="Struts Showcase" type="Application"
-                       factoryName="Application">
-            <option name="MAIN_CLASS_NAME" value="org.apache.struts2.Main"/>
-            <option name="VM_PARAMETERS" value=""/>
-            <option name="PROGRAM_PARAMETERS" value="quickstart"/>
-            <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/apps/showcase"/>
-            <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false"/>
-            <option name="ALTERNATIVE_JRE_PATH" value=""/>
-            <module name="struts2-showcase"/>
-        </configuration>
-    </component>
-</project>
-
diff --git a/trunk/src/site/site.xml b/trunk/src/site/site.xml
deleted file mode 100644
index aa39e65..0000000
--- a/trunk/src/site/site.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<project name="Struts 2">
-    <bannerLeft>
-        <name>Apache Software Foundation</name>
-        <src>http://www.apache.org/images/asf-logo.gif</src>
-        <href>http://www.apache.org</href>
-    </bannerLeft>
-    <bannerRight>
-        <name>Apache Struts</name>
-        <src>http://struts.apache.org/images/struts.gif</src>
-        <href>http://struts.apache.org</href>
-    </bannerRight>     
-    <body>
-        <links>
-            <item name="Apache" href="http://www.apache.org" /> 
-            <item name="Struts 1" href="http://struts.apache.org/1.x" />
-            <item name="Struts 2" href="http://struts.apache.org/2.x" />
-        </links>
-        <menu name="Struts 2">
-            <item
-                    name="Welcome"
-                    href="index.html"
-                    />
-            <item
-                    name="Download"
-                    href="http://struts.apache.org/downloads.html"/>
-        </menu>
-
-        <menu name="Documentation">
-        
-            <item
-                    name="Getting Started"
-                    href="http://cwiki.apache.org/WW/home.html"
-                    />        
-            <item
-                    name="Tutorials"
-                    href="http://cwiki.apache.org/WW/tutorials.html"
-                    />        
-
-            <item
-                    name="FAQs"
-                    href="http://cwiki.apache.org/WW/faqs.html"
-                    />        
-
-            <item
-                    name="Guides"
-                    href="http://cwiki.apache.org/WW/guides.html"
-                    />        
-
-            <item
-                    name="Release Notes"
-                    href="http://cwiki.apache.org/WW/release-notes-200.html"
-                    />        
-
-        </menu>
-        <menu name="Reference">
-            <item
-                    name="Struts Core API"
-                    href="struts2-core/apidocs/index.html"
-                    />        
-            <item
-                    name="New API (experimental)"
-                    href="struts2-api/apidocs/index.html"
-                    />        
-            <item
-                    name="Tag Reference"
-                    href="http://cwiki.apache.org/WW/tag-reference.html"
-                    />        
-            <item
-                    name="Source Repository"
-                    href="http://svn.apache.org/viewcvs.cgi/struts/struts2/trunk/?root=Apache-SVN"
-                    />
-        </menu>
-        <menu name="Plugin API's">
-
-           <item
-                    name="Config Browser"
-                    href="struts2-plugins/struts2-config-browser-plugin/apidocs/index.html"
-                    />
-
-           <item
-                    name="JasperReports"
-                    href="struts2-plugins/struts2-jasperreports-plugin/apidocs/index.html"
-                    />
-
-            <item
-                    name="JavaServer Faces"
-                    href="struts2-plugins/struts2-jsf-plugin/apidocs/index.html"
-                    />
-
-           <item
-                    name="JFreeChart"
-                    href="struts2-plugins/struts2-jfreechart-plugin/apidocs/index.html"
-                    />
-
-           <item
-                    name="Pell Multipart"
-                    href="struts2-plugins/struts2-pell-multipart-plugin/apidocs/index.html"
-                    />
-
-           <item
-                    name="Plexus"
-                    href="struts2-plugins/struts2-plexus-plugin/apidocs/index.html"
-                    />
-
-           <item
-                    name="QuickStart"
-                    href="struts2-plugins/struts2-quickstart-plugin/apidocs/index.html"
-                    />
-
-           <item
-                    name="Sitegraph"
-                    href="struts2-plugins/struts2-sitegraph-plugin/apidocs/index.html"
-                    />
-
-           <item
-                    name="Sitemesh"
-                    href="struts2-plugins/struts2-sitemesh-plugin/apidocs/index.html"
-                    />
-
-           <item
-                    name="Struts 1"
-                    href="struts2-plugins/struts2-struts1-plugin/apidocs/index.html"
-                    />
-
-           <item
-                    name="Tiles"
-                    href="struts2-plugins/struts2-tiles-plugin/apidocs/index.html"
-                    />
-
-
-        </menu>
-    </body>
-</project>
diff --git a/trunk/src/site/xdoc/index.xml b/trunk/src/site/xdoc/index.xml
deleted file mode 100644
index dfffed8..0000000
--- a/trunk/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<!--
-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.
--->
-<!--
-// ======================================================================== 78
--->
-<document>
-
-    <properties>
-        <title>Struts 2</title>
-    </properties>
-
-    <body>
-
-        <section name="About Struts 2">
-            <a name="Welcome"/>
-
-        <p>
-        Apache Struts 2 is a flexible control layer based on standard
-        technologies like Java Filters, JavaBeans, ResourceBundles, Locales,
-        and XML, as well as various 
-        <a href="http://www.OpenSymphony.com/">
-          OpenSymphony</a>
-        packages, like OGNL and XWork. The framework helps you create an
-        extensible development environment for your application, based on
-        industry standards and proven design patterns.
-        </p>
-
-        <p>
-        For more About Struts 2 see
-        <a href="http://cwiki.apache.org/WW/home.html">
-          Getting Started.
-        </a>
-        </p>
-        </section>
-
-    </body>
-</document>
diff --git a/trunk/src/site/xdoc/jxr.xml b/trunk/src/site/xdoc/jxr.xml
deleted file mode 100755
index 2b6d3ed..0000000
--- a/trunk/src/site/xdoc/jxr.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Copyright 2006 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.
--->
-<!--
-// ======================================================================== 78
--->
-<document>
-
-    <properties>
-        <title>Source Xref report</title>
-    </properties>
-
-    <body>
-
-        <section name="Struts 2 - Source Xref">
-
-         <ul>
-            <li>
-               <a href="struts-core/jxr.html" target="_blank">
-               Struts Core</a></li>
-         </ul>
-
-       </section>
-
-    </body>
-</document>