]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.jcr/src/org/argeo/jcr/fs/JcrBasicfileAttributes.java
Improve logging
[lgpl/argeo-commons.git] / org.argeo.jcr / src / org / argeo / jcr / fs / JcrBasicfileAttributes.java
1 package org.argeo.jcr.fs;
2
3 import java.nio.file.attribute.FileTime;
4 import java.time.Instant;
5
6 import javax.jcr.Binary;
7 import javax.jcr.Node;
8 import javax.jcr.Property;
9 import javax.jcr.RepositoryException;
10 import javax.jcr.nodetype.NodeType;
11
12 import org.argeo.jcr.JcrUtils;
13
14 public class JcrBasicfileAttributes implements NodeFileAttributes {
15 private final Node node;
16
17 private FileTime EPOCH = FileTime.fromMillis(0);
18
19 public JcrBasicfileAttributes(Node node) {
20 if (node == null)
21 throw new JcrFsException("Node underlying the attributes cannot be null");
22 this.node = node;
23 }
24
25 @Override
26 public FileTime lastModifiedTime() {
27 try {
28 if (node.isNodeType(NodeType.MIX_LAST_MODIFIED)) {
29 Instant instant = node.getProperty(Property.JCR_LAST_MODIFIED).getDate().toInstant();
30 return FileTime.from(instant);
31 }
32 return EPOCH;
33 } catch (RepositoryException e) {
34 throw new JcrFsException("Cannot get last modified time", e);
35 }
36 }
37
38 @Override
39 public FileTime lastAccessTime() {
40 return lastModifiedTime();
41 }
42
43 @Override
44 public FileTime creationTime() {
45 try {
46 if (node.isNodeType(NodeType.MIX_CREATED)) {
47 Instant instant = node.getProperty(Property.JCR_CREATED).getDate().toInstant();
48 return FileTime.from(instant);
49 }
50 return EPOCH;
51 } catch (RepositoryException e) {
52 throw new JcrFsException("Cannot get creation time", e);
53 }
54 }
55
56 @Override
57 public boolean isRegularFile() {
58 try {
59 return node.isNodeType(NodeType.NT_FILE);
60 } catch (RepositoryException e) {
61 throw new JcrFsException("Cannot check if regular file", e);
62 }
63 }
64
65 @Override
66 public boolean isDirectory() {
67 try {
68 if (node.isNodeType(NodeType.NT_FOLDER))
69 return true;
70 // all other non file nodes
71 return !(node.isNodeType(NodeType.NT_FILE) || node.isNodeType(NodeType.NT_LINKED_FILE));
72 } catch (RepositoryException e) {
73 throw new JcrFsException("Cannot check if directory", e);
74 }
75 }
76
77 @Override
78 public boolean isSymbolicLink() {
79 try {
80 return node.isNodeType(NodeType.NT_LINKED_FILE);
81 } catch (RepositoryException e) {
82 throw new JcrFsException("Cannot check if linked file", e);
83 }
84 }
85
86 @Override
87 public boolean isOther() {
88 return !(isDirectory() || isRegularFile() || isSymbolicLink());
89 }
90
91 @Override
92 public long size() {
93 if (isRegularFile()) {
94 Binary binary = null;
95 try {
96 binary = node.getNode(Property.JCR_CONTENT).getProperty(Property.JCR_DATA).getBinary();
97 return binary.getSize();
98 } catch (RepositoryException e) {
99 throw new JcrFsException("Cannot check size", e);
100 } finally {
101 JcrUtils.closeQuietly(binary);
102 }
103 }
104 return -1;
105 }
106
107 @Override
108 public Object fileKey() {
109 return null;
110 }
111
112 @Override
113 public Node getNode() {
114 return node;
115 }
116
117 }