1 package com.xtremelabs.robolectric.util; 2 3 import java.util.Enumeration; 4 import java.util.Properties; 5 import java.util.regex.Matcher; 6 import java.util.regex.Pattern; 7 8 public class PropertiesHelper { 9 doSingleSubstitution(String originalValue, Properties properties)10 public static String doSingleSubstitution(String originalValue, Properties properties) { 11 if (originalValue == null) { 12 return null; 13 } 14 15 Pattern variablePattern = Pattern.compile("([^$]*)\\$\\{(.*?)\\}(.*)"); 16 17 String expandedValue = originalValue; 18 Matcher variableMatcher = variablePattern.matcher(expandedValue); 19 while (variableMatcher.matches()) { 20 String propertyName = variableMatcher.group(2); 21 String propertyValue = null; 22 if (properties != null) { 23 propertyValue = properties.getProperty(propertyName); 24 } 25 if (propertyValue == null) { 26 propertyValue = System.getProperty(propertyName); 27 } 28 if (propertyValue == null) { 29 return originalValue; 30 } 31 32 String sdkPathStart = variableMatcher.group(1); 33 String sdkPathEnd = variableMatcher.group(3); 34 expandedValue = sdkPathStart + propertyValue + sdkPathEnd; 35 variableMatcher = variablePattern.matcher(expandedValue); 36 } 37 38 return expandedValue; 39 } 40 doSubstitutions(Properties properties)41 public static void doSubstitutions(Properties properties) { 42 Enumeration<?> propertyNames = properties.propertyNames(); 43 while (propertyNames.hasMoreElements()) { 44 String propertyName = (String) propertyNames.nextElement(); 45 String propertyValue = properties.getProperty(propertyName); 46 String expandedPropertyValue = doSingleSubstitution(propertyValue, properties); 47 properties.setProperty(propertyName, expandedPropertyValue); 48 } 49 } 50 } 51