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:54:00 UTC
svn commit: r1410235 - in /camel/branches/camel-2.10.x: ./
camel-core/src/main/java/org/apache/camel/util/FileUtil.java
camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
Author: davsclaus
Date: Fri Nov 16 07:53:59 2012
New Revision: 1410235
URL: http://svn.apache.org/viewvc?rev=1410235&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.10.x/ (props changed)
camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
camel/branches/camel-2.10.x/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
Merged /camel/trunk:r1410217
Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java?rev=1410235&r1=1410234&r2=1410235&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java (original)
+++ camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java Fri Nov 16 07:53:59 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.10.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=1410235&r1=1410234&r2=1410235&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Fri Nov 16 07:53:59 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.10.x/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java?rev=1410235&r1=1410234&r2=1410235&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java (original)
+++ camel/branches/camel-2.10.x/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java Fri Nov 16 07:53:59 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);