1 /**
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one or more
4 * contributor license agreements. See the NOTICE file distributed with
5 * this work for additional information regarding copyright ownership.
6 * The ASF licenses this file to You under the Apache License, Version 2.0
7 * (the "License"); you may not use this file except in compliance with
8 * the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18 package org.apache.geronimo.clustering.wadi;
19
20 import java.util.Collection;
21 import java.util.Map;
22 import java.util.Set;
23
24 import org.apache.geronimo.clustering.Session;
25 import org.codehaus.wadi.web.WebSession;
26
27 /**
28 *
29 * @version $Rev$ $Date$
30 */
31 public class WADISessionAdaptor implements Session {
32 private final WebSession session;
33 private final Map state;
34
35 public WADISessionAdaptor(WebSession session) {
36 this.session = session;
37
38 state = new StateMap();
39 }
40
41 public String getSessionId() {
42 return session.getId();
43 }
44
45 public void release() {
46 try {
47 session.destroy();
48 } catch (Exception e) {
49 throw new IllegalStateException("Cannot release session " + session);
50 }
51 }
52
53 public Object addState(String key, Object value) {
54 return session.setAttribute(key, value);
55 }
56
57 public Object getState(String key) {
58 return session.getAttribute(key);
59 }
60
61 public Object removeState(String key) {
62 return session.removeAttribute(key);
63 }
64
65 public Map getState() {
66 return state;
67 }
68
69 private class StateMap implements Map {
70
71 public Object put(Object key, Object value) {
72 String wadiKey = ensureTypeAndCast(key);
73 return addState(wadiKey, value);
74 }
75
76 public Object remove(Object key) {
77 String wadiKey = ensureTypeAndCast(key);
78 return removeState(wadiKey);
79 }
80
81 public void clear() {
82 throw new UnsupportedOperationException();
83 }
84
85 public boolean containsKey(Object key) {
86 throw new UnsupportedOperationException();
87 }
88
89 public boolean containsValue(Object value) {
90 throw new UnsupportedOperationException();
91 }
92
93 public Set entrySet() {
94 throw new UnsupportedOperationException();
95 }
96
97 public Object get(Object key) {
98 String wadiKey = ensureTypeAndCast(key);
99 return getState(wadiKey);
100 }
101
102 public boolean isEmpty() {
103 throw new UnsupportedOperationException();
104 }
105
106 public Set keySet() {
107 return session.getAttributeNameSet();
108 }
109
110 public void putAll(Map t) {
111 throw new UnsupportedOperationException();
112 }
113
114 public int size() {
115 return session.getAttributeNameSet().size();
116 }
117
118 public Collection values() {
119 throw new UnsupportedOperationException();
120 }
121
122 private String ensureTypeAndCast(Object key) {
123 if (!(key instanceof String)) {
124 throw new ClassCastException(String.class + " is expected.");
125 }
126 return (String) key;
127 }
128 }
129 }