JENA-923: Move IRILib to future jena-base code tree.

This is the first step - moving within ARQ, for later migration to
jena-base.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/57aa6abc
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/57aa6abc
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/57aa6abc

Branch: refs/heads/master
Commit: 57aa6abca72c259c664a30665d5c0c7136d24335
Parents: b9e9281
Author: Andy Seaborne <[email protected]>
Authored: Tue Apr 28 11:34:21 2015 +0100
Committer: Andy Seaborne <[email protected]>
Committed: Tue Apr 28 11:34:21 2015 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/jena/atlas/io/IO.java  |   2 +-
 .../java/org/apache/jena/atlas/lib/IRILib.java  | 243 ++++++++++++++++++
 .../apache/jena/atlas/lib/PropertyUtils.java    |   3 +-
 .../main/java/org/apache/jena/riot/SysRIOT.java |   2 +-
 .../jena/riot/adapters/RDFReaderRIOT_ARP.java   |   2 +-
 .../java/org/apache/jena/riot/lang/LangCSV.java |   2 +-
 .../org/apache/jena/riot/system/IRILib.java     | 245 -------------------
 .../apache/jena/riot/system/IRIResolver.java    |   1 +
 .../jena/riot/system/stream/LocatorFile.java    |   2 +-
 .../jena/sparql/expr/nodevalue/XSDFuncOp.java   |   2 +-
 .../jena/web/DatasetGraphAccessorHTTP.java      |   2 +-
 .../java/org/apache/jena/atlas/lib/TS_Lib.java  |   3 +
 .../jena/atlas/lib/TestFilenameProcessing.java  |  36 ++-
 .../org/apache/jena/atlas/lib/TestXMLLib.java   |   1 +
 .../java/org/apache/jena/riot/lang/TestIRI.java |  35 ---
 .../apache/jena/fuseki/build/FusekiConfig.java  |   2 +-
 .../org/apache/jena/fuseki/http/TestHttpOp.java |   2 +-
 17 files changed, 294 insertions(+), 291 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/atlas/io/IO.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/io/IO.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/IO.java
index 8772ae3..ac312e8 100644
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/IO.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/io/IO.java
@@ -25,7 +25,7 @@ import java.util.zip.GZIPInputStream ;
 import java.util.zip.GZIPOutputStream ;
 
 import org.apache.jena.atlas.RuntimeIOException ;
-import org.apache.jena.riot.system.IRILib ;
+import org.apache.jena.atlas.lib.IRILib ;
 
 public class IO
 {

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/atlas/lib/IRILib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/IRILib.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/lib/IRILib.java
new file mode 100644
index 0000000..f25d7c1
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/lib/IRILib.java
@@ -0,0 +1,243 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.jena.atlas.lib;
+
+import java.io.File ;
+import java.io.IOException ;
+
+import org.apache.jena.atlas.AtlasException ;
+import org.apache.jena.riot.SysRIOT ;
+
+/** Operations related to IRIs */
+public class IRILib
+{
+    // http://www.w3.org/TR/xpath-functions/#func-encode-for-uri
+    // Encodes delimiters.
+    
+    /* RFC 3986
+     * 
+     * unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
+     * gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
+     * sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
+                    / "*" / "+" / "," / ";" / "="
+     */
+    
+    private static char uri_reserved[] = 
+    { '!', '*', '"', '\'', '(', ')', ';', ':', '@', '&', 
+      '=', '+', '$', ',', '/', '?', '%', '#', '[', ']' } ;
+
+    // No allowed in URIs
+    private static char uri_non_chars[] = { '<', '>', '{', '}', '|', '\\', 
'`', '^', ' ',  '\n', '\r', '\t', '£' } ;
+    
+    // RFC 2396
+    //private static char uri_unwise[]    = { '{' , '}', '|', '\\', '^', '[', 
']', '`' } ;
+
+
+    private static char[] charsComponent =
+    // reserved, + non-chars + nasties.
+    { '!', '*', '"', '\'', '(', ')', ';', ':', '@', '&', 
+      '=', '+', '$', ',', '/', '?', '%', '#', '[', ']',
+      '{', '}', '|', '\\', '`', '^',
+      ' ', '<', '>', '\n', '\r', '\t', '£' } ;
+    
+    private static char[] charsFilename =
+        // reserved, + non-chars + nasties.
+        // Leave : (Windows drive charcater) and / (separator) alone
+        // include SPC and ~
+        { '!', '*', '"', '\'', '(', ')', ';', /*':',*/ '@', '&', 
+          '=', '+', '$', ',', /*'/',*/ '?', '%', '#', '[', ']',
+          '{', '}', '|', '\\', '`', '^',
+          ' ', '<', '>', '\n', '\r', '\t',
+          '~'} ;
+
+    private static char[] charsPath =  
+    {   // Reserved except leave the separators alone. 
+        '!', '*', '"', '\'', '(', ')', ';', /*':',*/ '@', '&',
+        '=', '+', '$', ',', /*'/',*/ '?', '%', '#', '[', ']',
+        '{', '}', '|', '\\', '`', '^',
+        // Other junk 
+        ' ', '<', '>', '\n', '\r', '\t' } ;
+
+    // The initializers must have run.
+    static final String cwd ; 
+    static final String cwdURL ;
+    
+    // Current directory, with trailing "/"
+    // This matters for resolution.
+    static { 
+        String x = new File(".").getAbsolutePath() ;
+        x = x.substring(0, x.length()-1) ;
+        cwd = x ;
+        cwdURL = plainFilenameToURL(cwd) ;
+    }
+    
+    // See also IRIResolver
+    /** Return a string that is an IRI for the filename.*/
+    public static String fileToIRI(File f) {
+        return filenameToIRI(f.getAbsolutePath()) ;
+    }
+    
+    /** Create a string that is a IRI for the filename.
+     *  <li>The file name may already have {@code file:}.
+     *  <li>The file name may be relative. 
+     *  <li>Encode using the rules for a path (e.g. ':' and'/' do not get 
encoded)
+     *  <li>Non-IRI characters get %-encoded. 
+     */
+    public static String filenameToIRI(String fn) {
+        if ( fn == null ) return cwdURL ;
+        
+        if ( fn.length() == 0 ) return cwdURL ;
+        
+        if ( fn.startsWith("file:") )
+            return normalizeFilenameURI(fn) ;
+        return plainFilenameToURL(fn) ;
+    }
+    
+    /** Convert a file: IRI to a filename */
+    public static String IRIToFilename(String iri) {
+        if ( ! iri.startsWith("file:") )
+            throw new AtlasException("Not a file: URI: "+iri) ; 
+        
+        String fn ;
+        if ( iri.startsWith("file:///") )
+            fn = iri.substring("file://".length()) ;
+        else
+            fn = iri.substring("file:".length()) ;
+        return decode(fn) ;
+    }
+    
+    /** Convert a plain file name (no file:) to a file: URL */
+    private static String plainFilenameToURL(String fn) {
+        // No "file:"
+        // Make Absolute filename.
+        boolean trailingSlash = fn.endsWith("/") ;
+        File file = new File(fn) ;
+        
+        try { fn = file.getCanonicalPath() ; }
+        catch (IOException e) { fn = file.getAbsolutePath() ; }
+        
+        if ( trailingSlash && ! fn.endsWith("/") )
+            fn = fn + "/" ;
+        
+        if ( SysRIOT.isWindows )
+        {
+            // C:\ => file:///C:/... 
+            if ( fn.length() >= 2 && fn.charAt(1) == ':' )
+                // Windows drive letter - already absolute path.
+                // Make "URI" absolute path
+                fn = "/"+fn ;
+            // Convert \ to /
+            // Maybe should do this on all platforms? i.e consistency.
+            fn = fn.replace('\\', '/' ) ;
+        }
+        
+        fn = encodeFileURL(fn) ;
+        return "file://"+fn ;
+    }
+    
+    
+    /** Sanitize a "file:" URL. Must start "file:" */
+    private static String normalizeFilenameURI(String fn) {
+        if ( ! fn.startsWith("file:/") )
+        {
+            // Relative path.
+            String fn2 = fn.substring("file:".length()) ;
+            return plainFilenameToURL(fn2) ;
+        }
+        
+        // Starts file:///
+        if ( fn.startsWith("file:///") )
+            // Assume it's good and return as-is.
+            return fn ;
+
+        if ( fn.startsWith("file://") )
+        {
+            String fn2 = fn.substring("file:/".length()) ;  // Leave one "/"
+            return plainFilenameToURL(fn2) ;
+        }
+
+        // Must be file:/
+        String fn2 = fn.substring("file:".length()) ;
+        return plainFilenameToURL(fn2) ;
+    }
+
+    /** Encode using the rules for a component (e.g. ':' and '/' get encoded) 
+     * Does not encode non-ASCII characters 
+     */
+    public static String encodeUriComponent(String string) {
+        String encStr = StrUtils.encodeHex(string,'%', charsComponent) ;
+        return encStr ;
+    }
+
+    /** Encode using the rules for a file: URL.  
+     *  Does not encode non-ASCII characters
+     */
+    public static String encodeFileURL(String string) {
+        String encStr = StrUtils.encodeHex(string,'%', charsFilename) ;
+        return encStr ;
+    }
+
+    /** Encode using the rules for a path (e.g. ':' and '/' do not get 
encoded) */
+    public static String encodeUriPath(String uri) {
+        // Not perfect.
+        // Encode path.
+        // %-encode chars.
+        uri = StrUtils.encodeHex(uri, '%', charsPath) ;
+        return uri ;
+    }
+
+    public static String decode(String string) {
+        return StrUtils.decodeHex(string, '%') ;
+    }
+
+    public static String encodeNonASCII(String string) {
+        if ( ! containsNonASCII(string) )
+            return string ;
+        
+        byte[] bytes = StrUtils.asUTF8bytes(string) ;
+        StringBuilder sw = new StringBuilder() ;
+        for ( byte b : bytes )
+        {
+            // Signed bytes ...
+            if ( b > 0 )
+            {
+                sw.append( (char) b );
+                continue;
+            }
+
+            int hi = ( b & 0xF0 ) >> 4;
+            int lo = b & 0xF;
+            sw.append( '%' );
+            sw.append( Chars.hexDigitsUC[hi] );
+            sw.append( Chars.hexDigitsUC[lo] );
+        }
+        return sw.toString() ;
+    }
+
+    public static boolean containsNonASCII(String string){
+        boolean clean = true ;
+        for ( int i = 0 ; i < string.length() ; i++ )
+        {
+            char ch = string.charAt(i) ;
+            if ( ch >= 127 )
+                return true;
+        }
+        return false ;
+    } 
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/atlas/lib/PropertyUtils.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/lib/PropertyUtils.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/lib/PropertyUtils.java
index db3dc2b..782b9df 100644
--- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/PropertyUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/lib/PropertyUtils.java
@@ -23,6 +23,7 @@ import java.util.Objects ;
 import java.util.Properties ;
 
 import org.apache.jena.atlas.AtlasException ;
+import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.util.FileUtils ;
 
 public class PropertyUtils
@@ -42,7 +43,7 @@ public class PropertyUtils
         if ( "-".equals(filename) )
             throw new IllegalArgumentException("Filename is \"-\" (stdin not 
supported)") ;
 
-        try (InputStream in = new FileInputStream(filename); Reader r = 
FileUtils.asBufferedUTF8(in);) {
+        try (InputStream in = new FileInputStream(filename); Reader r = 
IO.asBufferedUTF8(in);) {
             properties.load(r) ;
         }
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java 
b/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
index 202d53a..49a24ef 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
@@ -20,7 +20,7 @@ package org.apache.jena.riot;
 
 import java.io.File ;
 
-import org.apache.jena.riot.system.IRILib ;
+import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.riot.system.IRIResolver ;
 import org.apache.jena.util.FileUtils ;
 import org.slf4j.Logger ;

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFReaderRIOT_ARP.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFReaderRIOT_ARP.java 
b/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFReaderRIOT_ARP.java
index 96b7a70..4cc726f 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFReaderRIOT_ARP.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFReaderRIOT_ARP.java
@@ -21,12 +21,12 @@ package org.apache.jena.riot.adapters;
 import java.io.InputStream ;
 import java.io.Reader ;
 
+import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.rdf.model.Model ;
 import org.apache.jena.rdf.model.RDFErrorHandler ;
 import org.apache.jena.rdf.model.RDFReader ;
 import org.apache.jena.rdfxml.xmlinput.JenaReader ;
 import org.apache.jena.riot.SysRIOT ;
-import org.apache.jena.riot.system.IRILib ;
 import org.apache.jena.util.FileManager ;
 import org.apache.jena.util.FileUtils ;
 

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/riot/lang/LangCSV.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangCSV.java 
b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangCSV.java
index ff36d8a..da1f4a1 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangCSV.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangCSV.java
@@ -24,13 +24,13 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.jena.atlas.csv.CSVParser;
+import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.datatypes.xsd.XSDDatatype ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.riot.Lang;
 import org.apache.jena.riot.RDFLanguages;
 import org.apache.jena.riot.system.ErrorHandler;
-import org.apache.jena.riot.system.IRILib;
 import org.apache.jena.riot.system.IRIResolver;
 import org.apache.jena.riot.system.ParserProfile;
 import org.apache.jena.riot.system.RiotLib;

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/riot/system/IRILib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/IRILib.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/IRILib.java
deleted file mode 100644
index 49c03f3..0000000
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/IRILib.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.jena.riot.system;
-
-import java.io.File ;
-import java.io.IOException ;
-
-import org.apache.jena.atlas.AtlasException ;
-import org.apache.jena.atlas.lib.Chars ;
-import org.apache.jena.atlas.lib.StrUtils ;
-import org.apache.jena.riot.SysRIOT ;
-
-/** Operations related to IRIs */
-public class IRILib
-{
-    // http://www.w3.org/TR/xpath-functions/#func-encode-for-uri
-    // Encodes delimiters.
-    
-    /* RFC 3986
-     * 
-     * unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
-     * gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
-     * sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
-                    / "*" / "+" / "," / ";" / "="
-     */
-    
-    private static char uri_reserved[] = 
-    { '!', '*', '"', '\'', '(', ')', ';', ':', '@', '&', 
-      '=', '+', '$', ',', '/', '?', '%', '#', '[', ']' } ;
-
-    // No allowed in URIs
-    private static char uri_non_chars[] = { '<', '>', '{', '}', '|', '\\', 
'`', '^', ' ',  '\n', '\r', '\t', '£' } ;
-    
-    // RFC 2396
-    //private static char uri_unwise[]    = { '{' , '}', '|', '\\', '^', '[', 
']', '`' } ;
-
-
-    private static char[] charsComponent =
-    // reserved, + non-chars + nasties.
-    { '!', '*', '"', '\'', '(', ')', ';', ':', '@', '&', 
-      '=', '+', '$', ',', '/', '?', '%', '#', '[', ']',
-      '{', '}', '|', '\\', '`', '^',
-      ' ', '<', '>', '\n', '\r', '\t', '£' } ;
-    
-    private static char[] charsFilename =
-        // reserved, + non-chars + nasties.
-        // Leave : (Windows drive charcater) and / (separator) alone
-        // include SPC and ~
-        { '!', '*', '"', '\'', '(', ')', ';', /*':',*/ '@', '&', 
-          '=', '+', '$', ',', /*'/',*/ '?', '%', '#', '[', ']',
-          '{', '}', '|', '\\', '`', '^',
-          ' ', '<', '>', '\n', '\r', '\t',
-          '~'} ;
-
-    private static char[] charsPath =  
-    {   // Reserved except leave the separators alone. 
-        '!', '*', '"', '\'', '(', ')', ';', /*':',*/ '@', '&',
-        '=', '+', '$', ',', /*'/',*/ '?', '%', '#', '[', ']',
-        '{', '}', '|', '\\', '`', '^',
-        // Other junk 
-        ' ', '<', '>', '\n', '\r', '\t' } ;
-
-    // The initializers must have run.
-    static final String cwd ; 
-    static final String cwdURL ;
-    
-    // Current directory, with trailing "/"
-    // This matters for resolution.
-    static { 
-        String x = new File(".").getAbsolutePath() ;
-        x = x.substring(0, x.length()-1) ;
-        cwd = x ;
-        cwdURL = plainFilenameToURL(cwd) ;
-    }
-    
-    // See also IRIResolver
-    /** Return a string that is an IRI for the filename.*/
-    public static String fileToIRI(File f) {
-        return filenameToIRI(f.getAbsolutePath()) ;
-    }
-    
-    /** Create a string that is a IRI for the filename.
-     *  <li>The file name may already have {@code file:}.
-     *  <li>The file name may be relative. 
-     *  <li>Encode using the rules for a path (e.g. ':' and'/' do not get 
encoded)
-     *  <li>Non-IRI characters get %-encoded. 
-     */
-    public static String filenameToIRI(String fn) {
-        if ( fn == null ) return cwdURL ;
-        
-        if ( fn.length() == 0 ) return cwdURL ;
-        
-        if ( fn.startsWith("file:") )
-            return normalizeFilenameURI(fn) ;
-        return plainFilenameToURL(fn) ;
-    }
-    
-    /** Convert a file: IRI to a filename */
-    public static String IRIToFilename(String iri) {
-        if ( ! iri.startsWith("file:") )
-            throw new AtlasException("Not a file: URI: "+iri) ; 
-        
-        String fn ;
-        if ( iri.startsWith("file:///") )
-            fn = iri.substring("file://".length()) ;
-        else
-            fn = iri.substring("file:".length()) ;
-        return decode(fn) ;
-    }
-    
-    /** Convert a plain file name (no file:) to a file: URL */
-    private static String plainFilenameToURL(String fn) {
-        // No "file:"
-        // Make Absolute filename.
-        boolean trailingSlash = fn.endsWith("/") ;
-        File file = new File(fn) ;
-        
-        try { fn = file.getCanonicalPath() ; }
-        catch (IOException e) { fn = file.getAbsolutePath() ; }
-        
-        if ( trailingSlash && ! fn.endsWith("/") )
-            fn = fn + "/" ;
-        
-        if ( SysRIOT.isWindows )
-        {
-            // C:\ => file:///C:/... 
-            if ( fn.length() >= 2 && fn.charAt(1) == ':' )
-                // Windows drive letter - already absolute path.
-                // Make "URI" absolute path
-                fn = "/"+fn ;
-            // Convert \ to /
-            // Maybe should do this on all platforms? i.e consistency.
-            fn = fn.replace('\\', '/' ) ;
-        }
-        
-        fn = encodeFileURL(fn) ;
-        return "file://"+fn ;
-    }
-    
-    
-    /** Sanitize a "file:" URL. Must start "file:" */
-    private static String normalizeFilenameURI(String fn) {
-        if ( ! fn.startsWith("file:/") )
-        {
-            // Relative path.
-            String fn2 = fn.substring("file:".length()) ;
-            return plainFilenameToURL(fn2) ;
-        }
-        
-        // Starts file:///
-        if ( fn.startsWith("file:///") )
-            // Assume it's good and return as-is.
-            return fn ;
-
-        if ( fn.startsWith("file://") )
-        {
-            String fn2 = fn.substring("file:/".length()) ;  // Leave one "/"
-            return plainFilenameToURL(fn2) ;
-        }
-
-        // Must be file:/
-        String fn2 = fn.substring("file:".length()) ;
-        return plainFilenameToURL(fn2) ;
-    }
-
-    /** Encode using the rules for a component (e.g. ':' and '/' get encoded) 
-     * Does not encode non-ASCII characters 
-     */
-    public static String encodeUriComponent(String string) {
-        String encStr = StrUtils.encodeHex(string,'%', charsComponent) ;
-        return encStr ;
-    }
-
-    /** Encode using the rules for a file: URL.  
-     *  Does not encode non-ASCII characters
-     */
-    public static String encodeFileURL(String string) {
-        String encStr = StrUtils.encodeHex(string,'%', charsFilename) ;
-        return encStr ;
-    }
-
-    /** Encode using the rules for a path (e.g. ':' and '/' do not get 
encoded) */
-    public static String encodeUriPath(String uri) {
-        // Not perfect.
-        // Encode path.
-        // %-encode chars.
-        uri = StrUtils.encodeHex(uri, '%', charsPath) ;
-        return uri ;
-    }
-
-    public static String decode(String string) {
-        return StrUtils.decodeHex(string, '%') ;
-    }
-
-    public static String encodeNonASCII(String string) {
-        if ( ! containsNonASCII(string) )
-            return string ;
-        
-        byte[] bytes = StrUtils.asUTF8bytes(string) ;
-        StringBuilder sw = new StringBuilder() ;
-        for ( byte b : bytes )
-        {
-            // Signed bytes ...
-            if ( b > 0 )
-            {
-                sw.append( (char) b );
-                continue;
-            }
-
-            int hi = ( b & 0xF0 ) >> 4;
-            int lo = b & 0xF;
-            sw.append( '%' );
-            sw.append( Chars.hexDigitsUC[hi] );
-            sw.append( Chars.hexDigitsUC[lo] );
-        }
-        return sw.toString() ;
-    }
-
-    public static boolean containsNonASCII(String string){
-        boolean clean = true ;
-        for ( int i = 0 ; i < string.length() ; i++ )
-        {
-            char ch = string.charAt(i) ;
-            if ( ch >= 127 )
-                return true;
-        }
-        return false ;
-    } 
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
index 0f064f9..a4a1433 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
@@ -22,6 +22,7 @@ import java.util.concurrent.Callable ;
 
 import org.apache.jena.atlas.lib.Cache ;
 import org.apache.jena.atlas.lib.CacheFactory ;
+import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.iri.IRI ;
 import org.apache.jena.iri.IRIException ;
 import org.apache.jena.iri.IRIFactory ;

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFile.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFile.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFile.java
index da34c6d..984846a 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFile.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/stream/LocatorFile.java
@@ -24,10 +24,10 @@ import java.io.InputStream ;
 import java.security.AccessControlException ;
 
 import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.atlas.web.ContentType ;
 import org.apache.jena.atlas.web.TypedInputStream ;
 import org.apache.jena.riot.RDFLanguages ;
-import org.apache.jena.riot.system.IRILib ;
 import org.apache.jena.util.FileUtils ;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
index e42dddf..439948a 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
@@ -44,6 +44,7 @@ import javax.xml.datatype.DatatypeConstants.Field ;
 import javax.xml.datatype.Duration ;
 import javax.xml.datatype.XMLGregorianCalendar ;
 
+import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.atlas.lib.StrUtils ;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.datatypes.RDFDatatype ;
@@ -51,7 +52,6 @@ import org.apache.jena.datatypes.xsd.XSDDatatype ;
 import org.apache.jena.datatypes.xsd.XSDDateTime ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
-import org.apache.jena.riot.system.IRILib ;
 import org.apache.jena.sparql.ARQInternalErrorException ;
 import org.apache.jena.sparql.SystemARQ ;
 import org.apache.jena.sparql.expr.* ;

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/main/java/org/apache/jena/web/DatasetGraphAccessorHTTP.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/web/DatasetGraphAccessorHTTP.java 
b/jena-arq/src/main/java/org/apache/jena/web/DatasetGraphAccessorHTTP.java
index 511f2a1..b2781b9 100644
--- a/jena-arq/src/main/java/org/apache/jena/web/DatasetGraphAccessorHTTP.java
+++ b/jena-arq/src/main/java/org/apache/jena/web/DatasetGraphAccessorHTTP.java
@@ -26,6 +26,7 @@ import org.apache.http.client.methods.HttpHead ;
 import org.apache.http.client.methods.HttpUriRequest ;
 import org.apache.http.entity.ContentProducer ;
 import org.apache.http.entity.EntityTemplate ;
+import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.atlas.web.HttpException ;
 import org.apache.jena.atlas.web.auth.HttpAuthenticator ;
 import org.apache.jena.atlas.web.auth.SimpleAuthenticator ;
@@ -34,7 +35,6 @@ import org.apache.jena.graph.Node ;
 import org.apache.jena.riot.RDFDataMgr ;
 import org.apache.jena.riot.RDFFormat ;
 import org.apache.jena.riot.WebContent ;
-import org.apache.jena.riot.system.IRILib ;
 import org.apache.jena.riot.web.* ;
 import org.apache.jena.shared.JenaException ;
 

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java 
b/jena-arq/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
index 8d6e0cd..21c4d7c 100644
--- a/jena-arq/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
+++ b/jena-arq/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
@@ -45,6 +45,9 @@ import org.junit.runners.Suite ;
     , TestRefLong.class
     , TestReverseComparator.class
     , TestTrie.class
+    , TestFilenameProcessing.class
+    , TestMultiSet.class
+    , TestNumberUtils.class
 } )
 
 public class TS_Lib

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestFilenameProcessing.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestFilenameProcessing.java 
b/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestFilenameProcessing.java
index 4a84759..7782c55 100644
--- 
a/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestFilenameProcessing.java
+++ 
b/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestFilenameProcessing.java
@@ -21,7 +21,6 @@ package org.apache.jena.atlas.lib;
 import java.io.File ;
 
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.riot.system.IRILib ;
 import org.junit.Test ;
 
 public class TestFilenameProcessing extends BaseTest
@@ -38,6 +37,41 @@ public class TestFilenameProcessing extends BaseTest
     // Without trailing slash.
     static { cwd = cwd.substring(0, cwd.length()-2) ; }
     
+    @Test public void fileIRI_1()
+    {
+        String uri = testFileIRI("D.ttl") ; 
+        assertTrue(uri.endsWith("D.ttl")) ;
+    }
+    
+    @Test public void fileIRI_2()
+    {
+        String uri = testFileIRI("file:/D.ttl") ; 
+        assertTrue(uri.endsWith("D.ttl")) ;
+    }
+    
+    @Test public void fileIRI_3()
+    {
+        String uri = testFileIRI("file://D.ttl") ; 
+        assertTrue(uri.endsWith("D.ttl")) ;
+    }
+
+    @Test public void fileIRI_4()
+    {
+        String iri = testFileIRI("file:///D.ttl") ;
+        // Even on windows, this is used as-is so no drive letter. 
+        assertEquals("file:///D.ttl", iri) ;
+    }
+    
+    private static String testFileIRI(String fn)
+    {
+        String uri1 = IRILib.filenameToIRI(fn) ;
+        assertTrue(uri1.startsWith("file:///")) ;
+        String uri2 = IRILib.filenameToIRI(uri1) ;
+        assertEquals(uri1, uri2) ;
+        return uri1 ;
+    }
+
+    
     @Test public void fileURL_1() { assertNotEquals(cwd, "") ; 
assertNotNull(cwd) ; filenameToIRI("abc", "file://"+cwd+"/abc" ) ; }
     
     @Test public void fileURL_2() { filenameToIRI("/abc", "file:///abc" ) ; }

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestXMLLib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestXMLLib.java 
b/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestXMLLib.java
index 8ec78b1..cae99ef 100644
--- a/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestXMLLib.java
+++ b/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestXMLLib.java
@@ -22,6 +22,7 @@ import org.apache.jena.atlas.lib.XMLLib ;
 import org.junit.Assert ;
 import org.junit.Test ;
 
+/** XML related functionality */
 public class TestXMLLib
 {
     @Test public void ws_collapse_01()  { test("abc", "abc") ; }

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-arq/src/test/java/org/apache/jena/riot/lang/TestIRI.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestIRI.java 
b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestIRI.java
index 4f976fc..b9dfee1 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestIRI.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestIRI.java
@@ -27,7 +27,6 @@ import org.apache.jena.riot.ErrorHandlerTestLib.ExWarning ;
 import org.apache.jena.riot.checker.CheckerIRI ;
 import org.apache.jena.riot.system.Checker ;
 import org.apache.jena.riot.system.ErrorHandler ;
-import org.apache.jena.riot.system.IRILib ;
 import org.apache.jena.riot.system.RiotLib ;
 import org.junit.Test ;
 
@@ -73,38 +72,4 @@ public class TestIRI extends BaseTest
         assertTrue(n.isURI()) ;
         assertEquals("abc", n.getURI()) ;
     }
-    
-    @Test public void fileIRI_1()
-    {
-        String uri = testFileIRI("D.ttl") ; 
-        assertTrue(uri.endsWith("D.ttl")) ;
-    }
-    
-    @Test public void fileIRI_2()
-    {
-        String uri = testFileIRI("file:/D.ttl") ; 
-        assertTrue(uri.endsWith("D.ttl")) ;
-    }
-    
-    @Test public void fileIRI_3()
-    {
-        String uri = testFileIRI("file://D.ttl") ; 
-        assertTrue(uri.endsWith("D.ttl")) ;
-    }
-
-    @Test public void fileIRI_4()
-    {
-        String iri = testFileIRI("file:///D.ttl") ;
-        // Even on windows, this is used as-is so no drive letter. 
-        assertEquals("file:///D.ttl", iri) ;
-    }
-    
-    private static String testFileIRI(String fn)
-    {
-        String uri1 = IRILib.filenameToIRI(fn) ;
-        assertTrue(uri1.startsWith("file:///")) ;
-        String uri2 = IRILib.filenameToIRI(uri1) ;
-        assertEquals(uri1, uri2) ;
-        return uri1 ;
-    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
----------------------------------------------------------------------
diff --git 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
index 3729eb7..a4c0e20 100644
--- 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
+++ 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
@@ -32,6 +32,7 @@ import java.util.List ;
 
 import org.apache.jena.assembler.JA ;
 import org.apache.jena.atlas.iterator.Iter ;
+import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.atlas.lib.StrUtils ;
 import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.FusekiConfigException ;
@@ -45,7 +46,6 @@ import org.apache.jena.query.QuerySolution ;
 import org.apache.jena.query.ResultSet ;
 import org.apache.jena.rdf.model.* ;
 import org.apache.jena.riot.RDFDataMgr ;
-import org.apache.jena.riot.system.IRILib ;
 import org.apache.jena.sparql.core.assembler.AssemblerUtils ;
 import org.apache.jena.update.UpdateAction ;
 import org.apache.jena.update.UpdateFactory ;

http://git-wip-us.apache.org/repos/asf/jena/blob/57aa6abc/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java
----------------------------------------------------------------------
diff --git 
a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java
 
b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java
index 0739622..b8ad9de 100644
--- 
a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java
+++ 
b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java
@@ -19,11 +19,11 @@
 package org.apache.jena.fuseki.http;
 
 import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.atlas.web.HttpException ;
 import org.apache.jena.atlas.web.TypedInputStream ;
 import org.apache.jena.fuseki.ServerTest ;
 import org.apache.jena.riot.WebContent ;
-import org.apache.jena.riot.system.IRILib ;
 import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.sparql.engine.http.Params ;
 import org.apache.jena.web.HttpSC ;

Reply via email to