View Javadoc

1   /**
2    *
3    * Copyright 2005 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  package org.apache.geronimo.gbean;
18  
19  import java.util.Map;
20  import java.util.Collection;
21  import java.util.Iterator;
22  import java.util.HashMap;
23  import java.util.Set;
24  
25  
26  public class ReferenceMap implements Map, ReferenceCollectionListener {
27      private final ReferenceCollection collection;
28      private final Map map;
29      private final Key key;
30  
31      /**
32       * Constructs the ReferenceMap using a new instance of
33       * HashMap as the internal map.
34       *
35       * @param collection Must be an instance of ReferenceCollection
36       * @param map The map instance to which references will be added/removed
37       * @param key
38       */
39      public ReferenceMap(Collection collection, Map map, Key key) {
40          this.collection = (ReferenceCollection) collection;
41          this.map = map;
42          this.key = key;
43          for (Iterator iterator = this.collection.iterator(); iterator.hasNext();) {
44              Object object = iterator.next();
45              map.put(key.getKey(object), object);
46          }
47          this.collection.addReferenceCollectionListener(this);
48      }
49  
50      /**
51       * Constructs the ReferenceMap using a new instance of
52       * HashMap as the internal map.
53       *
54       * @param collection Must be an instance of ReferenceCollection
55       * @param key
56       */
57      public ReferenceMap(Collection collection, Key key) {
58          this(collection, new HashMap(), key);
59      }
60  
61      public void memberAdded(ReferenceCollectionEvent event) {
62          map.put(key.getKey(event.getMember()), event.getMember());
63      }
64  
65      public void memberRemoved(ReferenceCollectionEvent event) {
66          map.remove(key.getKey(event.getMember()));
67      }
68  
69      public interface Key {
70          public Object getKey(Object object);
71      }
72  
73      public int size() {
74          return map.size();
75      }
76  
77      public boolean isEmpty() {
78          return map.isEmpty();
79      }
80  
81      public boolean containsKey(Object key) {
82          return map.containsKey(key);
83      }
84  
85      public boolean containsValue(Object value) {
86          return map.containsValue(value);
87      }
88  
89      public Object get(Object key) {
90          return map.get(key);
91      }
92  
93      public Object put(Object key, Object value) {
94          return map.put(key, value);
95      }
96  
97      public Object remove(Object key) {
98          return map.remove(key);
99      }
100 
101     public void putAll(Map t) {
102         map.putAll(t);
103     }
104 
105     public void clear() {
106         map.clear();
107     }
108 
109     public Set keySet() {
110         return map.keySet();
111     }
112 
113     public Collection values() {
114         return map.values();
115     }
116 
117     public Set entrySet() {
118         return map.entrySet();
119     }
120 
121     public boolean equals(Object o) {
122         return map.equals(o);
123     }
124 
125     public int hashCode() {
126         return map.hashCode();
127     }
128 }