1 package com.atlassian.sal.testresources.component;
2
3 import com.atlassian.sal.api.component.ComponentLocator;
4
5 import java.util.ArrayList;
6 import java.util.Arrays;
7 import java.util.Collection;
8 import java.util.HashMap;
9 import java.util.List;
10 import java.util.Map;
11
12
13
14
15 public class MockComponentLocator extends ComponentLocator {
16 Map<Class<?>, Object> components = new HashMap<Class<?>, Object>();
17
18 public MockComponentLocator(final Object... objects) {
19 if (objects != null && objects.length > 0) {
20 for (final Object o : objects) {
21 add(o);
22 }
23 }
24 }
25
26 public MockComponentLocator add(final Class<?> cls, final Object obj) {
27 components.put(cls, obj);
28 return this;
29 }
30
31 public MockComponentLocator add(final Object obj) {
32 final List<Class> interfaces = new ArrayList<Class>();
33 Class<?> cls = obj.getClass();
34 while (cls != null) {
35
36 interfaces.addAll(Arrays.asList(cls.getInterfaces()));
37
38 interfaces.add(cls);
39 cls = cls.getSuperclass();
40 }
41
42 for (final Class<?> iface : interfaces) {
43 components.put(iface, obj);
44 }
45 return this;
46 }
47
48 @Override
49 protected <T> T getComponentInternal(final Class<T> iface) {
50 return (T) components.get(iface);
51 }
52
53 public static MockComponentLocator create(final Object... objects) {
54 final MockComponentLocator mockComponentLocator = new MockComponentLocator(objects);
55 ComponentLocator.setComponentLocator(mockComponentLocator);
56 return mockComponentLocator;
57 }
58
59 @Override
60 protected <T> Collection<T> getComponentsInternal(final Class<T> iface) {
61 return null;
62 }
63
64 @Override
65 protected <T> T getComponentInternal(final Class<T> iface, final String componentId) {
66 return getComponentInternal(iface);
67 }
68
69
70 }