Author: musachy
Date: Mon May 19 12:29:07 2008
New Revision: 657932

URL: http://svn.apache.org/viewvc?rev=657932&view=rev
Log:
Add "params" to @Action

Added:
    
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/params/
    
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/params/ActionParamsMethodLevelAction.java
Modified:
    
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultInterceptorMapBuilder.java
    
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
    
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
    
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/StringTools.java
    
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/annotation/Action.java
    
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java

Modified: 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultInterceptorMapBuilder.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultInterceptorMapBuilder.java?rev=657932&r1=657931&r2=657932&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultInterceptorMapBuilder.java
 (original)
+++ 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultInterceptorMapBuilder.java
 Mon May 19 12:29:07 2008
@@ -85,7 +85,7 @@
             if (LOG.isTraceEnabled())
                 LOG.trace("Adding interceptor [#0] to [#1]",
                         interceptor.value(), actionName);
-            Map<String, String> params = createParameterMap(interceptor
+            Map<String, String> params = 
StringTools.createParameterMap(interceptor
                     .params());
             interceptorList.addAll(buildInterceptorList(builder,
                     interceptor, params));
@@ -94,29 +94,6 @@
            return interceptorList;
        }
 
-       protected Map<String, String> createParameterMap(String[] parms) {
-               Map<String, String> map = new HashMap<String, String>();
-               int subtract = parms.length % 2;
-               if (subtract != 0) {
-                       throw new ConfigurationException(
-                                       "The InterceptorRef annotation uses an 
array of strings for"
-                                                       + " parameters and they 
must be in a key value pair configuration. It looks like you"
-                                                       + " have specified an 
odd number of parameters and there should only be an even number."
-                                                       + " (e.g. params = 
{\"key\", \"value\"})");
-               }
-
-               for (int i = 0; i < parms.length; i = i + 2) {
-                       String key = parms[i];
-                       String value = parms[i + 1];
-                       map.put(key, value);
-                       if (LOG.isTraceEnabled()) {
-                               LOG.trace("Adding parmeter [#0:#1] to 
interceptor", key, value);
-                       }
-               }
-
-               return map;
-       }
-
        protected List<InterceptorMapping> buildInterceptorList(
                        PackageConfig.Builder builder, InterceptorRef ref, Map 
params) {
                return 
InterceptorBuilder.constructInterceptorReference(builder, ref

Modified: 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java?rev=657932&r1=657931&r2=657932&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
 (original)
+++ 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
 Mon May 19 12:29:07 2008
@@ -361,7 +361,7 @@
 
         // Handle the annotation
         if (result != null) {
-            params.putAll(createParameterMap(result.params()));
+            params.putAll(StringTools.createParameterMap(result.params()));
         }
 
         // Map the location to the default param for the result or a param 
named location
@@ -375,28 +375,6 @@
         return new ResultConfig.Builder(info.name, 
resultTypeConfig.getClassName()).addParams(params).build();
     }
 
-    protected Map<String, String> createParameterMap(String[] parms) {
-        Map<String, String> map = new HashMap<String, String>();
-        int subtract = parms.length % 2;
-        if (subtract != 0) {
-            throw new ConfigurationException("The Result annotation uses an 
array of strings for" +
-                " parameters and they must be in a key value pair 
configuration. It looks like you" +
-                " have specified an odd number of parameters and there should 
only be an even number." +
-                " (e.g. params = {\"key\", \"value\"})");
-        }
-
-        for (int i = 0; i < parms.length; i = i + 2) {
-            String key = parms[i];
-            String value = parms[i + 1];
-            map.put(key, value);
-            if (LOG.isTraceEnabled()) {
-                LOG.trace("Adding parmeter [#0:#1] to result", key, value);
-            }
-        }
-
-        return map;
-    }
-
     class ResultInfo {
         public final String name;
         public final String location;

Modified: 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java?rev=657932&r1=657931&r2=657932&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
 (original)
+++ 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
 Mon May 19 12:29:07 2008
@@ -501,6 +501,10 @@
         Map<String, ResultConfig> results = 
resultMapBuilder.build(actionClass, annotation, actionName, pkgCfg.build());
         actionConfig.addResultConfigs(results);
 
+        //add params
+        if (annotation != null)
+            
actionConfig.addParams(StringTools.createParameterMap(annotation.params()));
+
         pkgCfg.addActionConfig(actionName, actionConfig.build());
     }
 

Modified: 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/StringTools.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/StringTools.java?rev=657932&r1=657931&r2=657932&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/StringTools.java
 (original)
+++ 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/StringTools.java
 Mon May 19 12:29:07 2008
@@ -20,6 +20,11 @@
  */
 package org.apache.struts2.convention;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import com.opensymphony.xwork2.config.ConfigurationException;
+
 /**
  * <p>
  * This class is a String helper.
@@ -47,4 +52,24 @@
 
         return "";
     }
+
+    public static Map<String, String> createParameterMap(String[] parms) {
+        Map<String, String> map = new HashMap<String, String>();
+        int subtract = parms.length % 2;
+        if (subtract != 0) {
+            throw new ConfigurationException(
+                    "'params' is a string array "
+                            + "and they must be in a key value pair 
configuration. It looks like you"
+                            + " have specified an odd number of parameters and 
there should only be an even number."
+                            + " (e.g. params = {\"key\", \"value\"})");
+        }
+
+        for (int i = 0; i < parms.length; i = i + 2) {
+            String key = parms[i];
+            String value = parms[i + 1];
+            map.put(key, value);
+        }
+
+        return map;
+    }
 }
\ No newline at end of file

Modified: 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/annotation/Action.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/annotation/Action.java?rev=657932&r1=657931&r2=657932&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/annotation/Action.java
 (original)
+++ 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/annotation/Action.java
 Mon May 19 12:29:07 2008
@@ -80,4 +80,11 @@
      * @return Interceptors to be applied to the action
      */
     InterceptorRef[] interceptorRefs() default {};
+
+    /**
+     * @return  The parameters passed to the action. This is a list of strings 
that form a name/value
+     *          pair chain since creating a Map for annotations is not 
possible. An example would be:
+     *          <code>{"key", "value", "key2", "value2"}</code>.
+     */
+    String[] params() default {};
 }
\ No newline at end of file

Modified: 
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java?rev=657932&r1=657931&r2=657932&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
 (original)
+++ 
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
 Mon May 19 12:29:07 2008
@@ -49,6 +49,7 @@
 import 
org.apache.struts2.convention.actions.namespace.ClassLevelNamespaceAction;
 import 
org.apache.struts2.convention.actions.namespace.PackageLevelNamespaceAction;
 import org.apache.struts2.convention.actions.namespace2.DefaultNamespaceAction;
+import 
org.apache.struts2.convention.actions.params.ActionParamsMethodLevelAction;
 import 
org.apache.struts2.convention.actions.parentpackage.ClassLevelParentPackageAction;
 import 
org.apache.struts2.convention.actions.parentpackage.PackageLevelParentPackageAction;
 import org.apache.struts2.convention.actions.result.ActionLevelResultAction;
@@ -116,6 +117,8 @@
 
         PackageConfig rootPkg = 
makePackageConfig("org.apache.struts2.convention.actions#struts-default#",
             "", strutsDefault, null);
+        PackageConfig paramsPkg = 
makePackageConfig("org.apache.struts2.convention.actions.params#struts-default#/params",
+                "/params", strutsDefault, null);
         PackageConfig actionPkg = 
makePackageConfig("org.apache.struts2.convention.actions.action#struts-default#/action",
             "/action", strutsDefault, null);
         PackageConfig idxPkg = 
makePackageConfig("org.apache.struts2.convention.actions.idx#struts-default#/idx",
@@ -160,6 +163,9 @@
         
expect(resultMapBuilder.build(org.apache.struts2.convention.actions.idx.Index.class,
 null, "index", idxPkg)).andReturn(results);
         
expect(resultMapBuilder.build(org.apache.struts2.convention.actions.idx.idx2.Index.class,
 null, "index", idx2Pkg)).andReturn(results);
 
+        /* org.apache.struts2.convention.actions.params */
+        expect(resultMapBuilder.build(ActionParamsMethodLevelAction.class, 
getAnnotation(ActionParamsMethodLevelAction.class, "run1", Action.class), 
"actionParam1", paramsPkg)).andReturn(results);
+
         /* org.apache.struts2.convention.actions.interceptor */
         expect(resultMapBuilder.build(InterceptorsAction.class, 
getAnnotation(InterceptorsAction.class, "run1", Action.class), "action100", 
interceptorRefsPkg)).andReturn(results);
         expect(resultMapBuilder.build(InterceptorsAction.class, 
getAnnotation(InterceptorsAction.class, "run2", Action.class), "action200", 
interceptorRefsPkg)).andReturn(results);
@@ -247,6 +253,18 @@
         verifyActionConfig(pkgConfig, "action", SingleActionNameAction.class, 
"run", pkgConfig.getName());
         verifyActionConfig(pkgConfig, "test", TestAction.class, "execute", 
pkgConfig.getName());
 
+        /* org.apache.struts2.convention.actions.params */
+        pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions.params#struts-default#/params");
+        assertNotNull(pkgConfig);
+        assertEquals(1, pkgConfig.getActionConfigs().size());
+        ActionConfig ac = pkgConfig.getAllActionConfigs().get("actionParam1");
+        assertNotNull(ac);
+        Map<String, String> params = ac.getParams();
+        assertNotNull(params);
+        assertEquals(2, params.size());
+        assertEquals("val1", params.get("param1"));
+        assertEquals("val2", params.get("param2"));
+
         /* org.apache.struts2.convention.actions.idx */
         pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions.idx#struts-default#/idx");
         assertNotNull(pkgConfig);

Added: 
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/params/ActionParamsMethodLevelAction.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/params/ActionParamsMethodLevelAction.java?rev=657932&view=auto
==============================================================================
--- 
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/params/ActionParamsMethodLevelAction.java
 (added)
+++ 
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/params/ActionParamsMethodLevelAction.java
 Mon May 19 12:29:07 2008
@@ -0,0 +1,49 @@
+/*
+ * $ID$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts2.convention.actions.params;
+
+import org.apache.struts2.convention.annotation.Action;
+
+public class ActionParamsMethodLevelAction {
+    private String param1;
+    private String param2;
+
+    @Action(value = "actionParam1", params = {"param1", "val1", "param2", 
"val2"})
+    public String run1() throws Exception {
+        return null;
+    }
+
+    public String getParam1() {
+        return param1;
+    }
+
+    public void setParam1(String param1) {
+        this.param1 = param1;
+    }
+
+    public String getParam2() {
+        return param2;
+    }
+
+    public void setParam2(String param2) {
+        this.param2 = param2;
+    }
+}


Reply via email to