1 /* 2 * $Id: WebActionContext.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.chain.contexts; 22 23 import org.apache.commons.chain.web.WebContext; 24 import org.apache.struts.Globals; 25 import org.apache.struts.config.ModuleConfig; 26 27 import java.util.Map; 28 29 /** 30 * <p> Provide a Subclass of ActionContextBase which is understood to be 31 * wrapping an instance of <code>org.apache.commons.chain.web.WebContext</code>. 32 * </p> 33 */ 34 public class WebActionContext extends ActionContextBase { 35 /** 36 * Instantiate this composite by wrapping an instance of WebContext. 37 * 38 * @param context The WebContext to wrap 39 */ 40 public WebActionContext(WebContext context) { 41 super(context); 42 } 43 44 /** 45 * Provide the wrapped WebContext for this composite. 46 * 47 * @return The wrapped WebContext 48 */ 49 protected WebContext webContext() { 50 return (WebContext) this.getBaseContext(); 51 } 52 53 public void release() { 54 super.release(); 55 } 56 57 // ------------------------------- 58 // WebContext property wrappers 59 // ------------------------------- 60 61 /** 62 * <p> Return an immutable Map that maps header names to the first (or 63 * only) header value (as a String). </p> 64 * 65 * @return A immutable Map of web request header names 66 */ 67 public Map getHeader() { 68 return webContext().getHeader(); 69 } 70 71 /** 72 * <p> Return an immutable Map that maps header names to the set of all 73 * values specified in the request (as a String array). Header names must 74 * be matched in a case-insensitive manner. </p> 75 * 76 * @return An immutable Map of web request header values 77 */ 78 public Map getHeaderValues() { 79 return webContext().getHeaderValues(); 80 } 81 82 /** 83 * <p> Return an immutable Map that maps context application 84 * initialization parameters to their values. </p> 85 * 86 * @return An immutable Map of web context initialization parameters 87 */ 88 public Map getInitParam() { 89 return webContext().getInitParam(); 90 } 91 92 /** 93 * <p> Return a map whose keys are <code>String</code> request parameter 94 * names and whose values are <code>String</code> values. </p> <p> For 95 * parameters which were submitted with more than one value, only one 96 * value will be returned, as if one called 97 * <code>ServletRequest.getParameter(String)</code> 98 * </p> 99 * 100 * @return A map of web request parameters 101 */ 102 public Map getParam() { 103 return webContext().getParam(); 104 } 105 106 /** 107 * <p> Return a map whose keys are <code>String</code> request parameter 108 * names and whose values are <code>String[]</code> values. </p> 109 * 110 * @return A map of web request parameter values (as an array) 111 */ 112 public Map getParamValues() { 113 return webContext().getParamValues(); 114 } 115 116 public Map getApplicationScope() { 117 return webContext().getApplicationScope(); 118 } 119 120 public Map getRequestScope() { 121 return webContext().getRequestScope(); 122 } 123 124 public Map getParameterMap() { 125 return getParamValues(); 126 } 127 128 public Map getSessionScope() { 129 return webContext().getSessionScope(); 130 } 131 132 // ISSUE: AbstractSelectModule set the precedent of doing this at the 133 // "web context" level instead of the ServletWebContext level. 134 // Consider whether that's how we want to do it universally for other 135 // manipulations of the RequestScope or not... 136 public void setModuleConfig(ModuleConfig moduleConfig) { 137 super.setModuleConfig(moduleConfig); 138 this.getRequestScope().put(Globals.MODULE_KEY, moduleConfig); 139 } 140 141 /** 142 * @see org.apache.struts.chain.contexts.ActionContext#getModuleConfig() 143 */ 144 public ModuleConfig getModuleConfig() { 145 ModuleConfig mc = super.getModuleConfig(); 146 147 if (mc == null) { 148 mc = (ModuleConfig) this.getRequestScope().get(Globals.MODULE_KEY); 149 } 150 151 return mc; 152 } 153 154 // ISSUE: AbstractSelectModule set the precedent of doing this at the 155 // "web context" level instead of the ServletWebContext level. Consider 156 // whether that's how we want to do it universally for other manipulations 157 // of the RequestScope or not... 158 public void setCancelled(Boolean cancelled) { 159 super.setCancelled(cancelled); 160 161 // historic semantics of "isCancelled" are to consider any non-null 162 // value in the request under Globals.CANCEL_KEY as "yes, this was 163 // cancelled." 164 if ((cancelled != null) && cancelled.booleanValue()) { 165 this.getRequestScope().put(Globals.CANCEL_KEY, cancelled); 166 } else { 167 this.getRequestScope().remove(Globals.CANCEL_KEY); 168 } 169 } 170 171 public Boolean getCancelled() { 172 Boolean cancelled = super.getCancelled(); 173 174 if (cancelled == null) { 175 cancelled = 176 (Boolean) this.getRequestScope().get(Globals.CANCEL_KEY); 177 } 178 179 return cancelled; 180 } 181 }