Coverage Report - org.jbehave.core.steps.needle.configuration.CollectInjectionProvidersFromStepsInstance
 
Classes in this File Line Coverage Branch Coverage Complexity
CollectInjectionProvidersFromStepsInstance
66%
12/18
50%
4/8
8
 
 1  
 package org.jbehave.core.steps.needle.configuration;
 2  
 
 3  
 import java.lang.reflect.Field;
 4  
 import java.util.Arrays;
 5  
 import java.util.LinkedHashSet;
 6  
 import java.util.Set;
 7  
 
 8  
 import org.jbehave.core.annotations.needle.NeedleInjectionProvider;
 9  
 
 10  
 import de.akquinet.jbosscc.needle.injection.InjectionProvider;
 11  
 import de.akquinet.jbosscc.needle.reflection.ReflectionUtil;
 12  
 import de.holisticon.toolbox.needle.provider.InjectionProviderInstancesSupplier;
 13  
 
 14  
 /**
 15  
  * Collects {@link InjectionProvider} instances.
 16  
  * 
 17  
  * @author Jan Galinski, Holisticon AG (jan.galinski@holisticon.de)
 18  
  * @author Simon Zambrovski, Holisticon AG (simon.zambrovski@holisticon.de)
 19  
  */
 20  2
 public enum CollectInjectionProvidersFromStepsInstance {
 21  
         /**
 22  
          * stateless Singleton
 23  
          */
 24  1
         INSTANCE;
 25  
 
 26  
         /**
 27  
          * Collect providers direct in the step definition.
 28  
          * 
 29  
          * @param instance
 30  
          *            step definition instance
 31  
          * @return collected injection providers.
 32  
          */
 33  
         public final <T> InjectionProvider<?>[] apply(final T instance) {
 34  7
                 final Set<InjectionProvider<?>> providers = new LinkedHashSet<InjectionProvider<?>>();
 35  7
                 for (final Field field : ReflectionUtil.getAllFieldsWithAnnotation(instance, NeedleInjectionProvider.class)) {
 36  7
                         field.setAccessible(true);
 37  
                         try {
 38  7
                                 final Object value = field.get(instance);
 39  7
                                 if (value instanceof InjectionProvider<?>[]) {
 40  0
                                         providers.addAll(Arrays.asList((InjectionProvider<?>[]) value));
 41  7
                                 } else if (value instanceof InjectionProvider) {
 42  7
                                         providers.add((InjectionProvider<?>) value);
 43  0
                                 } else if (value instanceof InjectionProviderInstancesSupplier) {
 44  0
                                         providers.addAll(((InjectionProviderInstancesSupplier) value).get());
 45  
                                 } else {
 46  0
                                         throw new IllegalStateException("Fields annotated with NeedleInjectionProviders must be of type "
 47  
                                                         + "InjectionProviderInstancesSupplier, InjectionProvider " + "or InjectionProvider[]");
 48  
                                 }
 49  0
                         } catch (final Exception e) {
 50  0
                                 throw new IllegalStateException(e);
 51  7
                         }
 52  7
                 }
 53  
 
 54  7
                 return providers.toArray(new InjectionProvider<?>[providers.size()]);
 55  
         }
 56  
 
 57  
 }