Author: davsclaus Date: Fri Nov 16 08:04:12 2012 New Revision: 1410239 URL: http://svn.apache.org/viewvc?rev=1410239&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/branches/camel-2.9.x/ (props changed) camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Merged /camel/trunk:r1410217 Merged /camel/branches/camel-2.10.x:r1410235 Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java?rev=1410239&r1=1410238&r2=1410239&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java Fri Nov 16 08:04:12 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/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=1410239&r1=1410238&r2=1410239&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Fri Nov 16 08:04:12 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/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java?rev=1410239&r1=1410238&r2=1410239&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java Fri Nov 16 08:04:12 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);