001 /** 002 * 003 * Licensed to the Apache Software Foundation (ASF) under one or more 004 * contributor license agreements. See the NOTICE file distributed with 005 * this work for additional information regarding copyright ownership. 006 * The ASF licenses this file to You under the Apache License, Version 2.0 007 * (the "License"); you may not use this file except in compliance with 008 * the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 package org.apache.geronimo.clustering.wadi; 019 020 import java.util.Collection; 021 import java.util.Map; 022 import java.util.Set; 023 024 import org.apache.geronimo.clustering.Session; 025 import org.codehaus.wadi.web.WebSession; 026 027 /** 028 * 029 * @version $Rev$ $Date$ 030 */ 031 public class WADISessionAdaptor implements Session { 032 private final WebSession session; 033 private final Map state; 034 035 public WADISessionAdaptor(WebSession session) { 036 this.session = session; 037 038 state = new StateMap(); 039 } 040 041 public String getSessionId() { 042 return session.getId(); 043 } 044 045 public void release() { 046 try { 047 session.destroy(); 048 } catch (Exception e) { 049 throw new IllegalStateException("Cannot release session " + session); 050 } 051 } 052 053 public Object addState(String key, Object value) { 054 return session.setAttribute(key, value); 055 } 056 057 public Object getState(String key) { 058 return session.getAttribute(key); 059 } 060 061 public Object removeState(String key) { 062 return session.removeAttribute(key); 063 } 064 065 public Map getState() { 066 return state; 067 } 068 069 private class StateMap implements Map { 070 071 public Object put(Object key, Object value) { 072 String wadiKey = ensureTypeAndCast(key); 073 return addState(wadiKey, value); 074 } 075 076 public Object remove(Object key) { 077 String wadiKey = ensureTypeAndCast(key); 078 return removeState(wadiKey); 079 } 080 081 public void clear() { 082 throw new UnsupportedOperationException(); 083 } 084 085 public boolean containsKey(Object key) { 086 throw new UnsupportedOperationException(); 087 } 088 089 public boolean containsValue(Object value) { 090 throw new UnsupportedOperationException(); 091 } 092 093 public Set entrySet() { 094 throw new UnsupportedOperationException(); 095 } 096 097 public Object get(Object key) { 098 String wadiKey = ensureTypeAndCast(key); 099 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 }