KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > picocontainer > gems > util > PicoMap


1 /*****************************************************************************
2  * Copyright (c) PicoContainer Organization. All rights reserved. *
3  * ------------------------------------------------------------------------- *
4  * The software in this package is published under the terms of the BSD *
5  * style license a copy of which has been included with this distribution in *
6  * the LICENSE.txt file. *
7  * *
8  *****************************************************************************/

9 package org.picocontainer.gems.util;
10
11 import org.picocontainer.ComponentAdapter;
12 import org.picocontainer.MutablePicoContainer;
13 import org.picocontainer.defaults.DefaultPicoContainer;
14 import org.picocontainer.defaults.InstanceComponentAdapter;
15
16 import java.util.Collection JavaDoc;
17 import java.util.Collections JavaDoc;
18 import java.util.HashSet JavaDoc;
19 import java.util.Iterator JavaDoc;
20 import java.util.Map JavaDoc;
21 import java.util.Set JavaDoc;
22
23
24 public class PicoMap implements Map JavaDoc {
25
26     private final MutablePicoContainer mutablePicoContainer;
27
28     public PicoMap(MutablePicoContainer mutablePicoContainer) {
29         this.mutablePicoContainer = mutablePicoContainer;
30     }
31
32     public PicoMap() {
33         mutablePicoContainer = new DefaultPicoContainer();
34     }
35
36     public int size() {
37         return mutablePicoContainer.getComponentAdapters().size();
38     }
39
40     public boolean isEmpty() {
41         return mutablePicoContainer.getComponentAdapters().size() == 0;
42     }
43
44     public boolean containsKey(Object JavaDoc o) {
45         if (o instanceof Class JavaDoc) {
46             return mutablePicoContainer.getComponentInstanceOfType((Class JavaDoc)o) != null;
47         } else {
48             return mutablePicoContainer.getComponentInstance(o) != null;
49         }
50     }
51
52     public boolean containsValue(Object JavaDoc o) {
53         return false;
54     }
55
56     public Object JavaDoc get(Object JavaDoc o) {
57         if (o instanceof Class JavaDoc) {
58             return mutablePicoContainer.getComponentInstanceOfType((Class JavaDoc)o);
59         } else {
60             return mutablePicoContainer.getComponentInstance(o);
61         }
62     }
63
64     public Object JavaDoc put(Object JavaDoc o, Object JavaDoc o1) {
65         Object JavaDoc object = remove(o);
66         if (o1 instanceof Class JavaDoc) {
67             mutablePicoContainer.registerComponentImplementation(o, (Class JavaDoc)o1);
68         } else {
69             mutablePicoContainer.registerComponentInstance(o, o1);
70         }
71         return object;
72     }
73
74     public Object JavaDoc remove(Object JavaDoc o) {
75         ComponentAdapter adapter = mutablePicoContainer.unregisterComponent(o);
76         if (adapter != null) {
77             // if previously an instance was registered, return it, otherwise return the type
78
return adapter instanceof InstanceComponentAdapter ? adapter
79                     .getComponentInstance(mutablePicoContainer) : adapter
80                     .getComponentImplementation();
81         } else {
82             return null;
83         }
84     }
85
86     public void putAll(Map JavaDoc map) {
87         for (final Iterator JavaDoc iter = map.entrySet().iterator(); iter.hasNext();) {
88             final Map.Entry JavaDoc entry = (Map.Entry JavaDoc)iter.next();
89             put(entry.getKey(), entry.getValue());
90         }
91     }
92
93     public void clear() {
94         Set JavaDoc adapters = keySet();
95         for (final Iterator JavaDoc iter = adapters.iterator(); iter.hasNext();) {
96             mutablePicoContainer.unregisterComponent(iter.next());
97         }
98     }
99
100     public Set JavaDoc keySet() {
101         Set JavaDoc set = new HashSet JavaDoc();
102         Collection JavaDoc adapters = mutablePicoContainer.getComponentAdapters();
103         for (final Iterator JavaDoc iter = adapters.iterator(); iter.hasNext();) {
104             final ComponentAdapter adapter = (ComponentAdapter)iter.next();
105             set.add(adapter.getComponentKey());
106         }
107         return Collections.unmodifiableSet(set);
108     }
109
110     public Collection JavaDoc values() {
111         return Collections.unmodifiableCollection(mutablePicoContainer.getComponentInstances());
112     }
113
114     public Set JavaDoc entrySet() {
115         Set JavaDoc set = new HashSet JavaDoc();
116         Collection JavaDoc adapters = mutablePicoContainer.getComponentAdapters();
117         for (final Iterator JavaDoc iter = adapters.iterator(); iter.hasNext();) {
118             final Object JavaDoc key = ((ComponentAdapter)iter.next()).getComponentKey();
119             final Object JavaDoc component = mutablePicoContainer.getComponentInstance(key);
120             set.add(new Map.Entry JavaDoc() {
121                 public Object JavaDoc getKey() {
122                     return key;
123                 }
124
125                 public Object JavaDoc getValue() {
126                     return component;
127                 }
128
129                 public Object JavaDoc setValue(Object JavaDoc value) {
130                     throw new UnsupportedOperationException JavaDoc("Cannot set component");
131                 }
132             });
133         }
134         return Collections.unmodifiableSet(set);
135     }
136 }
137
Popular Tags