summaryrefslogtreecommitdiff
path: root/java/common/src
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-04-09 14:13:13 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-04-09 14:13:13 +0000
commit80aed0bbdb9467eee272a5d392b78d0bb5d014ed (patch)
treef43b54952b449b032b30ea2b1ca86fac7412c73f /java/common/src
parentfec20984c141da86b72c5fe9f395e1021e2fdd06 (diff)
downloadqpid-python-80aed0bbdb9467eee272a5d392b78d0bb5d014ed.tar.gz
QPID-5672 : [Java Broker] move variable interpolation to the configured object
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1585979 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/common/src')
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/Strings.java77
1 files changed, 64 insertions, 13 deletions
diff --git a/java/common/src/main/java/org/apache/qpid/util/Strings.java b/java/common/src/main/java/org/apache/qpid/util/Strings.java
index f2d51ccfde..3a1a619981 100644
--- a/java/common/src/main/java/org/apache/qpid/util/Strings.java
+++ b/java/common/src/main/java/org/apache/qpid/util/Strings.java
@@ -102,11 +102,39 @@ public final class Strings
private static final Pattern VAR = Pattern.compile("(?:\\$\\{([^\\}]*)\\})|(?:\\$(\\$))");
+ public static Resolver chain(Resolver... resolvers)
+ {
+ Resolver resolver;
+ if(resolvers.length == 0)
+ {
+ resolver = NULL_RESOLVER;
+ }
+ else
+ {
+ resolver = resolvers[resolvers.length - 1];
+ for (int i = resolvers.length - 2; i >= 0; i--)
+ {
+ resolver = new ChainedResolver(resolvers[i], resolver);
+ }
+ }
+ return resolver;
+ }
+
public static interface Resolver
{
String resolve(String variable);
}
+ private static final Resolver NULL_RESOLVER =
+ new Resolver()
+ {
+ @Override
+ public String resolve(final String variable)
+ {
+ return null;
+ }
+ };
+
public static class MapResolver implements Resolver
{
@@ -161,19 +189,28 @@ public final class Strings
}
}
- public static final Resolver SYSTEM_RESOLVER = new Resolver()
- {
- public String resolve(String variable)
+ public static final Resolver ENV_VARS_RESOLVER = new Resolver()
{
- String result = System.getProperty(variable);
- if (result == null)
+ @Override
+ public String resolve(final String variable)
{
- result = System.getenv(variable);
+ return System.getenv(variable);
}
- return result;
+ };
+
+
+ public static final Resolver JAVA_SYS_PROPS_RESOLVER = new Resolver()
+ {
+ @Override
+ public String resolve(final String variable)
+ {
+ return System.getProperty(variable);
}
};
+
+ public static final Resolver SYSTEM_RESOLVER = chain(JAVA_SYS_PROPS_RESOLVER, ENV_VARS_RESOLVER);
+
public static final String expand(String input)
{
return expand(input, SYSTEM_RESOLVER);
@@ -181,10 +218,14 @@ public final class Strings
public static final String expand(String input, Resolver resolver)
{
- return expand(input, resolver, new Stack<String>());
+ return expand(input, resolver, new Stack<String>(),true);
+ }
+ public static final String expand(String input, boolean failOnUnresolved, Resolver... resolvers)
+ {
+ return expand(input, chain(resolvers), new Stack<String>(), failOnUnresolved);
}
- private static final String expand(String input, Resolver resolver, Stack<String> stack)
+ private static final String expand(String input, Resolver resolver, Stack<String> stack, boolean failOnUnresolved)
{
Matcher m = VAR.matcher(input);
StringBuffer result = new StringBuffer();
@@ -205,14 +246,17 @@ public final class Strings
}
else
{
- m.appendReplacement(result, Matcher.quoteReplacement(resolve(var, resolver, stack)));
+ m.appendReplacement(result, Matcher.quoteReplacement(resolve(var, resolver, stack, failOnUnresolved)));
}
}
m.appendTail(result);
return result.toString();
}
- private static final String resolve(String var, Resolver resolver, Stack<String> stack)
+ private static final String resolve(String var,
+ Resolver resolver,
+ Stack<String> stack,
+ final boolean failOnUnresolved)
{
if (stack.contains(var))
{
@@ -224,13 +268,20 @@ public final class Strings
String result = resolver.resolve(var);
if (result == null)
{
- throw new IllegalArgumentException("no such variable: " + var);
+ if(failOnUnresolved)
+ {
+ throw new IllegalArgumentException("no such variable: " + var);
+ }
+ else
+ {
+ return "${"+var+"}";
+ }
}
stack.push(var);
try
{
- return expand(result, resolver, stack);
+ return expand(result, resolver, stack, failOnUnresolved);
}
finally
{