package org.lightadmin; import org.lightadmin.api.config.management.rmi.GlobalConfigurationManagementService; import org.lightadmin.core.config.domain.unit.ConfigurationUnits; import org.springframework.test.context.TestContext; import org.springframework.test.context.support.AbstractTestExecutionListener; import java.util.Collection; import static com.google.common.collect.Lists.newArrayList; import static org.lightadmin.core.config.domain.unit.ConfigurationUnitsConverter.unitsFromConfiguration; import static org.springframework.core.annotation.AnnotationUtils.findAnnotation; import static org.springframework.util.ObjectUtils.isEmpty; public class AdministrationConfigurationListener extends AbstractTestExecutionListener { @Override public void beforeTestClass(final TestContext testContext) throws Exception { final Class<?>[] configurationTypes = configurationType(testContext.getTestClass()); if (isEmpty(configurationTypes)) { return; } final GlobalConfigurationManagementService globalConfigurationService = globalConfigurationService(testContext); globalConfigurationService.removeAllDomainTypeAdministrationConfigurations(); globalConfigurationService.registerDomainTypeConfiguration(configurationUnitsFor(configurationTypes)); } @Override public void afterTestClass(final TestContext testContext) throws Exception { if (!isEmpty(configurationType(testContext.getTestClass()))) { globalConfigurationService(testContext).removeAllDomainTypeAdministrationConfigurations(); } } public static Class<?>[] configurationType(Class clazz) { final RunWithConfiguration annotation = findAnnotation(clazz, RunWithConfiguration.class); return annotation == null ? null : annotation.value(); } private GlobalConfigurationManagementService globalConfigurationService(final TestContext testContext) { return testContext.getApplicationContext().getBean(GlobalConfigurationManagementService.class); } private ConfigurationUnits[] configurationUnitsFor(Class<?>... configurationTypes) { Collection<ConfigurationUnits> result = newArrayList(); for (Class<?> configurationType : configurationTypes) { result.add(unitsFromConfiguration(configurationType)); } return result.toArray(new ConfigurationUnits[result.size()]); } }