package org.apereo.cas.config.support;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.EmbeddedValueResolver;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.convert.ConversionFailedException;
import org.springframework.core.convert.ConversionService;
import java.time.Duration;
/**
* This is {@link CasConfigurationEmbeddedValueResolver}.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
public class CasConfigurationEmbeddedValueResolver extends EmbeddedValueResolver {
private static final Logger LOGGER = LoggerFactory.getLogger(CasConfigurationEmbeddedValueResolver.class);
private final ConfigurableApplicationContext applicationContext;
public CasConfigurationEmbeddedValueResolver(final ApplicationContext applicationContext) {
super(((ConfigurableApplicationContext) applicationContext).getBeanFactory());
this.applicationContext = ConfigurableApplicationContext.class.cast(applicationContext);
}
@Override
public String resolveStringValue(final String strVal) {
final String originalValue = super.resolveStringValue(strVal);
final String value = convertValueToDurationIfPossible(originalValue);
if (value != null) {
return value;
}
return originalValue;
}
private String convertValueToDurationIfPossible(final String value) {
try {
final ConversionService service = applicationContext.getEnvironment().getConversionService();
final Duration dur = service.convert(value, Duration.class);
if (dur != null) {
return String.valueOf(dur.toMillis());
}
} catch (final ConversionFailedException e) {
LOGGER.trace(e.getMessage());
}
return null;
}
}