You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2005/01/04 12:06:08 UTC

svn commit: r124095 - in cocoon/trunk/src/core: java/org/apache/cocoon/core/container/util test/org/apache/cocoon/core/container/util

Author: cziegeler
Date: Tue Jan  4 03:06:06 2005
New Revision: 124095

URL: http://svn.apache.org/viewcvs?view=rev&rev=124095
Log:
Add property helper
Added:
   cocoon/trunk/src/core/java/org/apache/cocoon/core/container/util/
   cocoon/trunk/src/core/java/org/apache/cocoon/core/container/util/PropertyHelper.java   (contents, props changed)
   cocoon/trunk/src/core/test/org/apache/cocoon/core/container/util/
   cocoon/trunk/src/core/test/org/apache/cocoon/core/container/util/PropertyHelperTestCase.java   (contents, props changed)

Added: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/util/PropertyHelper.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/container/util/PropertyHelper.java?view=auto&rev=124095
==============================================================================
--- (empty file)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/util/PropertyHelper.java	Tue Jan  4 03:06:06 2005
@@ -0,0 +1,92 @@
+/* 
+ * Copyright 2002-2004 The Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.core.container.util;
+
+/**
+ * Helper class for replacing property references with the value of the
+ * property
+ *
+ * @version CVS $Id: AbstractComponentHandler.java 123887 2005-01-02 15:12:01Z sylvain $
+ */
+
+public class PropertyHelper {
+
+    /**
+     * Replace all property references in the string with the current value
+     * and return it.
+     */
+    static String replace(String value) {
+        // quick test for null or no references
+        if ( value == null || value.indexOf("${") == -1 ) {
+            return value;
+        }
+        final StringBuffer buffer = new StringBuffer();
+        int prev = 0;
+        int pos;
+        
+        // search for the next instance of $ from the 'prev' position
+        while ((pos = value.indexOf("$", prev)) >= 0) {
+
+            // if there was any text before this, add it
+            if (pos > prev) {
+                buffer.append(value.substring(prev, pos));
+            }
+            
+            // if we are at the end of the string, end
+            if (pos == (value.length() - 1)) {
+                buffer.append("$");
+                prev = pos + 1;
+            } else if (value.charAt(pos + 1) != '{') {
+                // peek ahead to see if the next char is a property or not
+                // not a property: insert the char as a literal
+                buffer.append(value.substring(pos, pos + 2));
+                prev = pos + 2;
+
+            } else {
+                // start token found, check for end token
+                int endName = value.indexOf('}', pos);
+                if (endName == -1) {
+                    // no end token found, just append the rest
+                    buffer.append(value.substring(pos));
+                    prev = value.length();
+                } else {
+                    final String propertyName = value.substring(pos + 2, endName);
+                    String propertyValue = getProperty(propertyName);
+                    // compatibility fallback - if the value is null, just readd token
+                    if (propertyValue == null) {
+                        buffer.append("${");
+                        buffer.append(propertyName);
+                        buffer.append('}');
+                    } else {
+                        buffer.append(propertyValue);
+                    }
+                    prev = endName + 1;
+                }
+            }
+        }
+        // no more tokens found
+        // append the rest
+        if (prev < value.length()) {
+             buffer.append(value.substring(prev));
+        }
+        return buffer.toString();
+    }
+
+    static String getProperty(String name) {
+        return System.getProperty(name);    
+    }
+}

Added: cocoon/trunk/src/core/test/org/apache/cocoon/core/container/util/PropertyHelperTestCase.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/core/test/org/apache/cocoon/core/container/util/PropertyHelperTestCase.java?view=auto&rev=124095
==============================================================================
--- (empty file)
+++ cocoon/trunk/src/core/test/org/apache/cocoon/core/container/util/PropertyHelperTestCase.java	Tue Jan  4 03:06:06 2005
@@ -0,0 +1,41 @@
+/* 
+ * Copyright 2002-2004 The Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.core.container.util;
+
+import junit.framework.TestCase;
+
+/**
+ * Test cases for the {@link PropertyHelper} class.
+ *
+ * @version CVS $Id: AbstractComponentHandler.java 123887 2005-01-02 15:12:01Z sylvain $
+ */
+public class PropertyHelperTestCase extends TestCase {
+
+    public void testReplace() {
+        final String testA = "a simple string";
+        final String testB = "a simple string with a start token ${ somewhere";
+        final String testC = "and this is the } end token";
+        final String testD = "${this.does.not.exists}";
+        // some tests for not! replacing
+        assertEquals(PropertyHelper.replace(testA), testA);
+        assertEquals(PropertyHelper.replace(testB), testB);
+        assertEquals(PropertyHelper.replace(testC), testC);
+        assertEquals(PropertyHelper.replace(testD), testD);
+        // and finally we have something to replace
+        assertEquals(PropertyHelper.replace("${java.home}"), System.getProperty("java.home"));
+    }
+}