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  }