001: package org.shiftone.cache.adaptor;
002:
003: import org.shiftone.cache.Cache;
004:
005: import java.util.Collection;
006: import java.util.Iterator;
007: import java.util.Map;
008: import java.util.Set;
009:
010: /**
011: * Makes a shiftone cache look like a map.
012: *
013: * @author <a href="mailto:jeff@shiftone.org">Jeff Drost</a>
014: * @version $Revision: 1.2 $
015: */
016: public class CacheMap implements Map {
017:
018: private final Cache cache;
019:
020: public CacheMap(Cache cache) {
021: this .cache = cache;
022: }
023:
024: /**
025: * The size of this cache at this instance in time
026: */
027: public int size() {
028: return cache.size();
029: }
030:
031: /**
032: * Is the cache empty at this instance in time
033: */
034: public boolean isEmpty() {
035: return size() == 0;
036: }
037:
038: /**
039: * <b>Warning</b> - just because this method returns true, you can NOT
040: * expect to be able to get the value of the object that the cache contains.
041: * This is because some time will pass between when you test for the elements
042: * existance in the cache, and when you call get(). During that window of time,
043: * the cache element may be evicted.
044: */
045: public boolean containsKey(Object key) {
046: return (cache.getObject(key) != null);
047: }
048:
049: /**
050: * Gets an object from the cache based on it's key
051: */
052: public Object get(Object key) {
053: return cache.getObject(key);
054: }
055:
056: /**
057: * Puts an object into the cache and returns the previous
058: * value that was associated with that key.
059: */
060: public Object put(Object key, Object value) {
061:
062: Object oldValue = cache.getObject(key);
063:
064: cache.addObject(key, value);
065:
066: return oldValue;
067: }
068:
069: public Object remove(Object key) {
070:
071: cache.remove(key);
072:
073: return null;
074: }
075:
076: /**
077: * Copies all of the mappings from the specified map to this cache.
078: */
079: public void putAll(Map map) {
080:
081: Object key, value;
082: Set keys = map.keySet();
083: Iterator i = keys.iterator();
084:
085: while (i.hasNext()) {
086: key = i.next();
087: value = map.get(key);
088:
089: if (value != null) {
090: cache.addObject(key, value);
091: }
092: }
093: }
094:
095: /**
096: * Clears the cache
097: */
098: public void clear() {
099: cache.clear();
100: }
101:
102: /**
103: * <b>not implemented</b>
104: */
105: public boolean containsValue(Object value) {
106: throw new UnsupportedOperationException("containsValue");
107: }
108:
109: /**
110: * <b>not implemented</b>
111: */
112: public Set keySet() {
113: throw new UnsupportedOperationException("keySet");
114: }
115:
116: /**
117: * <b>not implemented</b>
118: */
119: public Collection values() {
120: throw new UnsupportedOperationException("values");
121: }
122:
123: /**
124: * <b>not implemented</b>
125: */
126: public Set entrySet() {
127: throw new UnsupportedOperationException("entrySet");
128: }
129: }
|