1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.maven.shared.release.util;
20
21 import java.util.Map;
22 import java.util.regex.Matcher;
23 import java.util.regex.Pattern;
24
25 /**
26 * @author <a href="mailto:mikhail_kolesnikov@outlook.com">Mikhail Kolesnikov</a>
27 */
28 public class MavenExpression {
29 /**
30 * Regular expression pattern matching Maven expressions (i.e. references to Maven properties).
31 * The first group selects the property name the expression refers to.
32 */
33 private static final Pattern EXPRESSION_PATTERN = Pattern.compile("\\$\\{(.+?)}");
34
35 private MavenExpression() {}
36
37 public static String evaluate(String expression, Map<?, ?> properties) {
38 StringBuilder result = new StringBuilder(expression);
39 Matcher matcher = EXPRESSION_PATTERN.matcher(result);
40 while (matcher.find()) {
41 String propertyName = matcher.group(1);
42 Object propertyValue = properties.get(propertyName);
43 result.replace(matcher.start(), matcher.end(), String.valueOf(propertyValue));
44 matcher.reset();
45 }
46 return result.toString();
47 }
48
49 /**
50 * Extracts the Maven property name from a given expression.
51 *
52 * @param expression the expression
53 * @return either {@code null} if value is no expression otherwise the property referenced in the expression
54 */
55 public static String extractPropertyFromExpression(String expression) {
56 Matcher matcher = EXPRESSION_PATTERN.matcher(expression);
57 if (!matcher.find()) {
58 return null;
59 }
60 return matcher.group(1);
61 }
62 }