1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package pl.edu.agh.cast.resource;
19
20 import java.util.Collections;
21 import java.util.HashMap;
22 import java.util.LinkedList;
23 import java.util.List;
24 import java.util.Map;
25
26 import org.apache.log4j.Logger;
27
28 import pl.edu.agh.cast.Activator;
29
30
31
32
33
34
35 public class ResourceRegistry implements IResourceRegistry {
36
37 private static Logger log = Activator.getLogger();
38
39 private Map<String, IVisualResource> idToResourceMap;
40
41 private Map<String, List<IVisualResource>> tagToResourcesMap;
42
43 private IVisualResourcesProvidersReader providersReader;
44
45
46
47
48 public ResourceRegistry() {
49 idToResourceMap = new HashMap<String, IVisualResource>();
50 tagToResourcesMap = new HashMap<String, List<IVisualResource>>();
51 providersReader = new RCPVisualResourcesProvidersReader();
52 }
53
54
55
56
57
58
59 @Override
60 public IVisualResource getResource(String id) {
61 if (id == null) {
62 throw new IllegalArgumentException("Cannot get resource with null id");
63 }
64 return idToResourceMap.get(id);
65 }
66
67
68
69
70
71
72 @Override
73 public IVisualResource getResource(String id, String defaultId) {
74 IVisualResource resource = getResource(id);
75 if (resource == null) {
76 resource = getResource(defaultId);
77 }
78 return resource;
79 }
80
81
82
83
84
85
86 @SuppressWarnings("unchecked")
87 @Override
88 public List<IVisualResource> getResources(String tag) {
89 if (tag == null) {
90 throw new IllegalArgumentException("Cannot get resources by null tag");
91 }
92 return tagToResourcesMap.containsKey(tag) ? tagToResourcesMap.get(tag) : Collections.EMPTY_LIST;
93 }
94
95
96
97
98
99
100 @Override
101 public void initalize() throws ResourceException {
102 log.info("Initializing resource registry...");
103 List<IVisualResourcesProvider> providers = providersReader.getVisualResourcesProviders();
104 for (IVisualResourcesProvider provider : providers) {
105 for (IVisualResource resource : provider.getVisualResources()) {
106 register(resource);
107 }
108 }
109 }
110
111
112
113
114
115
116 @Override
117 public void dispose() {
118 for (IVisualResource resource : idToResourceMap.values()) {
119 resource.dispose();
120 }
121 idToResourceMap.clear();
122 tagToResourcesMap.clear();
123 log.info("Resource registry disposed");
124
125 }
126
127
128
129
130
131
132 @Override
133 public void register(IVisualResource resource) throws ResourceException {
134 if (resource == null) {
135 throw new IllegalArgumentException("Cannot register null resource");
136 }
137 String id = resource.getId();
138 if (id == null || id.isEmpty()) {
139 throw new IllegalArgumentException("Cannot register resource with null or empty id");
140 }
141
142 if (idToResourceMap.containsKey(id)) {
143 throw new ResourceException(String.format("Resource with id %1$ already exists", id));
144 }
145 idToResourceMap.put(id, resource);
146
147
148 List<String> tags = resource.getTags();
149 if (tags != null) {
150 for (String tag : tags) {
151 if (!tagToResourcesMap.containsKey(tag)) {
152 tagToResourcesMap.put(tag, new LinkedList<IVisualResource>());
153 }
154 List<IVisualResource> values = tagToResourcesMap.get(tag);
155 values.add(resource);
156 }
157 }
158 log.info(String.format("Resource with id %1$s added to resource registry", id));
159 }
160
161
162
163
164
165
166 @SuppressWarnings("nls")
167 @Override
168 public boolean unregister(String id) throws ResourceException {
169 if (id == null) {
170 throw new IllegalArgumentException("Cannot unregister resource with null id");
171 }
172 if (idToResourceMap.containsKey(id)) {
173 IVisualResource resource = idToResourceMap.remove(id);
174 List<String> tags = resource.getTags();
175 if (tags != null) {
176 for (String tag : tags) {
177 List<IVisualResource> values = tagToResourcesMap.get(tag);
178 values.remove(resource);
179 }
180 }
181 resource.dispose();
182 log.info(String.format("Resource with id %1$s disposed and removed from resource registry", id));
183 return true;
184 } else {
185
186 log.warn(String.format("Cannot unregister resource: Resource with id %1$s does not exists"));
187 return false;
188 }
189
190 }
191
192 protected void setResourcesProvidersReader(IVisualResourcesProvidersReader reader) {
193 this.providersReader = reader;
194 }
195
196
197
198
199
200
201 interface IVisualResourcesProvidersReader {
202
203
204
205
206
207
208 List<IVisualResourcesProvider> getVisualResourcesProviders();
209 }
210
211
212
213
214
215
216
217 class RCPVisualResourcesProvidersReader implements IVisualResourcesProvidersReader {
218
219
220
221
222
223
224 @Override
225 public List<IVisualResourcesProvider> getVisualResourcesProviders() {
226 return Activator.getResourcesProviders();
227 }
228
229 }
230
231 }