1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.rat.walker;
21
22 import java.io.File;
23 import java.io.FilenameFilter;
24 import java.util.Arrays;
25 import java.util.regex.Pattern;
26
27 import org.apache.rat.api.Document;
28 import org.apache.rat.api.RatException;
29 import org.apache.rat.document.impl.FileDocument;
30 import org.apache.rat.report.IReportable;
31 import org.apache.rat.report.RatReport;
32
33
34
35
36 public class DirectoryWalker extends Walker implements IReportable {
37
38 protected static final FileNameComparator COMPARATOR = new FileNameComparator();
39
40 public DirectoryWalker(File file) {
41 this(file, (FilenameFilter) null);
42 }
43
44
45
46
47
48
49
50 public DirectoryWalker(File file, final FilenameFilter filter) {
51 super(file.getPath(), file, filter);
52 }
53
54 public DirectoryWalker(File file, final Pattern ignoreNameRegex) {
55 super(file.getPath(), file, regexFilter(ignoreNameRegex));
56 }
57
58 public boolean isRestricted() {
59 return false;
60 }
61
62
63
64
65
66
67
68
69 private void processDirectory(RatReport report, final File file) throws RatException {
70 if (!isRestricted(file)) {
71 process(report, file);
72 }
73 }
74
75
76
77
78
79
80
81
82 public void run(final RatReport report) throws RatException {
83 process(report, file);
84 }
85
86
87
88
89
90
91
92
93 private void process(final RatReport report, final File file) throws RatException {
94 final File[] files = file.listFiles();
95 Arrays.sort(files, COMPARATOR);
96 if (files != null) {
97
98 processNonDirectories(report, files);
99 processDirectories(report, files);
100 }
101 }
102
103
104
105
106
107
108
109
110 private void processDirectories(final RatReport report, final File[] files) throws RatException {
111 for (int i = 0; i < files.length; i++) {
112 final File file = files[i];
113 if (!ignored(file)) {
114 if (file.isDirectory()) {
115 processDirectory(report, file);
116 }
117 }
118 }
119 }
120
121
122
123
124
125
126
127
128 private void processNonDirectories(final RatReport report, final File[] files) throws RatException {
129 for (int i = 0; i < files.length; i++) {
130 final File file = files[i];
131 if (!ignored(file)) {
132 if (!file.isDirectory()) {
133 report(report, file);
134 }
135 }
136 }
137 }
138
139
140
141
142
143
144
145
146 private void report(final RatReport report, File file) throws RatException {
147
148 Document document = new FileDocument(file);
149 report.report(document);
150
151 }
152 }