View Javadoc

1   /*
2    * $Id: TestConfigurationProvider.java 476106 2006-11-17 10:56:40Z mrdon $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  package org.apache.struts2;
22  
23  import java.util.ArrayList;
24  import java.util.HashMap;
25  import java.util.List;
26  import java.util.Map;
27  import java.util.Properties;
28  
29  import org.apache.struts2.dispatcher.ServletDispatcherResult;
30  import org.apache.struts2.interceptor.TokenInterceptor;
31  import org.apache.struts2.interceptor.TokenSessionStoreInterceptor;
32  
33  import com.opensymphony.xwork2.Action;
34  import com.opensymphony.xwork2.ActionChainResult;
35  import com.opensymphony.xwork2.ActionProxyFactory;
36  import com.opensymphony.xwork2.DefaultActionProxyFactory;
37  import com.opensymphony.xwork2.ObjectFactory;
38  import com.opensymphony.xwork2.config.Configuration;
39  import com.opensymphony.xwork2.config.ConfigurationException;
40  import com.opensymphony.xwork2.config.ConfigurationProvider;
41  import com.opensymphony.xwork2.config.entities.ActionConfig;
42  import com.opensymphony.xwork2.config.entities.InterceptorMapping;
43  import com.opensymphony.xwork2.config.entities.PackageConfig;
44  import com.opensymphony.xwork2.config.entities.ResultConfig;
45  import com.opensymphony.xwork2.inject.ContainerBuilder;
46  import com.opensymphony.xwork2.interceptor.ParametersInterceptor;
47  import com.opensymphony.xwork2.mock.MockResult;
48  import com.opensymphony.xwork2.util.location.LocatableProperties;
49  
50  
51  /***
52   * TestConfigurationProvider provides a simple configuration class without the need for xml files, etc. for simple testing.
53   *
54   */
55  public class TestConfigurationProvider implements ConfigurationProvider {
56  
57      public static final String TEST_ACTION_NAME = "testAction";
58      public static final String EXECUTION_COUNT_ACTION_NAME = "executionCountAction";
59      public static final String TOKEN_ACTION_NAME = "tokenAction";
60      public static final String TOKEN_SESSION_ACTION_NAME = "tokenSessionAction";
61      public static final String TEST_NAMESPACE = "/testNamespace";
62      public static final String TEST_NAMESPACE_ACTION = "testNamespaceAction";
63      private Configuration configuration;
64  
65  
66      /***
67       * Allows the configuration to clean up any resources used
68       */
69      public void destroy() {
70      }
71      
72      public void init(Configuration config) {
73          this.configuration = config;
74      }
75  
76      /***
77       * Initializes the configuration object.
78       */
79      public void loadPackages() {
80          PackageConfig defaultPackageConfig = new PackageConfig("");
81  
82          HashMap results = new HashMap();
83  
84          HashMap successParams = new HashMap();
85          successParams.put("propertyName", "executionCount");
86          successParams.put("expectedValue", "1");
87  
88          ResultConfig successConfig = new ResultConfig(Action.SUCCESS, TestResult.class.getName(), successParams);
89  
90          results.put(Action.SUCCESS, successConfig);
91  
92          List interceptors = new ArrayList();
93  
94          ActionConfig executionCountActionConfig = new ActionConfig(null, ExecutionCountTestAction.class, null, results, interceptors);
95          defaultPackageConfig.addActionConfig(EXECUTION_COUNT_ACTION_NAME, executionCountActionConfig);
96  
97          results = new HashMap();
98  
99          successParams = new HashMap();
100         successParams.put("location", "success.jsp");
101 
102         successConfig = new ResultConfig(Action.SUCCESS, ServletDispatcherResult.class.getName(), successParams);
103 
104         results.put(Action.SUCCESS, successConfig);
105 
106         interceptors.add(new InterceptorMapping("params", new ParametersInterceptor()));
107 
108         ActionConfig testActionConfig = new ActionConfig(null, TestAction.class, null, results, interceptors);
109         defaultPackageConfig.addActionConfig(TEST_ACTION_NAME, testActionConfig);
110 
111         interceptors = new ArrayList();
112         interceptors.add(new InterceptorMapping("token", new TokenInterceptor()));
113 
114         results = new HashMap();
115 
116         ActionConfig tokenActionConfig = new ActionConfig(null, TestAction.class, null, results, interceptors);
117         tokenActionConfig.addResultConfig(new ResultConfig("invalid.token", MockResult.class.getName()));
118         tokenActionConfig.addResultConfig(new ResultConfig("success", MockResult.class.getName()));
119         defaultPackageConfig.addActionConfig(TOKEN_ACTION_NAME, tokenActionConfig);
120 
121         interceptors = new ArrayList();
122         interceptors.add(new InterceptorMapping("token-session", new TokenSessionStoreInterceptor()));
123 
124         results = new HashMap();
125 
126         successParams = new HashMap();
127         successParams.put("actionName", EXECUTION_COUNT_ACTION_NAME);
128 
129         successConfig = new ResultConfig(Action.SUCCESS, ActionChainResult.class.getName(), successParams);
130 
131         results.put(Action.SUCCESS, successConfig);
132 
133         // empty results for token session unit test
134         results = new HashMap();
135         ActionConfig tokenSessionActionConfig = new ActionConfig(null, TestAction.class, null, results, interceptors);
136         tokenSessionActionConfig.addResultConfig(new ResultConfig("invalid.token", MockResult.class.getName()));
137         tokenSessionActionConfig.addResultConfig(new ResultConfig("success", MockResult.class.getName()));
138         defaultPackageConfig.addActionConfig(TOKEN_SESSION_ACTION_NAME, tokenSessionActionConfig);
139 
140         configuration.addPackageConfig("", defaultPackageConfig);
141 
142         Map testActionTagResults = new HashMap();
143         testActionTagResults.put(Action.SUCCESS, new ResultConfig(Action.SUCCESS, TestActionTagResult.class.getName(), new HashMap()));
144         testActionTagResults.put(Action.INPUT, new ResultConfig(Action.INPUT, TestActionTagResult.class.getName(), new HashMap()));
145         ActionConfig testActionTagActionConfig = new ActionConfig((String) null, TestAction.class, (Map) null, testActionTagResults, new ArrayList());
146         defaultPackageConfig.addActionConfig("testActionTagAction", testActionTagActionConfig);
147 
148         PackageConfig namespacePackageConfig = new PackageConfig("namespacePackage");
149         namespacePackageConfig.setNamespace(TEST_NAMESPACE);
150         namespacePackageConfig.addParent(defaultPackageConfig);
151 
152         ActionConfig namespaceAction = new ActionConfig(null, TestAction.class, null, null, null);
153         namespacePackageConfig.addActionConfig(TEST_NAMESPACE_ACTION, namespaceAction);
154 
155         configuration.addPackageConfig("namespacePackage", namespacePackageConfig);
156     }
157 
158     /***
159      * Tells whether the ConfigurationProvider should reload its configuration
160      *
161      * @return
162      */
163     public boolean needsReload() {
164         return false;
165     }
166 
167     public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {
168         if (!builder.contains(ObjectFactory.class)) {
169             builder.factory(ObjectFactory.class);
170         }
171         if (!builder.contains(ActionProxyFactory.class)) {
172             builder.factory(ActionProxyFactory.class, DefaultActionProxyFactory.class);
173         }
174     }
175 }