01 package dk.deepthought.sidious.util;
02
03 import java.util.HashMap;
04 import java.util.Map;
05
06 import net.jcip.annotations.ThreadSafe;
07 import dk.deepthought.sidious.supportsystem.PlanRequester;
08 import dk.deepthought.sidious.supportsystem.SuperLinkID;
09
10 /**
11 * This class implements the <code>synchronized</code> access functionality of
12 * a <code>HashMap</code>.
13 *
14 * @see java.util.HashMap
15 *
16 * @author Deepthought
17 *
18 */
19 @ThreadSafe
20 public class SidiousMap {
21
22 /**
23 * Internal map instance.
24 */
25 private final Map<SuperLinkID, PlanRequester> map = new HashMap<SuperLinkID, PlanRequester>();
26
27 /**
28 * Empty default constructor.
29 */
30 public SidiousMap() {
31 }
32
33 /**
34 * Returns the PlanRequester to which the specified id is mapped in this
35 * identity map, or <code>null</code> if the map contains no mapping for
36 * this id.
37 *
38 * @param id
39 * the id whose associated requester is to be returned
40 * @return the requester to which this map maps the specified id, or
41 * <code>null</code> if the map contains no mapping for this id
42 */
43 public PlanRequester get(SuperLinkID id) {
44 PlanRequester planRequester = null;
45 synchronized (map) {
46 planRequester = map.get(id);
47 }
48 return planRequester;
49 }
50
51 /**
52 * Associates the specified id with the specified requester in this map. If
53 * the map previously contained a mapping for this id, the old requester is
54 * replaced.
55 *
56 * @param id
57 * key with which the specified requester is to be associated
58 * @param requester
59 * value to be associated with the specified id
60 * @return the value previously associated with the id, <code>null</code>
61 * if the map did not previously contain a mapping for this id.
62 */
63 public PlanRequester put(SuperLinkID id,
64 PlanRequester requester) {
65 PlanRequester old = null;
66 synchronized (map) {
67 old = map.put(id, requester);
68 }
69 return old;
70 }
71
72 /**
73 * Removes the mapping for this key from this map if it is present.
74 *
75 * @param id
76 * the id for whic to remove the mapping
77 */
78 public synchronized void remove(SuperLinkID id) {
79 map.remove(id);
80 }
81
82 /**
83 * Returns the number of key-value mappings in this sidious map.
84 *
85 * @return the number of key-value mappings in this map.
86 */
87 public synchronized int size() {
88 return map.size();
89 }
90
91 }
|