TemplateLocation.java
package org.klojang.templates;
import org.klojang.templates.x.FilePathResolver;
import org.klojang.util.IOMethods;
import java.io.IOException;
import java.io.InputStream;
import static org.klojang.templates.ParseErrorCode.INVALID_INCLUDE_PATH;
record TemplateLocation(String path, PathResolver resolver) {
static final TemplateLocation STRING = new TemplateLocation();
private TemplateLocation() {
this(new FilePathResolver());
}
TemplateLocation(PathResolver resolver) {
this(null, resolver);
}
boolean isValid() {
return resolver.isValidPath(path);
}
String read() throws ParseException {
try (InputStream in = resolver.resolve(path)) {
return IOMethods.getContents(in);
} catch (IOException e) {
throw INVALID_INCLUDE_PATH.getTracelessException(path, e);
}
}
/*
* Returns whether the template was created from a string (hence doesn't really
* have a "physical" location).
*/
boolean isString() {
return path == null;
}
@Override
public String toString() {
return path;
}
}