1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.creadur.tentacles;
18
19 import java.io.File;
20 import java.io.FileFilter;
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.regex.Pattern;
24
25 import org.apache.creadur.tentacles.filter.Filters;
26
27 public class FileSystem {
28
29 private final Filters filters;
30
31 public FileSystem() {
32 this.filters = new Filters();
33 }
34
35 public List<File> legalDocumentsUndeclaredIn(final File contents) {
36 return collect(contents,
37 this.filters.legalDocumentsUndeclaredIn(contents));
38 }
39
40 public List<File> legalDocumentsDeclaredIn(final File contents) {
41 return collect(contents,
42 this.filters.legalDocumentsDeclaredIn(contents));
43 }
44
45 public List<File> collect(final File dir, final String regex) {
46 return collect(dir, Pattern.compile(regex));
47 }
48
49 private List<File> collect(final File dir, final Pattern pattern) {
50 return collect(dir, file -> pattern.matcher(file.getAbsolutePath()).matches());
51 }
52
53 public List<File> collect(final File dir, final FileFilter filter) {
54 final List<File> accepted = new ArrayList<>();
55 if (filter.accept(dir)) {
56 accepted.add(dir);
57 }
58
59 final File[] files = dir.listFiles();
60 if (files != null) {
61 for (final File file : files) {
62 accepted.addAll(collect(file, filter));
63 }
64 }
65
66 return accepted;
67 }
68
69 public void mkparent(final File file) {
70 mkdirs(file.getParentFile());
71 }
72
73 public void mkdirs(final File file) {
74
75 if (!file.exists()) {
76
77 final boolean success = file.mkdirs();
78 assert success : "mkdirs failed to create " + file;
79
80 return;
81 }
82
83 final boolean isDirectory = file.isDirectory();
84 assert isDirectory : "Not a directory: " + file;
85 }
86
87 public List<File> documentsFrom(final File repository) {
88 return collect(repository, this.filters.filesOnly());
89 }
90
91 public List<File> licensesFrom(final File directory) {
92 return collect(directory, this.filters.licensesOnly());
93 }
94
95 public List<File> noticesOnly(final File directory) {
96 return collect(directory, this.filters.noticesOnly());
97 }
98
99 public List<File> licensesDeclaredIn(final File contents) {
100 return collect(contents, this.filters.licensesDeclaredIn(contents));
101 }
102
103 public List<File> noticesDeclaredIn(final File contents) {
104 return collect(contents, this.filters.noticesDeclaredIn(contents));
105 }
106
107 public List<File> archivesInPath(final File file,
108 final String fileRepositoryPathNameFilter) {
109 return collect(file, this.filters.archivesInPath(fileRepositoryPathNameFilter));
110 }
111 }