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());
  }
}