1 package org.apache.maven.shared.filtering;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.execution.MavenSession;
23 import org.apache.maven.model.Resource;
24 import org.apache.maven.project.MavenProject;
25 import org.codehaus.plexus.interpolation.Interpolator;
26 import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
27 import org.codehaus.plexus.interpolation.StringSearchInterpolator;
28 import org.codehaus.plexus.interpolation.ValueSource;
29 import org.apache.maven.shared.utils.io.FileUtils;
30 import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
31
32 import java.io.File;
33 import java.io.Reader;
34 import java.util.ArrayList;
35 import java.util.List;
36
37
38
39
40
41
42
43 public class MavenResourcesExecution
44 extends AbstractMavenFilteringRequest
45 {
46
47 private List<Resource> resources;
48
49 private File outputDirectory;
50
51 private List<String> nonFilteredFileExtensions;
52
53 private List<FileUtils.FilterWrapper> filterWrappers;
54
55 private File resourcesBaseDirectory;
56
57 private boolean useDefaultFilterWrappers = false;
58
59 private boolean filterFilenames = false;
60
61
62
63
64
65
66
67 private boolean overwrite = false;
68
69
70
71
72
73
74 private boolean includeEmptyDirs = false;
75
76
77
78
79
80
81 private boolean supportMultiLineFiltering;
82
83 public MavenResourcesExecution()
84 {
85
86 }
87
88
89
90
91
92
93
94
95
96
97
98
99 public MavenResourcesExecution( List<Resource> resources, File outputDirectory, MavenProject mavenProject,
100 String encoding, List<String> fileFilters, List<String> nonFilteredFileExtensions,
101 MavenSession mavenSession )
102 {
103 super( mavenProject, fileFilters, encoding, mavenSession );
104 this.resources = resources;
105 this.outputDirectory = outputDirectory;
106 this.nonFilteredFileExtensions = nonFilteredFileExtensions;
107 this.useDefaultFilterWrappers = true;
108 this.resourcesBaseDirectory = mavenProject.getBasedir();
109 }
110
111 public MavenResourcesExecution( List<Resource> resources, File outputDirectory, String encoding,
112 List<FileUtils.FilterWrapper> filterWrappers, File resourcesBaseDirectory,
113 List<String> nonFilteredFileExtensions )
114 {
115 this();
116 this.resources = resources;
117 this.outputDirectory = outputDirectory;
118 this.filterWrappers = filterWrappers;
119 this.nonFilteredFileExtensions = nonFilteredFileExtensions;
120 this.resourcesBaseDirectory = resourcesBaseDirectory;
121 this.useDefaultFilterWrappers = false;
122 setEncoding( encoding );
123 }
124
125
126
127
128
129 public List<Resource> getResources()
130 {
131 return resources;
132 }
133
134
135
136
137 public void setResources( List<Resource> resources )
138 {
139 this.resources = resources;
140 }
141
142 public File getOutputDirectory()
143 {
144 return outputDirectory;
145 }
146
147 public void setOutputDirectory( File outputDirectory )
148 {
149 this.outputDirectory = outputDirectory;
150 }
151
152
153
154
155 public List<String> getNonFilteredFileExtensions()
156 {
157 return nonFilteredFileExtensions;
158 }
159
160
161
162
163 public void setNonFilteredFileExtensions( List<String> nonFilteredFileExtensions )
164 {
165 this.nonFilteredFileExtensions = nonFilteredFileExtensions;
166 }
167
168
169
170
171 public List<FileUtils.FilterWrapper> getFilterWrappers()
172 {
173 return filterWrappers;
174 }
175
176
177
178
179 public void setFilterWrappers( List<FileUtils.FilterWrapper> filterWrappers )
180 {
181 this.filterWrappers = filterWrappers;
182 }
183
184 public void addFilterWrapper( FilterWrapper filterWrapper )
185 {
186 if ( this.filterWrappers == null )
187 {
188 this.filterWrappers = new ArrayList<FilterWrapper>();
189 }
190 this.filterWrappers.add( filterWrapper );
191 }
192
193
194
195
196
197
198
199
200 public void addFilerWrapper( final ValueSource valueSource )
201 {
202 addFilterWrapper( new FileUtils.FilterWrapper()
203 {
204 public Reader getReader( Reader reader )
205 {
206 Interpolator propertiesInterpolator = new RegexBasedInterpolator();
207 propertiesInterpolator.addValueSource( valueSource );
208 return new InterpolatorFilterReaderLineEnding( reader, propertiesInterpolator,
209 InterpolatorFilterReaderLineEnding.DEFAULT_BEGIN_TOKEN,
210 InterpolatorFilterReaderLineEnding.DEFAULT_END_TOKEN,
211 false );
212 }
213 } );
214 }
215
216
217
218
219
220
221
222
223
224 public void addFilerWrapper( final ValueSource valueSource, final String startRegExp, final String endRegExp,
225 final String startToken, final String endToken )
226 {
227 addFilterWrapper( new FileUtils.FilterWrapper()
228 {
229 public Reader getReader( Reader reader )
230 {
231 Interpolator propertiesInterpolator = new RegexBasedInterpolator( startRegExp, endRegExp );
232 propertiesInterpolator.addValueSource( valueSource );
233 return new InterpolatorFilterReaderLineEnding( reader, propertiesInterpolator, startToken, endToken,
234 false );
235 }
236 } );
237 }
238
239
240
241
242
243
244
245
246
247 public void addFilerWrapperWithEscaping( final ValueSource valueSource, final String startExp, final String endExp,
248 final String escapeString )
249 {
250 addFilterWrapper( new FileUtils.FilterWrapper()
251 {
252 public Reader getReader( Reader reader )
253 {
254 StringSearchInterpolator propertiesInterpolator = new StringSearchInterpolator( startExp, endExp );
255 propertiesInterpolator.addValueSource( valueSource );
256 propertiesInterpolator.setEscapeString( escapeString );
257 InterpolatorFilterReaderLineEnding interpolatorFilterReader =
258 new InterpolatorFilterReaderLineEnding( reader, propertiesInterpolator, startExp, endExp, false );
259 interpolatorFilterReader.setInterpolateWithPrefixPattern( false );
260 return interpolatorFilterReader;
261 }
262 } );
263 }
264
265
266
267
268
269
270
271
272
273 public void addFilerWrapperWithEscaping( final ValueSource valueSource, final String startExp, final String endExp,
274 final String escapeString, final boolean supportMultiLineFiltering )
275 {
276 addFilterWrapper( new FileUtils.FilterWrapper()
277 {
278 public Reader getReader( Reader reader )
279 {
280 StringSearchInterpolator propertiesInterpolator = new StringSearchInterpolator( startExp, endExp );
281 propertiesInterpolator.addValueSource( valueSource );
282 propertiesInterpolator.setEscapeString( escapeString );
283 InterpolatorFilterReaderLineEnding interpolatorFilterReader =
284 new InterpolatorFilterReaderLineEnding( reader, propertiesInterpolator, startExp, endExp,
285 supportMultiLineFiltering );
286 interpolatorFilterReader.setInterpolateWithPrefixPattern( false );
287 return interpolatorFilterReader;
288 }
289 } );
290 }
291
292
293 public File getResourcesBaseDirectory()
294 {
295 return resourcesBaseDirectory;
296 }
297
298 public void setResourcesBaseDirectory( File resourcesBaseDirectory )
299 {
300 this.resourcesBaseDirectory = resourcesBaseDirectory;
301 }
302
303 public boolean isUseDefaultFilterWrappers()
304 {
305 return useDefaultFilterWrappers;
306 }
307
308 public void setUseDefaultFilterWrappers( boolean useDefaultFilterWrappers )
309 {
310 this.useDefaultFilterWrappers = useDefaultFilterWrappers;
311 }
312
313
314
315
316
317
318 public boolean isOverwrite()
319 {
320 return overwrite;
321 }
322
323
324
325
326
327
328
329 public void setOverwrite( boolean overwrite )
330 {
331 this.overwrite = overwrite;
332 }
333
334
335
336
337
338
339 public boolean isIncludeEmptyDirs()
340 {
341 return includeEmptyDirs;
342 }
343
344
345
346
347
348
349
350 public void setIncludeEmptyDirs( boolean includeEmptyDirs )
351 {
352 this.includeEmptyDirs = includeEmptyDirs;
353 }
354
355
356
357
358
359
360 public boolean isFilterFilenames()
361 {
362 return filterFilenames;
363 }
364
365
366
367
368
369
370 public void setFilterFilenames( boolean filterFilenames )
371 {
372 this.filterFilenames = filterFilenames;
373 }
374
375 public MavenResourcesExecution copyOf()
376 {
377 MavenResourcesExecution mre = new MavenResourcesExecution();
378 mre.setAdditionalProperties( mre.getAdditionalProperties() );
379 mre.setEncoding( mre.getEncoding() );
380 mre.setEscapedBackslashesInFilePath( mre.isEscapedBackslashesInFilePath() );
381 mre.setEscapeString( mre.getEscapeString() );
382 mre.setFileFilters( copyList( mre.getFileFilters() ) );
383 mre.setFilterWrappers( copyList( mre.getFilterWrappers() ) );
384 mre.setIncludeEmptyDirs( mre.isIncludeEmptyDirs() );
385 mre.setInjectProjectBuildFilters( mre.isInjectProjectBuildFilters() );
386 mre.setMavenProject( mre.getMavenProject() );
387 mre.setMavenSession( mre.getMavenSession() );
388 mre.setNonFilteredFileExtensions( copyList( mre.getNonFilteredFileExtensions() ) );
389 mre.setOutputDirectory( mre.getOutputDirectory() );
390 mre.setOverwrite( mre.isOverwrite() );
391 mre.setProjectStartExpressions( copyList( mre.getProjectStartExpressions() ) );
392 mre.setResources( copyList( mre.getResources() ) );
393 mre.setResourcesBaseDirectory( mre.getResourcesBaseDirectory() );
394 mre.setUseDefaultFilterWrappers( mre.isUseDefaultFilterWrappers() );
395 mre.setSupportMultiLineFiltering( mre.isSupportMultiLineFiltering() );
396 return mre;
397 }
398
399 private <T> List<T> copyList( List<T> lst )
400 {
401 if ( lst == null )
402 {
403 return null;
404 }
405 else if ( lst.isEmpty() )
406 {
407 return new ArrayList<T>();
408 }
409 else
410 {
411 return new ArrayList<T>( lst );
412 }
413 }
414
415 public boolean isSupportMultiLineFiltering()
416 {
417 return supportMultiLineFiltering;
418 }
419
420 public void setSupportMultiLineFiltering( boolean supportMultiLineFiltering )
421 {
422 this.supportMultiLineFiltering = supportMultiLineFiltering;
423 }
424 }