You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ri...@apache.org on 2005/12/02 20:37:24 UTC

svn commit: r351812 [2/2] - in /beehive/trunk/netui: src/compiler-core/org/apache/beehive/netui/compiler/ src/compiler-core/org/apache/beehive/netui/compiler/genmodel/ src/compiler-core/org/apache/beehive/netui/compiler/model/ src/pageflow/org/apache/b...

Added: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/DelegatingActionMapping.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/DelegatingActionMapping.java?rev=351812&view=auto
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/DelegatingActionMapping.java (added)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/DelegatingActionMapping.java Fri Dec  2 11:36:36 2005
@@ -0,0 +1,224 @@
+/*
+ * 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.beehive.netui.pageflow.config;
+
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.config.ExceptionConfig;
+import org.apache.struts.config.ForwardConfig;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import javax.servlet.ServletContext;
+import java.util.Map;
+
+/**
+ * A Struts ActionMapping object that delegates to an ActionMapping in a different module.
+ */
+public class DelegatingActionMapping extends PageFlowActionMapping
+{
+    private ActionMapping _delegate;
+    private String _delegateModulePath;
+    private boolean _inheritLocalPaths;
+
+    /**
+     * Set the path prefix for the module where the delegate ActionMapping lives.
+     */
+    public void setDelegateModulePath(String delegateModulePath) {
+        _delegateModulePath = delegateModulePath;
+    }
+
+    public void init(ServletContext servletContext)
+    {
+        ModuleConfig moduleConfig = InternalUtils.ensureModuleConfig(_delegateModulePath, servletContext);
+        assert moduleConfig != null : "No ModuleConfig found for path " + _delegateModulePath;
+        _delegate = (ActionMapping) moduleConfig.findActionConfig(getPath());
+        assert _delegate != null : "No ActionMapping with path " + getPath() + " in module " + _delegateModulePath;
+    }
+
+    /**
+     * Get the prefix directory path that local paths in Forwards should be relative to.  This is only enabled if we're
+     * inheriting local paths from a base page flow.
+     */
+    public String getLocalPathsRelativeTo() {
+        return _inheritLocalPaths ? _delegateModulePath : null;
+    }
+
+    
+    public String toString() {
+        return "[delegate to " + _delegate + ']';
+    }
+
+    public void freeze() {
+        configured = true;
+    }
+
+    /**
+     * Tell whether local paths should be inherited from the base class.  This affects the value of
+     * {@link #getLocalPathsRelativeTo()}.
+     */
+    public void setInheritLocalPaths(boolean inheritLocalPaths) {
+        _inheritLocalPaths = inheritLocalPaths;
+    }
+    
+    //
+    // Everything below this point is simple delegation.
+    //
+    
+    public String getUnqualifiedActionPath() {
+        return _delegate instanceof PageFlowActionMapping ? ((PageFlowActionMapping) _delegate).getUnqualifiedActionPath() : null;
+    }
+
+    public String getUnqualifiedActionName() {
+        return _delegate instanceof PageFlowActionMapping ? ((PageFlowActionMapping) _delegate).getUnqualifiedActionName() : null;
+    }
+
+    public boolean isLoginRequired() {
+        return _delegate instanceof PageFlowActionMapping && ((PageFlowActionMapping) _delegate).isLoginRequired();
+    }
+
+    public boolean isPreventDoubleSubmit() {
+        return _delegate instanceof PageFlowActionMapping && ((PageFlowActionMapping) _delegate).isPreventDoubleSubmit();
+    }
+
+    public boolean isSimpleAction() {
+        return _delegate instanceof PageFlowActionMapping && ((PageFlowActionMapping) _delegate).isSimpleAction();
+    }
+
+    public boolean isOverloaded() {
+        return _delegate instanceof PageFlowActionMapping && ((PageFlowActionMapping) _delegate).isOverloaded();
+    }
+
+    public String getFormMember() {
+        return _delegate instanceof PageFlowActionMapping ? ((PageFlowActionMapping) _delegate).getFormMember() : null;
+    }
+
+    public String getFormClass() {
+        return _delegate instanceof PageFlowActionMapping ? ((PageFlowActionMapping) _delegate).getFormClass() : null;
+    }
+
+    public boolean isReadonly() {
+        return _delegate instanceof PageFlowActionMapping && ((PageFlowActionMapping) _delegate).isReadonly();
+    }
+
+    public Map getConditionalForwardsMap() {
+        return _delegate instanceof PageFlowActionMapping ? ((PageFlowActionMapping) _delegate).getConditionalForwardsMap() : null;
+    }
+
+    public String getFormBeanMessageResourcesKey() {
+        return _delegate instanceof PageFlowActionMapping ? ((PageFlowActionMapping) _delegate).getFormBeanMessageResourcesKey() : null;
+    }
+
+    public String getDefaultForward() {
+        return _delegate instanceof PageFlowActionMapping ? ((PageFlowActionMapping) _delegate).getDefaultForward() : null;
+    }
+
+    public ActionForward findForward(String name) {
+        return _delegate.findForward(name);
+    }
+
+    public String[] findForwards() {
+        return _delegate.findForwards();
+    }
+
+    public ActionForward getInputForward() {
+        return _delegate.getInputForward();
+    }
+
+    public String getAttribute() {
+        return _delegate.getAttribute();
+    }
+
+    public void setAttribute(String attribute) {
+        _delegate.setAttribute(attribute);
+    }
+
+    public String getForward() {
+        return _delegate.getForward();
+    }
+
+    public String getInclude() {
+        return _delegate.getInclude();
+    }
+
+    public String getInput() {
+        return _delegate.getInput();
+    }
+
+    public String getMultipartClass() {
+        return _delegate.getMultipartClass();
+    }
+
+    public String getName() {
+        return _delegate.getName();
+    }
+
+    public String getPrefix() {
+        return _delegate.getPrefix();
+    }
+
+    public String getRoles() {
+        return _delegate.getRoles();
+    }
+
+    public String[] getRoleNames() {
+        return _delegate.getRoleNames();
+    }
+
+    public String getScope() {
+        return _delegate.getScope();
+    }
+
+    public String getSuffix() {
+        return _delegate.getSuffix();
+    }
+
+    public String getType() {
+        return _delegate.getType();
+    }
+
+    public boolean getUnknown() {
+        return _delegate.getUnknown();
+    }
+
+    public boolean getValidate() {
+        return _delegate.getValidate();
+    }
+
+    public ExceptionConfig findExceptionConfig(String type) {
+        return _delegate.findExceptionConfig(type);
+    }
+
+    public ExceptionConfig[] findExceptionConfigs() {
+        return _delegate.findExceptionConfigs();
+    }
+
+    public ExceptionConfig findException(Class type) {
+        return _delegate.findException(type);
+    }
+
+    public ForwardConfig findForwardConfig(String name) {
+        return _delegate.findForwardConfig(name);
+    }
+
+    public ForwardConfig[] findForwardConfigs() {
+        return _delegate.findForwardConfigs();
+    }
+
+}
+

Propchange: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/DelegatingActionMapping.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/DelegatingExceptionConfig.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/DelegatingExceptionConfig.java?rev=351812&view=auto
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/DelegatingExceptionConfig.java (added)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/DelegatingExceptionConfig.java Fri Dec  2 11:36:36 2005
@@ -0,0 +1,135 @@
+/*
+ * 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.beehive.netui.pageflow.config;
+
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.config.ExceptionConfig;
+import org.apache.struts.config.ActionConfig;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+
+import javax.servlet.ServletContext;
+
+/**
+ * A Struts ExceptionConfig object that delegates to an ExceptionConfig in a different module.
+ */
+public class DelegatingExceptionConfig extends PageFlowExceptionConfig
+{
+    private ExceptionConfig _delegate;
+    private String _delegateModulePath;
+    private String _delegateActionPath;
+    private boolean _inheritLocalPaths;
+
+    /**
+     * Set the path prefix for the module where the delegate ExceptionConfig lives.
+     */
+    public void setDelegateModulePath(String delegateModulePath) {
+        _delegateModulePath = delegateModulePath;
+    }
+
+    /**
+     * Set the path for the action where the delegate ExceptionConfig lives.  This will be <code>null</code> if the
+     * delegate ExceptionConfig lives at the module level.
+     */
+    public void setDelegateActionPath(String delegateActionPath) {
+        _delegateActionPath = delegateActionPath;
+    }
+
+    /**
+     * Get the ModuleConfig where the delegate ExceptionConfig lives.
+     */
+    public ModuleConfig getDelegateModuleConfig(ServletContext servletContext) {
+        return InternalUtils.ensureModuleConfig(_delegateModulePath, servletContext);
+    }
+    
+    public void init(ServletContext servletContext)
+    {
+        ModuleConfig moduleConfig = getDelegateModuleConfig(servletContext);
+        assert moduleConfig != null : "No ModuleConfig found for path " + _delegateModulePath;
+        
+        if (_delegateActionPath != null) {
+            ActionConfig actionConfig = moduleConfig.findActionConfig(_delegateActionPath);
+            assert actionConfig != null : "No action config found for path " + _delegateActionPath;
+            _delegate = actionConfig.findExceptionConfig(getType());
+            assert _delegate != null : "No ExceptionConfig with type " + getType() + " on action " + _delegateActionPath
+                                      + " in module " + _delegateModulePath;
+        } else {
+            _delegate = moduleConfig.findExceptionConfig(getType());
+            assert _delegate != null : "No ExceptionConfig with type " + getType() + " in module " + _delegateModulePath;
+        }
+    }
+
+    public String toString() {
+        return "[delegate to " + _delegate + ']';
+    }
+
+    /**
+     * Get the prefix directory path that local paths in Forwards should be relative to.  This is only enabled if we're
+     * inheriting local paths from a base page flow.
+     */
+    public String getLocalPathsRelativeTo() {
+        return _inheritLocalPaths ? _delegateModulePath : null;
+    }
+
+    /**
+     * Tell whether local paths should be inherited from the base class.  This affects the value of
+     * {@link #getLocalPathsRelativeTo()}.
+     */
+    public void setInheritLocalPaths(boolean inheritLocalPaths) {
+        _inheritLocalPaths = inheritLocalPaths;
+    }
+    
+    //
+    // Everything below this point is simple delegation.
+    //
+
+    public boolean isHandlerMethod() {
+        return _delegate instanceof PageFlowExceptionConfig && ((PageFlowExceptionConfig)_delegate).isHandlerMethod();
+    }
+    
+    public String getDefaultMessage() {
+        return _delegate instanceof PageFlowExceptionConfig ? ((PageFlowExceptionConfig)_delegate).getDefaultMessage() : null;
+    }
+
+    public boolean isPathContextRelative() {
+        return _delegate instanceof PageFlowExceptionConfig && ((PageFlowExceptionConfig)_delegate).isPathContextRelative();
+    }
+
+    public boolean isReadonly() {
+        return _delegate instanceof PageFlowExceptionConfig && ((PageFlowExceptionConfig)_delegate).isReadonly();
+    }
+
+    public String getBundle() {
+        return _delegate.getBundle();
+    }
+
+    public String getHandler() {
+        return _delegate.getHandler();
+    }
+
+    public String getKey() {
+        return _delegate.getKey();
+    }
+
+    public String getPath() {
+        return _delegate.getPath();
+    }
+
+    public String getScope() {
+        return _delegate.getScope();
+    }
+}

Propchange: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/DelegatingExceptionConfig.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionForward.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionForward.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionForward.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionForward.java Fri Dec  2 11:36:36 2005
@@ -37,7 +37,6 @@
     private ArrayList _actionOutputs;
     private boolean _restoreQueryString;
     private boolean _externalRedirect = false;
-    private boolean _inheritedPath = false;
 
 
     public boolean isNestedReturn()
@@ -288,15 +287,5 @@
     public void setActionOutput19( String str )
     {
         setActionOutput( 19, str );
-    }
-
-    public boolean isInheritedPath()
-    {
-        return _inheritedPath;
-    }
-
-    public void setInheritedPath( boolean inheritedPath )
-    {
-        _inheritedPath = inheritedPath;
     }
 }

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionMapping.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionMapping.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionMapping.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowActionMapping.java Fri Dec  2 11:36:36 2005
@@ -51,7 +51,7 @@
         _unqualifiedActionPath = unqualifiedActionPath;
     }
     
-    public final String getUnqualifiedActionName()
+    public String getUnqualifiedActionName()
     {
         if ( _unqualifiedActionPath != null && _unqualifiedActionPath.startsWith( "/" ) )
         {
@@ -63,7 +63,7 @@
         }
     }
     
-    public final boolean isLoginRequired()
+    public boolean isLoginRequired()
     {
         return _loginRequired;
     }
@@ -174,5 +174,14 @@
     public void setDefaultForward( String defaultForward )
     {
         _defaultForward = defaultForward;
+    }
+
+    /**
+     * Get a prefix directory path that all Forward local paths should be relative to.  By default this is
+     * <code>null</code>, which means that there is no forced prefix path.
+     */
+    public String getLocalPathsRelativeTo()
+    {
+        return null;
     }
 }

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowControllerConfig.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowControllerConfig.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowControllerConfig.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowControllerConfig.java Fri Dec  2 11:36:36 2005
@@ -40,6 +40,7 @@
     private LinkedHashMap/*< String, String >*/ _sharedFlowTypes;
     private String _controllerClass;
     private boolean _isSharedFlow;
+    private boolean _isAbstract = false;
     private String _overrideMultipartClass = null;
     private String _overrideMemFileSize = null;
     private boolean _forceMultipartDisabled = false;
@@ -206,5 +207,13 @@
     public void setMemFileSize( String fileSize )
     {
         _overrideMemFileSize = fileSize;
+    }
+
+    public boolean isAbstract() {
+        return _isAbstract;
+    }
+
+    public void setIsAbstract(boolean isAbstract) {
+        _isAbstract = isAbstract;
     }
 }

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowExceptionConfig.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowExceptionConfig.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowExceptionConfig.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/config/PageFlowExceptionConfig.java Fri Dec  2 11:36:36 2005
@@ -30,7 +30,6 @@
     private String _defaultMessage;
     private boolean _isPathContextRelative;
     private boolean _readonly;
-    private boolean _inheritedPath;
     
     private static final String DEFAULT_HANDLER_CLASS = PageFlowExceptionHandler.class.getName();
     
@@ -81,13 +80,12 @@
         _readonly = readonly;
     }
 
-    public boolean isInheritedPath()
+    /**
+     * Get a prefix directory path that all Forward local paths should be relative to.  By default this is
+     * <code>null</code>, which means that there is no forced prefix path.
+     */
+    public String getLocalPathsRelativeTo()
     {
-        return _inheritedPath;
-    }
-
-    public void setInheritedPath( boolean inheritedPath )
-    {
-        _inheritedPath = inheritedPath;
+        return null;
     }
 }

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ActionForwardHandler.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ActionForwardHandler.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ActionForwardHandler.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ActionForwardHandler.java Fri Dec  2 11:36:36 2005
@@ -21,10 +21,12 @@
 import org.apache.struts.action.ActionMapping;
 import org.apache.struts.action.ActionForm;
 import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.config.ExceptionConfig;
 import org.apache.beehive.netui.pageflow.PreviousPageInfo;
 import org.apache.beehive.netui.pageflow.PageFlowController;
 import org.apache.beehive.netui.pageflow.Forward;
 import org.apache.beehive.netui.pageflow.PageFlowStack;
+import org.apache.beehive.netui.pageflow.config.PageFlowExceptionConfig;
 import org.apache.beehive.netui.pageflow.interceptor.action.ActionInterceptor;
 
 /**
@@ -33,8 +35,26 @@
 public interface ActionForwardHandler
         extends Handler
 {
-    ActionForward doForward( FlowControllerHandlerContext context, ActionForward fwd, ActionMapping mapping, 
-                             String actionName, ModuleConfig altModuleConfig, ActionForm form );
+    /**
+     * Perform additional processing on a given Struts ActionForward, and perform any necessary updates to the request
+     * and user session (including updates to the PageFlowController nesting stack).  This method may <em>replace</em>
+     * the given ActionForward with a new one.
+     * 
+     * @param context the current FlowControllerHandlerContext.
+     * @param fwd the ActionForward object to process.
+     * @param actionMapping the Struts config object for the current action, if there is one (<code>null</code> 
+     *            if there is none).
+     * @param exceptionConfig the Struts config object for the current exception-handler, if one is being run
+     *            <code>null</code> if there is none).
+     * @param actionName the name of the currently-requested action.
+     * @param altModuleConfig an alternate Struts module configuration object for resolving a forward, if it can't be
+     *            resolved from the current ActionMapping (or if there is no current ActionMapping).
+     * @param form the Struts ActionForm created for the current action.  May be <code>null</code>.
+     * @return the modified ActionForward object, or a replacement one.
+     */
+    ActionForward processForward( FlowControllerHandlerContext context, ActionForward fwd, ActionMapping actionMapping, 
+                                  ExceptionConfig exceptionConfig, String actionName,
+                                  ModuleConfig altModuleConfig, ActionForm form );
 
     ActionForward doAutoViewRender( FlowControllerHandlerContext context, ActionMapping mapping, ActionForm form );
 

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultActionForwardHandler.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultActionForwardHandler.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultActionForwardHandler.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultActionForwardHandler.java Fri Dec  2 11:36:36 2005
@@ -23,12 +23,14 @@
 import org.apache.struts.action.ActionMapping;
 import org.apache.struts.action.ActionForm;
 import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.config.ExceptionConfig;
 
 import org.apache.beehive.netui.pageflow.interceptor.action.ActionInterceptor;
 import org.apache.beehive.netui.pageflow.interceptor.action.AfterNestedInterceptContext;
 import org.apache.beehive.netui.pageflow.interceptor.action.InterceptorForward;
-import org.apache.beehive.netui.pageflow.interceptor.InterceptorException;
 import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.config.PageFlowExceptionConfig;
+import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping;
 import org.apache.beehive.netui.pageflow.handler.FlowControllerHandlerContext;
 import org.apache.beehive.netui.pageflow.handler.ActionForwardHandler;
 import org.apache.beehive.netui.util.logging.Logger;
@@ -50,20 +52,9 @@
         init( null, null, servletContext );
     }
 
-    /**
-     * Perform any necessary updates to the request and user session (including updates to the
-     * PageFlowController stack), based on the given ActionForward.
-     * 
-     * @param context the current FlowControllerHandlerContext.
-     * @param fwd the Struts ActionForward that determines the next URI to be displayed.
-     * @param mapping the Struts ActionMapping for the current action being processed.
-     * @param actionName the name of the Struts action being processed.
-     * @param altModuleConfig an alternate module config (e.g., Global.app's ModuleConfig) from which to
-     *            resolve a forward if it can't be resolved from the given ActionMapping.
-     * @return the ActionForward object to pass to Struts for actual Servlet forwarding.
-     */  
-    public ActionForward doForward( FlowControllerHandlerContext context, ActionForward fwd, ActionMapping mapping, 
-                                    String actionName, ModuleConfig altModuleConfig, ActionForm form )
+    public ActionForward processForward( FlowControllerHandlerContext context, ActionForward fwd, ActionMapping mapping,
+                                         ExceptionConfig exceptionConfig, String actionName,
+                                         ModuleConfig altModuleConfig, ActionForm form )
     {
         boolean isSpecialForward = false;
         boolean isReturnToCurrentPage = false;
@@ -165,17 +156,6 @@
                 isSpecialForward = true;
                 fwd = getRegisteredActionForwardHandler().doNestingReturn( context, pageFlowFwd, mapping, form );
             }
-            else
-            {
-                //
-                // It's a normal path.  Mark a particular request attribute if it's an inherited local path, which
-                // shouldn't be treated as a transfer to an external page flow (the base class page flow).
-                //
-                if ( pageFlowFwd.isInheritedPath() )
-                {
-                    PageFlowRequestWrapper.get( request ).setStayInCurrentModule( true );
-                }
-            }
 
             //
             // Set ActionForms specified in the Forward.  Note that this overwrites any forms restored
@@ -187,6 +167,27 @@
 
         if ( fwd != null )
         {
+            // It's a normal path.  Let the Forward object do some magic if we're specifying that it's relative
+            // to a particular directory path (as is the case when inheriting local paths from base classes).
+            // Note that if *either* the exception-config or the action-config specifies a value for 
+            // getLocalPathsRelativeTo(), we use it. Also note that we do not do this for forward to other actions;
+            // in those cases we always want paths to be local to the current page flow.
+            String localPathsRelativeTo = null;
+            if (exceptionConfig != null && exceptionConfig instanceof PageFlowExceptionConfig) {
+                localPathsRelativeTo = ((PageFlowExceptionConfig) exceptionConfig).getLocalPathsRelativeTo();
+            }
+            if (localPathsRelativeTo == null && mapping instanceof PageFlowActionMapping) {
+                localPathsRelativeTo = ((PageFlowActionMapping) mapping).getLocalPathsRelativeTo();
+            }
+            if (localPathsRelativeTo != null) {
+                String path = fwd.getPath();
+                if (! path.endsWith(PageFlowConstants.ACTION_EXTENSION)) {
+                    Forward pageFlowFwd = fwd instanceof Forward ? (Forward) fwd : new WrapperForward(fwd);
+                    pageFlowFwd.initializeRelativePath(request, localPathsRelativeTo);
+                    fwd = pageFlowFwd;
+                }
+            }
+            
             if ( _log.isDebugEnabled() )
             {
                 if ( fwd.getRedirect() )
@@ -215,6 +216,14 @@
         }
         
         return fwd;
+    }
+    
+    private class WrapperForward extends Forward
+    {
+        public WrapperForward(ActionForward base)
+        {
+            super(base, getServletContext());
+        }
     }
     
     public ActionForward doAutoViewRender( FlowControllerHandlerContext context, ActionMapping mapping, ActionForm form )

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java Fri Dec  2 11:36:36 2005
@@ -49,6 +49,7 @@
 import java.io.IOException;
 
 import org.apache.beehive.netui.pageflow.config.PageFlowExceptionConfig;
+import org.apache.beehive.netui.pageflow.config.DelegatingExceptionConfig;
 import org.apache.beehive.netui.pageflow.FlowController;
 import org.apache.beehive.netui.pageflow.PageFlowController;
 import org.apache.beehive.netui.pageflow.SharedFlowController;
@@ -60,6 +61,8 @@
 import org.apache.beehive.netui.pageflow.interceptor.InterceptorException;
 import org.apache.beehive.netui.pageflow.handler.ExceptionsHandler;
 import org.apache.beehive.netui.pageflow.handler.FlowControllerHandlerContext;
+import org.apache.beehive.netui.pageflow.handler.ActionForwardHandler;
+import org.apache.beehive.netui.pageflow.handler.Handlers;
 import org.apache.beehive.netui.util.Bundle;
 import org.apache.beehive.netui.util.internal.cache.ClassLevelCache;
 import org.apache.beehive.netui.util.logging.Logger;
@@ -121,6 +124,9 @@
         rw.setExceptionBeingHandled( ex );
         
         
+        // Keep track of the Struts module where we find the exception handler.
+        ModuleConfig moduleConfig = flowController.getModuleConfig();
+        
         // Callback to the event reporter.
         ActionMapping originalActionMapping = actionMapping;
         _eventReporter.exceptionRaised( context, ex, originalActionMapping, form, flowController );
@@ -139,11 +145,11 @@
         {
             // If the mapping was null (i.e., the exception happened before we got the action mapping), look for the
             // exception only in the module config.
-            exceptionConfig = getExceptionConfig(exClass, flowController.getModuleConfig());
+            exceptionConfig = getExceptionConfig(exClass, moduleConfig);
         }
         
         //
-        // If there was no applicable exception handler in the current ModuleConfig, look in Global.app's module.
+        // If there was no applicable exception handler in the current ModuleConfig, look in a shared flow's module.
         //
         if ( exceptionConfig == null )
         {
@@ -154,15 +160,16 @@
             {
                 flowController = fallbackFC;
                 context = new FlowControllerHandlerContext( request, response, flowController );
-                exceptionConfig = getExceptionConfig( exClass, flowController.getModuleConfig() );
+                moduleConfig = flowController.getModuleConfig();
+                exceptionConfig = getExceptionConfig( exClass, moduleConfig );
                 
                 if ( exceptionConfig != null )
                 {
                     // This is the module that will be handling the exception.  Ensure that its message resources are
                     // initialized.
                     assert request instanceof HttpServletRequest : request.getClass().getName();
-                    InternalUtils.selectModule( flowController.getModuleConfig().getPrefix(),
-                                               ( HttpServletRequest ) request, getServletContext() );
+                    InternalUtils.selectModule( moduleConfig.getPrefix(), ( HttpServletRequest ) request,
+                                                getServletContext() );
                     rw.setCurrentFlowController( flowController );
                 }
             }
@@ -178,9 +185,12 @@
                             + ": handler=" + exceptionConfig.getHandler() + ", path=" + exceptionConfig.getPath() );
             }
 
-            //
+            // If this is a delegating exception handler, use its *delegate's* ModuleConfig.
+            if (exceptionConfig instanceof DelegatingExceptionConfig) {
+                moduleConfig = ((DelegatingExceptionConfig) exceptionConfig).getDelegateModuleConfig(getServletContext());
+            }
+            
             // First, see if it should be handled by invoking a handler method.
-            //
             ActionForward ret = null;
             if ( exceptionConfig instanceof PageFlowExceptionConfig )
             {
@@ -200,6 +210,10 @@
                 ret = invokeExceptionHandlerClass( context, ex, exceptionConfig, actionMapping, form );
             }
 
+            ActionForwardHandler afh = Handlers.get(getServletContext()).getActionForwardHandler();
+            String actionName = InternalUtils.getActionName(actionMapping);
+            ret = afh.processForward(context, ret, actionMapping, exceptionConfig, actionName, moduleConfig, form);
+            
             // Callback to the event reporter.
             long timeTaken = System.currentTimeMillis() - startTime;
             _eventReporter.exceptionHandled( context, ex, originalActionMapping, form, flowController, ret, timeTaken );
@@ -344,21 +358,6 @@
             Exception ex = throwable instanceof Exception ? ( Exception ) throwable : new Exception( throwable );
             ActionForward result = handler.execute( ex, exceptionConfig, actionMapping, form, request, response );
                     
-            //
-            // See if the path is really relative to the webapp root, not relative to the module.  Struts doesn't by default
-            // support paths that are webapp-relative.
-            //
-            if ( exceptionConfig instanceof PageFlowExceptionConfig )
-            {
-                PageFlowExceptionConfig pfec = ( PageFlowExceptionConfig ) exceptionConfig;
-                if ( pfec.isPathContextRelative() ) result.setContextRelative( true );
-                if ( pfec.isInheritedPath() )
-                {
-                    PageFlowRequestWrapper rw = PageFlowRequestWrapper.get( context.getRequest() );
-                    rw.setStayInCurrentModule( true );
-                }
-            }
-                    
             if ( _log.isDebugEnabled() )
             {
                 _log.debug( "Exception-handler: forward to " + result.getPath() );
@@ -440,9 +439,8 @@
             if ( error == null ) error = new ActionMessage( msgKey, ex.getMessage() );
             storeException( request, msgKey, error, exceptionConfig.getScope() ); 
             
-            return flowController.invokeExceptionHandler( method, ex, message, unwrappedFormBean,
-                                                          form, actionMapping, request, response,
-                                                          exceptionConfig.isReadonly() );
+            return flowController.invokeExceptionHandler(method, ex, message, form, exceptionConfig, actionMapping,
+                                                         request, response);
         }
         else
         {

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java Fri Dec  2 11:36:36 2005
@@ -243,7 +243,7 @@
         //
         // We're going to look in the struts config to get the PageFlowController class.
         //
-        ModuleConfig mc = ensureModuleConfig( modulePath, request, context );
+        ModuleConfig mc = ensureModuleConfig( modulePath, context );
         return mc != null ? getFlowControllerClassName( mc ) : null;
     }
 
@@ -415,7 +415,7 @@
      * Get the Struts ModuleConfig for the given module path.  If there is none registered,
      * and if it is possible to register one automatically, do so.
      */
-    public static ModuleConfig ensureModuleConfig( String modulePath, ServletRequest request, ServletContext context )
+    public static ModuleConfig ensureModuleConfig( String modulePath, ServletContext context )
     {
         try
         {
@@ -431,7 +431,7 @@
 
                 if ( as instanceof AutoRegisterActionServlet )
                 {
-                    return ( ( AutoRegisterActionServlet ) as ).ensureModuleRegistered( modulePath, request );
+                    return ( ( AutoRegisterActionServlet ) as ).ensureModuleRegistered( modulePath );
                 }
             }
         }
@@ -1054,20 +1054,25 @@
      */ 
     public static ModuleConfig selectModule( String prefix, HttpServletRequest request, ServletContext servletContext )
     {
-        ModuleConfig config = getModuleConfig( prefix, servletContext );
+        ModuleConfig moduleConfig = getModuleConfig( prefix, servletContext );
 
-        if ( config == null )
+        if ( moduleConfig == null )
         {
             request.removeAttribute( Globals.MODULE_KEY );
             return null;
         }
         
-        // Just return it if it's already registered.
-        if ( request.getAttribute( Globals.MODULE_KEY ) == config ) return config;
+        // If this module came from an abstract page flow controller class, don't select it.
+        ControllerConfig cc = moduleConfig.getControllerConfig();
+        if (cc instanceof PageFlowControllerConfig && ((PageFlowControllerConfig) cc).isAbstract()) {
+            return moduleConfig;
+        }
         
-        request.setAttribute( Globals.MODULE_KEY, config );
+        // Just return it if it's already registered.
+        if ( request.getAttribute( Globals.MODULE_KEY ) == moduleConfig ) return moduleConfig;
+        request.setAttribute( Globals.MODULE_KEY, moduleConfig );
 
-        MessageResourcesConfig[] mrConfig = config.findMessageResourcesConfigs();
+        MessageResourcesConfig[] mrConfig = moduleConfig.findMessageResourcesConfigs();
         Object formBean = unwrapFormBean( getCurrentActionForm( request ) );
         
         for ( int i = 0; i < mrConfig.length; i++ )
@@ -1090,7 +1095,7 @@
             }
         }
         
-        return config;
+        return moduleConfig;
     }
     
     public static MessageResources getMessageResources( String bundleName, ServletRequest request,

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/PageFlowExceptionHandler.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/PageFlowExceptionHandler.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/PageFlowExceptionHandler.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/PageFlowExceptionHandler.java Fri Dec  2 11:36:36 2005
@@ -39,18 +39,23 @@
 {
     private static final Logger _log = Logger.getInstance( PageFlowExceptionHandler.class );
     
-    public ActionForward execute( Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance,
+    public ActionForward execute( Exception ex, ExceptionConfig ec, ActionMapping mapping, ActionForm formInstance,
                                   HttpServletRequest request, HttpServletResponse response )
             throws ServletException
     {
         ActionForward forward = null;
         ActionMessage error = null;
         String property = null;
-        String path = ae.getPath();
+        String path = ec.getPath();
 
         // Build the forward from the exception mapping if it exists or from the form input
         forward = path != null ? new ActionForward( path ) : mapping.getInputForward();
         
+        PageFlowExceptionConfig pfec = ec instanceof PageFlowExceptionConfig ? (PageFlowExceptionConfig) ec : null;
+        if (pfec != null && pfec.isPathContextRelative()) {
+            forward.setContextRelative(true);
+        }
+        
         // Figure out the error
         if ( ex instanceof ModuleException )
         {
@@ -59,24 +64,24 @@
         }
         else
         {
-            if ( ae instanceof PageFlowExceptionConfig )
+            if ( pfec != null )
             {
-                String expressionMessage = ( ( PageFlowExceptionConfig ) ae ).getDefaultMessage();
+                String expressionMessage = pfec.getDefaultMessage();
                 if ( expressionMessage != null )
                 {
                     error = new ExpressionMessage( expressionMessage, new Object[]{ ex.getMessage() } );
                 }
             }
             
-            if ( error == null ) error = new ActionMessage( ae.getKey(), ex.getMessage() );
-            property = ae.getKey();
+            if ( error == null ) error = new ActionMessage( ec.getKey(), ex.getMessage() );
+            property = ec.getKey();
         }
 
         if ( _log.isDebugEnabled() ) _log.debug( "Handling exception", ex );
 
         // Store the exception
         request.setAttribute( Globals.EXCEPTION_KEY, ex );
-        storeException( request, property, error, forward, ae.getScope() );
+        storeException( request, property, error, forward, ec.getScope() );
 
         return forward;
     }

Modified: beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties (original)
+++ beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties Fri Dec  2 11:36:36 2005
@@ -552,6 +552,16 @@
 
 PageFlow_WrongPath_Message = Page Flow {0} was requested, but the page flow for the directory is {1}.
 
+PageFlow_AbstractPageFlow_Page= \
+<html><head><title>Abstract Page Flow</title></head>\n \
+<body>\n \
+<h1>Abstract Page Flow</h1>\n \
+A request was made to an abstract page flow in path <b>{0}</b>.\n \
+</body></html>\n
+
+PageFlow_AbstractPageFlow_Message= \
+A request was made to an abstract page flow in path "{0}".
+
 PageFlow_NoModuleConf_Page= \
 <html><head><title>Missing Struts Module Configuration</title></head>\n \
 <body>\n \

Modified: beehive/trunk/netui/src/webapp-template/default/Controller.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/webapp-template/default/Controller.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/webapp-template/default/Controller.java (original)
+++ beehive/trunk/netui/src/webapp-template/default/Controller.java Fri Dec  2 11:36:36 2005
@@ -21,6 +21,24 @@
 import org.apache.beehive.netui.pageflow.PageFlowController;
 import org.apache.beehive.netui.pageflow.annotations.Jpf;
 
+/**
+ * <p>
+ * A controller class that contains logic, exception handlers, and state for the current
+ * web directory path. When a request is received for the page flow (/Controller.jpf), an
+ * action (/begin.do), or a page (/index.jsp), an instance of this class becomes the
+ * <em>current page flow</em>. By default, it is stored in the session while its actions
+ * and pages are being accessed, and is removed when another page flow is requested.
+ * </p>
+ * <p>
+ * Properties in the current page flow may be accessed through the <code>pageFlow</code>
+ * databinding context in pages and in expression-aware annotations. For example, if this
+ * class contains a <code>getSomeProperty</code> method, it can be accessed through the
+ * expression <code>${pageFlow.someProperty}</code>.
+ * </p>
+ * <p>
+ * There may be only one page flow in any package.
+ * </p>
+ */
 @Jpf.Controller(
     simpleActions={
         @Jpf.SimpleAction(name="begin", path="index.jsp")

Modified: beehive/trunk/netui/src/webapp-template/default/WEB-INF/web.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/webapp-template/default/WEB-INF/web.xml?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/src/webapp-template/default/WEB-INF/web.xml (original)
+++ beehive/trunk/netui/src/webapp-template/default/WEB-INF/web.xml Fri Dec  2 11:36:36 2005
@@ -94,7 +94,7 @@
         <servlet-class>org.apache.beehive.netui.pageflow.PageFlowActionServlet</servlet-class>
         <init-param>
             <param-name>config</param-name>
-            <param-value>/WEB-INF/classes/_pageflow/struts-config.xml</param-value>
+            <param-value>/_pageflow/struts-config.xml</param-value>
         </init-param>
         <init-param>
             <param-name>debug</param-name>

Modified: beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-child.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-child.expected?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-child.expected (original)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-child.expected Fri Dec  2 11:36:36 2005
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
 <struts-config>
-  <!-- Generated from /WEB-INF/.tmpbeansrc/Jira611/child/Controller.java on Tue Aug 09 22:05:37 MDT 2005 -->
+  <!-- Generated from /Jira611/child/Controller.java on Thu Dec 01 14:26:50 MST 2005 -->
   <form-beans/>
   <global-exceptions/>
   <global-forwards>
@@ -17,8 +17,8 @@
       <set-property property="defaultForward" value="_defaultForward"/>
       <forward name="_defaultForward" path="/index.jsp"/>
     </action>
-    <action parameter="Jira611.child.Controller" path="/forwardToAbstractAction" scope="request" type="org.apache.beehive.netui.pageflow.internal.FlowControllerAction" validate="false">
-      <forward name="ab" path="/abstractAction.do"/>
+    <action className="org.apache.beehive.netui.pageflow.config.DelegatingActionMapping" parameter="Jira611.child.Controller" path="/forwardToAbstractAction" scope="request" validate="false">
+      <set-property property="delegateModulePath" value="/Jira611/parent"/>
     </action>
   </action-mappings>
   <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">

Added: beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-parent.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-parent.expected?rev=351812&view=auto
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-parent.expected (added)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-parent.expected Fri Dec  2 11:36:36 2005
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+  <!-- Generated from /Jira611/parent/Controller.java on Thu Dec 01 14:26:50 MST 2005 -->
+  <form-beans/>
+  <global-exceptions/>
+  <global-forwards>
+    <forward name="_auto" path=""/>
+  </global-forwards>
+  <action-mappings>
+    <action parameter="Jira611.parent.Controller" path="/forwardToAbstractAction" scope="request" type="org.apache.beehive.netui.pageflow.internal.FlowControllerAction" validate="false">
+      <forward name="ab" path="/abstractAction.do"/>
+    </action>
+  </action-mappings>
+  <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">
+    <set-property property="isAbstract" value="true"/>
+    <set-property property="isReturnToPageDisabled" value="true"/>
+    <set-property property="isReturnToActionDisabled" value="true"/>
+    <set-property property="sharedFlows" value=""/>
+    <set-property property="controllerClass" value="Jira611.parent.Controller"/>
+    <set-property property="isMissingDefaultMessages" value="true"/>
+  </controller>
+  <message-resources key="_defaultMsgs" null="true" parameter="org.apache.beehive.netui.pageflow.validation.defaultMessages"/>
+</struts-config>

Added: beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_Abstract/expectedOutput/struts-config-Nested_Abstract.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_Abstract/expectedOutput/struts-config-Nested_Abstract.expected?rev=351812&view=auto
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_Abstract/expectedOutput/struts-config-Nested_Abstract.expected (added)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_Abstract/expectedOutput/struts-config-Nested_Abstract.expected Fri Dec  2 11:36:36 2005
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+  <!-- Generated from /Nested_Abstract/Controller.java on Thu Dec 01 14:26:52 MST 2005 -->
+  <form-beans/>
+  <global-exceptions/>
+  <global-forwards>
+    <forward name="_auto" path=""/>
+  </global-forwards>
+  <action-mappings/>
+  <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">
+    <set-property property="isNestedPageFlow" value="true"/>
+    <set-property property="isAbstract" value="true"/>
+    <set-property property="isReturnToPageDisabled" value="true"/>
+    <set-property property="isReturnToActionDisabled" value="true"/>
+    <set-property property="sharedFlows" value=""/>
+    <set-property property="controllerClass" value="Nested_Abstract.Controller"/>
+    <set-property property="isMissingDefaultMessages" value="true"/>
+  </controller>
+  <message-resources key="_defaultMsgs" null="true" parameter="org.apache.beehive.netui.pageflow.validation.defaultMessages"/>
+</struts-config>

Added: beehive/trunk/netui/test/src/compilerTests/testsuite/PF_FormDataOverrideValidateWarning/expectedOutput/struts-config-PF_FormDataOverrideValidateWarning.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/PF_FormDataOverrideValidateWarning/expectedOutput/struts-config-PF_FormDataOverrideValidateWarning.expected?rev=351812&view=auto
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/PF_FormDataOverrideValidateWarning/expectedOutput/struts-config-PF_FormDataOverrideValidateWarning.expected (added)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/PF_FormDataOverrideValidateWarning/expectedOutput/struts-config-PF_FormDataOverrideValidateWarning.expected Fri Dec  2 11:36:36 2005
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+  <!-- Generated from /PF_FormDataOverrideValidateWarning/Controller.java on Thu Dec 01 14:27:16 MST 2005 -->
+  <form-beans>
+    <form-bean className="org.apache.beehive.netui.pageflow.config.PageFlowActionFormBean" name="myForm" type="PF_FormDataOverrideValidateWarning.Controller$MyForm"/>
+  </form-beans>
+  <global-exceptions/>
+  <global-forwards>
+    <forward name="_auto" path=""/>
+  </global-forwards>
+  <action-mappings/>
+  <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">
+    <set-property property="isAbstract" value="true"/>
+    <set-property property="isReturnToPageDisabled" value="true"/>
+    <set-property property="isReturnToActionDisabled" value="true"/>
+    <set-property property="sharedFlows" value=""/>
+    <set-property property="controllerClass" value="PF_FormDataOverrideValidateWarning.Controller"/>
+    <set-property property="isMissingDefaultMessages" value="true"/>
+  </controller>
+  <message-resources key="_defaultMsgs" null="true" parameter="org.apache.beehive.netui.pageflow.validation.defaultMessages"/>
+</struts-config>

Added: beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Abstract/expectedOutput/struts-config-PI_Abstract.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Abstract/expectedOutput/struts-config-PI_Abstract.expected?rev=351812&view=auto
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Abstract/expectedOutput/struts-config-PI_Abstract.expected (added)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Abstract/expectedOutput/struts-config-PI_Abstract.expected Fri Dec  2 11:36:36 2005
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+  <!-- Generated from /PI_Abstract/AbstractFlowController.java on Thu Dec 01 14:28:01 MST 2005 -->
+  <form-beans/>
+  <global-exceptions/>
+  <global-forwards>
+    <forward name="_auto" path=""/>
+  </global-forwards>
+  <action-mappings/>
+  <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">
+    <set-property property="isAbstract" value="true"/>
+    <set-property property="isReturnToPageDisabled" value="true"/>
+    <set-property property="isReturnToActionDisabled" value="true"/>
+    <set-property property="sharedFlows" value=""/>
+    <set-property property="controllerClass" value="PI_Abstract.AbstractFlowController"/>
+    <set-property property="isMissingDefaultMessages" value="true"/>
+  </controller>
+  <message-resources key="_defaultMsgs" null="true" parameter="org.apache.beehive.netui.pageflow.validation.defaultMessages"/>
+</struts-config>

Modified: beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin.expected?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin.expected (original)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin.expected Fri Dec  2 11:36:36 2005
@@ -1,15 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
 <struts-config>
-  <!-- Generated from /WEB-INF/.tmpbeansrc/PI_Begin/Controller.java on Tue Aug 09 16:46:56 MDT 2005 -->
+  <!-- Generated from /PI_Begin/Controller.java on Thu Dec 01 14:28:03 MST 2005 -->
   <form-beans/>
   <global-exceptions/>
   <global-forwards>
     <forward name="_auto" path=""/>
   </global-forwards>
   <action-mappings>
-    <action parameter="PI_Begin.Controller" path="/begin" scope="request" type="org.apache.beehive.netui.pageflow.internal.FlowControllerAction" validate="false">
-      <forward name="index" path="/index.jsp"/>
+    <action className="org.apache.beehive.netui.pageflow.config.DelegatingActionMapping" parameter="PI_Begin.Controller" path="/begin" scope="request" validate="false">
+      <set-property property="delegateModulePath" value="/PI_Begin/parent"/>
     </action>
   </action-mappings>
   <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">

Modified: beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride.expected?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride.expected (original)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride.expected Fri Dec  2 11:36:36 2005
@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
 <struts-config>
-  <!-- Generated from /WEB-INF/.tmpbeansrc/PI_ControlsOverride/ControlsController.java on Tue Aug 09 16:47:00 MDT 2005 -->
+  <!-- Generated from /PI_ControlsOverride/ControlsController.java on Thu Dec 01 14:28:07 MST 2005 -->
   <form-beans/>
   <global-exceptions/>
   <global-forwards>
     <forward name="_auto" path=""/>
   </global-forwards>
   <action-mappings>
-    <action parameter="PI_ControlsOverride.ControlsController" path="/begin" scope="request" type="org.apache.beehive.netui.pageflow.internal.FlowControllerAction" validate="false">
-      <forward name="index" path="/index.jsp"/>
+    <action className="org.apache.beehive.netui.pageflow.config.DelegatingActionMapping" parameter="PI_ControlsOverride.ControlsController" path="/begin" scope="request" validate="false">
+      <set-property property="delegateModulePath" value="/PI_ControlsOverride/parent"/>
     </action>
-    <action parameter="PI_ControlsOverride.ControlsController" path="/getMessage" scope="request" type="org.apache.beehive.netui.pageflow.internal.FlowControllerAction" validate="false">
-      <forward name="success" path="/result.jsp"/>
+    <action className="org.apache.beehive.netui.pageflow.config.DelegatingActionMapping" parameter="PI_ControlsOverride.ControlsController" path="/getMessage" scope="request" validate="false">
+      <set-property property="delegateModulePath" value="/PI_ControlsOverride/parent"/>
     </action>
   </action-mappings>
   <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">

Modified: beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath.expected?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath.expected (original)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath.expected Fri Dec  2 11:36:36 2005
@@ -1,15 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
 <struts-config>
-  <!-- Generated from /WEB-INF/.tmpbeansrc/PI_ForwardPath/Controller.java on Tue Aug 09 16:47:02 MDT 2005 -->
+  <!-- Generated from /PI_ForwardPath/Controller.java on Thu Dec 01 14:28:09 MST 2005 -->
   <form-beans/>
   <global-exceptions/>
   <global-forwards>
     <forward name="_auto" path=""/>
   </global-forwards>
   <action-mappings>
-    <action parameter="PI_ForwardPath.Controller" path="/begin" scope="request" type="org.apache.beehive.netui.pageflow.internal.FlowControllerAction" validate="false">
-      <forward name="index" path="/index.jsp"/>
+    <action className="org.apache.beehive.netui.pageflow.config.DelegatingActionMapping" parameter="PI_ForwardPath.Controller" path="/begin" scope="request" validate="false">
+      <set-property property="delegateModulePath" value="/PI_ForwardPath/parent"/>
     </action>
   </action-mappings>
   <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">

Modified: beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction.expected?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction.expected (original)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction.expected Fri Dec  2 11:36:36 2005
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
 <struts-config>
-  <!-- Generated from /WEB-INF/.tmpbeansrc/PI_ReturnAction/NestedController.java on Tue Aug 09 16:47:04 MDT 2005 -->
+  <!-- Generated from /PI_ReturnAction/NestedController.java on Thu Dec 01 14:28:12 MST 2005 -->
   <form-beans/>
   <global-exceptions/>
   <global-forwards>
@@ -11,8 +11,8 @@
     <forward name="_auto" path=""/>
   </global-forwards>
   <action-mappings>
-    <action parameter="PI_ReturnAction.NestedController" path="/begin" scope="request" type="org.apache.beehive.netui.pageflow.internal.FlowControllerAction" validate="false">
-      <forward name="index" path="/index.jsp"/>
+    <action className="org.apache.beehive.netui.pageflow.config.DelegatingActionMapping" parameter="PI_ReturnAction.NestedController" path="/begin" scope="request" validate="false">
+      <set-property property="delegateModulePath" value="/PI_ReturnAction/parent"/>
     </action>
   </action-mappings>
   <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">

Added: beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent.expected?rev=351812&view=auto
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent.expected (added)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent.expected Fri Dec  2 11:36:36 2005
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+  <!-- Generated from /simpleBeginAbstractParent/ParentFlow.java on Thu Dec 01 14:28:26 MST 2005 -->
+  <form-beans/>
+  <global-exceptions/>
+  <global-forwards>
+    <forward name="_auto" path=""/>
+  </global-forwards>
+  <action-mappings/>
+  <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">
+    <set-property property="isAbstract" value="true"/>
+    <set-property property="isReturnToPageDisabled" value="true"/>
+    <set-property property="isReturnToActionDisabled" value="true"/>
+    <set-property property="sharedFlows" value=""/>
+    <set-property property="controllerClass" value="simpleBeginAbstractParent.ParentFlow"/>
+    <set-property property="isMissingDefaultMessages" value="true"/>
+  </controller>
+  <message-resources key="_defaultMsgs" null="true" parameter="org.apache.beehive.netui.pageflow.validation.defaultMessages"/>
+</struts-config>

Modified: beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin-childFlow.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin-childFlow.expected?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin-childFlow.expected (original)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin-childFlow.expected Fri Dec  2 11:36:36 2005
@@ -1,18 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
 <struts-config>
-  <!-- Generated from /WEB-INF/.tmpbeansrc/simpleInheritedBegin/childFlow/ChildFlow.java on Tue Aug 09 16:47:26 MDT 2005 -->
+  <!-- Generated from /simpleInheritedBegin/childFlow/ChildFlow.java on Thu Dec 01 14:28:31 MST 2005 -->
   <form-beans/>
   <global-exceptions/>
   <global-forwards>
     <forward name="_auto" path=""/>
   </global-forwards>
   <action-mappings>
-    <action className="org.apache.beehive.netui.pageflow.config.PageFlowActionMapping" parameter="simpleInheritedBegin.childFlow.ChildFlow" path="/begin" scope="request" type="org.apache.beehive.netui.pageflow.internal.FlowControllerAction" validate="false">
-      <set-property property="readonly" value="true"/>
-      <set-property property="simpleAction" value="true"/>
-      <set-property property="defaultForward" value="_defaultForward"/>
-      <forward name="_defaultForward" path="/index.jsp"/>
+    <action className="org.apache.beehive.netui.pageflow.config.DelegatingActionMapping" parameter="simpleInheritedBegin.childFlow.ChildFlow" path="/begin" scope="request" validate="false">
+      <set-property property="delegateModulePath" value="/simpleInheritedBegin"/>
     </action>
   </action-mappings>
   <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">

Added: beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin.expected
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin.expected?rev=351812&view=auto
==============================================================================
--- beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin.expected (added)
+++ beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin.expected Fri Dec  2 11:36:36 2005
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
+<struts-config>
+  <!-- Generated from /simpleInheritedBegin/ParentFlow.java on Thu Dec 01 14:28:31 MST 2005 -->
+  <form-beans/>
+  <global-exceptions/>
+  <global-forwards>
+    <forward name="_auto" path=""/>
+  </global-forwards>
+  <action-mappings>
+    <action className="org.apache.beehive.netui.pageflow.config.PageFlowActionMapping" parameter="simpleInheritedBegin.ParentFlow" path="/begin" scope="request" type="org.apache.beehive.netui.pageflow.internal.FlowControllerAction" validate="false">
+      <set-property property="readonly" value="true"/>
+      <set-property property="simpleAction" value="true"/>
+      <set-property property="defaultForward" value="_defaultForward"/>
+      <forward name="_defaultForward" path="/index.jsp"/>
+    </action>
+  </action-mappings>
+  <controller className="org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig" inputForward="true" processorClass="org.apache.beehive.netui.pageflow.PageFlowRequestProcessor">
+    <set-property property="isAbstract" value="true"/>
+    <set-property property="isReturnToPageDisabled" value="true"/>
+    <set-property property="isReturnToActionDisabled" value="true"/>
+    <set-property property="sharedFlows" value=""/>
+    <set-property property="controllerClass" value="simpleInheritedBegin.ParentFlow"/>
+    <set-property property="isMissingDefaultMessages" value="true"/>
+  </controller>
+  <message-resources key="_defaultMsgs" null="true" parameter="org.apache.beehive.netui.pageflow.validation.defaultMessages"/>
+</struts-config>

Modified: beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml (original)
+++ beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml Fri Dec  2 11:36:36 2005
@@ -97,7 +97,7 @@
       </test>
       <test>
          <name>AbstractController</name>
-         <description>Test to ensure that the framework will not try to instantiate an abstract page flow controller if you hit a page in its directory path.</description>
+         <description>Test to ensure that hitting a JSP associated with an abstract page flow controller class will not try to instantiate the class, and that hitting an abstract page flow directly will return a descriptive error.</description>
          <webapp>coreWeb</webapp>
          <categories>
             <category>bvt</category>

Modified: beehive/trunk/netui/test/webapps/drt/testRecorder/tests/AbstractController.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/AbstractController.xml?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/webapps/drt/testRecorder/tests/AbstractController.xml (original)
+++ beehive/trunk/netui/test/webapps/drt/testRecorder/tests/AbstractController.xml Fri Dec  2 11:36:36 2005
@@ -1,99 +1,182 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
-   <ses:sessionName>AbstractController</ses:sessionName>
-   <ses:tester>rich</ses:tester>
-   <ses:startDate>23 Sep 2005, 12:15:10.481 AM MDT</ses:startDate>
-   <ses:description>Test to ensure that the framework will not try to instantiate an abstract page flow controller if you hit a page in its directory path.</ses:description>
-   <ses:tests>
-      <ses:test>
-         <ses:testNumber>1</ses:testNumber>
-         <ses:request>
-            <ses:protocol>HTTP</ses:protocol>
-            <ses:protocolVersion>1.1</ses:protocolVersion>
-            <ses:host>localhost</ses:host>
-            <ses:port>8080</ses:port>
-            <ses:uri>/coreWeb/miniTests/abstractController/index.jsp</ses:uri>
-            <ses:method>GET</ses:method>
-            <ses:parameters/>
-            <ses:cookies>
-               <ses:cookie>
-                  <ses:name>JSESSIONID</ses:name>
-                  <ses:value>B8CA21EE0AE769ED7389E7BC86DA84E2</ses:value>
-               </ses:cookie>
-               <ses:cookie>
-                  <ses:name>nde-textsize</ses:name>
-                  <ses:value>16px</ses:value>
-               </ses:cookie>
-               <ses:cookie>
-                  <ses:name>Country</ses:name>
-                  <ses:value>US</ses:value>
-               </ses:cookie>
-               <ses:cookie>
-                  <ses:name>Language</ses:name>
-                  <ses:value>en</ses:value>
-               </ses:cookie>
-            </ses:cookies>
-            <ses:headers>
-               <ses:header>
-                  <ses:name>accept</ses:name>
-                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
-               </ses:header>
-               <ses:header>
-                  <ses:name>accept-charset</ses:name>
-                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
-               </ses:header>
-               <ses:header>
-                  <ses:name>accept-encoding</ses:name>
-                  <ses:value>gzip,deflate</ses:value>
-               </ses:header>
-               <ses:header>
-                  <ses:name>accept-language</ses:name>
-                  <ses:value>en-us,en;q=0.7,ja;q=0.3</ses:value>
-               </ses:header>
-               <ses:header>
-                  <ses:name>connection</ses:name>
-                  <ses:value>keep-alive</ses:value>
-               </ses:header>
-               <ses:header>
-                  <ses:name>cookie</ses:name>
-                  <ses:value>JSESSIONID=B8CA21EE0AE769ED7389E7BC86DA84E2; nde-textsize=16px; Country=US; Language=en</ses:value>
-               </ses:header>
-               <ses:header>
-                  <ses:name>host</ses:name>
-                  <ses:value>localhost:8080</ses:value>
-               </ses:header>
-               <ses:header>
-                  <ses:name>keep-alive</ses:name>
-                  <ses:value>300</ses:value>
-               </ses:header>
-               <ses:header>
-                  <ses:name>user-agent</ses:name>
-                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7</ses:value>
-               </ses:header>
-            </ses:headers>
-         </ses:request>
-         <ses:response>
-            <ses:statusCode>200</ses:statusCode>
-            <ses:reason/>
-            <ses:responseBody>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+<sessionName>AbstractController</sessionName>
+<tester>rich</tester>
+<startDate>01 Dec 2005, 02:16:25.604 PM MST</startDate>
+<description>Test to ensure that hitting a JSP associated with an abstract page flow controller class will not try to instantiate the class, and that hitting an abstract page flow directly will return a descriptive error.</description>
+<tests>
+<test>
+<testNumber>1</testNumber>
+<request>
+<protocol>HTTP</protocol>
+<protocolVersion>1.1</protocolVersion>
+<host>localhost</host>
+<port>8080</port>
+<uri>/coreWeb/miniTests/abstractController/index.jsp</uri>
+<method>GET</method>
+<parameters>
+</parameters>
+<cookies>
+<cookie>
+<name>JSESSIONID</name>
+<value>0C146DDFB2B13AAA80118C08E3FB7B4E</value>
+</cookie>
+<cookie>
+<name>nde-textsize</name>
+<value>16px</value>
+</cookie>
+<cookie>
+<name>Language</name>
+<value>en</value>
+</cookie>
+<cookie>
+<name>Country</name>
+<value>US</value>
+</cookie>
+</cookies>
+<headers>
+<header>
+<name>accept</name>
+<value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</value>
+</header>
+<header>
+<name>accept-charset</name>
+<value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+</header>
+<header>
+<name>accept-encoding</name>
+<value>gzip,deflate</value>
+</header>
+<header>
+<name>accept-language</name>
+<value>en-us,en;q=0.7,ja;q=0.3</value>
+</header>
+<header>
+<name>connection</name>
+<value>keep-alive</value>
+</header>
+<header>
+<name>cookie</name>
+<value>JSESSIONID=0C146DDFB2B13AAA80118C08E3FB7B4E; nde-textsize=16px; Language=en; Country=US</value>
+</header>
+<header>
+<name>host</name>
+<value>localhost:8080</value>
+</header>
+<header>
+<name>keep-alive</name>
+<value>300</value>
+</header>
+<header>
+<name>user-agent</name>
+<value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5</value>
+</header>
+</headers>
+</request>
+<response>
+<statusCode>200</statusCode>
+<reason></reason>
+<responseBody>
+<![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 	"http://www.w3.org/TR/html4/loose.dtd">
-&lt;html lang="en">
+<html lang="en">
 
-    &lt;head>
-        &lt;base href="http://localhost:8080/coreWeb/miniTests/abstractController/index.jsp">
-    &lt;/head>
-    &lt;body>
-        &lt;h3>/coreWeb/miniTests/abstractController/index.jsp&lt;/h3>
+    <head>
+        <base href="http://localhost:8080/coreWeb/miniTests/abstractController/index.jsp">
+    </head>
+    <body>
+        <h3>/coreWeb/miniTests/abstractController/index.jsp</h3>
 
         This test ensures that the framework will not try to instantiate an abstract page flow
         controller.  If you get here, then the test is successful; otherwise, you would see an
         InstantiationException for the abstract controller class.
-    &lt;/body>
+    </body>
 
-&lt;/html></ses:responseBody>
-         </ses:response>
-      </ses:test>
-   </ses:tests>
-   <ses:endDate>23 Sep 2005, 12:15:18.663 AM MDT</ses:endDate>
-   <ses:testCount>1</ses:testCount>
-</ses:recorderSession>
+</html>]]>
+</responseBody>
+</response>
+</test>
+<test>
+<testNumber>2</testNumber>
+<request>
+<protocol>HTTP</protocol>
+<protocolVersion>1.1</protocolVersion>
+<host>localhost</host>
+<port>8080</port>
+<uri>/coreWeb/miniTests/abstractController/Controller.jpf</uri>
+<method>GET</method>
+<parameters>
+</parameters>
+<cookies>
+<cookie>
+<name>JSESSIONID</name>
+<value>0C146DDFB2B13AAA80118C08E3FB7B4E</value>
+</cookie>
+<cookie>
+<name>nde-textsize</name>
+<value>16px</value>
+</cookie>
+<cookie>
+<name>Language</name>
+<value>en</value>
+</cookie>
+<cookie>
+<name>Country</name>
+<value>US</value>
+</cookie>
+</cookies>
+<headers>
+<header>
+<name>accept</name>
+<value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</value>
+</header>
+<header>
+<name>accept-charset</name>
+<value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+</header>
+<header>
+<name>accept-encoding</name>
+<value>gzip,deflate</value>
+</header>
+<header>
+<name>accept-language</name>
+<value>en-us,en;q=0.7,ja;q=0.3</value>
+</header>
+<header>
+<name>connection</name>
+<value>keep-alive</value>
+</header>
+<header>
+<name>cookie</name>
+<value>JSESSIONID=0C146DDFB2B13AAA80118C08E3FB7B4E; nde-textsize=16px; Language=en; Country=US</value>
+</header>
+<header>
+<name>host</name>
+<value>localhost:8080</value>
+</header>
+<header>
+<name>keep-alive</name>
+<value>300</value>
+</header>
+<header>
+<name>user-agent</name>
+<value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5</value>
+</header>
+</headers>
+</request>
+<response>
+<statusCode>200</statusCode>
+<reason></reason>
+<responseBody>
+<![CDATA[<html><head><title>Abstract Page Flow</title></head>
+ <body>
+ <h1>Abstract Page Flow</h1>
+ A request was made to an abstract page flow in path <b>/miniTests/abstractController</b>.
+ </body></html>]]>
+</responseBody>
+</response>
+</test>
+</tests>
+<endDate>01 Dec 2005, 02:16:42.969 PM MST</endDate>
+<testCount>2</testCount>
+</recorderSession>

Modified: beehive/trunk/netui/test/webapps/drt/web/miniTests/handlers/Controller.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/drt/web/miniTests/handlers/Controller.java?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/webapps/drt/web/miniTests/handlers/Controller.java (original)
+++ beehive/trunk/netui/test/webapps/drt/web/miniTests/handlers/Controller.java Fri Dec  2 11:36:36 2005
@@ -16,6 +16,7 @@
 import org.apache.struts.action.ActionForward;
 import org.apache.struts.action.ActionMapping;
 import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.config.ExceptionConfig;
 
 import javax.security.auth.login.LoginException;
 import javax.servlet.ServletException;
@@ -51,10 +52,12 @@
         extends BaseHandler
         implements ActionForwardHandler
     {
-        public ActionForward doForward( FlowControllerHandlerContext context, ActionForward fwd, ActionMapping mapping, 
-                                        String actionName, ModuleConfig altModuleConfig, ActionForm form )
+        public ActionForward processForward(FlowControllerHandlerContext context, ActionForward fwd, ActionMapping mapping, 
+                                            ExceptionConfig exceptionConfig, String actionName, ModuleConfig altModuleConfig,
+                                            ActionForm form)
         {
-            return getPreviousActionForwardHandler().doForward( context, fwd, mapping, actionName, altModuleConfig, form );
+            return getPreviousActionForwardHandler().processForward( context, fwd, mapping, exceptionConfig, actionName,
+                                                                     altModuleConfig, form );
         }
 
         public ActionForward doAutoViewRender( FlowControllerHandlerContext context, ActionMapping mapping, ActionForm form )

Modified: beehive/trunk/netui/test/webapps/jsf/web/WEB-INF/web.xml.jsf-ri
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/jsf/web/WEB-INF/web.xml.jsf-ri?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/webapps/jsf/web/WEB-INF/web.xml.jsf-ri (original)
+++ beehive/trunk/netui/test/webapps/jsf/web/WEB-INF/web.xml.jsf-ri Fri Dec  2 11:36:36 2005
@@ -109,7 +109,7 @@
 
     <init-param>
       <param-name>config</param-name>
-      <param-value>/WEB-INF/classes/_pageflow/struts-config.xml</param-value>
+      <param-value>/_pageflow/struts-config.xml</param-value>
     </init-param>
 
     <init-param>

Modified: beehive/trunk/netui/test/webapps/jsf/web/WEB-INF/web.xml.myfaces
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/jsf/web/WEB-INF/web.xml.myfaces?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/webapps/jsf/web/WEB-INF/web.xml.myfaces (original)
+++ beehive/trunk/netui/test/webapps/jsf/web/WEB-INF/web.xml.myfaces Fri Dec  2 11:36:36 2005
@@ -116,7 +116,7 @@
 
       <init-param>
         <param-name>config</param-name>
-        <param-value>/WEB-INF/classes/_pageflow/struts-config.xml</param-value>
+        <param-value>/_pageflow/struts-config.xml</param-value>
       </init-param>
 
       <init-param>

Modified: beehive/trunk/netui/test/webapps/tomcat/tomcatWeb/WEB-INF/web.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/tomcat/tomcatWeb/WEB-INF/web.xml?rev=351812&r1=351811&r2=351812&view=diff
==============================================================================
--- beehive/trunk/netui/test/webapps/tomcat/tomcatWeb/WEB-INF/web.xml (original)
+++ beehive/trunk/netui/test/webapps/tomcat/tomcatWeb/WEB-INF/web.xml Fri Dec  2 11:36:36 2005
@@ -54,7 +54,7 @@
 
     <init-param>
       <param-name>config</param-name>
-      <param-value>/WEB-INF/classes/_pageflow/struts-config.xml</param-value>
+      <param-value>/_pageflow/struts-config.xml</param-value>
     </init-param>
 
     <init-param>