2
* Copyright 2003,2004 The Apache Software Foundation.
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
8
* http://www.apache.org/licenses/LICENSE-2.0
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
17
package org.apache.struts.chain;
20
import org.apache.commons.chain.Command;
21
import org.apache.commons.chain.Context;
22
import org.apache.commons.logging.Log;
23
import org.apache.commons.logging.LogFactory;
24
import org.apache.struts.chain.Constants;
25
import org.apache.struts.config.ActionConfig;
26
import org.apache.struts.config.ForwardConfig;
27
import org.apache.struts.config.ModuleConfig;
31
* <p>Select and cache a <code>ForwardConfig</code> that returns us to the
32
* input page for the current action, if any.</p>
34
* @author Craig R. McClanahan
35
* @version $Revision: 1.4 $ $Date: 2004/03/08 02:50:53 $
38
public abstract class AbstractSelectInput implements Command {
41
// ------------------------------------------------------ Instance Variables
44
private String actionConfigKey = Constants.ACTION_CONFIG_KEY;
45
private String forwardConfigKey = Constants.FORWARD_CONFIG_KEY;
46
private String validKey = Constants.VALID_KEY;
48
private static final Log log = LogFactory.getLog(AbstractSelectInput.class);
51
// -------------------------------------------------------------- Properties
55
* <p>Return the context attribute key under which the
56
* <code>ActionConfig</code> for the currently selected application
57
* action is stored.</p>
59
public String getActionConfigKey() {
61
return (this.actionConfigKey);
67
* <p>Set the context attribute key under which the
68
* <code>ActionConfig</code> for the currently selected application
69
* action is stored.</p>
71
* @param actionConfigKey The new context attribute key
73
public void setActionConfigKey(String actionConfigKey) {
75
this.actionConfigKey = actionConfigKey;
81
* <p>Return the context attribute key under which the
82
* <code>ForwardConfig</code> for the currently selected application
83
* action is stored.</p>
85
public String getForwardConfigKey() {
87
return (this.forwardConfigKey);
93
* <p>Set the context attribute key under which the
94
* <code>ForwardConfig</code> for the currently selected application
95
* action is stored.</p>
97
* @param forwardConfigKey The new context attribute key
99
public void setForwardConfigKey(String forwardConfigKey) {
101
this.forwardConfigKey = forwardConfigKey;
107
* <p>Return the context attribute key under which the
108
* validity flag for this request is stored.</p>
110
public String getValidKey() {
112
return (this.validKey);
118
* <p>Set the context attribute key under which the
119
* validity flag for this request is stored.</p>
121
* @param validKey The new context attribute key
123
public void setValidKey(String validKey) {
125
this.validKey = validKey;
130
// ---------------------------------------------------------- Public Methods
134
* <p>Select and cache a <code>ForwardConfig</code> for the input page
135
* for the current request.</p>
137
* @param context The <code>Context</code> for the current request
139
* @return <code>false</code> so that processing continues
141
public boolean execute(Context context) throws Exception {
143
// Skip processing if the current request is valid
144
Boolean valid = (Boolean) context.get(getValidKey());
145
if ((valid != null) && valid.booleanValue()) {
149
// Acquire configuration objects that we need
150
ActionConfig actionConfig = (ActionConfig)
151
context.get(getActionConfigKey());
152
ModuleConfig moduleConfig = actionConfig.getModuleConfig();
154
// Cache an ForwardConfig back to our input page
155
ForwardConfig forwardConfig = null;
156
String input = actionConfig.getInput();
157
if (moduleConfig.getControllerConfig().getInputForward()) {
158
if (log.isTraceEnabled()) {
159
log.trace("Finding ForwardConfig for '" + input + "'");
161
forwardConfig = actionConfig.findForwardConfig(input);
162
if (forwardConfig == null) {
163
forwardConfig = moduleConfig.findForwardConfig(input);
166
if (log.isTraceEnabled()) {
167
log.trace("Delegating to forward() for '" + input + "'");
169
forwardConfig = forward(context, moduleConfig, input);
171
if (log.isDebugEnabled()) {
172
log.debug("Forwarding back to " + forwardConfig);
174
context.put(getForwardConfigKey(), forwardConfig);
180
// ------------------------------------------------------- Protected Methods
184
* <p>Create and return a <code>ForwardConfig</code> representing the
185
* specified module-relative destination.</p>
187
* @param context The context for this request
188
* @param moduleConfig The <code>ModuleConfig</code> for this request
189
* @param uri The module-relative URI to be the destination
191
protected abstract ForwardConfig forward(Context context,
192
ModuleConfig moduleConfig,