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