resource-manager/resource-manager-api/src/main/java/de/nclazz/resources/loader/YamlResourceRepositoryLoade...

53 lines
1.8 KiB
Java

package de.nclazz.resources.loader;
import de.nclazz.resources.Resource;
import de.nclazz.resources.ResourceMapping;
import de.nclazz.resources.ResourceRepository;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
import java.io.InputStream;
import java.util.Collections;
import java.util.Set;
import static java.util.stream.Collectors.toSet;
public class YamlResourceRepositoryLoader {
private static final Yaml YAML = new Yaml(new Constructor(YamlResourceRepository.class));
public ResourceRepository load(InputStream stream) {
YamlResourceRepository yamlResourceRepository = YAML.load(stream);
return mapYamlResourceManager(yamlResourceRepository);
}
private ResourceRepository mapYamlResourceManager(YamlResourceRepository yaml) {
ResourceRepository manager = new ResourceRepository();
for (YamlResource yamlResource : yaml.getResources()) {
String key = yamlResource.getKey();
if (key == null) {
throw new IllegalArgumentException("Missing Resource Key!");
}
manager.addMapping(key, mapYamlResourceMapping(yamlResource));
}
return manager;
}
private ResourceMapping mapYamlResourceMapping(YamlResource resource) {
Set<String> options = resource.getOptions() != null ? resource.getOptions() : Collections.emptySet();
return ResourceMapping.builder()
.defaultResource(Resource.load(resource.getDefaultLocation()))
.label(resource.getLabel())
.description(resource.getDescription())
.options(options.stream()
.map(String::toUpperCase)
.map(ResourceMapping.Option::valueOf)
.collect(toSet()))
.build();
}
}