package io.blobkeeper.file.configuration;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Named;
import javax.inject.Singleton;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import static io.blobkeeper.common.util.GuavaCollectors.toImmutableMap;
import static java.util.function.Function.identity;
public class FileModule extends AbstractModule {
private static final Logger log = LoggerFactory.getLogger(FileModule.class);
@Override
protected void configure() {
}
@Provides
@Singleton
public Map<Integer, DiskConfiguration> diskConfigurations(ObjectMapper objectMapper, @Named("blobkeeper.disk.configuration") String value) {
try {
List<DiskConfiguration> config = objectMapper.readValue(value, new TypeReference<List<DiskConfiguration>>() {
});
return config.stream().
collect(toImmutableMap(DiskConfiguration::getDisk, identity()));
} catch (IOException e) {
log.error("Can't read disk configuration");
throw new IllegalArgumentException(e);
}
}
}