You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by mr...@apache.org on 2005/08/10 05:27:23 UTC

svn commit: r231158 - in /struts/sandbox/trunk/ti: ./ src/java/org/apache/ti/config/ src/java/org/apache/ti/processor/ src/java/org/apache/ti/processor/chain/

Author: mrdon
Date: Tue Aug  9 20:27:15 2005
New Revision: 231158

URL: http://svn.apache.org/viewcvs?rev=231158&view=rev
Log:
 * Adding form scoping
 * Adding form create chain
 * Adding action execution chain

Added:
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/InvokeAction.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ChainInvokeAction.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteActionChain.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteActionInvocation.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteFormAction.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteXWorkAction.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ManageFormScope.java
Removed:
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteAction.java
Modified:
    struts/sandbox/trunk/ti/project.xml
    struts/sandbox/trunk/ti/src/java/org/apache/ti/config/spring-config-servlet.xml
    struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/ControllerActionInvocation.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/ControllerActionProxyFactory.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ChainRequestProcessor.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/CreateFormChain.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ProcessActionChain.java
    struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/chain-config-servlet.xml

Modified: struts/sandbox/trunk/ti/project.xml
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/project.xml?rev=231158&r1=231157&r2=231158&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/project.xml (original)
+++ struts/sandbox/trunk/ti/project.xml Tue Aug  9 20:27:15 2005
@@ -43,9 +43,12 @@
   <gumpRepositoryId>struts-ti-svn</gumpRepositoryId>
 
   <description>
-    Struts Ti 2.0 is a simplified Model 2 framework for developing webapps which allows the developer better access to the underlying servlet/portlet environment. It serves a niche of web applications that don.t want the additional complexity of server-side components and verbose configuration, yet want the structure and controller features of a modern web framework. Struts Ti 2.0 builds on the directions of Struts 1.x, yet re-implements the framework to provide a clean slate for the next generation of Struts Ti. It aims to combine the simplicity of Ruby on Rails and NanoWeb, the refinement of WebWork 2, the tool-friendly authoring of Beehive, and the history of Struts 1.x.
-      
-  </description>
+    Struts Ti is a simplified Model 2 framework for developing webapps which allows the developer better access to the
+    underlying servlet/portlet environment. It serves a niche of web applications that don.t want the additional
+    complexity of server-side components and verbose configuration, yet want the structure and controller features of a
+    modern web framework. Struts Ti builds on the directions of Struts 1.x, yet re-implements the framework to provide a
+    clean slate for the next generation of Struts Ti. It aims to combine the simplicity of Ruby on Rails and NanoWeb,
+    the refinement of WebWork 2, the tool-friendly authoring of Beehive, and the history of Struts 1.x.</description>
       
   <shortDescription>MVC Web Application Framework</shortDescription>
   <url>http://struts.apache.org/index.html</url>
@@ -276,7 +279,7 @@
     <dependency>
       <groupId>eclipse</groupId>
       <artifactId>jdtcore</artifactId>
-      <version>3.1.0</version>
+      <version>3.0.1</version>
       <properties>
         <war.bundle>true</war.bundle>
       </properties>

Modified: struts/sandbox/trunk/ti/src/java/org/apache/ti/config/spring-config-servlet.xml
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/spring-config-servlet.xml?rev=231158&r1=231157&r2=231158&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/spring-config-servlet.xml (original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/spring-config-servlet.xml Tue Aug  9 20:27:15 2005
@@ -59,4 +59,6 @@
     <property name="controllerContext" ref="controllerContext" />
   </bean>
   
+  <bean id="invokeAction" class="org.apache.ti.processor.chain.ChainInvokeAction" />
+  
 </beans>  

Modified: struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm?rev=231158&r1=231157&r2=231158&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm (original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm Tue Aug  9 20:27:15 2005
@@ -18,6 +18,16 @@
       #if( $method.returnType.type.type == "java.lang.String.class" && $method.doc.hasTag("ti.action"))
         #if( $method.parameters.size() == 0 || $method.parameters.size() == 1) 
         <action name="$method.name" method="$method.name" class="$xclass.qualifiedName">
+           
+           #set( $form = $method.doc.getTag("ti.form"))
+           #if ($form != null)
+            #if ($form.getAttributeValue("scope") != null)
+              <param name="formScope">${form.getAttributeScope("scope")}</param>
+            #end
+            #if ($form.getAttributeValue("name") != null)
+              <param name="formName">${form.getAttributeScope("name")}</param>
+            #end
+           #end
            #set( $forwards = $method.doc.getTags("ti.forward"))
            #if( $forwards.size() == 0) 
            <result name="success">

Modified: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/ControllerActionInvocation.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/ControllerActionInvocation.java?rev=231158&r1=231157&r2=231158&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/ControllerActionInvocation.java (original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/ControllerActionInvocation.java Tue Aug  9 20:27:15 2005
@@ -31,8 +31,14 @@
 
     protected BeanFactory beanFactory;
     protected Method actionMethod;
+<<<<<<< .mine
     protected Object form;
+    protected InvokeAction invokeAction;
     
+=======
+    protected Object form;
+    
+>>>>>>> .r231157
     protected ControllerActionInvocation(ActionProxy proxy) throws Exception {
         this(proxy, null);
     }
@@ -44,6 +50,10 @@
     protected ControllerActionInvocation(ActionProxy proxy, Map extraContext, boolean pushAction) throws Exception {
         super(proxy, extraContext, pushAction);
     }
+    
+    public void setInvokeAction(InvokeAction inv) {
+        this.invokeAction = inv;
+    }
 
     public Method getActionMethod() {
         // TODO: this should be optimized 
@@ -74,6 +84,31 @@
         }    
         return actionMethod;
     }
+<<<<<<< .mine
+    
+    public Object getForm() {
+        return form;
+    }
+    
+    public void setForm(Object o) {
+        this.form = o;
+    }
+
+    /**
+     *  Invokes action.  If the action method contains one parameter, this method
+     *  handles its execution.  Otherwise, it is delegated to the super class.
+     */
+    protected String invokeAction(Object action, ActionConfig actionConfig) throws Exception {
+        
+        return invokeAction(action, actionConfig);
+    }
+    
+    public String invokeXWorkAction(Object action, ActionConfig actionConfig)
+            throws Exception {
+        return super.invokeAction(action, actionConfig);
+    }    
+        
+=======
     
     public Object getForm() {
         return form;
@@ -108,4 +143,5 @@
             return super.invokeAction(action, actionConfig);
         }
     }
+>>>>>>> .r231157
 }

Modified: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/ControllerActionProxyFactory.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/ControllerActionProxyFactory.java?rev=231158&r1=231157&r2=231158&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/ControllerActionProxyFactory.java (original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/ControllerActionProxyFactory.java Tue Aug  9 20:27:15 2005
@@ -6,7 +6,8 @@
 
 import java.util.Map;
 
-import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.*;
+import org.springframework.beans.factory.config.*;
 import org.springframework.beans.factory.BeanFactoryAware;
 
 import com.opensymphony.xwork.ActionInvocation;
@@ -17,18 +18,39 @@
 /**
  *  Creates special action invocation instances that handle ControllerActions
  */
-public class ControllerActionProxyFactory extends DefaultActionProxyFactory {
+public class ControllerActionProxyFactory extends DefaultActionProxyFactory implements BeanFactoryAware {
 
+    private BeanFactory beanFactory;
+    
+    public void setBeanFactory(BeanFactory factory) {
+        this.beanFactory = factory;
+    }
+    
     public ActionInvocation createActionInvocation(ActionProxy actionProxy) throws Exception {
-        return new ControllerActionInvocation(actionProxy);
+        ActionInvocation inv = new ControllerActionInvocation(actionProxy);
+        populate(inv);
+        return inv;
     }
 
     public ActionInvocation createActionInvocation(ActionProxy actionProxy, Map extraContext) throws Exception {
-        return new ControllerActionInvocation(actionProxy, extraContext);
+        ActionInvocation inv = new ControllerActionInvocation(actionProxy, extraContext);
+        populate(inv);
+        return inv;
     }
 
     public ActionInvocation createActionInvocation(ActionProxy actionProxy, Map extraContext, boolean pushAction) throws Exception {
-        return new ControllerActionInvocation(actionProxy, extraContext, pushAction);
+        ActionInvocation inv = new ControllerActionInvocation(actionProxy, extraContext, pushAction);
+        populate(inv);
+        return inv;
+    }
+    
+    private void populate(Object o) {
+        
+        ((ControllerActionInvocation)o).setInvokeAction((InvokeAction)beanFactory.getBean("invokeAction"));
+        if (beanFactory instanceof AutowireCapableBeanFactory) {
+            AutowireCapableBeanFactory f = (AutowireCapableBeanFactory)beanFactory;
+            f.autowireBeanProperties(o, f.AUTOWIRE_BY_TYPE, false);
+        }
     }
 
 }

Added: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/InvokeAction.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/InvokeAction.java?rev=231158&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/InvokeAction.java (added)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/InvokeAction.java Tue Aug  9 20:27:15 2005
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2002-2003 by OpenSymphony
+ * All rights reserved.
+ */
+package org.apache.ti.processor;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.BeanFactory;
+
+import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork.ActionProxy;
+import com.opensymphony.xwork.DefaultActionInvocation;
+import com.opensymphony.xwork.config.entities.ActionConfig;
+
+
+/**
+ * Adds code to handle ControllerActions if detected.
+ *
+ * @see com.opensymphony.xwork.DefaultActionInvocation
+ */
+public interface InvokeAction {
+
+    /**
+     *  Invokes action.  If the action method contains one parameter, this method
+     *  handles its execution.  Otherwise, it is delegated to the super class.
+     */
+    public String invokeAction(Object action, ActionConfig actionConfig) throws Exception;
+        
+}

Added: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ChainInvokeAction.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ChainInvokeAction.java?rev=231158&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ChainInvokeAction.java (added)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ChainInvokeAction.java Tue Aug  9 20:27:15 2005
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2002-2003 by OpenSymphony
+ * All rights reserved.
+ */
+package org.apache.ti.processor.chain;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.BeanFactory;
+
+import org.apache.commons.chain.*;
+
+import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork.ActionProxy;
+import com.opensymphony.xwork.DefaultActionInvocation;
+import com.opensymphony.xwork.config.entities.ActionConfig;
+
+import com.opensymphony.xwork.ActionContext;
+
+import org.apache.ti.processor.InvokeAction;
+
+/**
+ * Adds code to handle ControllerActions if detected.
+ *
+ * @see com.opensymphony.xwork.DefaultActionInvocation
+ */
+public class ChainInvokeAction implements InvokeAction {
+
+    private static final Log log = LogFactory.getLog(ChainInvokeAction.class);
+
+    protected String catalogName = "struts-ti";
+    protected String executeCmdName = "execute-action";
+    public static final String RESULT = "actionResult";
+
+    public void setExecuteActionCommandName(String name) {
+        this.executeCmdName = name;
+    }
+    
+    public void setCatalogName(String name) {
+        this.catalogName = name;
+    }
+
+    /**
+     *  Invokes action.  If the action method contains one parameter, this method
+     *  handles its execution.  Otherwise, it is delegated to the super class.
+     */
+    public String invokeAction(Object action, ActionConfig actionConfig) throws Exception {
+        
+        CatalogFactory factory = CatalogFactory.getInstance();
+        Catalog cat = factory.getCatalog(catalogName);
+        if (cat == null) {
+            throw new IllegalStateException("Cannot find catalog '"
+                    + catalogName + "'");
+        }
+        
+        Command executeCmd = cat.getCommand(executeCmdName);
+        if (executeCmd == null) {
+            throw new IllegalStateException("Cannot find execute action command '"
+                    + executeCmdName + "'");
+        }
+        
+        Context ctx = (Context) ActionContext.getContext().get("webContext");
+        
+        executeCmd.execute(ctx);
+        
+        String result = (String) ctx.get(RESULT);
+        
+        return result;
+    }
+    
+}

Modified: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ChainRequestProcessor.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ChainRequestProcessor.java?rev=231158&r1=231157&r2=231158&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ChainRequestProcessor.java (original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ChainRequestProcessor.java Tue Aug  9 20:27:15 2005
@@ -125,7 +125,7 @@
             Command initCmd = catalog.getCommand(initCmdName);
             if (initCmd == null) {
                 throw new ProcessorException("Cannot find init command '"
-                        + startCmdName + "'");
+                        + initCmdName + "'");
             }
             initCmd.execute(webContext);
 

Modified: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/CreateFormChain.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/CreateFormChain.java?rev=231158&r1=231157&r2=231158&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/CreateFormChain.java (original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/CreateFormChain.java Tue Aug  9 20:27:15 2005
@@ -46,7 +46,7 @@
 
         ActionContext ctx = ActionContext.getContext();
         ControllerActionInvocation inv = (ControllerActionInvocation)ctx.getActionInvocation();
-        
+            
         Method method = inv.getActionMethod();
         Class[] params = method.getParameterTypes();
         if (params.length == 1) {

Added: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteActionChain.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteActionChain.java?rev=231158&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteActionChain.java (added)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteActionChain.java Tue Aug  9 20:27:15 2005
@@ -0,0 +1,50 @@
+/*
+ * $Id: ExecuteActionChain.java 230569 2005-08-06 19:41:10Z mrdon $
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ti.processor.chain;
+
+import org.apache.ti.processor.*;
+import java.lang.reflect.Method;
+import org.apache.commons.chain.Context;
+import org.apache.commons.chain.web.WebContext;
+import org.apache.commons.chain.impl.ChainBase;
+
+import com.opensymphony.xwork.ActionContext;
+import com.opensymphony.xwork.ActionProxy;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ *  Initializes XWork by replacing default factories.
+ */
+public class ExecuteActionChain extends ChainBase {
+
+    private static final Log log = LogFactory.getLog(ExecuteActionChain.class);
+
+    
+    public boolean execute(Context origctx) throws Exception {
+        log.info("Processing execute action chain");
+        
+        boolean retCode = super.execute(origctx);
+        if (!retCode) {
+            throw new IllegalStateException("Unable to execute action "+
+                ActionContext.getContext().getActionInvocation().getAction());
+        }
+        return false;
+    }
+}

Added: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteActionInvocation.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteActionInvocation.java?rev=231158&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteActionInvocation.java (added)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteActionInvocation.java Tue Aug  9 20:27:15 2005
@@ -0,0 +1,49 @@
+/*
+ * $Id: ExecuteAction.java 230535 2005-08-06 07:56:40Z mrdon $
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ti.processor.chain;
+
+import org.apache.commons.chain.Command;
+import org.apache.commons.chain.Context;
+
+import com.opensymphony.xwork.ActionContext;
+import com.opensymphony.xwork.ActionProxy;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ *  Initializes XWork by replacing default factories.
+ */
+public class ExecuteActionInvocation implements Command {
+
+    private static final Log log = LogFactory.getLog(ExecuteActionInvocation.class);
+
+    public boolean execute(Context origctx) throws Exception {
+        log.debug("Executing action invocation");
+
+        ActionContext ctx = ActionContext.getContext();
+        ActionProxy proxy = ctx.getActionInvocation().getProxy();
+
+        String ret = proxy.execute();
+
+        origctx.put("result", ret);
+        return false;
+    }
+
+
+}

Added: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteFormAction.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteFormAction.java?rev=231158&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteFormAction.java (added)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteFormAction.java Tue Aug  9 20:27:15 2005
@@ -0,0 +1,70 @@
+/*
+ * $Id: ExecuteFormAction.java 230535 2005-08-06 07:56:40Z mrdon $
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ti.processor.chain;
+
+import org.apache.commons.chain.Command;
+import org.apache.commons.chain.Context;
+
+import com.opensymphony.xwork.ActionContext;
+import com.opensymphony.xwork.ActionProxy;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.ti.processor.ControllerActionInvocation;
+
+/**
+ *  Initializes XWork by replacing default factories.
+ */
+public class ExecuteFormAction implements Command {
+
+    private static final Log log = LogFactory.getLog(ExecuteFormAction.class);
+
+    public boolean execute(Context origctx) throws Exception {
+        log.debug("Executing form action");
+        boolean result = false;
+        
+        ActionContext ctx = ActionContext.getContext();
+        ControllerActionInvocation inv = (ControllerActionInvocation)ctx.getActionInvocation();
+        Method method = inv.getActionMethod();
+        Object form = inv.getForm();
+        if (method.getParameterTypes().length == 1) {
+            try {
+                String res = (String) method.invoke(inv.getAction(), new Object[] {form});
+                origctx.put(ChainInvokeAction.RESULT, res);
+                result = true;
+            } catch (InvocationTargetException e) {
+                // We try to return the source exception.
+                Throwable t = e.getTargetException();
+    
+                if (t instanceof Exception) {
+                    throw (Exception) t;
+                } else {
+                    throw e;
+                }
+            }
+        }
+
+        return result;
+    }
+
+
+}

Added: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteXWorkAction.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteXWorkAction.java?rev=231158&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteXWorkAction.java (added)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ExecuteXWorkAction.java Tue Aug  9 20:27:15 2005
@@ -0,0 +1,64 @@
+/*
+ * $Id: ExecuteXWorkAction.java 230535 2005-08-06 07:56:40Z mrdon $
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ti.processor.chain;
+
+import org.apache.ti.processor.ControllerActionInvocation;
+
+import org.apache.commons.chain.Command;
+import org.apache.commons.chain.Context;
+
+import com.opensymphony.xwork.ActionContext;
+import com.opensymphony.xwork.ActionProxy;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ *  Initializes XWork by replacing default factories.
+ */
+public class ExecuteXWorkAction implements Command {
+
+    private static final Log log = LogFactory.getLog(ExecuteXWorkAction.class);
+
+    public boolean execute(Context origctx) throws Exception {
+        log.debug("Executing form action");
+        boolean result = false;
+        
+        ActionContext ctx = ActionContext.getContext();
+        ControllerActionInvocation inv = (ControllerActionInvocation) ctx.getActionInvocation();
+        try {
+            String res = inv.invokeXWorkAction(inv.getAction(), inv.getProxy().getConfig());
+            origctx.put(ChainInvokeAction.RESULT, res);
+            result = true;
+        } catch (InvocationTargetException e) {
+            // We try to return the source exception.
+            Throwable t = e.getTargetException();
+
+            if (t instanceof Exception) {
+                throw (Exception) t;
+            } else {
+                throw e;
+            }
+        }
+
+        return result;
+    }
+
+
+}

Added: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ManageFormScope.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ManageFormScope.java?rev=231158&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ManageFormScope.java (added)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ManageFormScope.java Tue Aug  9 20:27:15 2005
@@ -0,0 +1,95 @@
+/*
+ * $Id: ManageFormScope.java 230535 2005-08-06 07:56:40Z mrdon $
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ti.processor.chain;
+
+import org.apache.commons.chain.*;
+import org.apache.commons.chain.web.*;
+
+import java.util.*;
+
+import org.apache.ti.processor.*;
+
+import com.opensymphony.xwork.ActionContext;
+import com.opensymphony.xwork.ActionProxy;
+import com.opensymphony.xwork.config.entities.ActionConfig;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ *  Tries to instantiate the form class's no-arg constructor.
+ */
+public class ManageFormScope implements Filter {
+
+    private static final Log log = LogFactory.getLog(ManageFormScope.class);
+
+    public boolean execute(Context origctx) throws Exception {
+        log.debug("Managing form scope");
+        
+        WebContext webCtx = (WebContext)origctx;
+        String formName = getFormName();
+        Map scope = getFormScope(webCtx);
+        
+        if (scope != null) {
+            Object form = scope.get(formName);
+            if (form == null) {
+                origctx.put(CreateFormChain.FORM_OBJECT, form);
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    public boolean postprocess(Context origctx, Exception ex) {
+        WebContext webCtx = (WebContext)origctx;
+        
+        Map scope = getFormScope(webCtx);
+        if (scope != null) {
+            Object form = webCtx.get(CreateFormChain.FORM_OBJECT);
+            if (form != null) {
+                String formName = getFormName();
+                scope.put(formName, form);
+            }
+        }
+        return false;
+    }
+    
+    protected String getFormName() {
+        ActionContext ctx = ActionContext.getContext();
+        ControllerActionInvocation inv = (ControllerActionInvocation)ctx.getActionInvocation();
+        String formName = (String)inv.getProxy().getConfig().getParams().get("formName");
+        if (formName == null) {
+            ActionConfig cfg = inv.getProxy().getConfig();
+            formName = cfg.getPackageName() + ":"+cfg.getClassName()+":"+cfg.getMethodName();
+        }
+        return formName;
+    }
+    
+    protected Map getFormScope(WebContext webCtx) {
+        ActionContext ctx = ActionContext.getContext();
+        ControllerActionInvocation inv = (ControllerActionInvocation)ctx.getActionInvocation();
+        String scopeType = (String)inv.getProxy().getConfig().getParams().get("formScope");
+        Map map = null;
+        if ("request".equals(scopeType)) {
+            map = webCtx.getRequestScope();
+        } else if ("session".equals(scopeType)) {
+            map = webCtx.getSessionScope();
+        }
+        return map;
+    }
+}

Modified: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ProcessActionChain.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ProcessActionChain.java?rev=231158&r1=231157&r2=231158&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ProcessActionChain.java (original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/ProcessActionChain.java Tue Aug  9 20:27:15 2005
@@ -54,6 +54,4 @@
         
         return retCode;
     }
-    
-
 }

Modified: struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/chain-config-servlet.xml
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/chain-config-servlet.xml?rev=231158&r1=231157&r2=231158&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/chain-config-servlet.xml (original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/processor/chain/chain-config-servlet.xml Tue Aug  9 20:27:15 2005
@@ -60,11 +60,17 @@
       <command name="initControllerContext"  />
       <lookup catalogName="struts-ti" name="createForm" optional="true" />
       <command name="selectLocale" className="org.apache.ti.processor.chain.servlet.SelectLocale" />
-      <command name="executeAction" className="org.apache.ti.processor.chain.ExecuteAction" />
+      <command name="executeActionInvocation" className="org.apache.ti.processor.chain.ExecuteActionInvocation" />
     </chain>
     
     <chain name="createForm" className="org.apache.ti.processor.chain.CreateFormChain">
+      <command name="manageFormScope" className="org.apache.ti.processor.chain.ManageFormScope" />
       <command name="createJavaBeanForm" className="org.apache.ti.processor.chain.CreateJavaBeanForm" />
+    </chain>
+    
+    <chain name="executeAction" className="org.apache.ti.processor.chain.ExecuteActionChain">
+      <command name="executeFormAction" className="org.apache.ti.processor.chain.ExecuteFormAction" />
+      <command name="executeXWorkAction" className="org.apache.ti.processor.chain.ExecuteXWorkAction" />
     </chain>
 
 </catalog>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org