FEAT first ResourceManager impl
parent
be11516279
commit
dcae632924
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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(""));
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
Hello Specific!
|
|
@ -0,0 +1 @@
|
|||
Hello World!
|
Loading…
Reference in New Issue