1 package de.spiritscorp.datasync.model;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import java.nio.file.Path;
24 import java.nio.file.attribute.FileTime;
25 import java.util.Objects;
26
27
28
29
30
31
32
33
34
35
36
37
38 public final class FileAttributes implements Comparable<FileAttributes> {
39
40 private final Path relativeFilePath;
41 private final String fileName;
42 private final String createTimeString;
43 private final String modTimeString;
44 private final long size;
45 private final String fileHash;
46 private final FileTime createTime;
47 private final FileTime modTime;
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public FileAttributes( final Path relativeFilePath, final String createTimeString, final FileTime createTime, final String modTimeString, final FileTime modTime, final long size,
62 final String fileHash ) {
63
64
65 this.relativeFilePath = Objects.requireNonNull( relativeFilePath, "Relative file path context cannot be null" );
66
67 final Path namePath = relativeFilePath.getFileName();
68 this.fileName = ( namePath != null ) ? namePath.toString() : relativeFilePath.toString();
69
70 this.createTime = ( createTime != null ) ? FileTime.fromMillis( createTime.toMillis() ) : FileTime.fromMillis( 0 );
71 this.modTime = ( modTime != null ) ? FileTime.fromMillis( modTime.toMillis() ) : FileTime.fromMillis( 0 );
72 this.createTimeString = createTimeString;
73 this.modTimeString = modTimeString;
74 this.size = size;
75 this.fileHash = fileHash;
76 }
77
78
79
80
81
82
83
84
85 @Override
86 public int compareTo( final FileAttributes o ) {
87 return Long.compare( this.size, o.getSize() );
88 }
89
90 @Override
91 public int hashCode() {
92 final int prime = 31;
93 int result = 1;
94 result = prime * result + ( ( createTimeString == null ) ? 0 : createTimeString.hashCode() );
95 result = prime * result + ( ( fileName == null ) ? 0 : fileName.hashCode() );
96 result = prime * result + ( ( relativeFilePath == null ) ? 0 : relativeFilePath.hashCode() );
97 result = prime * result + ( ( modTimeString == null ) ? 0 : modTimeString.hashCode() );
98 result = prime * result + (int) ( size ^ ( size >>> 32 ) );
99 return result;
100 }
101
102 @Override
103 public boolean equals( final Object obj ) {
104 if( this == obj )
105 return true;
106 if( obj == null )
107 return false;
108 if( getClass() != obj.getClass() )
109 return false;
110 final FileAttributes other = (FileAttributes) obj;
111 if( fileHash == null ) {
112 if( other.fileHash != null )
113 return false;
114 }else if( !other.fileHash.equals( fileHash ) )
115 return false;
116 if( fileName == null ) {
117 if( other.fileName != null )
118 return false;
119 }else if( !fileName.equals( other.fileName ) )
120 return false;
121 if( relativeFilePath == null ) {
122 if( other.relativeFilePath != null )
123 return false;
124 }else if( !relativeFilePath.equals( other.relativeFilePath ) )
125 return false;
126 if( modTimeString == null ) {
127 if( other.modTimeString != null )
128 return false;
129 }else if( !modTimeString.equals( other.modTimeString ) )
130 return false;
131 if( size != other.size )
132 return false;
133 return true;
134 }
135
136 @Override
137 public String toString() {
138 return "FileAttributes [fileName=" + fileName + ", relativeFilePath=" + relativeFilePath + ", createTimeString="
139 + createTimeString + ", modTimeString=" + modTimeString + ", size=" + size + ", fileHash=" + fileHash
140 + ", createTime=" + createTime + ", modTime=" + modTime + "]";
141 }
142
143
144
145
146
147
148
149
150 public Path getRelativeFilePath() { return relativeFilePath; }
151
152
153
154
155
156
157 public String getModTimeString() { return modTimeString; }
158
159
160
161
162
163
164 public FileTime getModTime() { return FileTime.fromMillis( modTime.toMillis() ); }
165
166
167
168
169
170
171 public String getCreateTimeString() { return createTimeString; }
172
173
174
175
176
177
178 public long getSize() { return size; }
179
180
181
182
183
184
185 public String getFileHash() { return fileHash; }
186
187
188
189
190
191
192 public String getFileName() { return fileName; }
193
194
195
196
197
198
199 public FileTime getCreateTime() { return FileTime.fromMillis( createTime.toMillis() ); }
200 }