package org.argeo.cms.file.provider; import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.FileTime; import java.time.Instant; import org.argeo.api.acr.Content; import org.argeo.api.acr.DName; public class ContentAttributes implements BasicFileAttributes { // TODO optimise for FS-based content private final Content content; public ContentAttributes(Content content) { assert content != null; this.content = content; } @Override public FileTime lastModifiedTime() { Instant t = content.get(DName.getlastmodified, Instant.class).orElseThrow(); return FileTime.from(t); } @Override public FileTime lastAccessTime() { // TODO implement the concept in ACR ? return FileTime.fromMillis(0l); } @Override public FileTime creationTime() { Instant t = content.get(DName.getlastmodified, Instant.class).orElseThrow(); return FileTime.from(t); } @Override public boolean isRegularFile() { return isRegularFile(content); } @Override public boolean isDirectory() { return isDirectory(content); } @Override public boolean isSymbolicLink() { // TODO supports links in ACR return false; } @Override public boolean isOther() { return !isDirectory() && !isRegularFile() && !isSymbolicLink(); } @Override public long size() { long size = content.get(DName.getcontentlength, Long.class).orElse(-1l); return size; } @Override public Object fileKey() { // TODO check for UUIDs, etc. return null; } static boolean isDirectory(Content c) { return !isRegularFile(c); // return c.isContentClass(DName.collection); } static boolean isRegularFile(Content c) { // return c.containsKey(DName.getcontenttype.qName()); return !c.get(DName.getcontenttype, String.class).isEmpty(); } }