FEAT Resource Model and factory methods
parent
00daca8231
commit
77b006ab3c
2
pom.xml
2
pom.xml
|
@ -17,7 +17,7 @@
|
|||
<dependency>
|
||||
<groupId>de.nclazz</groupId>
|
||||
<artifactId>commons</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
package de.nclazz.resources;
|
||||
|
||||
import lombok.NonNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import static de.nclazz.commons.func.Checked.checked;
|
||||
|
||||
public class Resource {
|
||||
|
||||
private final Supplier<InputStream> streamSupplier;
|
||||
|
||||
public Resource(Supplier<InputStream> streamSupplier) {
|
||||
this.streamSupplier = streamSupplier;
|
||||
}
|
||||
|
||||
public Optional<InputStream> getInputStream() {
|
||||
if(this.streamSupplier != null) {
|
||||
return Optional.ofNullable(this.streamSupplier.get());
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
public boolean exists() {
|
||||
if(this.streamSupplier == null) return false;
|
||||
try(InputStream stream = this.streamSupplier.get()) {
|
||||
return stream != null && stream.read() != -1;
|
||||
}catch(Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static Resource fromFile(@NonNull File file) { return new Resource(checked(() -> new FileInputStream(file))); }
|
||||
public static Resource fromStream(@NonNull InputStream stream) {
|
||||
return new Resource(() -> stream);
|
||||
}
|
||||
public static Resource fromClasspath(String resourceName) { return fromStream(Resource.class.getResourceAsStream(resourceName)); }
|
||||
public static Resource fromURL(@NonNull URL url) { return new Resource(checked(url::openStream)); }
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package de.nclazz.resources;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URL;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class ResourceTest {
|
||||
|
||||
@Test
|
||||
void testResourceFromFile() {
|
||||
Resource resource = Resource.fromFile(new File("src/test/resources/airplane.png"));
|
||||
assertTrue(resource.exists());
|
||||
assertTrue(resource.getInputStream().isPresent());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testResourceFromResourceStream() {
|
||||
Resource resource = Resource.fromStream(ResourceTest.class.getResourceAsStream("/airplane.png"));
|
||||
assertTrue(resource.exists());
|
||||
assertTrue(resource.getInputStream().isPresent());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
void testResourceFromResource() {
|
||||
Resource resource = Resource.fromClasspath("/airplane.png");
|
||||
assertTrue(resource.exists());
|
||||
assertTrue(resource.getInputStream().isPresent());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
void testResourceFromURL() throws Exception {
|
||||
Resource resource = Resource.fromURL(new URL("https://homepages.cae.wisc.edu/~ece533/images/airplane.png"));
|
||||
assertTrue(resource.exists());
|
||||
assertTrue(resource.getInputStream().isPresent());
|
||||
}
|
||||
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 440 KiB |
Loading…
Reference in New Issue