1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.uruma.context.impl;
17
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.Collections;
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24
25 import org.seasar.uruma.context.WidgetHandle;
26 import org.seasar.uruma.context.WidgetHolder;
27 import org.seasar.uruma.core.UrumaMessageCodes;
28 import org.seasar.uruma.exception.DuplicateWidgetIdException;
29 import org.seasar.uruma.log.UrumaLogger;
30 import org.seasar.uruma.util.AssertionUtil;
31
32
33
34
35
36
37 public abstract class AbstractWidgetHolder implements WidgetHolder {
38 private static final UrumaLogger logger = UrumaLogger
39 .getLogger(AbstractWidgetHolder.class);
40
41 private Map<String, WidgetHandle> handleMap = new HashMap<String, WidgetHandle>();
42
43
44
45
46
47 public WidgetHandle getWidgetHandle(final String handleId) {
48 return handleMap.get(handleId);
49 }
50
51
52
53
54 public Collection<WidgetHandle> getWidgetHandles() {
55 return Collections.unmodifiableCollection(handleMap.values());
56 }
57
58
59
60
61
62 public boolean hasWidgetHandle(final String handleId) {
63 return handleMap.containsKey(handleId);
64 }
65
66
67
68
69
70
71 public void putWidgetHandle(final WidgetHandle handle) {
72 AssertionUtil.assertNotNull("handle", handle);
73
74 if (hasWidgetHandle(handle.getId())) {
75 throw new DuplicateWidgetIdException(handle.getId(), handle
76 .getWidgetClass().getName());
77 }
78 logger.log(UrumaMessageCodes.WIDGET_REGISTERED, handle.getId(), handle
79 .getWidgetClass().getName());
80 handleMap.put(handle.getId(), handle);
81 }
82
83
84
85
86
87 public List<WidgetHandle> getWidgetHandles(final Class<?> clazz) {
88 List<WidgetHandle> handles = new ArrayList<WidgetHandle>();
89 for (WidgetHandle handle : handleMap.values()) {
90 if (handle.instanceOf(clazz)) {
91 handles.add(handle);
92 }
93 }
94 return handles;
95 }
96 }