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