EMMA Coverage Report (generated Tue Oct 27 11:32:50 PDT 2009)
[all classes][net.spy.memcached]

COVERAGE SUMMARY FOR SOURCE FILE [BaseCacheMap.java]

nameclass, %method, %block, %line, %
BaseCacheMap.java100% (1/1)100% (14/14)100% (125/125)100% (32/32)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class BaseCacheMap100% (1/1)100% (14/14)100% (125/125)100% (32/32)
BaseCacheMap (MemcachedClientIF, int, String, Transcoder): void 100% (1/1)100% (15/15)100% (6/6)
clear (): void 100% (1/1)100% (4/4)100% (1/1)
containsKey (Object): boolean 100% (1/1)100% (8/8)100% (1/1)
containsValue (Object): boolean 100% (1/1)100% (2/2)100% (1/1)
entrySet (): Set 100% (1/1)100% (2/2)100% (1/1)
get (Object): Object 100% (1/1)100% (16/16)100% (5/5)
getKey (String): String 100% (1/1)100% (10/10)100% (1/1)
isEmpty (): boolean 100% (1/1)100% (2/2)100% (1/1)
keySet (): Set 100% (1/1)100% (2/2)100% (1/1)
put (String, Object): Object 100% (1/1)100% (16/16)100% (3/3)
putAll (Map): void 100% (1/1)100% (26/26)100% (3/3)
remove (Object): Object 100% (1/1)100% (18/18)100% (6/6)
size (): int 100% (1/1)100% (2/2)100% (1/1)
values (): Collection 100% (1/1)100% (2/2)100% (1/1)

1package net.spy.memcached;
2 
3import java.util.Collection;
4import java.util.Collections;
5import java.util.Map;
6import java.util.Set;
7 
8import net.spy.memcached.transcoders.Transcoder;
9 
10/**
11 * Base class for a Map interface to memcached.
12 *
13 * <p>
14 *   This Map interface makes memcached a bit easier to use for some purposes
15 *   by providing a limited Map implementation.
16 * </p>
17 *
18 * <p>
19 *   Do note that nothing that iterates over the map will work (such is
20 *   memcached).  All iteration mechanisms will return empty iterators and
21 *   such.
22 * </p>
23 *
24 * @param <V> the type of value taken and returned by this Map's underlying
25 *            transcoder, and thus taken and returned by this Map.
26 */
27public class BaseCacheMap<V> implements Map<String, V> {
28 
29        private final String keyPrefix;
30        private final Transcoder<V> transcoder;
31        private final MemcachedClientIF client;
32        private final int exp;
33 
34        /**
35         * Build a BaseCacheMap.
36         *
37         * @param c the underlying client
38         * @param expiration the expiration for objects set through this Map
39         * @param prefix a prefix to ensure objects in this map are unique
40         * @param t the transcoder to serialize and deserialize objects
41         */
42        public BaseCacheMap(MemcachedClientIF c, int expiration,
43                        String prefix, Transcoder<V> t) {
44                super();
45                keyPrefix = prefix;
46                transcoder = t;
47                client = c;
48                exp = expiration;
49        }
50 
51        public void clear() {
52                // TODO:  Support a rolling key generation.
53                throw new UnsupportedOperationException();
54        }
55 
56        private String getKey(String k) {
57                return keyPrefix + k;
58        }
59 
60        public boolean containsKey(Object key) {
61                return get(key) != null;
62        }
63 
64        /**
65         * This method always returns false, as truth cannot be determined without
66         * iteration.
67         */
68        public boolean containsValue(Object value) {
69                return false;
70        }
71 
72        public Set<Map.Entry<String, V>> entrySet() {
73                return Collections.emptySet();
74        }
75 
76        public V get(Object key) {
77                V rv = null;
78                try {
79                        rv = client.get(getKey((String)key), transcoder);
80                } catch(ClassCastException e) {
81                        // Most likely, this is because the key wasn't a String.
82                        // Either way, it's a no.
83                }
84                return rv;
85        }
86 
87        public boolean isEmpty() {
88                return false;
89        }
90 
91        public Set<String> keySet() {
92                return Collections.emptySet();
93        }
94 
95        public void putAll(Map<? extends String, ? extends V> t) {
96                for(Map.Entry<? extends String, ? extends V> me : t.entrySet()) {
97                        client.set(getKey(me.getKey()), exp, me.getValue());
98                }
99        }
100 
101        public V remove(Object key) {
102                V rv = null;
103                try {
104                        rv = get(key);
105                        client.delete(getKey((String)key));
106                } catch(ClassCastException e) {
107                        // Not a string key.  Ignore.
108                }
109                return rv;
110        }
111 
112        public int size() {
113                return 0;
114        }
115 
116        public Collection<V> values() {
117                return Collections.emptySet();
118        }
119 
120        public V put(String key, V value) {
121                V rv = get(key);
122                client.set(getKey(key), exp, value);
123                return rv;
124        }
125 
126}

[all classes][net.spy.memcached]
EMMA 2.0.5312 (C) Vladimir Roubtsov