TemplatePath.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;
import java.nio.file.Path;

public class TemplatePath extends TemplatePrimitive<Path> implements DotHashAddressable {

    public TemplatePath(Path value) {
        super(value);
    }

    @Override
    public TemplateObject get(ProcessContext context, String name) {
        return switch (name) {
            case "size" -> new TemplateNumber(getValue().toFile().length());
            case "name" -> new TemplateString(getValue().getFileName().toString());
            case "parent" -> create(getValue().getParent());
            default -> throw new ProcessException("unsupported attribute: " + name);
        };
    }

    private TemplateObject create(Path path) {
        return path == null ? TemplateNull.NULL : new TemplatePath(path);
    }

}