53 lines
1.8 KiB
Java
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();
|
|
}
|
|
|
|
}
|