]> source.dussan.org Git - archiva.git/blob
764c7302e54f768d47e06327553df6710f5b47ee
[archiva.git] /
1 package org.apache.maven.archiva.repository.project.filters;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.maven.archiva.model.ArchivaProjectModel;
23 import org.apache.maven.archiva.model.Dependency;
24 import org.apache.maven.archiva.repository.project.ProjectModelException;
25 import org.codehaus.plexus.evaluator.DefaultExpressionEvaluator;
26 import org.codehaus.plexus.evaluator.EvaluatorException;
27 import org.codehaus.plexus.evaluator.ExpressionEvaluator;
28 import org.codehaus.plexus.evaluator.sources.PropertiesExpressionSource;
29 import org.codehaus.plexus.evaluator.sources.SystemPropertyExpressionSource;
30
31 import java.util.Iterator;
32 import java.util.List;
33
34 /**
35  * ProjectModelExpressionExpander 
36  *
37  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
38  * @version $Id$
39  * @plexus.component role="org.apache.maven.archiva.repository.project.ProjectModelExpressionExpander"
40  */
41 public class ProjectModelExpressionExpander
42 {
43     /**
44      * Find and Evaluate the Expressions present in the model.
45      * 
46      * @param model the model to correct.
47      */
48     public static void evaluateExpressions( ArchivaProjectModel model )
49         throws ProjectModelException
50     {
51         ExpressionEvaluator evaluator = new DefaultExpressionEvaluator();
52
53         if ( model.getProperties() != null )
54         {
55             PropertiesExpressionSource propsSource = new PropertiesExpressionSource();
56             propsSource.setProperties( model.getProperties() );
57             evaluator.addExpressionSource( propsSource );
58         }
59
60         evaluator.addExpressionSource( new SystemPropertyExpressionSource() );
61
62         try
63         {
64             model.setVersion( evaluator.expand( model.getVersion() ) );
65             model.setGroupId( evaluator.expand( model.getGroupId() ) );
66
67             evaluateExpressionsInDependencyList( evaluator, model.getDependencies() );
68             evaluateExpressionsInDependencyList( evaluator, model.getDependencyManagement() );
69         }
70         catch ( EvaluatorException e )
71         {
72             throw new ProjectModelException( "Unable to evaluate expression in model: " + e.getMessage(), e );
73         }
74     }
75
76     private static void evaluateExpressionsInDependencyList( ExpressionEvaluator evaluator, List dependencies )
77         throws EvaluatorException
78     {
79         if ( dependencies == null )
80         {
81             return;
82         }
83
84         Iterator it = dependencies.iterator();
85         while ( it.hasNext() )
86         {
87             Dependency dependency = (Dependency) it.next();
88             dependency.setGroupId( evaluator.expand( dependency.getGroupId() ) );
89             dependency.setVersion( evaluator.expand( dependency.getVersion() ) );
90         }
91     }
92 }