package de.fred4jupiter.fredbet.service.config; import de.fred4jupiter.fredbet.domain.RuntimeConfig; import de.fred4jupiter.fredbet.props.CacheNames; import de.fred4jupiter.fredbet.props.FredBetProfile; import de.fred4jupiter.fredbet.props.FredbetConstants; import de.fred4jupiter.fredbet.repository.RuntimeConfigRepository; import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.core.env.Environment; import org.springframework.core.env.Profiles; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * Service for loading runtime configuration settings. * * @author michael */ @Service @Transactional public class RuntimeConfigurationService { private static final Logger LOG = LoggerFactory.getLogger(RuntimeConfigurationService.class); private static final Long DEFAULT_CONFIG_ID = 1L; @Autowired private RuntimeConfigRepository<RuntimeConfig> runtimeConfigRepository; @Autowired private Environment environment; @Cacheable(CacheNames.RUNTIME_CONFIG) public RuntimeConfig loadRuntimeConfig() { LOG.debug("Loading runtime configuration from DB..."); RuntimeConfig runtimeConfig = runtimeConfigRepository.loadRuntimeConfig(DEFAULT_CONFIG_ID, RuntimeConfig.class); if (runtimeConfig == null) { runtimeConfig = createDefaultRuntimeConfig(); } return runtimeConfig; } private RuntimeConfig createDefaultRuntimeConfig() { RuntimeConfig runtimeConfig = new RuntimeConfig(); // set defaults runtimeConfig.setFavouriteCountry(FredbetConstants.DEFAULT_FAVOURITE_COUNTRY); runtimeConfig.setPasswordForReset(FredbetConstants.DEFAULT_REST_PASSWORT); runtimeConfig.setChangePasswordOnFirstLogin(true); runtimeConfig.setSelfRegistrationEnabled(false); runtimeConfig.setRegistrationCode(RandomStringUtils.randomAlphanumeric(6)); if (environment.acceptsProfiles(Profiles.of(FredBetProfile.DEV, FredBetProfile.H2))) { runtimeConfig.setShowDemoDataNavigationEntry(true); runtimeConfig.setEnableChangingUsername(true); saveRuntimeConfig(runtimeConfig); } return runtimeConfig; } @CacheEvict(cacheNames = CacheNames.RUNTIME_CONFIG, allEntries = true) public void saveRuntimeConfig(RuntimeConfig runtimeConfig) { runtimeConfigRepository.saveRuntimeConfig(DEFAULT_CONFIG_ID, runtimeConfig); } }