001 package org.crsh.util; 002 003 import javax.servlet.ServletContext; 004 import java.util.AbstractMap; 005 import java.util.AbstractSet; 006 import java.util.Enumeration; 007 import java.util.Iterator; 008 import java.util.Set; 009 010 /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ 011 public class ServletContextMap extends AbstractMap<String, Object> { 012 013 /** . */ 014 private final ServletContext context; 015 016 public ServletContextMap(ServletContext context) { 017 this.context = context; 018 } 019 020 @Override 021 public boolean containsKey(Object key) { 022 return key instanceof String && context.getAttribute((String)key) != null; 023 } 024 025 @Override 026 public Object get(Object key) { 027 if (key instanceof String) { 028 return context.getAttribute((String)key); 029 } else { 030 return null; 031 } 032 } 033 034 private AbstractSet<Entry<String, Object>> entries = new AbstractSet<Entry<String, Object>>() { 035 036 @Override 037 public Iterator<Entry<String, Object>> iterator() { 038 final Enumeration<String> names = context.getAttributeNames(); 039 return new Iterator<Entry<String, Object>>() { 040 public boolean hasNext() { 041 return names.hasMoreElements(); 042 } 043 044 public Entry<String, Object> next() { 045 final String name = names.nextElement(); 046 return new Entry<String, Object>() { 047 public String getKey() { 048 return name; 049 } 050 051 public Object getValue() { 052 return context.getAttribute(name); 053 } 054 055 public Object setValue(Object value) { 056 throw new UnsupportedOperationException(); 057 } 058 }; 059 } 060 061 public void remove() { 062 throw new UnsupportedOperationException(); 063 } 064 }; 065 } 066 067 @Override 068 public int size() { 069 int size = 0; 070 for (Enumeration<String> names = context.getAttributeNames();names.hasMoreElements();) { 071 size++; 072 } 073 return size; 074 } 075 }; 076 077 078 @Override 079 public Set<Entry<String, Object>> entrySet() { 080 return entries; 081 } 082 }