001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.commons.scxml.env.faces; 018 019 import java.util.Map; 020 021 import javax.faces.context.FacesContext; 022 023 import org.apache.commons.scxml.Context; 024 import org.apache.commons.scxml.env.SimpleContext; 025 026 /** 027 * <p>A Faces Session Context.</p> 028 * 029 * <p>Since the "session map" is obtained from a 030 * <code>FacesContext</code> object using the environment agnostic 031 * <code>getExternalContext()</code>, this <code>Context</code> 032 * will be useful in Servlet as well as Portlet environments.</p> 033 * 034 */ 035 public class SessionContext extends SimpleContext { 036 037 /** Serial version UID. */ 038 private static final long serialVersionUID = 1L; 039 /** The map of session scoped variables. */ 040 private Map sessionMap; 041 /** Bark if FacesContext is null. */ 042 private static final String ERR_HOST_FACES_CTX_NULL = 043 "Host FacesContext cannot be null"; 044 045 /** 046 * Constructor. 047 * 048 * @param fc The current FacesContext 049 */ 050 public SessionContext(final FacesContext fc) { 051 this(fc, null); 052 } 053 054 /** 055 * Constructor. 056 * 057 * @param fc The current FacesContext 058 * @param parent A parent Context, can be null 059 */ 060 public SessionContext(final FacesContext fc, final Context parent) { 061 super(parent); 062 if (fc == null) { 063 throw new IllegalArgumentException(ERR_HOST_FACES_CTX_NULL); 064 } else { 065 // only retain the session map 066 this.sessionMap = fc.getExternalContext().getSessionMap(); 067 } 068 069 } 070 071 /** 072 * Get the value of the given variable in this Context. 073 * 074 * @param name The name of the variable 075 * @return The value (or null) 076 * @see org.apache.commons.scxml.Context#get(java.lang.String) 077 */ 078 public Object get(final String name) { 079 Object value = getVars().get(name); 080 if (value == null) { 081 value = sessionMap.get(name); 082 } 083 return value; 084 } 085 086 /** 087 * Does the given variable exist in this Context. 088 * 089 * @param name The name of the variable 090 * @return boolean true if the variable exists 091 * @see org.apache.commons.scxml.Context#has(java.lang.String) 092 */ 093 public boolean has(final String name) { 094 return (sessionMap.containsKey(name) || getVars().containsKey(name)); 095 } 096 097 } 098