1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.chain.web.jakarta.faces; 18 19 import java.util.Collections; 20 import java.util.HashMap; 21 import java.util.Map; 22 23 import org.apache.commons.chain.web.jakarta.WebContext; 24 25 import jakarta.faces.context.FacesContext; 26 import jakarta.servlet.http.Cookie; 27 28 /** 29 * Concrete implementation of {@link WebContext} suitable for use in 30 * JavaServer Faces apps. The abstract methods are mapped to the appropriate 31 * collections of the underlying {@code FacesContext} instance 32 * that is passed to the constructor (or the initialize method). 33 * 34 * @author Craig R. McClanahan 35 * @version $Revision$ $Date$ 36 */ 37 public class FacesWebContext extends WebContext { 38 private static final long serialVersionUID = -1429681424077509130L; 39 40 // ------------------------------------------------------ Instance Variables 41 42 /** 43 * The {@code FacesContext} instance for the request represented 44 * by this {@link WebContext}. 45 */ 46 private transient FacesContext context = null; 47 48 /** 49 * The lazily instantiated {@code Map} of cookies. 50 */ 51 private transient Map<String, Cookie> cookieValues = null; 52 53 // ------------------------------------------------------------ Constructors 54 55 /** 56 * Construct an uninitialized {@link FacesWebContext} instance. 57 */ 58 public FacesWebContext() { 59 } 60 61 /** 62 * Construct a {@link FacesWebContext} instance that is initialized 63 * with the specified JavaServer Faces API objects. 64 * 65 * @param context The {@code FacesContext} for this request 66 */ 67 public FacesWebContext(FacesContext context) { 68 initialize(context); 69 } 70 // ---------------------------------------------------------- Public Methods 71 72 /** 73 * Return the {@code FacesContext} instance for the request 74 * associated with this {@link FacesWebContext}. 75 * 76 * @return The {@code FacesContext} for this request 77 */ 78 public FacesContext getContext() { 79 return this.context; 80 } 81 82 /** 83 * Initialize (or reinitialize) this {@link FacesWebContext} instance 84 * for the specified JavaServer Faces API objects. 85 * 86 * @param context The {@code FacesContext} for this request 87 */ 88 public void initialize(FacesContext context) { 89 this.context = context; 90 } 91 92 /** 93 * Release references to allocated resources acquired in 94 * {@code initialize()} of via subsequent processing. After this 95 * method is called, subsequent calls to any other method than 96 * {@code initialize()} will return undefined results. 97 */ 98 public void release() { 99 context = null; 100 cookieValues = null; 101 } 102 103 // ------------------------------------------------------ WebContext Methods 104 105 /** 106 * See the {@link WebContext}'s Javadoc. 107 * 108 * @return Application scope Map. 109 */ 110 @Override 111 public Map<String, Object> getApplicationScope() { 112 return context.getExternalContext().getApplicationMap(); 113 } 114 115 /** 116 * See the {@link WebContext}'s Javadoc. 117 * 118 * @return Header values Map. 119 */ 120 @Override 121 public Map<String, String> getHeader() { 122 return context.getExternalContext().getRequestHeaderMap(); 123 } 124 125 /** 126 * See the {@link WebContext}'s Javadoc. 127 * 128 * @return Header values Map. 129 */ 130 @Override 131 public Map<String, String[]> getHeaderValues() { 132 return context.getExternalContext().getRequestHeaderValuesMap(); 133 } 134 135 /** 136 * See the {@link WebContext}'s Javadoc. 137 * 138 * @return Initialization parameter Map. 139 */ 140 @Override 141 public Map<String, String> getInitParam() { 142 return context.getExternalContext().getInitParameterMap(); 143 } 144 145 /** 146 * See the {@link WebContext}'s Javadoc. 147 * 148 * @return Request parameter Map. 149 */ 150 @Override 151 public Map<String, String> getParam() { 152 return context.getExternalContext().getRequestParameterMap(); 153 } 154 155 /** 156 * See the {@link WebContext}'s Javadoc. 157 * 158 * @return Request parameter Map. 159 */ 160 @Override 161 public Map<String, String[]> getParamValues() { 162 return context.getExternalContext().getRequestParameterValuesMap(); 163 } 164 165 /** 166 * See the {@link WebContext}'s Javadoc. 167 * 168 * @return Map of Cookies. 169 * @since Chain 1.1 170 */ 171 @Override 172 public Map<String, Cookie> getCookies() { 173 if (cookieValues == null) { 174 final Map<String, Object> cookiesSrc = context.getExternalContext().getRequestCookieMap(); 175 final Map<String, Cookie> cookiesDest = new HashMap<>(cookiesSrc.size()); 176 177 cookiesSrc.forEach((k, v) -> cookiesDest.put(k, (Cookie) v)); 178 179 cookieValues = Collections.unmodifiableMap(cookiesDest); 180 } 181 182 return cookieValues; 183 } 184 185 /** 186 * See the {@link WebContext}'s Javadoc. 187 * 188 * @return Request scope Map. 189 */ 190 @Override 191 public Map<String, Object> getRequestScope() { 192 return context.getExternalContext().getRequestMap(); 193 } 194 195 /** 196 * See the {@link WebContext}'s Javadoc. 197 * 198 * @return Session scope Map. 199 */ 200 @Override 201 public Map<String, Object> getSessionScope() { 202 return context.getExternalContext().getSessionMap(); 203 } 204 }