TemplateFile.java
package org.freshmarker.file;
import org.freshmarker.core.ProcessContext;
import org.freshmarker.core.ProcessException;
import org.freshmarker.core.model.DotHashAddressable;
import org.freshmarker.core.model.TemplateNull;
import org.freshmarker.core.model.TemplateObject;
import org.freshmarker.core.model.primitive.TemplateNumber;
import org.freshmarker.core.model.primitive.TemplatePrimitive;
import org.freshmarker.core.model.primitive.TemplateString;
import java.io.File;
public class TemplateFile extends TemplatePrimitive<File> implements DotHashAddressable {
public TemplateFile(File value) {
super(value);
}
@Override
public TemplateObject get(ProcessContext context, String name) {
return switch (name) {
case "size" -> new TemplateNumber(getValue().length());
case "name" -> new TemplateString(getValue().getName());
case "parent" -> create(getValue().getParentFile());
default -> throw new ProcessException("unsupported attribute: " + name);
};
}
private TemplateObject create(File file) {
return file == null ? TemplateNull.NULL : new TemplateFile(getValue().getParentFile());
}
}