You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2006/01/26 11:44:06 UTC

svn commit: r372500 - in /incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit: core/config/ConfigurationParser.java util/Text.java

Author: tripod
Date: Thu Jan 26 02:44:01 2006
New Revision: 372500

URL: http://svn.apache.org/viewcvs?rev=372500&view=rev
Log:
- moving convenience method to commons.

Modified:
    incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/config/ConfigurationParser.java
    incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/Text.java

Modified: incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/config/ConfigurationParser.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/config/ConfigurationParser.java?rev=372500&r1=372499&r2=372500&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/config/ConfigurationParser.java (original)
+++ incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/config/ConfigurationParser.java Thu Jan 26 02:44:01 2006
@@ -23,6 +23,7 @@
 import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
+import org.apache.jackrabbit.util.Text;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -515,32 +516,11 @@
      */
     protected String replaceVariables(String value)
             throws ConfigurationException {
-        StringBuffer result = new StringBuffer();
-
-        // Value:
-        // +--+-+--------+-+-----------------+
-        // |  |p|-->     |q|-->              |
-        // +--+-+--------+-+-----------------+
-        int p = 0, q = value.indexOf("${");                // Find first ${
-        while (q != -1) {
-            result.append(value.substring(p, q));          // Text before ${
-            p = q;
-            q = value.indexOf("}", q + 2);                 // Find }
-            if (q != -1) {
-                String variable = value.substring(p + 2, q);
-                String replacement = variables.getProperty(variable);
-                if (replacement == null) {
-                    throw new ConfigurationException(
-                            "Replacement not found for ${" + variable + "}.");
-                }
-                result.append(replacement);
-                p = q + 1;
-                q = value.indexOf("${", p);                // Find next ${
-            }
+        try {
+            return Text.replaceVariables(variables, value, false);
+        } catch (IllegalArgumentException e) {
+            throw new ConfigurationException(e.getMessage());
         }
-        result.append(value.substring(p, value.length())); // Trailing text
-
-        return result.toString();
     }
 
     /**

Modified: incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/Text.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/Text.java?rev=372500&r1=372499&r2=372500&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/Text.java (original)
+++ incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/Text.java Thu Jan 26 02:44:01 2006
@@ -22,6 +22,7 @@
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.BitSet;
+import java.util.Properties;
 
 /**
  * This Class provides some text related utilities
@@ -164,7 +165,7 @@
      * Concatenates all strings in the string array using the specified delimiter.
      * @param arr
      * @param delim
-     * @return
+     * @return the concatenated string
      */
     public static String implode(String[] arr, String delim) {
         StringBuffer buf = new StringBuffer();
@@ -586,6 +587,56 @@
             level--;
         }
         return level >= 0 ? "" : path.substring(0, idx);
+    }
+
+    /**
+     * Performs variable replacement on the given string value.
+     * Each <code>${...}</code> sequence within the given value is replaced
+     * with the value of the named parser variable. If a variable is not found
+     * in the properties an IllegalArgumentException is thrown unless
+     * <code>ignoreMissing</code> is <code>true</code>. In the later case, the
+     * missing variable is replaced by the empty string.
+     *
+     * @param value         the original value
+     * @param ignoreMissing if <code>true</code>, missing variables are replaced
+     *                      by the empty string.
+     * @return value after variable replacements
+     * @throws IllegalArgumentException if the replacement of a referenced
+     *                                  variable is not found
+     */
+    public static String replaceVariables(Properties variables, String value,
+                                   boolean ignoreMissing)
+            throws IllegalArgumentException {
+        StringBuffer result = new StringBuffer();
+
+        // Value:
+        // +--+-+--------+-+-----------------+
+        // |  |p|-->     |q|-->              |
+        // +--+-+--------+-+-----------------+
+        int p = 0, q = value.indexOf("${");                // Find first ${
+        while (q != -1) {
+            result.append(value.substring(p, q));          // Text before ${
+            p = q;
+            q = value.indexOf("}", q + 2);                 // Find }
+            if (q != -1) {
+                String variable = value.substring(p + 2, q);
+                String replacement = variables.getProperty(variable);
+                if (replacement == null) {
+                    if (ignoreMissing) {
+                        replacement = "";
+                    } else {
+                        throw new IllegalArgumentException(
+                                "Replacement not found for ${" + variable + "}.");
+                    }
+                }
+                result.append(replacement);
+                p = q + 1;
+                q = value.indexOf("${", p);                // Find next ${
+            }
+        }
+        result.append(value.substring(p, value.length())); // Trailing text
+
+        return result.toString();
     }
 
 }