FEAT Resource Model and factory methods

master
Niclas Thobaben 2020-12-04 20:41:56 +01:00
parent 00daca8231
commit 77b006ab3c
4 changed files with 89 additions and 1 deletions

View File

@ -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>

View File

@ -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)); }
}

View File

@ -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