1 | |
package org.jbehave.core.steps.needle.configuration; |
2 | |
|
3 | |
import java.util.HashSet; |
4 | |
import java.util.ResourceBundle; |
5 | |
import java.util.Set; |
6 | |
|
7 | |
import de.akquinet.jbosscc.needle.injection.InjectionProvider; |
8 | |
import de.holisticon.toolbox.needle.provider.InjectionProviderInstancesSupplier; |
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
public class JBehaveNeedleConfiguration { |
17 | |
|
18 | |
|
19 | |
|
20 | |
public static final String RESOURCE_JBEHAVE_NEEDLE = "jbehave-needle"; |
21 | |
|
22 | 9 | private final LoadResourceBundle loadResourceBundle = LoadResourceBundle.INSTANCE; |
23 | 9 | private final ReadInjectionProviderClassNames readInjectionProviderClassNames = ReadInjectionProviderClassNames.INSTANCE; |
24 | 9 | private final CreateInstanceByDefaultConstructor createInstance = CreateInstanceByDefaultConstructor.INSTANCE; |
25 | |
|
26 | 9 | private final Set<InjectionProvider<?>> injectionProviders = new HashSet<InjectionProvider<?>>(); |
27 | |
|
28 | |
|
29 | |
|
30 | |
|
31 | |
public JBehaveNeedleConfiguration() { |
32 | 0 | this(RESOURCE_JBEHAVE_NEEDLE); |
33 | 0 | } |
34 | |
|
35 | 9 | public JBehaveNeedleConfiguration(final String resourceName) { |
36 | 9 | final ResourceBundle resourceBundle = loadResourceBundle.apply(resourceName); |
37 | 9 | final Set<String> classNames = readInjectionProviderClassNames.apply(resourceBundle); |
38 | |
|
39 | 9 | for (final String className : classNames) { |
40 | |
try { |
41 | 0 | final Class<?> clazz = Class.forName(className); |
42 | 0 | if (isInjectionProvider(clazz)) { |
43 | 0 | injectionProviders.add((InjectionProvider<?>) createInstance.apply(clazz)); |
44 | 0 | } else if (isInjectionProviderInstanceSupplier(clazz)) { |
45 | 0 | final InjectionProviderInstancesSupplier supplier = (InjectionProviderInstancesSupplier) createInstance |
46 | |
.apply(clazz); |
47 | 0 | final Set<InjectionProvider<?>> providers = supplier.get(); |
48 | 0 | if (providers != null) { |
49 | 0 | injectionProviders.addAll(providers); |
50 | |
} |
51 | |
} |
52 | 0 | } catch (final Exception e) { |
53 | 0 | throw new IllegalStateException("failed to initialize custom injection providers", e); |
54 | 0 | } |
55 | 0 | } |
56 | 9 | } |
57 | |
|
58 | |
public InjectionProvider<?>[] getInjectionProviders() { |
59 | 9 | return injectionProviders.toArray(new InjectionProvider<?>[injectionProviders.size()]); |
60 | |
} |
61 | |
|
62 | |
|
63 | |
|
64 | |
|
65 | |
|
66 | |
|
67 | |
|
68 | |
|
69 | |
static boolean isInjectionProvider(final Class<?> type) { |
70 | 0 | return InjectionProvider.class.isAssignableFrom(type); |
71 | |
} |
72 | |
|
73 | |
|
74 | |
|
75 | |
|
76 | |
|
77 | |
|
78 | |
|
79 | |
|
80 | |
static boolean isInjectionProviderInstanceSupplier(final Class<?> type) { |
81 | 0 | return InjectionProviderInstancesSupplier.class.isAssignableFrom(type); |
82 | |
} |
83 | |
} |