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