001// Generated by delombok at Sun Jul 30 17:21:56 UTC 2023 002package de.cuioss.test.jsf.util; 003 004import static java.util.Objects.requireNonNull; 005import java.util.ArrayList; 006import java.util.Collection; 007import java.util.List; 008import java.util.Set; 009import de.cuioss.test.jsf.config.ApplicationConfigurator; 010import de.cuioss.test.jsf.config.BeanConfigurator; 011import de.cuioss.test.jsf.config.ComponentConfigurator; 012import de.cuioss.test.jsf.config.JsfTestConfiguration; 013import de.cuioss.test.jsf.config.JsfTestContextConfigurator; 014import de.cuioss.test.jsf.config.RequestConfigurator; 015import de.cuioss.test.jsf.config.decorator.ApplicationConfigDecorator; 016import de.cuioss.test.jsf.config.decorator.BeanConfigDecorator; 017import de.cuioss.test.jsf.config.decorator.ComponentConfigDecorator; 018import de.cuioss.test.jsf.config.decorator.RequestConfigDecorator; 019import de.cuioss.test.valueobjects.objects.impl.DefaultInstantiator; 020import de.cuioss.tools.collect.CollectionBuilder; 021import de.cuioss.tools.reflect.MoreReflection; 022// owolff: lombok generated 023/** 024 * Helper class providing some utility methods for handling configuration. 025 * 026 * @author Oliver Wolff 027 */ 028@SuppressWarnings("squid:S1118") 029public final class ConfigurationHelper { 030 /** 031 * Checks the given type for the annotation {@link JsfTestConfiguration} and and 032 * puts all found in the immutable {@link Set} to be returned 033 * 034 * @param annotated the class that may or may not provide the annotations, must 035 * not be null 036 * @return immutable {@link Set} of found {@link JsfTestConfiguration} elements. 037 */ 038 public static Set<JsfTestConfiguration> extractJsfTestConfiguration(final Class<?> annotated) { 039 requireNonNull(annotated); 040 final var builder = new CollectionBuilder<JsfTestConfiguration>(); 041 MoreReflection.extractAllAnnotations(annotated, JsfTestConfiguration.class).forEach(builder::add); 042 return builder.toImmutableSet(); 043 } 044 045 /** 046 * Instantiates the given {@link ComponentConfigurator} and calls them with the 047 * given {@link ComponentConfigDecorator}. In case the given testClass instance 048 * also implements {@link ComponentConfigurator} the corresponding method will 049 * be called <em>after</em> the others 050 * 051 * @param testClass the actual instance of test, must not be null 052 * @param registry to be passed the the individual instances of 053 * {@link ComponentConfigurator}, must not be null 054 * @param configurations the previously extracted annotations, must not be null 055 * but may be empty. 056 */ 057 public static void configureComponents(final Object testClass, final ComponentConfigDecorator registry, final Collection<JsfTestConfiguration> configurations) { 058 requireNonNull(testClass); 059 requireNonNull(registry); 060 requireNonNull(configurations); 061 final List<ComponentConfigurator> instances = getAssignableContextConfigurators(configurations, ComponentConfigurator.class); 062 if (testClass instanceof ComponentConfigurator) { 063 instances.add((ComponentConfigurator) testClass); 064 } 065 instances.forEach(instance -> instance.configureComponents(registry)); 066 } 067 068 /** 069 * Instantiates the given {@link BeanConfigurator} and calls them with the given 070 * {@link BeanConfigDecorator}. In case the given testClass instance also 071 * implements {@link BeanConfigurator} the corresponding method will be called 072 * <em>after</em> the others 073 * 074 * @param testClass the actual instance of test, must not be null 075 * @param registry to be passed the the individual instances of 076 * {@link BeanConfigurator}, must not be null 077 * @param configurations the previously extracted annotations, must not be null 078 * but may be empty. 079 */ 080 public static void configureManagedBeans(final Object testClass, final BeanConfigDecorator registry, final Collection<JsfTestConfiguration> configurations) { 081 requireNonNull(testClass); 082 requireNonNull(registry); 083 requireNonNull(configurations); 084 final List<BeanConfigurator> instances = getAssignableContextConfigurators(configurations, BeanConfigurator.class); 085 if (testClass instanceof BeanConfigurator) { 086 instances.add((BeanConfigurator) testClass); 087 } 088 instances.forEach(instance -> instance.configureBeans(registry)); 089 } 090 091 /** 092 * Instantiates the given {@link ApplicationConfigurator} and calls them with 093 * the given {@link ApplicationConfigDecorator}. In case the given testClass 094 * instance also implements {@link ApplicationConfigurator} the corresponding 095 * method will be called <em>after</em> the others 096 * 097 * @param testClass the actual instance of test, must not be null 098 * @param registry to be passed the the individual instances of 099 * {@link ApplicationConfigurator}, must not be null 100 * @param configurations the previously extracted annotations, must not be null 101 * but may be empty. 102 */ 103 public static void configureApplication(final Object testClass, final ApplicationConfigDecorator registry, final Collection<JsfTestConfiguration> configurations) { 104 requireNonNull(testClass); 105 requireNonNull(registry); 106 requireNonNull(configurations); 107 final List<ApplicationConfigurator> instances = getAssignableContextConfigurators(configurations, ApplicationConfigurator.class); 108 if (testClass instanceof ApplicationConfigurator) { 109 instances.add((ApplicationConfigurator) testClass); 110 } 111 instances.forEach(instance -> instance.configureApplication(registry)); 112 } 113 114 /** 115 * Instantiates the given {@link RequestConfigurator} and calls them with the 116 * given {@link RequestConfigDecorator}. In case the given testClass instance 117 * also implements {@link RequestConfigurator} the corresponding method will be 118 * called <em>after</em> the others 119 * 120 * @param testClass the actual instance of test, must not be null 121 * @param registry to be passed the the individual instances of 122 * {@link RequestConfigurator}, must not be null 123 * @param configurations the previously extracted annotations, must not be null 124 * but may be empty. 125 */ 126 public static void configureRequestConfig(final Object testClass, final RequestConfigDecorator registry, final Collection<JsfTestConfiguration> configurations) { 127 requireNonNull(testClass); 128 requireNonNull(registry); 129 requireNonNull(configurations); 130 final List<RequestConfigurator> instances = getAssignableContextConfigurators(configurations, RequestConfigurator.class); 131 if (testClass instanceof RequestConfigurator) { 132 instances.add((RequestConfigurator) testClass); 133 } 134 instances.forEach(instance -> instance.configureRequest(registry)); 135 } 136 137 /** 138 * @param configurations all configurators 139 * @param configurator class to check if assignable 140 * @param <T> target type 141 * @return list of {@link JsfTestContextConfigurator} with target type 142 */ 143 @SuppressWarnings("unchecked") 144 private static <T extends JsfTestContextConfigurator> List<T> getAssignableContextConfigurators(final Collection<JsfTestConfiguration> configurations, final Class<T> configurator) { 145 final List<T> instances = new ArrayList<>(); 146 for (final JsfTestConfiguration config : configurations) { 147 for (final Class<? extends JsfTestContextConfigurator> type : config.value()) { 148 if (configurator.isAssignableFrom(type)) { 149 instances.add((T) new DefaultInstantiator<>(type).newInstance()); 150 } 151 } 152 } 153 return instances; 154 } 155 156 @java.lang.SuppressWarnings("all") 157 @lombok.Generated 158 private ConfigurationHelper() { 159 } 160}