You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/11/16 08:23:35 UTC

svn commit: r1410217 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/util/FileUtil.java main/java/org/apache/camel/util/ObjectHelper.java test/java/org/apache/camel/util/FileUtilTest.java

Author: davsclaus
Date: Fri Nov 16 07:23:33 2012
New Revision: 1410217

URL: http://svn.apache.org/viewvc?rev=1410217&view=rev
Log:
CAMEL-5792: Fixed compactPath method to work with both Windows and Unix style paths. This fixes loading resources with validator component using unix styles on a windows platform etc.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java?rev=1410217&r1=1410216&r2=1410217&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java Fri Nov 16 07:23:33 2012
@@ -206,15 +206,26 @@ public final class FileUtil {
      * and uses OS specific file separators (eg {@link java.io.File#separator}).
      */
     public static String compactPath(String path) {
+        return compactPath(path, File.separatorChar);
+    }
+
+    /**
+     * Compacts a path by stacking it and reducing <tt>..</tt>,
+     * and uses the given separator.
+     */
+    public static String compactPath(String path, char separator) {
         if (path == null) {
             return null;
         }
         
         // only normalize if contains a path separator
-        if (path.indexOf(File.separator) == -1) {
+        if (path.indexOf('/') == -1 && path.indexOf('\\') == -1)  {
             return path;
         }
 
+        // need to normalize path before compacting
+        path = normalizePath(path);
+
         // preserve ending slash if given in input path
         boolean endsWithSlash = path.endsWith("/") || path.endsWith("\\");
 
@@ -222,11 +233,9 @@ public final class FileUtil {
         boolean startsWithSlash = path.startsWith("/") || path.startsWith("\\");
         
         Stack<String> stack = new Stack<String>();
-        
-        String separatorRegex = File.separator;
-        if (FileUtil.isWindows()) {
-            separatorRegex = "\\\\";
-        }
+
+        // separator can either be windows or unix style
+        String separatorRegex = "\\\\|/";
         String[] parts = path.split(separatorRegex);
         for (String part : parts) {
             if (part.equals("..") && !stack.isEmpty() && !"..".equals(stack.peek())) {
@@ -243,18 +252,18 @@ public final class FileUtil {
         StringBuilder sb = new StringBuilder();
         
         if (startsWithSlash) {
-            sb.append(File.separator);
+            sb.append(separator);
         }
         
         for (Iterator<String> it = stack.iterator(); it.hasNext();) {
             sb.append(it.next());
             if (it.hasNext()) {
-                sb.append(File.separator);
+                sb.append(separator);
             }
         }
 
         if (endsWithSlash) {
-            sb.append(File.separator);
+            sb.append(separator);
         }
 
         return sb.toString();

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=1410217&r1=1410216&r2=1410217&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Fri Nov 16 07:23:33 2012
@@ -905,7 +905,8 @@ public final class ObjectHelper {
      * @return the modified or unmodified string if there were no changes
      */
     private static String resolveUriPath(String name) {
-        return FileUtil.compactPath(name);
+        // compact the path and use / as separator as that's used for loading resources on the classpath
+        return FileUtil.compactPath(name, '/');
     }
 
     /**

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java?rev=1410217&r1=1410216&r2=1410217&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java Fri Nov 16 07:23:33 2012
@@ -165,6 +165,15 @@ public class FileUtilTest extends TestCa
         }
     }
 
+    public void testCompactPathSeparator() {
+        assertEquals(null, FileUtil.compactPath(null, '\''));
+        assertEquals("..\\foo", FileUtil.compactPath("..\\foo", '\\'));
+        assertEquals("../foo", FileUtil.compactPath("../foo", '/'));
+
+        assertEquals("../foo/bar", FileUtil.compactPath("../foo\\bar", '/'));
+        assertEquals("..\\foo\\bar", FileUtil.compactPath("../foo\\bar", '\\'));
+    }
+
     public void testDefaultTempFileSuffixAndPrefix() throws Exception {
         File tmp = FileUtil.createTempFile("tmp-", ".tmp");
         assertNotNull(tmp);