View Javadoc

1   /*
2    * $Id: ActionMapping.java 471754 2006-11-06 14:55:09Z husted $
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.struts.action;
22  
23  import org.apache.commons.logging.Log;
24  import org.apache.commons.logging.LogFactory;
25  import org.apache.struts.config.ActionConfig;
26  import org.apache.struts.config.ForwardConfig;
27  
28  import java.util.ArrayList;
29  
30  /**
31   * <p>An <strong>ActionMapping</strong> represents the information that the
32   * controller, <code>RequestProcessor</code>, knows about the mapping of a
33   * particular request to an instance of a particular <code>Action</code>
34   * class. The <code>ActionMapping</code> instance used to select a particular
35   * <code>Action</code> is passed on to that <code>Action</code>, thereby
36   * providing access to any custom configuration information included with the
37   * <code>ActionMapping</code> object.</p>
38   *
39   * <p>Since Struts 1.1 this class extends <code>ActionConfig</code>.
40   *
41   * <p><strong>NOTE</strong> - This class would have been deprecated and
42   * replaced by <code>org.apache.struts.config.ActionConfig</code> except for
43   * the fact that it is part of the public API that existing applications are
44   * using.</p>
45   *
46   * @version $Rev: 471754 $ $Date: 2005-08-26 21:58:39 -0400 (Fri, 26 Aug 2005)
47   *          $
48   */
49  public class ActionMapping extends ActionConfig {
50      /**
51       * <p>Commons Logging instance.</p>
52       *
53       * @since Struts 1.2.8
54       */
55      private static Log log = LogFactory.getLog(ActionMapping.class);
56  
57      /**
58       * <p>Find and return the <code>ForwardConfig</code> instance defining how
59       * forwarding to the specified logical name should be handled. This is
60       * performed by checking local and then global configurations for the
61       * specified forwarding configuration. If no forwarding configuration can
62       * be found, return <code>null</code>.</p>
63       *
64       * @param forwardName Logical name of the forwarding instance to be
65       *                    returned
66       * @return The local or global forward with the specified name.
67       */
68      public ActionForward findForward(String forwardName) {
69          ForwardConfig config = findForwardConfig(forwardName);
70  
71          if (config == null) {
72              config = getModuleConfig().findForwardConfig(forwardName);
73          }
74  
75          if (config == null) {
76              if (log.isWarnEnabled()) {
77                  log.warn("Unable to find '" + forwardName + "' forward.");
78              }
79          }
80  
81          return ((ActionForward) config);
82      }
83  
84      /**
85       * <p>Return the logical names of all locally defined forwards for this
86       * mapping. If there are no such forwards, a zero-length array is
87       * returned.</p>
88       *
89       * @return The forward names for this action mapping.
90       */
91      public String[] findForwards() {
92          ArrayList results = new ArrayList();
93          ForwardConfig[] fcs = findForwardConfigs();
94  
95          for (int i = 0; i < fcs.length; i++) {
96              results.add(fcs[i].getName());
97          }
98  
99          return ((String[]) results.toArray(new String[results.size()]));
100     }
101 
102     /**
103      * <p>Create (if necessary) and return an {@link ActionForward} that
104      * corresponds to the <code>input</code> property of this Action.</p>
105      *
106      * @return The input forward for this action mapping.
107      * @since Struts 1.1
108      */
109     public ActionForward getInputForward() {
110         if (getModuleConfig().getControllerConfig().getInputForward()) {
111             return (findForward(getInput()));
112         } else {
113             return (new ActionForward(getInput()));
114         }
115     }
116 }