
com.commercetools.sunrise.play.configuration.SunriseConfiguration Maven / Gradle / Ivy
The newest version!
package com.commercetools.sunrise.play.configuration;
import com.typesafe.config.ConfigException;
import play.Configuration;
import play.api.PlayException;
import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Stream;
import static java.util.stream.Collectors.toList;
public final class SunriseConfiguration extends Configuration {
private SunriseConfiguration(final Configuration configuration) {
super(configuration.underlying());
}
@Override
@Nullable
public List getStringList(final String key) {
try {
return super.getStringList(key);
} catch (PlayException e) {
return recoverAndParseList(key, SunriseConfiguration::parseStringList, e).orElse(null);
}
}
@Override
public List getStringList(final String key, final List defaultList) {
try {
return super.getStringList(key, defaultList);
} catch (PlayException e) {
return recoverAndParseList(key, SunriseConfiguration::parseStringList, e).orElse(defaultList);
}
}
@Nullable
@Override
public List getBooleanList(final String key) {
try {
return super.getBooleanList(key);
} catch (PlayException e) {
return recoverAndParseList(key, SunriseConfiguration::parseBooleanList, e).orElse(null);
}
}
@Override
public List getBooleanList(final String key, final List defaultList) {
try {
return super.getBooleanList(key, defaultList);
} catch (PlayException e) {
return recoverAndParseList(key, SunriseConfiguration::parseBooleanList, e).orElse(defaultList);
}
}
@Nullable
@Override
public List getIntList(final String key) {
try {
return super.getIntList(key);
} catch (PlayException e) {
return recoverAndParseList(key, SunriseConfiguration::parseIntList, e).orElse(null);
}
}
@Override
public List getIntList(final String key, final List defaultList) {
try {
return super.getIntList(key, defaultList);
} catch (PlayException e) {
return recoverAndParseList(key, SunriseConfiguration::parseIntList, e).orElse(defaultList);
}
}
@Override
public Configuration getConfig(final String key) {
return Optional.ofNullable(super.getConfig(key))
.map(SunriseConfiguration::of)
.orElse(null);
}
@Override
public List getConfigList(final String key) {
return convertToSunriseConfigurationList(super.getConfigList(key));
}
@Override
public List getConfigList(final String key, final List defaultList) {
return convertToSunriseConfigurationList(super.getConfigList(key, defaultList));
}
/**
* Returns the configuration using the implementation of {@link SunriseConfiguration}.
* @param configuration the original configuration
* @return the new configuration
*/
public static Configuration of(final Configuration configuration) {
return new SunriseConfiguration(configuration);
}
private Optional> recoverAndParseList(final String key, final Function> parser,
final PlayException e) {
if (e.getCause() instanceof ConfigException.WrongType) {
return Optional.ofNullable(getString(key))
.map(parser)
.filter(value -> !value.isEmpty());
} else {
throw e;
}
}
private static List parseIntList(final String value) {
return parseList(value)
.map(Integer::parseInt)
.collect(toList());
}
private static List parseBooleanList(final String value) {
return parseList(value)
.map(Boolean::parseBoolean)
.collect(toList());
}
private static List parseStringList(final String value) {
return parseList(value).collect(toList());
}
private static Stream parseList(final String value) {
return Arrays.stream(value.split(","))
.map(String::trim)
.filter(v -> !v.isEmpty());
}
private static List convertToSunriseConfigurationList(@Nullable final List configurations) {
return Optional.ofNullable(configurations)
.map(list -> list.stream()
.map(SunriseConfiguration::of)
.collect(toList()))
.orElse(null);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy