1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.model.path;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import java.io.File;
26
27 import org.apache.maven.model.ActivationFile;
28 import org.apache.maven.model.profile.ProfileActivationContext;
29 import org.codehaus.plexus.interpolation.AbstractValueSource;
30 import org.codehaus.plexus.interpolation.InterpolationException;
31 import org.codehaus.plexus.interpolation.MapBasedValueSource;
32 import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
33
34
35
36
37
38
39 @Named
40 @Singleton
41 public class ProfileActivationFilePathInterpolator {
42
43 @Inject
44 private PathTranslator pathTranslator;
45
46 public ProfileActivationFilePathInterpolator setPathTranslator(PathTranslator pathTranslator) {
47 this.pathTranslator = pathTranslator;
48 return this;
49 }
50
51
52
53
54
55
56 public String interpolate(String path, ProfileActivationContext context) throws InterpolationException {
57 if (path == null) {
58 return null;
59 }
60
61 RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
62
63 final File basedir = context.getProjectDirectory();
64
65 if (basedir != null) {
66 interpolator.addValueSource(new AbstractValueSource(false) {
67 @Override
68 public Object getValue(String expression) {
69
70
71
72
73 if ("basedir".equals(expression)) {
74 return basedir.getAbsolutePath();
75 }
76 return null;
77 }
78 });
79 } else if (path.contains("${basedir}")) {
80 return null;
81 }
82
83 interpolator.addValueSource(new MapBasedValueSource(context.getProjectProperties()));
84
85 interpolator.addValueSource(new MapBasedValueSource(context.getUserProperties()));
86
87 interpolator.addValueSource(new MapBasedValueSource(context.getSystemProperties()));
88
89 String absolutePath = interpolator.interpolate(path, "");
90
91 return pathTranslator.alignToBaseDirectory(absolutePath, basedir);
92 }
93 }