1
22
23 package com.liferay.util.servlet;
24
25 import com.liferay.portal.kernel.util.ListUtil;
26
27 import java.util.Collections;
28 import java.util.Enumeration;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.concurrent.ConcurrentHashMap;
32
33 import javax.servlet.ServletContext;
34 import javax.servlet.http.HttpSession;
35
36 import org.apache.commons.logging.Log;
37 import org.apache.commons.logging.LogFactory;
38
39
45 public class SharedSessionWrapper implements HttpSession {
46
47 public SharedSessionWrapper(HttpSession session) {
48 this(session, new ConcurrentHashMap<String, Object>());
49 }
50
51 public SharedSessionWrapper(
52 HttpSession session, Map<String, Object> sharedAttributes) {
53
54 if (session == null) {
55 _session = new NullSession();
56
57 if (_log.isWarnEnabled()) {
58 _log.warn("Wrapped session is null");
59 }
60 }
61 else {
62 _session = session;
63 }
64
65 _sharedAttributes = sharedAttributes;
66 }
67
68 public Object getAttribute(String name) {
69 Object value = _session.getAttribute(name);
70
71 if (value == null) {
72 value = _sharedAttributes.get(name);
73 }
74
75 return value;
76 }
77
78 public Enumeration<String> getAttributeNames() {
79 if (_sharedAttributes.size() > 0) {
80
81 Enumeration<String> sessionAttributeNames =
82 _session.getAttributeNames();
83
84 List<String> names = null;
85
86 synchronized (sessionAttributeNames) {
87 names = ListUtil.fromEnumeration(sessionAttributeNames);
88 }
89
90 for (String name : _sharedAttributes.keySet()) {
91 names.add(name);
92 }
93
94 return Collections.enumeration(names);
95 }
96 else {
97 return _session.getAttributeNames();
98 }
99 }
100
101 public long getCreationTime() {
102 return _session.getCreationTime();
103 }
104
105 public String getId() {
106 return _session.getId();
107 }
108
109 public long getLastAccessedTime() {
110 return _session.getLastAccessedTime();
111 }
112
113 public int getMaxInactiveInterval() {
114 return _session.getMaxInactiveInterval();
115 }
116
117 public ServletContext getServletContext() {
118 return _session.getServletContext();
119 }
120
121
124 public javax.servlet.http.HttpSessionContext getSessionContext() {
125 return _session.getSessionContext();
126 }
127
128 public Object getValue(String name) {
129 return getAttribute(name);
130 }
131
132 public String[] getValueNames() {
133 List<String> names = ListUtil.fromEnumeration(getAttributeNames());
134
135 return names.toArray(new String[names.size()]);
136 }
137
138 public void invalidate() {
139 _session.invalidate();
140 }
141
142 public boolean isNew() {
143 return _session.isNew();
144 }
145
146 public void putValue(String name, Object value) {
147 setAttribute(name, value);
148 }
149
150 public void removeAttribute(String name) {
151 _session.removeAttribute(name);
152 }
153
154 public void removeValue(String name) {
155 removeAttribute(name);
156 }
157
158 public void setAttribute(String name, Object value) {
159 _session.setAttribute(name, value);
160 }
161
162 public void setMaxInactiveInterval(int maxInactiveInterval) {
163 _session.setMaxInactiveInterval(maxInactiveInterval);
164 }
165
166 private static Log _log = LogFactory.getLog(SharedSessionWrapper.class);
167
168 private HttpSession _session;
169 private Map<String, Object> _sharedAttributes;
170
171 }