+++ /dev/null
-package org.argeo.jcr.fs;
-
-import static javax.jcr.Property.JCR_CREATED;
-import static javax.jcr.Property.JCR_LAST_MODIFIED;
-
-import java.nio.file.attribute.FileTime;
-import java.time.Instant;
-
-import javax.jcr.Binary;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-
-import org.argeo.jcr.JcrUtils;
-
-public class JcrBasicfileAttributes implements NodeFileAttributes {
- private final Node node;
-
- private final static FileTime EPOCH = FileTime.fromMillis(0);
-
- public JcrBasicfileAttributes(Node node) {
- if (node == null)
- throw new JcrFsException("Node underlying the attributes cannot be null");
- this.node = node;
- }
-
- @Override
- public FileTime lastModifiedTime() {
- try {
- if (node.hasProperty(JCR_LAST_MODIFIED)) {
- Instant instant = node.getProperty(JCR_LAST_MODIFIED).getDate().toInstant();
- return FileTime.from(instant);
- } else if (node.hasProperty(JCR_CREATED)) {
- Instant instant = node.getProperty(JCR_CREATED).getDate().toInstant();
- return FileTime.from(instant);
- }
-// if (node.isNodeType(NodeType.MIX_LAST_MODIFIED)) {
-// Instant instant = node.getProperty(Property.JCR_LAST_MODIFIED).getDate().toInstant();
-// return FileTime.from(instant);
-// }
- return EPOCH;
- } catch (RepositoryException e) {
- throw new JcrFsException("Cannot get last modified time", e);
- }
- }
-
- @Override
- public FileTime lastAccessTime() {
- return lastModifiedTime();
- }
-
- @Override
- public FileTime creationTime() {
- try {
- if (node.hasProperty(JCR_CREATED)) {
- Instant instant = node.getProperty(JCR_CREATED).getDate().toInstant();
- return FileTime.from(instant);
- } else if (node.hasProperty(JCR_LAST_MODIFIED)) {
- Instant instant = node.getProperty(JCR_LAST_MODIFIED).getDate().toInstant();
- return FileTime.from(instant);
- }
-// if (node.isNodeType(NodeType.MIX_CREATED)) {
-// Instant instant = node.getProperty(JCR_CREATED).getDate().toInstant();
-// return FileTime.from(instant);
-// }
- return EPOCH;
- } catch (RepositoryException e) {
- throw new JcrFsException("Cannot get creation time", e);
- }
- }
-
- @Override
- public boolean isRegularFile() {
- try {
- return node.isNodeType(NodeType.NT_FILE);
- } catch (RepositoryException e) {
- throw new JcrFsException("Cannot check if regular file", e);
- }
- }
-
- @Override
- public boolean isDirectory() {
- try {
- if (node.isNodeType(NodeType.NT_FOLDER))
- return true;
- // all other non file nodes
- return !(node.isNodeType(NodeType.NT_FILE) || node.isNodeType(NodeType.NT_LINKED_FILE));
- } catch (RepositoryException e) {
- throw new JcrFsException("Cannot check if directory", e);
- }
- }
-
- @Override
- public boolean isSymbolicLink() {
- try {
- return node.isNodeType(NodeType.NT_LINKED_FILE);
- } catch (RepositoryException e) {
- throw new JcrFsException("Cannot check if linked file", e);
- }
- }
-
- @Override
- public boolean isOther() {
- return !(isDirectory() || isRegularFile() || isSymbolicLink());
- }
-
- @Override
- public long size() {
- if (isRegularFile()) {
- Binary binary = null;
- try {
- binary = node.getNode(Property.JCR_CONTENT).getProperty(Property.JCR_DATA).getBinary();
- return binary.getSize();
- } catch (RepositoryException e) {
- throw new JcrFsException("Cannot check size", e);
- } finally {
- JcrUtils.closeQuietly(binary);
- }
- }
- return -1;
- }
-
- @Override
- public Object fileKey() {
- try {
- return node.getIdentifier();
- } catch (RepositoryException e) {
- throw new JcrFsException("Cannot get identifier", e);
- }
- }
-
- @Override
- public Node getNode() {
- return node;
- }
-
-}