package au.com.dius.pact.provider.junit.sysprops; import java.util.StringJoiner; public class PactRunnerExpressionParser { public static final String START_EXPRESSION = "${"; public static final char END_EXPRESSION = '}'; private PactRunnerExpressionParser() {} public static String parseExpressions(final String value) { return parseExpressions(value, new SystemPropertyResolver()); } public static String parseExpressions(final String value, final ValueResolver valueResolver) { if (value.contains(START_EXPRESSION)) { return replaceExpressions(value, valueResolver); } return value; } private static String replaceExpressions(final String value, final ValueResolver valueResolver) { StringJoiner joiner = new StringJoiner(""); String buffer = value; int position = buffer.indexOf(START_EXPRESSION); while (position >= 0) { if (position > 0) { joiner.add(buffer.substring(0, position)); } int endPosition = buffer.indexOf(END_EXPRESSION, position); if (endPosition < 0) { throw new RuntimeException("Missing closing brace in expression string \"" + value + "]\""); } String expression = ""; if (endPosition - position > 2) { expression = valueResolver.resolveValue(buffer.substring(position + 2, endPosition)); } joiner.add(expression); buffer = buffer.substring(endPosition + 1); position = buffer.indexOf(START_EXPRESSION); } joiner.add(buffer); return joiner.toString(); } }