
com.testingsyndicate.jupiter.extensions.resources.ResourceResolver Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jupiter-resources-extension Show documentation
Show all versions of jupiter-resources-extension Show documentation
Easily inject file based resources into your jupiter tests
The newest version!
package com.testingsyndicate.jupiter.extensions.resources;
import static java.util.stream.Collectors.toUnmodifiableMap;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.Optional;
import java.util.ServiceLoader;
import java.util.ServiceLoader.Provider;
/**
* Resolver of a specific resource type. Implementations of this class are located using
* ServiceLoader and should be added to a relevant services file to be discovered.
*
* @param type of the resource this resolves
*/
public abstract class ResourceResolver {
private static final Map, ResourceResolver>> RESOLVERS;
private final Class extends T> target;
public static Optional> getResolver(Class target) {
// noinspection unchecked
var resolver = (ResourceResolver) RESOLVERS.get(target);
return Optional.ofNullable(resolver);
}
protected ResourceResolver(Class extends T> target) {
this.target = target;
}
public Class extends T> getTarget() {
return target;
}
public final T resolve(ResolutionContext context, URL url) {
try {
return doResolve(context, url);
} catch (IOException iox) {
throw new UncheckedIOException(iox);
}
}
protected abstract T doResolve(ResolutionContext context, URL url) throws IOException;
static {
RESOLVERS =
ServiceLoader.load(ResourceResolver.class).stream()
.map((Provider provider) -> (ResourceResolver>) provider.get())
.collect(
toUnmodifiableMap(
resolver -> (Class>) resolver.getTarget(),
resolver -> (ResourceResolver>) resolver));
}
public interface ResolutionContext {
String name();
Class> sourceClass();
Optional charset();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy