1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.codehaus.plexus.archiver.diags;
20
21 import javax.annotation.Nonnull;
22
23 import java.io.File;
24 import java.io.IOException;
25 import java.nio.charset.Charset;
26 import java.nio.file.attribute.FileTime;
27 import java.util.ArrayList;
28 import java.util.Comparator;
29 import java.util.Date;
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
33
34 import org.codehaus.plexus.archiver.ArchiveEntry;
35 import org.codehaus.plexus.archiver.ArchivedFileSet;
36 import org.codehaus.plexus.archiver.Archiver;
37 import org.codehaus.plexus.archiver.ArchiverException;
38 import org.codehaus.plexus.archiver.FileSet;
39 import org.codehaus.plexus.archiver.ResourceIterator;
40 import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributes;
41 import org.codehaus.plexus.components.io.resources.PlexusIoResource;
42 import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection;
43 import org.codehaus.plexus.util.StringUtils;
44
45
46
47
48 public class TrackingArchiver implements Archiver {
49
50 private File destFile;
51
52 public final List<Addition> added = new ArrayList<>();
53
54 private boolean useJvmChmod;
55
56 private boolean ignorePermissions;
57
58 private FileTime lastModifiedTime;
59
60 private Comparator<String> filenameComparator;
61
62 @Override
63 public void createArchive() throws ArchiverException, IOException {}
64
65 @Override
66 public void addDirectory(final @Nonnull File directory) throws ArchiverException {
67 added.add(new Addition(directory, null, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
68 }
69
70 @Override
71 @Deprecated
72 public void addDirectory(final @Nonnull File directory, final String prefix) throws ArchiverException {
73 added.add(new Addition(directory, prefix, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
74 }
75
76 @Override
77 @Deprecated
78 public void addDirectory(final @Nonnull File directory, final String[] includes, final String[] excludes)
79 throws ArchiverException {
80 added.add(new Addition(directory, null, includes, excludes, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
81 }
82
83 @Override
84 @Deprecated
85 public void addDirectory(
86 final @Nonnull File directory, final String prefix, final String[] includes, final String[] excludes)
87 throws ArchiverException {
88 added.add(new Addition(directory, prefix, includes, excludes, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
89 }
90
91 @Override
92 public void addFileSet(final @Nonnull FileSet fileSet) throws ArchiverException {
93 added.add(new Addition(fileSet, null, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
94 }
95
96 @Override
97 public void addFile(final @Nonnull File inputFile, final @Nonnull String destFileName) throws ArchiverException {
98 added.add(new Addition(inputFile, destFileName, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
99 }
100
101 @Override
102 public void addFile(final @Nonnull File inputFile, final @Nonnull String destFileName, final int permissions)
103 throws ArchiverException {
104 added.add(new Addition(inputFile, destFileName, null, null, permissions));
105 }
106
107 @Override
108 public void addArchivedFileSet(final @Nonnull File archiveFile) throws ArchiverException {
109 added.add(new Addition(archiveFile, null, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
110 }
111
112 @Override
113 @Deprecated
114 public void addArchivedFileSet(final @Nonnull File archiveFile, final String prefix) throws ArchiverException {
115 added.add(new Addition(archiveFile, prefix, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
116 }
117
118 @Override
119 public void addSymlink(String s, String s2) throws ArchiverException {
120 added.add(new Addition(s, null, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
121 }
122
123 @Override
124 public void addSymlink(String s, int i, String s2) throws ArchiverException {
125 added.add(new Addition(s, null, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
126 }
127
128 @Override
129 @Deprecated
130 public void addArchivedFileSet(final File archiveFile, final String[] includes, final String[] excludes)
131 throws ArchiverException {
132 added.add(new Addition(archiveFile, null, includes, excludes, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
133 }
134
135 @Override
136 @Deprecated
137 public void addArchivedFileSet(
138 final @Nonnull File archiveFile, final String prefix, final String[] includes, final String[] excludes)
139 throws ArchiverException {
140 added.add(new Addition(archiveFile, prefix, includes, excludes, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
141 }
142
143 @Override
144 public void addArchivedFileSet(final ArchivedFileSet fileSet) throws ArchiverException {
145 added.add(new Addition(fileSet, null, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
146 }
147
148 @Override
149 public void addArchivedFileSet(final ArchivedFileSet fileSet, Charset charset) throws ArchiverException {
150 added.add(new Addition(fileSet, null, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
151 }
152
153 @Override
154 public void addResource(final PlexusIoResource resource, final String destFileName, final int permissions)
155 throws ArchiverException {
156 added.add(new Addition(resource, destFileName, null, null, permissions));
157 }
158
159 @Override
160 public void addResources(final PlexusIoResourceCollection resources) throws ArchiverException {
161 added.add(new Addition(resources, null, null, null, PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE));
162 }
163
164 @Override
165 public File getDestFile() {
166 return destFile;
167 }
168
169 @Override
170 public void setDestFile(final File destFile) {
171 this.destFile = destFile;
172 }
173
174 @Override
175 public void setFileMode(final int mode) {}
176
177 @Override
178 public int getFileMode() {
179 return Integer.parseInt("0644", 8);
180 }
181
182 @Override
183 public int getOverrideFileMode() {
184 return Integer.parseInt("0644", 8);
185 }
186
187 @Override
188 public void setDefaultFileMode(final int mode) {}
189
190 @Override
191 public int getDefaultFileMode() {
192 return Integer.parseInt("0644", 8);
193 }
194
195 @Override
196 public void setDirectoryMode(final int mode) {}
197
198 @Override
199 public int getDirectoryMode() {
200 return Integer.parseInt("0755", 8);
201 }
202
203 @Override
204 public int getOverrideDirectoryMode() {
205 return Integer.parseInt("0755", 8);
206 }
207
208 @Override
209 public void setDefaultDirectoryMode(final int mode) {}
210
211 @Override
212 public int getDefaultDirectoryMode() {
213 return Integer.parseInt("0755", 8);
214 }
215
216 @Override
217 public boolean getIncludeEmptyDirs() {
218 return false;
219 }
220
221 @Override
222 public void setIncludeEmptyDirs(final boolean includeEmptyDirs) {}
223
224 @Override
225 public void setDotFileDirectory(final File dotFileDirectory) {}
226
227 public @Nonnull @Override ResourceIterator getResources() throws ArchiverException {
228 throw new RuntimeException("Not implemented");
229 }
230
231 @Override
232 @Deprecated
233 public Map<String, ArchiveEntry> getFiles() {
234 return new HashMap<>();
235 }
236
237 @Override
238 public boolean isForced() {
239 return false;
240 }
241
242 @Override
243 public void setForced(final boolean forced) {}
244
245 @Override
246 public boolean isSupportingForced() {
247 return true;
248 }
249
250 @Override
251 public String getDuplicateBehavior() {
252 return null;
253 }
254
255 @Override
256 public void setDuplicateBehavior(final String duplicate) {}
257
258 public class Addition {
259
260
261
262
263
264
265 @Override
266 public String toString() {
267 return "Addition (\n resource= " + resource + "\n directory= " + directory + "\n destination= "
268 + destination + "\n permissions= " + permissions + "\n includes= "
269 + (includes == null ? "-none-" : StringUtils.join(includes, ", "))
270 + "\n excludes= "
271 + (excludes == null ? "-none-" : StringUtils.join(excludes, ", ")) + "\n)";
272 }
273
274 public final Object resource;
275
276 public final File directory;
277
278 public final String destination;
279
280 public final int permissions;
281
282 public final String[] includes;
283
284 public final String[] excludes;
285
286 public Addition(
287 final Object resource,
288 final String destination,
289 final String[] includes,
290 final String[] excludes,
291 final int permissions) {
292 this.resource = resource;
293 if (resource instanceof FileSet) {
294 final FileSet fs = (FileSet) resource;
295 directory = fs.getDirectory();
296 this.destination = fs.getPrefix();
297 this.includes = fs.getIncludes();
298 this.excludes = fs.getExcludes();
299 this.permissions = permissions;
300 } else {
301 if (resource instanceof File && ((File) resource).isDirectory()) {
302 directory = (File) resource;
303 } else {
304 directory = null;
305 }
306
307 this.destination = destination;
308 this.includes = includes;
309 this.excludes = excludes;
310 this.permissions = permissions;
311 }
312 }
313 }
314
315 @Override
316 @Deprecated
317 public boolean isUseJvmChmod() {
318 return useJvmChmod;
319 }
320
321 @Override
322 @Deprecated
323 public void setUseJvmChmod(final boolean useJvmChmod) {
324 this.useJvmChmod = useJvmChmod;
325 }
326
327 @Override
328 public boolean isIgnorePermissions() {
329 return ignorePermissions;
330 }
331
332 @Override
333 public void setIgnorePermissions(final boolean ignorePermissions) {
334 this.ignorePermissions = ignorePermissions;
335 }
336
337
338
339
340 @Override
341 @Deprecated
342 public void setLastModifiedDate(final Date lastModifiedDate) {
343 this.lastModifiedTime = lastModifiedDate != null ? FileTime.fromMillis(lastModifiedDate.getTime()) : null;
344 }
345
346
347
348
349 @Override
350 @Deprecated
351 public Date getLastModifiedDate() {
352 return lastModifiedTime != null ? new Date(lastModifiedTime.toMillis()) : null;
353 }
354
355 @Override
356 public void setLastModifiedTime(final FileTime lastModifiedTime) {
357 this.lastModifiedTime = lastModifiedTime;
358 }
359
360 @Override
361 public FileTime getLastModifiedTime() {
362 return lastModifiedTime;
363 }
364
365 @Override
366 public void setFilenameComparator(final Comparator<String> filenameComparator) {
367 this.filenameComparator = filenameComparator;
368 }
369
370 public Comparator<String> getFilenameComparator() {
371 return filenameComparator;
372 }
373
374 @Override
375 public void setOverrideUid(int uid) {}
376
377 @Override
378 public void setOverrideUserName(String userName) {}
379
380 @Override
381 public int getOverrideUid() {
382 return 0;
383 }
384
385 @Override
386 public String getOverrideUserName() {
387 return null;
388 }
389
390 @Override
391 public void setOverrideGid(int gid) {}
392
393 @Override
394 public void setOverrideGroupName(String groupName) {}
395
396 @Override
397 public int getOverrideGid() {
398 return 0;
399 }
400
401 @Override
402 public String getOverrideGroupName() {
403 return null;
404 }
405
406 @Override
407 public void setUmask(int umask) {}
408
409 @Override
410 public int getUmask() {
411 return 0;
412 }
413
414
415
416
417 @Override
418 @Deprecated
419 public void configureReproducible(Date lastModifiedDate) {}
420
421 @Override
422 public void configureReproducibleBuild(FileTime lastModifiedTime) {}
423 }