X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.jcr%2Fsrc%2Forg%2Fargeo%2Fjcr%2Ffs%2FJcrBasicfileAttributes.java;h=7c9711bf06ee0739019fe43b53f53218e7f9ca93;hb=46cc2039ac20703c484aa994b830a2da113f2c97;hp=e59abbc70a8a1fc1f65556c4208b7946eb2c5b96;hpb=d8037dd6a59ff5d38d7c7182a9ef6c26c8001a4f;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrBasicfileAttributes.java b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrBasicfileAttributes.java index e59abbc70..7c9711bf0 100644 --- a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrBasicfileAttributes.java +++ b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrBasicfileAttributes.java @@ -1,5 +1,8 @@ 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; @@ -14,19 +17,28 @@ import org.argeo.jcr.JcrUtils; public class JcrBasicfileAttributes implements NodeFileAttributes { private final Node node; - private FileTime EPOCH = FileTime.fromMillis(0); + 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.isNodeType(NodeType.MIX_LAST_MODIFIED)) { - Instant instant = node.getProperty(Property.JCR_LAST_MODIFIED).getDate().toInstant(); + 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); @@ -41,10 +53,17 @@ public class JcrBasicfileAttributes implements NodeFileAttributes { @Override public FileTime creationTime() { try { - if (node.isNodeType(NodeType.MIX_CREATED)) { - Instant instant = node.getProperty(Property.JCR_CREATED).getDate().toInstant(); + 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); @@ -63,7 +82,10 @@ public class JcrBasicfileAttributes implements NodeFileAttributes { @Override public boolean isDirectory() { try { - return node.isNodeType(NodeType.NT_FOLDER); + 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); } @@ -88,7 +110,7 @@ public class JcrBasicfileAttributes implements NodeFileAttributes { if (isRegularFile()) { Binary binary = null; try { - binary = node.getNode(Property.JCR_DATA).getProperty(Property.JCR_CONTENT).getBinary(); + binary = node.getNode(Property.JCR_CONTENT).getProperty(Property.JCR_DATA).getBinary(); return binary.getSize(); } catch (RepositoryException e) { throw new JcrFsException("Cannot check size", e); @@ -101,7 +123,11 @@ public class JcrBasicfileAttributes implements NodeFileAttributes { @Override public Object fileKey() { - return null; + try { + return node.getIdentifier(); + } catch (RepositoryException e) { + throw new JcrFsException("Cannot get identifier", e); + } } @Override