001 package org.crsh.util; 002 003 import java.util.AbstractMap; 004 import java.util.AbstractSet; 005 import java.util.Iterator; 006 import java.util.Set; 007 008 /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ 009 public abstract class SimpleMap<K, V> extends AbstractMap<K, V> { 010 011 protected abstract Iterator<K> keys(); 012 013 @Override 014 public abstract V get(Object key); 015 016 @Override 017 public final boolean containsKey(Object key) { 018 return get(key) != null; 019 } 020 021 @Override 022 public final Set<Entry<K, V>> entrySet() { 023 return entries; 024 } 025 026 private AbstractSet<Entry<K, V>> entries = new AbstractSet<Entry<K, V>>() { 027 028 @Override 029 public Iterator<Entry<K, V>> iterator() { 030 final Iterator<K> names = keys(); 031 return new Iterator<Entry<K, V>>() { 032 public boolean hasNext() { 033 return names.hasNext(); 034 } 035 036 public Entry<K, V> next() { 037 final K name = names.next(); 038 return new Entry<K, V>() { 039 public K getKey() { 040 return name; 041 } 042 043 public V getValue() { 044 return get(name); 045 } 046 047 public V setValue(V value) { 048 throw new UnsupportedOperationException(); 049 } 050 }; 051 } 052 053 public void remove() { 054 throw new UnsupportedOperationException(); 055 } 056 }; 057 } 058 059 @Override 060 public int size() { 061 int size = 0; 062 for (Iterator<K> names = keys();names.hasNext();) { 063 size++; 064 } 065 return size; 066 } 067 }; 068 }