summaryrefslogtreecommitdiff
path: root/java/src/IceGrid/Utils.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceGrid/Utils.java')
-rwxr-xr-xjava/src/IceGrid/Utils.java132
1 files changed, 132 insertions, 0 deletions
diff --git a/java/src/IceGrid/Utils.java b/java/src/IceGrid/Utils.java
index e93d96e471b..bc0ba63323e 100755
--- a/java/src/IceGrid/Utils.java
+++ b/java/src/IceGrid/Utils.java
@@ -99,4 +99,136 @@ public class Utils
return stringify(stringMap.entrySet(), stringifier, separator, toolTipHolder);
}
+
+ //
+ // Same algorithm as DescriptorVariables::substituteImpl (see IceGrid C++)
+ //
+ static public String substituteVariables(String input, java.util.Map[] stringMaps)
+ {
+ if(stringMaps == null)
+ {
+ return input;
+ }
+
+ int beg = 0;
+ int end = 0;
+
+ while((beg = input.indexOf("${", beg)) != -1)
+ {
+ if(beg > 0 && input.charAt(beg - 1) == '$')
+ {
+ int escape = beg - 1;
+ while(escape > 0 && input.charAt(escape = 1) == '$')
+ {
+ --escape;
+ }
+
+ input = input.substring(0, escape) + input.substring(beg - (beg - escape) / 2);
+ if((beg - escape) % 2 != 0)
+ {
+ ++beg;
+ continue;
+ }
+ else
+ {
+ beg -= (beg - escape) / 2;
+ }
+ }
+
+ end = input.indexOf('}', beg);
+ if(end == -1)
+ {
+ //
+ // Malformed variable, can't subsitute anything else
+ //
+ return input;
+ }
+
+ String name = input.substring(beg + 2, end);
+
+ //
+ // Lookup name's value
+ //
+ String val = null;
+ for(int i = 0; i < stringMaps.length; ++i)
+ {
+ if(stringMaps[i] != null)
+ {
+ val = (String)stringMaps[i].get(name);
+ if(val != null)
+ {
+ break; // for
+ }
+ }
+ }
+
+ if(val != null)
+ {
+ input = input.substring(0, beg) + val + input.substring(end + 1);
+ beg += val.length();
+ }
+ else
+ {
+ //
+ // No substitution, keep ${name} in the result
+ //
+ ++beg;
+ }
+ }
+ return input;
+ }
+
+ static public String substituteVariables(String input, java.util.Map m1)
+ {
+ return substituteVariables(input,
+ new java.util.Map[]{m1});
+ }
+
+ static public String substituteVariables(String input, java.util.Map m1,
+ java.util.Map m2)
+ {
+ return substituteVariables(input,
+ new java.util.Map[]{m1, m2});
+ }
+
+ static public String substituteVariables(String input, java.util.Map m1,
+ java.util.Map m2, java.util.Map m3)
+ {
+ return substituteVariables(input,
+ new java.util.Map[]{m1, m2, m3});
+ }
+
+ static public java.util.Map substituteVariables(java.util.Map input,
+ java.util.Map[] stringMaps)
+ {
+ java.util.Map result = new java.util.HashMap();
+
+ java.util.Iterator p = input.entrySet().iterator();
+ while(p.hasNext())
+ {
+ java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
+ result.put(entry.getKey(),
+ substituteVariables((String)entry.getValue(), stringMaps));
+ }
+
+ return result;
+ }
+
+
+ static public java.util.Map substituteVariables(java.util.Map input,
+ java.util.Map m1,
+ java.util.Map m2)
+ {
+ return substituteVariables(input,
+ new java.util.Map[]{m1, m2});
+ }
+
+ static public java.util.Map substituteVariables(java.util.Map input,
+ java.util.Map m1,
+ java.util.Map m2,
+ java.util.Map m3)
+ {
+ return substituteVariables(input,
+ new java.util.Map[]{m1, m2, m3});
+ }
}