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; + } +}