FEAT first ResourceManager impl

master
Niclas Thobaben 2020-12-04 21:20:23 +01:00
parent be11516279
commit dcae632924
5 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,26 @@
package de.nclazz.resources;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class ResourceManager {
private Map<String, ResourceMapping> mappings = new HashMap<>();
public Optional<ResourceMapping> getMapping(String key) {
return Optional.ofNullable(this.mappings.get(key));
}
public ResourceManager addMapping(String key, ResourceMapping mapping) {
this.mappings.put(key, mapping);
return this;
}
public Optional<Resource> getResource(String key) {
return getMapping(key)
.flatMap(ResourceMapping::fetchResource);
}
}

View File

@ -4,6 +4,7 @@ import lombok.Builder;
import lombok.Data;
import lombok.Singular;
import java.util.Optional;
import java.util.Set;
@Builder
@ -27,4 +28,14 @@ public class ResourceMapping {
return this.definedResource != null || this.defaultResource != null;
}
public Optional<Resource> fetchResource() {
if (this.definedResource != null) {
return Optional.of(this.definedResource);
}
if (this.defaultResource != null) {
return Optional.of(this.defaultResource);
}
return Optional.empty();
}
}

View File

@ -0,0 +1,60 @@
package de.nclazz.resources;
import lombok.SneakyThrows;
import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.Test;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import static org.junit.jupiter.api.Assertions.*;
class ResourceManagerTest {
ResourceManager createManager() {
ResourceManager manager = new ResourceManager();
manager.addMapping("test.resource.exists", ResourceMapping.builder()
.defaultResource(Resource.fromClasspath("/airplane.png"))
.build())
.addMapping("test.resource.helloworld.default", ResourceMapping.builder()
.defaultResource(Resource.fromClasspath("/helloworld.txt"))
.build())
.addMapping("test.resource.helloworld", ResourceMapping.builder()
.definedResource(Resource.fromClasspath("/hellospecific.txt"))
.build());
return manager;
}
@SneakyThrows
String stringFromInputStream(InputStream stream) {
return IOUtils.toString(stream, StandardCharsets.UTF_8);
}
@Test
void getResourceForKey() {
ResourceManager manager = createManager();
assertTrue(manager.getMapping("test.resource.exists").isPresent());
assertFalse(manager.getMapping("test.resource.noexists").isPresent());
}
@Test
void getDefaultOrDefinedResource() {
ResourceManager manager = createManager();
assertEquals("Hello World!", manager.getResource("test.resource.helloworld.default")
.flatMap(Resource::getInputStream)
.map(this::stringFromInputStream)
.orElse(""));
assertEquals("Hello Specific!", manager.getResource("test.resource.helloworld")
.flatMap(Resource::getInputStream)
.map(this::stringFromInputStream)
.orElse(""));
}
}

View File

@ -0,0 +1 @@
Hello Specific!

View File

@ -0,0 +1 @@
Hello World!