1 package org.apache.maven.script.ant;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.Collections;
24 import java.util.HashMap;
25 import java.util.Map;
26 import java.util.Set;
27
28 import org.apache.maven.artifact.Artifact;
29 import org.apache.maven.plugin.logging.Log;
30 import org.apache.maven.project.MavenProject;
31 import org.apache.tools.ant.PropertyHelper;
32 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
33 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
34 import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
35
36
37
38
39
40
41 public class AntPropertyHelper
42 extends PropertyHelper
43 {
44 private static final String DEPENDENCY_PREFIX = "maven.dependency.";
45 private Log log;
46 private ExpressionEvaluator exprEvaluator;
47 private MavenProject mavenProject;
48 private Map<String, String> artifactMap = new HashMap<String, String>();
49
50
51
52
53
54
55 public AntPropertyHelper( MavenProject project, Log l )
56 {
57 mavenProject = project;
58 log = l;
59 }
60
61
62
63
64
65
66 public AntPropertyHelper( ExpressionEvaluator exprEvaluator, Log l )
67 {
68 this( exprEvaluator, Collections.<Artifact>emptySet(), l );
69 }
70
71
72
73
74
75
76 public AntPropertyHelper( ExpressionEvaluator exprEvaluator, Set<Artifact> artifacts, Log l )
77 {
78 this.mavenProject = null;
79 this.exprEvaluator = exprEvaluator;
80 this.log = l;
81
82 for ( Artifact artifact : artifacts )
83 {
84 String key = DEPENDENCY_PREFIX + artifact.getGroupId() + "." + artifact.getArtifactId()
85 + ( artifact.getClassifier() != null ? "." + artifact.getClassifier() : "" )
86 + ( artifact.getType() != null ? "." + artifact.getType() : "" ) + ".path";
87
88 log.debug( "Storing: " + key + "=" + artifact.getFile().getPath() );
89
90 artifactMap.put( key, artifact.getFile().getPath() );
91 }
92 }
93
94
95
96
97 public synchronized Object getPropertyHook( String ns, String name, boolean user )
98 {
99 if ( log.isDebugEnabled() )
100 {
101 log.debug( "getProperty(ns=" + ns + ", name=" + name + ", user=" + user + ")" );
102 }
103
104
105 if ( mavenProject != null )
106 {
107 return getPropertyHook( ns, name, user, mavenProject );
108 }
109
110
111 Object val = null;
112
113 if ( name.startsWith( DEPENDENCY_PREFIX ) )
114 {
115 val = (String) artifactMap.get( name );
116 }
117
118 if ( val == null )
119 {
120 try
121 {
122 val = exprEvaluator.evaluate( "${" + name + "}" );
123 }
124 catch ( ExpressionEvaluationException e )
125 {
126 if ( log.isErrorEnabled() )
127 {
128 log.error( "Failed to evaluate expression", e );
129 }
130 }
131 }
132
133 if ( val == null )
134 {
135 val = super.getPropertyHook( ns, name, user );
136
137 if ( val == null )
138 {
139 val = System.getProperty( name.toString() );
140 }
141 }
142
143 return val;
144 }
145
146
147
148
149
150
151
152
153
154 private Object getPropertyHook( String ns, String name, boolean user, MavenProject mavenProject )
155 {
156 Object val = null;
157 try
158 {
159 if ( name.startsWith( DEPENDENCY_PREFIX ) )
160 {
161 val = (String) artifactMap.get( name );
162 }
163 else if ( name.startsWith( "project." ) )
164 {
165 val = ReflectionValueExtractor.evaluate(
166 name,
167 mavenProject,
168 true
169 );
170 }
171 else if ( name.equals( "basedir" ) )
172 {
173 val = ReflectionValueExtractor.evaluate(
174 "basedir.path",
175 mavenProject,
176 false
177 );
178 }
179 }
180 catch ( Exception e )
181 {
182 if ( log.isWarnEnabled() )
183 {
184 log.warn( "Error evaluating expression '" + name + "'", e );
185 }
186 }
187
188 if ( val == null )
189 {
190 val = super.getPropertyHook( ns, name, user );
191 if ( val == null )
192 {
193 val = System.getProperty( name.toString() );
194 }
195 }
196
197 if ( val instanceof File )
198 {
199 val = ( (File) val ).getAbsoluteFile();
200 }
201
202 return val;
203 }
204 }