You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/10/22 18:18:11 UTC
[3/3] jena git commit: JENA-1051: Deal with URL.toString format on
Windows.
JENA-1051: Deal with URL.toString format on Windows.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/245214d8
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/245214d8
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/245214d8
Branch: refs/heads/master
Commit: 245214d805486c4cff5a598af2b1e95c75cd5bf0
Parents: 134ba47
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Oct 22 17:15:24 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Oct 22 17:15:24 2015 +0100
----------------------------------------------------------------------
.../java/org/apache/jena/atlas/lib/IRILib.java | 21 +++++++++++++++++++-
.../jena/atlas/lib/TestFilenameProcessing.java | 6 ++++++
2 files changed, 26 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/245214d8/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java
index dcdd9a4..6c7e8fc 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java
@@ -126,7 +126,15 @@ public class IRILib
private static String plainFilenameToURL(String fn) {
// No "file:"
// Make Absolute filename.
+
boolean trailingSlash = fn.endsWith("/") ;
+ if ( Sys.isWindows ) {
+ // Can be "/C:/" on windows :-(
+ // This happens because of URL.toString.
+ if ( fn.length() >= 3 && fn.charAt(0) == '/' && windowsDrive(fn, 1))
+ fn = fn.substring(1) ;
+ }
+
fn = Paths.get(fn).toAbsolutePath().normalize().toString() ;
if ( trailingSlash && ! fn.endsWith("/") )
@@ -135,7 +143,7 @@ public class IRILib
if ( Sys.isWindows )
{
// C:\ => file:///C:/...
- if ( fn.length() >= 2 && fn.charAt(1) == ':' )
+ if ( windowsDrive(fn, 0) )
// Windows drive letter - already absolute path.
// Make "URI" absolute path
fn = "/"+fn ;
@@ -148,6 +156,17 @@ public class IRILib
return "file://"+fn ;
}
+ private static boolean windowsDrive(String fn, int i) {
+ return
+ fn.length() >= 2+i &&
+ fn.charAt(1+i) == ':' &&
+ isA2Z(fn.charAt(i)) ;
+ }
+
+ private static boolean isA2Z(char ch) {
+ return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') ;
+ }
+
/** Sanitize a "file:" URL. Must start "file:" */
private static String normalizeFilenameURI(String fn) {
if ( ! fn.startsWith("file:/") ) {
http://git-wip-us.apache.org/repos/asf/jena/blob/245214d8/jena-base/src/test/java/org/apache/jena/atlas/lib/TestFilenameProcessing.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestFilenameProcessing.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestFilenameProcessing.java
index 91c783d..f4aa394 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestFilenameProcessing.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestFilenameProcessing.java
@@ -155,6 +155,12 @@ public class TestFilenameProcessing extends BaseTest
filenameToIRI("file:..", "file://"+x ) ;
}
+ // Windows + URL.toString().
+ // Should be stable on all systems.
+ @Test public void fileURL_15() {
+ filenameToIRI("file:/C:/path/file", "file:///C:/path/file") ;
+ }
+
private static void encodeComponent(String string, String result) {
String r = IRILib.encodeUriComponent(string) ;
assertEquals(result, r) ;