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( Path relativeFilePath, String createTimeString, FileTime createTime, String modTimeString, FileTime modTime, long size, String fileHash ) {
62
63
64 this.relativeFilePath = Objects.requireNonNull( relativeFilePath, "Relative file path context cannot be null" );
65
66 final Path namePath = relativeFilePath.getFileName();
67 this.fileName = ( namePath != null ) ? namePath.toString() : relativeFilePath.toString();
68
69 this.createTime = ( createTime != null ) ? FileTime.fromMillis( createTime.toMillis() ) : FileTime.fromMillis( 0 );
70 this.modTime = ( modTime != null ) ? FileTime.fromMillis( modTime.toMillis() ) : FileTime.fromMillis( 0 );
71 this.createTimeString = createTimeString;
72 this.modTimeString = modTimeString;
73 this.size = size;
74 this.fileHash = fileHash;
75 }
76
77
78
79
80
81
82
83
84 @Override
85 public int compareTo( FileAttributes o ) {
86 return Long.compare( this.size, o.getSize() );
87 }
88
89 @Override
90 public int hashCode() {
91 final int prime = 31;
92 int result = 1;
93 result = prime * result + ( ( createTimeString == null ) ? 0 : createTimeString.hashCode() );
94 result = prime * result + ( ( fileName == null ) ? 0 : fileName.hashCode() );
95 result = prime * result + ( ( relativeFilePath == null ) ? 0 : relativeFilePath.hashCode() );
96 result = prime * result + ( ( modTimeString == null ) ? 0 : modTimeString.hashCode() );
97 result = prime * result + (int) ( size ^ ( size >>> 32 ) );
98 return result;
99 }
100
101 @Override
102 public boolean equals( Object obj ) {
103 if( this == obj )
104 return true;
105 if( obj == null )
106 return false;
107 if( getClass() != obj.getClass() )
108 return false;
109 final FileAttributes other = (FileAttributes) obj;
110 if( fileHash == null ) {
111 if( other.fileHash != null )
112 return false;
113 }else if( !other.fileHash.equals( fileHash ) )
114 return false;
115 if( fileName == null ) {
116 if( other.fileName != null )
117 return false;
118 }else if( !fileName.equals( other.fileName ) )
119 return false;
120 if( relativeFilePath == null ) {
121 if( other.relativeFilePath != null )
122 return false;
123 }else if( !relativeFilePath.equals( other.relativeFilePath ) )
124 return false;
125 if( modTimeString == null ) {
126 if( other.modTimeString != null )
127 return false;
128 }else if( !modTimeString.equals( other.modTimeString ) )
129 return false;
130 if( size != other.size )
131 return false;
132 return true;
133 }
134
135 @Override
136 public String toString() {
137 return "FileAttributes [fileName=" + fileName + ", relativeFilePath=" + relativeFilePath + ", createTimeString="
138 + createTimeString + ", modTimeString=" + modTimeString + ", size=" + size + ", fileHash=" + fileHash
139 + ", createTime=" + createTime + ", modTime=" + modTime + "]";
140 }
141
142
143
144
145
146
147
148
149 public Path getRelativeFilePath() { return relativeFilePath; }
150
151
152
153
154
155
156 public String getModTimeString() { return modTimeString; }
157
158
159
160
161
162
163 public FileTime getModTime() { return FileTime.fromMillis( modTime.toMillis() ); }
164
165
166
167
168
169
170 public String getCreateTimeString() { return createTimeString; }
171
172
173
174
175
176
177 public long getSize() { return size; }
178
179
180
181
182
183
184 public String getFileHash() { return fileHash; }
185
186
187
188
189
190
191 public String getFileName() { return fileName; }
192
193
194
195
196
197
198 public FileTime getCreateTime() { return FileTime.fromMillis( createTime.toMillis() ); }
199 }