package jj.resource;
import javax.inject.Inject;
import javax.inject.Singleton;
/**
* Handles creation of resource identifiers, including normalizing
* locations
*
* @author jason
*/
@Singleton
public class ResourceIdentifierMaker {
private final PathResolver pathResolver;
@Inject
ResourceIdentifierMaker(PathResolver pathResolver) {
this.pathResolver = pathResolver;
}
public <T extends Resource<Void>> ResourceIdentifier<T, Void> make(Class<T> resourceClass, Location base, String name) {
return make(resourceClass, base, name, null);
}
public <T extends Resource<A>, A> ResourceIdentifier<T, A> make(Class<T> resourceClass, Location base, String name, A argument) {
// find the canonical tuple
Location normalizedBase = base instanceof Location.Bundle ? base : pathResolver.normalizedLocation(base, name);
if (normalizedBase != null && !normalizedBase.equals(base)) {
name = pathResolver.normalizedName(base, normalizedBase, name);
}
return new ResourceIdentifier<>(resourceClass, base, name, argument);
}
}