1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.dhptech.maven.stripbom;
17
18 import static java.util.Arrays.asList;
19
20 import java.io.File;
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import org.codehaus.plexus.util.DirectoryScanner;
25
26
27
28
29 public final class SimpleScanner {
30
31 private final File basedir;
32 private final String[] included;
33 private final String[] excluded;
34
35 private DirectoryScanner scanner;
36
37 public SimpleScanner(File basedir, String[] included, String[] excluded, boolean useDefaultExcludes) {
38 this.basedir = basedir;
39 this.included = buildInclusions(included);
40 this.excluded = buildExclusions(useDefaultExcludes, excluded);
41 }
42
43 public String[] getSelectedFiles() {
44 scanIfNeeded();
45 return scanner.getIncludedFiles();
46 }
47
48 public File getBasedir() {
49 return basedir;
50 }
51
52 public String[] getIncluded() {
53 return included;
54 }
55
56 public String[] getExcluded() {
57 return excluded;
58 }
59
60 protected synchronized void scanIfNeeded() {
61 if (scanner == null) {
62 scanner = new DirectoryScanner();
63 scanner.setBasedir(basedir);
64 scanner.setIncludes(included);
65 scanner.setExcludes(excluded);
66 scanner.scan();
67 }
68 }
69
70 protected static String[] buildExclusions(boolean useDefaultExcludes, String... excludes) {
71 List<String> exclusions = new ArrayList<String>();
72 if (useDefaultExcludes) {
73 exclusions.addAll(asList(DEFAULT_EXCLUDES));
74 }
75 if (excludes != null && excludes.length > 0) {
76 exclusions.addAll(asList(excludes));
77 }
78 return exclusions.toArray(new String[exclusions.size()]);
79 }
80
81 protected static String[] buildInclusions(String... includes) {
82 return includes != null && includes.length > 0 ? includes : DEFAULT_INCLUDE;
83 }
84
85 static final String[] DEFAULT_INCLUDE = new String[] { "**" };
86
87 static final String[] DEFAULT_EXCLUDES = {
88
89 "**/*~", "**/#*#", "**/.#*",
90 "**/%*%",
91 "**/._*",
92 "**/.repository/**",
93
94
95 "**/CVS",
96 "**/CVS/**",
97 "**/.cvsignore",
98
99
100 "**/RCS",
101 "**/RCS/**",
102
103
104 "**/SCCS",
105 "**/SCCS/**",
106
107
108 "**/vssver.scc",
109
110
111 "**/.svn",
112 "**/.svn/**",
113
114
115 "**/.arch-ids",
116 "**/.arch-ids/**",
117
118
119 "**/.bzr",
120 "**/.bzr/**",
121
122
123 "**/.MySCMServerInfo",
124
125
126 "**/.DS_Store",
127
128
129 "**/.metadata",
130 "**/.metadata/**",
131
132
133 "**/.hg",
134 "**/.hg/**",
135
136
137 "**/.git",
138 "**/.git/**",
139
140
141 "**/BitKeeper", "**/BitKeeper/**", "**/ChangeSet",
142 "**/ChangeSet/**",
143
144
145 "**/_darcs", "**/_darcs/**", "**/.darcsrepo", "**/.darcsrepo/**", "**/-darcs-backup*",
146 "**/.darcs-temp-mail",
147
148
149 "**/target/**", "**/test-output/**", "**/release.properties", "**/dependency-reduced-pom.xml",
150
151
152 "**/cobertura.ser", "**/.clover/**",
153
154
155 "**/.classpath", "**/.project", "**/.settings/**",
156
157
158 "**/*.iml", "**/*.ipr", "**/*.iws",
159
160
161 "**/MANIFEST.MF",
162
163
164 "**/*.jpg", "**/*.png", "**/*.gif", "**/*.ico", "**/*.bmp", "**/*.tiff", "**/*.tif", "**/*.cr2",
165 "**/*.xcf",
166
167
168 "**/*.class", "**/*.exe",
169
170
171 "**/*.md5", "**/*.sha1",
172
173
174 "**/*.jar", "**/*.war", "**/*.zip", "**/*.rar", "**/*.tar", "**/*.tar.gz", "**/*.tar.bz2", "**/*.gz",
175
176
177 "**/*.xls",
178
179
180 "**/META-INF/services/**" };
181
182 }