1 package org.apache.maven.plugins.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.plugins.assembly.AssemblerConfigurationSource;
23 import org.apache.maven.plugins.assembly.io.DefaultAssemblyReader;
24 import org.apache.maven.plugins.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 @Override
59 public File alignToBaseDirectory( File f )
60 {
61 String basePath = configSource.getBasedir().getAbsolutePath();
62 String path = f.getPath();
63
64 if ( !f.isAbsolute() && !path.startsWith( basePath ) )
65 {
66 return new File( configSource.getBasedir(), path );
67 }
68 else
69 {
70 return f;
71 }
72 }
73
74 @Override
75 public Object evaluate( String expression )
76 throws ExpressionEvaluationException
77 {
78 InterpolationState is = new InterpolationState();
79 is.setRecursionInterceptor( interceptor );
80 return interpolator.interpolate( expression, is );
81 }
82
83 }