org.zalando.baigan.service.FileSystemConfigurationRepository Maven / Gradle / Ivy
package org.zalando.baigan.service;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.ListenableFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.zalando.baigan.model.Configuration;
import javax.annotation.Nonnull;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
/**
* Implementation of {@link ConfigurationRepository} supporting a file on
* Classpath as the persistence storage for the Baigan configuration.
*
* @author mchand
*/
public class FileSystemConfigurationRepository extends AbstractConfigurationRepository {
private final LoadingCache> cachedConfigurations;
private final String fileName;
private Logger LOG = LoggerFactory
.getLogger(FileSystemConfigurationRepository.class);
public FileSystemConfigurationRepository(long refreshIntervalInMinutes,
final String fileName) {
this.fileName = fileName;
cachedConfigurations = CacheBuilder.newBuilder()
.refreshAfterWrite(refreshIntervalInMinutes, TimeUnit.MINUTES)
.build(new CacheLoader>() {
@Override
public Map load(String key)
throws Exception {
final String configurationText = loadResource(key);
final Collection configurations = getConfigurations(
configurationText);
final ImmutableMap.Builder builder = ImmutableMap.builder();
for (Configuration each : configurations) {
builder.put(each.getAlias(), each);
}
return builder.build();
}
@Override
public ListenableFuture © 2015 - 2025 Weber Informatics LLC | Privacy Policy