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