View Javadoc

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   * Mock implementation of the component locator for testing
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              // get all interfaces of this class
43              interfaces.addAll(Arrays.asList(cls.getInterfaces()));
44              // get a superclass
45              interfaces.add(cls);
46              cls = cls.getSuperclass();
47          }
48          // register this component with all its interfaces and supers
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  }