1 package org.apache.maven.plugin.assembly.interpolation;
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.plugin.assembly.AssemblerConfigurationSource;
23 import org.apache.maven.plugin.assembly.io.DefaultAssemblyReader;
24 import org.apache.maven.plugin.assembly.utils.InterpolationConstants;
25 import org.apache.maven.project.MavenProject;
26 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
27 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
28 import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
29 import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator;
30 import org.codehaus.plexus.interpolation.fixed.InterpolationState;
31
32 import java.io.File;
33
34
35
36
37 public class AssemblyExpressionEvaluator
38 implements ExpressionEvaluator
39 {
40
41 private final AssemblerConfigurationSource configSource;
42
43 private final FixedStringSearchInterpolator interpolator;
44
45 private final PrefixAwareRecursionInterceptor interceptor;
46
47 public AssemblyExpressionEvaluator( AssemblerConfigurationSource configSource )
48 {
49 this.configSource = configSource;
50
51 final MavenProject project = configSource.getProject();
52 final FixedStringSearchInterpolator projectInterpolator =
53 DefaultAssemblyReader.createProjectInterpolator( project );
54 interpolator = AssemblyInterpolator.fullInterpolator( project, projectInterpolator, configSource );
55 interceptor = new PrefixAwareRecursionInterceptor( InterpolationConstants.PROJECT_PREFIXES, true );
56 }
57
58 public File alignToBaseDirectory( File f )
59 {
60 String basePath = configSource.getBasedir().getAbsolutePath();
61 String path = f.getPath();
62
63 if ( !f.isAbsolute() && !path.startsWith( basePath ) )
64 {
65 return new File( configSource.getBasedir(), path );
66 }
67 else
68 {
69 return f;
70 }
71 }
72
73 public Object evaluate( String expression )
74 throws ExpressionEvaluationException
75 {
76 InterpolationState is = new InterpolationState();
77 is.setRecursionInterceptor( interceptor );
78 return interpolator.interpolate( expression, is );
79 }
80
81 }