Repository: jena
Updated Branches:
  refs/heads/master b40d2a07d -> 692118f9d


JENA-923: Refactoring in preparation for jena-base

Separate out DateTimeUtils
Remove duplicate OutputUtils
EscapeStr functions into atlas; EscapeProc for the policy object.


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

Branch: refs/heads/master
Commit: bac746dfbdde01f80bb12f48b0f681e7471d9d8c
Parents: b40d2a0
Author: Andy Seaborne <[email protected]>
Authored: Tue Apr 28 21:23:24 2015 +0100
Committer: Andy Seaborne <[email protected]>
Committed: Tue Apr 28 21:23:24 2015 +0100

----------------------------------------------------------------------
 jena-arq/pom.xml                                |   2 +-
 .../org/apache/jena/atlas/io/OutputUtils.java   |  59 +++--
 .../apache/jena/atlas/lib/ActionKeyValue.java   |   1 +
 .../java/org/apache/jena/atlas/lib/Chars.java   |   9 +
 .../apache/jena/atlas/lib/DateTimeUtils.java    | 127 ++++++++++
 .../org/apache/jena/atlas/lib/EscapeStr.java    | 211 +++++++++++++++++
 .../org/apache/jena/atlas/lib/Pingback.java     |  38 ---
 .../jena/atlas/lib/PoolFiniteBlocking.java      |  53 -----
 .../java/org/apache/jena/atlas/lib/Problem.java |  25 --
 .../org/apache/jena/atlas/lib/StrUtils.java     |   7 +-
 .../jena/atlas/logging/ProgressLogger.java      |   4 +-
 .../org/apache/jena/riot/out/EscapeProc.java    |  49 ++++
 .../org/apache/jena/riot/out/EscapeStr.java     | 234 -------------------
 .../apache/jena/riot/out/NodeFormatterNT.java   |   4 +-
 .../org/apache/jena/riot/out/OutputUtils.java   |  78 -------
 .../org/apache/jena/riot/system/RiotChars.java  |   9 -
 .../apache/jena/riot/tokens/TokenizerText.java  |   3 +-
 .../org/apache/jena/sparql/expr/NodeValue.java  |   9 +-
 .../org/apache/jena/sparql/lang/ParserBase.java |   2 +-
 .../apache/jena/sparql/mgt/QueryEngineInfo.java |   4 +-
 .../jena/sparql/util/NodeFactoryExtra.java      |  11 +-
 .../java/org/apache/jena/sparql/util/Utils.java | 117 ----------
 .../java/org/apache/jena/atlas/lib/TS_Lib.java  |   1 +
 .../jena/atlas/lib/TestDateTimeUtils.java       |  82 +++++++
 .../apache/jena/sparql/junit/EarlReport.java    |   4 +-
 .../org/apache/jena/sparql/util/TS_Util.java    |   3 +-
 .../org/apache/jena/sparql/util/TestUtils.java  |  84 -------
 jena-base/pom.xml                               |   8 +
 28 files changed, 549 insertions(+), 689 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/pom.xml
----------------------------------------------------------------------
diff --git a/jena-arq/pom.xml b/jena-arq/pom.xml
index 8ddf032..399a42e 100644
--- a/jena-arq/pom.xml
+++ b/jena-arq/pom.xml
@@ -111,7 +111,7 @@
       <artifactId>commons-lang3</artifactId>
     </dependency>
 
-  </dependencies>
+ </dependencies>
 
   <build>
     <resources>

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/atlas/io/OutputUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/io/OutputUtils.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/OutputUtils.java
index d96133d..a5d5595 100644
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/OutputUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/io/OutputUtils.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.atlas.io;
+package org.apache.jena.atlas.io ;
 
 import java.io.IOException ;
 import java.io.Writer ;
@@ -24,40 +24,49 @@ import java.io.Writer ;
 import org.apache.jena.atlas.lib.BitsInt ;
 import org.apache.jena.atlas.lib.Chars ;
 
-
-public class OutputUtils
-{
-    /** Print the number x in width hex chars.  x must fit */
-    public static void printHex(StringBuilder out, int x, int width)
-    {
-        for ( int i = width-1 ; i >= 0 ; i-- )
+public class OutputUtils {
+    /** Print the number x in width hex chars. x must fit */
+    public static void printHex(StringBuilder out, int x, int width) {
+        for ( int i = width - 1 ; i >= 0 ; i-- )
             x = oneHex(out, x, i) ;
     }
 
     /** Print one hex digit of the number */
-    public static int oneHex(StringBuilder out, int x, int i)
-    {
-        int y = BitsInt.unpack(x, 4*i, 4*i+4) ;
+    public static int oneHex(StringBuilder out, int x, int i) {
+        int y = BitsInt.unpack(x, 4 * i, 4 * i + 4) ;
         char charHex = Chars.hexDigitsUC[y] ;
-        out.append(charHex) ; 
-        return BitsInt.clear(x, 4*i, 4*i+4) ;
+        out.append(charHex) ;
+        return BitsInt.clear(x, 4 * i, 4 * i + 4) ;
     }
-    
-    /** Print the number x in width hex chars.  x must fit */
-    public static void printHex(Writer out, int x, int width)
-    {
-        for ( int i = width-1 ; i >= 0 ; i-- )
+
+    /** Print the number x in width hex chars. x must fit */
+    public static void printHex(Writer out, int x, int width) {
+        for ( int i = width - 1 ; i >= 0 ; i-- )
             x = oneHex(out, x, i) ;
     }
 
-    /** Print one hex digit of the numer */
-    public static int oneHex(Writer out, int x, int i)
-    {
-        int y = BitsInt.unpack(x, 4*i, 4*i+4) ;
+    /** Print one hex digit of the number */
+    public static int oneHex(Writer out, int x, int i) {
+        int y = BitsInt.unpack(x, 4 * i, 4 * i + 4) ;
         char charHex = Chars.hexDigitsUC[y] ;
-        try { out.write(charHex) ; } catch (IOException ex) {} 
-        return BitsInt.clear(x, 4*i, 4*i+4) ;
+        try {
+            out.write(charHex) ;
+        }
+        catch (IOException ex) {}
+        return BitsInt.clear(x, 4 * i, 4 * i + 4) ;
     }
 
-    
+    /** Print the number x in width hex chars. x must fit */
+    public static void printHex(AWriter out, int x, int width) {
+        for ( int i = width - 1 ; i >= 0 ; i-- )
+            x = oneHex(out, x, i) ;
+    }
+
+    /** Print one hex digit of the number */
+    public static int oneHex(AWriter out, int x, int i) {
+        int y = BitsInt.unpack(x, 4 * i, 4 * i + 4) ;
+        char charHex = Chars.hexDigitsUC[y] ;
+        out.print(charHex) ;
+        return BitsInt.clear(x, 4 * i, 4 * i + 4) ;
+    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java
index 894107a..25b8fe4 100644
--- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java
@@ -18,6 +18,7 @@
 
 package org.apache.jena.atlas.lib;
 
+@FunctionalInterface
 public interface ActionKeyValue<KeyType, ValueType>
 {
     public void apply(KeyType key, ValueType value) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/atlas/lib/Chars.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/Chars.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/lib/Chars.java
index 38f4f88..1d19f5c 100644
--- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/Chars.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/lib/Chars.java
@@ -174,6 +174,15 @@ public class Chars
         
     }
 
+    /** Is char in the array? */
+    public static boolean charInArray(int ch, char[] chars) {
+        for ( int xch : chars ) {
+            if ( ch == xch )
+                return true ;
+        }
+        return false ;
+    }
+
     /** End of file - not a Unicode codepoint */
     public static final int EOF             = -1 ;
     // BOM  : U+FEFF encoded in bytes as xEF,0xBB,0xBF

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/atlas/lib/DateTimeUtils.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/lib/DateTimeUtils.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/lib/DateTimeUtils.java
new file mode 100644
index 0000000..b33a514
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/lib/DateTimeUtils.java
@@ -0,0 +1,127 @@
+/**
+ * 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.util.Calendar ;
+import java.util.Date ;
+import java.util.GregorianCalendar ;
+
+import org.apache.commons.lang3.time.FastDateFormat ;
+
+public class DateTimeUtils {
+
+    // Include timezone (even xsd:dates have timezones; Calendars have 
timezones)
+    // NB in SimpleDateFormat != FastDateFormat
+    //  SimpleDateFormat does not format Calendars.
+    //  SimpleDateFormat has "X" for  ISO format tmezones (+00:00)  
+    //    FastDateFormat uses "ZZ" for this.
+    private static final FastDateFormat dateTimeFmt_display = 
FastDateFormat.getInstance("yyyy/MM/dd HH:mm:ss z") ;
+    private static final FastDateFormat dateFmt_yyyymmdd    = 
FastDateFormat.getInstance("yyyy-MM-ddZZ") ;
+    // For milliseconds == 0
+    private static final FastDateFormat dateTimeFmt_XSD_ms0     = 
FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ssZZ") ;
+    // For milliseconds != 0
+    private static final FastDateFormat dateTimeFmt_XSD_ms      = 
FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSZZ") ;
+    // For milliseconds == 0
+    private static final FastDateFormat timeFmt_XSD_ms0         = 
FastDateFormat.getInstance("HH:mm:ssZZ") ;
+    // For milliseconds != 0
+    private static final FastDateFormat timeFmt_XSD_ms          = 
FastDateFormat.getInstance("HH:mm:ss.SSSZZ") ;
+
+    public static String nowAsXSDDateTimeString() {
+        return calendarToXSDDateTimeString(new GregorianCalendar()) ;
+    }
+
+    public static String todayAsXSDDateString() {
+        return calendarToXSDDateString(new GregorianCalendar()) ;
+    }
+
+    /** Return "now" as readable string (date in yyyy/MM/dd format) */
+    public static String nowAsString() {
+        return nowAsString(dateTimeFmt_display) ;
+    }
+
+    public static String nowAsString(String formatString) {
+        FastDateFormat df = FastDateFormat.getInstance(formatString) ;
+        return df.format(new Date()) ;
+    }
+
+    public static String nowAsString(FastDateFormat dateFormat) {
+        return dateFormat.format(new Date()) ;
+    }
+
+    private static boolean hasZeroMilliSeconds(Calendar cal) {
+        return ! cal.isSet(Calendar.MILLISECOND) || 
cal.get(Calendar.MILLISECOND) == 0 ;
+    }
+
+    // Canonical fom : if ms == 0, don't include in the string.
+    public static String calendarToXSDDateTimeString(Calendar cal) {
+        FastDateFormat fmt = hasZeroMilliSeconds(cal) 
+            ? dateTimeFmt_XSD_ms0 
+            : dateTimeFmt_XSD_ms ;
+        return calendarToXSDString(cal, fmt) ;
+    }
+
+    public static String calendarToXSDDateString(Calendar cal) {
+        return calendarToXSDString(cal, dateFmt_yyyymmdd) ;
+    }
+
+    // Canonical fom : if ms == 0, don't include in the string.
+    public static String calendarToXSDTimeString(Calendar cal) {
+        FastDateFormat fmt = hasZeroMilliSeconds(cal) 
+            ? timeFmt_XSD_ms0 
+            : timeFmt_XSD_ms ;
+        return calendarToXSDString(cal, fmt) ;
+    }
+
+    private static String calendarToXSDString(Calendar cal, FastDateFormat 
fmt) {
+        String lex = fmt.format(cal) ;
+        // lex = lex + calcTimezone(cal) ;
+        return lex ;
+    }
+
+    // Not needed because of FastDateFormat
+//    private static String calcTimezone(Calendar cal) {
+//        Date date = cal.getTime() ;
+//        TimeZone z = cal.getTimeZone() ;
+//        int tz = z.getRawOffset() ;
+//
+//        if ( z.inDaylightTime(date) ) {
+//            int tzDst = z.getDSTSavings() ;
+//            tz = tz + tzDst ;
+//        }
+//
+//        String sign = "+" ;
+//        if ( tz < 0 ) {
+//            sign = "-" ;
+//            tz = -tz ;
+//        }
+//
+//        int tzH = tz / (60 * 60 * 1000) ; // Integer divide towards zero.
+//        int tzM = (tz - tzH * 60 * 60 * 1000) / (60 * 1000) ;
+//
+//        String tzH_str = Integer.toString(tzH) ;
+//        String tzM_str = Integer.toString(tzM) ;
+//
+//        if ( tzH < 10 )
+//            tzH_str = "0" + tzH_str ;
+//        if ( tzM < 10 )
+//            tzM_str = "0" + tzM_str ;
+//        return sign + tzH_str + ":" + tzM_str ;
+//    }
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/atlas/lib/EscapeStr.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/EscapeStr.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/lib/EscapeStr.java
new file mode 100644
index 0000000..ede060c
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/lib/EscapeStr.java
@@ -0,0 +1,211 @@
+/*
+ * 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 org.apache.jena.atlas.AtlasException ;
+import org.apache.jena.atlas.io.AWriter ;
+import org.apache.jena.atlas.io.IndentedLineBuffer ;
+import org.apache.jena.atlas.io.OutputUtils ;
+
+/** Escape processing for strings */ 
+public class EscapeStr
+{
+
+    // Utility
+    /*
+     * Escape characters in a string according to Turtle rules. 
+     */
+    public static String stringEsc(String s)
+    { return stringEsc(s, true, false) ; }
+
+    private static String stringEsc(String s, boolean singleLineString, 
boolean asciiOnly)
+    {
+        IndentedLineBuffer sb = new IndentedLineBuffer() ;
+        stringEsc(sb, s, singleLineString, asciiOnly) ;
+        return sb.toString() ;
+    }
+
+    public static void stringEsc(AWriter out, String s, boolean 
singleLineString, boolean asciiOnly)
+    {
+        int len = s.length() ;
+        for (int i = 0; i < len; i++) {
+            char c = s.charAt(i);
+
+            // \\ Escape always possible.
+            if (c == '\\') 
+            {
+                out.print('\\') ;
+                out.print(c) ;
+                continue ;
+            }
+            if ( singleLineString )
+            {
+                if ( c == '"' )         { out.print("\\\""); continue ; }
+                else if (c == '\n')     { out.print("\\n");  continue ; }
+                else if (c == '\t')     { out.print("\\t");  continue ; }
+                else if (c == '\r')     { out.print("\\r");  continue ; }
+                else if (c == '\f')     { out.print("\\f");  continue ; }
+            }
+            // Not \-style esacpe. 
+            if ( c >= 32 && c < 127 )
+                out.print(c);
+            else if ( !asciiOnly )
+                out.print(c);
+            else
+            {
+                // Outside the charset range.
+                // Does not cover beyond 16 bits codepoints directly
+                // (i.e. \U escapes) but Java keeps these as surrogate
+                // pairs and will print as characters
+                out.print( "\\u") ;
+                OutputUtils.printHex(out, c, 4) ;
+            }
+        }
+    }
+
+    // Utilities to remove escapes
+
+    /** Replace \ escapes (\\u, \t, \n etc) in a string */
+    public static String unescapeStr(String s)
+    { return unescapeStr(s, '\\') ; }
+    
+    /** Replace \ escapes (\\u, \t, \n etc) in a string */
+    public static String unescapeStr(String s, char escapeChar)
+    { return unescape(s, escapeChar, false) ; }
+
+    // Main worker function for unescaping strings.
+    public static String unescape(String s, char escape, boolean 
pointCodeOnly) {
+        int i = s.indexOf(escape) ;
+        
+        if ( i == -1 )
+            return s ;
+        
+        // Dump the initial part straight into the string buffer
+        StringBuilder sb = new StringBuilder(s.substring(0,i)) ;
+        
+        for ( ; i < s.length() ; i++ )
+        {
+            char ch = s.charAt(i) ;
+
+            if ( ch != escape )
+            {
+                sb.append(ch) ;
+                continue ;
+            }
+                
+            // Escape
+            if ( i >= s.length()-1 )
+                throw new AtlasException("Illegal escape at end of string") ;
+            char ch2 = s.charAt(i+1) ;
+            i = i + 1 ;
+            
+            // \\u and \\U
+            if ( ch2 == 'u' )
+            {
+                // i points to the \ so i+6 is next character
+                if ( i+4 >= s.length() )
+                    throw new AtlasException("\\u escape too short") ;
+                int x = hex(s, i+1, 4) ;
+                sb.append((char)x) ;
+                // Jump 1 2 3 4 -- already skipped \ and u
+                i = i+4 ;
+                continue ;
+            }
+            if ( ch2 == 'U' )
+            {
+                // i points to the \ so i+6 is next character
+                if ( i+8 >= s.length() )
+                    throw new AtlasException("\\U escape too short") ;
+                int x = hex(s, i+1, 8) ;
+                // Convert to UTF-16 codepoint pair.
+                sb.append((char)x) ;
+                // Jump 1 2 3 4 5 6 7 8 -- already skipped \ and u
+                i = i+8 ;
+                continue ;
+            }
+            
+            // Are we doing just point code escapes?
+            // If so, \X-anything else is legal as a literal "\" and "X" 
+            
+            if ( pointCodeOnly )
+            {
+                sb.append('\\') ;
+                sb.append(ch2) ;
+                i = i + 1 ;
+                continue ;
+            }
+            
+            // Not just codepoints.  Must be a legal escape.
+            char ch3 = 0 ;
+            switch (ch2)
+            {
+                case 'n': ch3 = '\n' ;  break ; 
+                case 't': ch3 = '\t' ;  break ;
+                case 'r': ch3 = '\r' ;  break ;
+                case 'b': ch3 = '\b' ;  break ;
+                case 'f': ch3 = '\f' ;  break ;
+                case '\'': ch3 = '\'' ; break ;
+                case '\"': ch3 = '\"' ; break ;
+                case '\\': ch3 = '\\' ; break ;
+                default:
+                    throw new AtlasException("Unknown escape: \\"+ch2) ;
+            }
+            sb.append(ch3) ;
+        }
+        return sb.toString() ;
+    }
+    
+    public static int hex(String s, int i, int len)
+    {
+//        if ( i+len >= s.length() )
+//        {
+//            
+//        }
+        int x = 0 ;
+        for ( int j = i ; j < i+len ; j++ )
+        {
+           char ch = s.charAt(j) ;
+           int k = 0  ;
+           switch (ch)
+           {
+               case '0': k = 0 ; break ; 
+               case '1': k = 1 ; break ;
+               case '2': k = 2 ; break ;
+               case '3': k = 3 ; break ;
+               case '4': k = 4 ; break ;
+               case '5': k = 5 ; break ;
+               case '6': k = 6 ; break ;
+               case '7': k = 7 ; break ;
+               case '8': k = 8 ; break ;
+               case '9': k = 9 ; break ;
+               case 'A': case 'a': k = 10 ; break ;
+               case 'B': case 'b': k = 11 ; break ;
+               case 'C': case 'c': k = 12 ; break ;
+               case 'D': case 'd': k = 13 ; break ;
+               case 'E': case 'e': k = 14 ; break ;
+               case 'F': case 'f': k = 15 ; break ;
+               default:
+                   throw new AtlasException("Illegal hex escape: "+ch) ;
+           }
+           x = (x<<4)+k ;
+        }
+        return x ;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/atlas/lib/Pingback.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/Pingback.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/lib/Pingback.java
deleted file mode 100644
index 9da701d..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/Pingback.java
+++ /dev/null
@@ -1,38 +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.atlas.lib;
-
-/** Binding of a value to a Callback as a Runnable */
-public class Pingback<T> implements Runnable
-{
-    private final T arg ;
-    private final Callback<T> callback ; 
-
-    private Pingback(Callback<T> callback, T arg)
-    {
-        this.arg = arg ;
-        this.callback = callback ;
-    }
-
-    @Override
-    public void run()
-    {
-        callback.proc(arg) ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/atlas/lib/PoolFiniteBlocking.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/lib/PoolFiniteBlocking.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/lib/PoolFiniteBlocking.java
deleted file mode 100644
index b7905d2..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/PoolFiniteBlocking.java
+++ /dev/null
@@ -1,53 +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.atlas.lib;
-
-import java.util.concurrent.BlockingDeque;
-import java.util.concurrent.LinkedBlockingDeque;
-
-import org.apache.jena.sparql.ARQException ;
-
-/** Finite capacity pool - capacity is fixed at create time */ 
-public class PoolFiniteBlocking<T> implements Pool<T>
-{
-    BlockingDeque<T> pool  ;
-    
-    public PoolFiniteBlocking(int size) { pool = new 
LinkedBlockingDeque<>(size) ; }
-    
-    @Override
-    public final void put(T item)
-    {
-        pool.addLast(item) ;
-    }
-    
-    @Override
-    public T get()              
-    { 
-        try
-        { 
-            return pool.takeFirst() ;
-        } catch (InterruptedException ex)
-        {
-            throw new ARQException("Failed to get an item from the pool 
(InterruptedException): "+ex.getMessage()) ;
-        }
-    }
-    
-    @Override
-    public boolean isEmpty()    { return pool.isEmpty() ; } 
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/atlas/lib/Problem.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/Problem.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/lib/Problem.java
deleted file mode 100644
index d571fe7..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/Problem.java
+++ /dev/null
@@ -1,25 +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.atlas.lib;
-
-public class Problem extends RuntimeException
-{
-    public Problem(String msg) { super(msg) ; }
-    public Problem(String msg, Throwable th) { super(msg, th) ; }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/atlas/lib/StrUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/StrUtils.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/lib/StrUtils.java
index 20a57f0..9a9be76 100644
--- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/StrUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/lib/StrUtils.java
@@ -23,9 +23,6 @@ import java.util.ArrayList ;
 import java.util.List ;
 import java.util.Map ;
 
-import org.apache.jena.riot.out.EscapeStr ;
-import org.apache.jena.riot.system.RiotChars ;
-
 
 public class StrUtils //extends StringUtils
 {
@@ -215,7 +212,7 @@ public class StrUtils //extends StringUtils
         for ( ; idx < N ; idx++ )
         {
             char ch = str.charAt(idx) ;
-            if ( RiotChars.charInArray(ch, escapees) )
+            if ( Chars.charInArray(ch, escapees) )
                 break ;
         }
         if ( idx == N )
@@ -227,7 +224,7 @@ public class StrUtils //extends StringUtils
         for ( ; idx < N ; idx++ )
         {
             char ch = str.charAt(idx) ;
-            if ( RiotChars.charInArray(ch, escapees) )
+            if ( Chars.charInArray(ch, escapees) )
             {
                 Chars.encodeAsHex(buff, marker, ch) ;
                 continue ;

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/atlas/logging/ProgressLogger.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/logging/ProgressLogger.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/logging/ProgressLogger.java
index 8b92831..5c8b722 100644
--- a/jena-arq/src/main/java/org/apache/jena/atlas/logging/ProgressLogger.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/logging/ProgressLogger.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.atlas.logging;
 
-import static org.apache.jena.sparql.util.Utils.nowAsString ;
+import org.apache.jena.atlas.lib.DateTimeUtils ;
 import org.apache.jena.atlas.lib.Timer ;
 import org.slf4j.Logger ;
 
@@ -112,7 +112,7 @@ public class ProgressLogger
     private void elapsed(long timerReading)
     {
         float elapsedSecs = timerReading/1000F ;
-        print("  Elapsed: %,.2f seconds [%s]", elapsedSecs, nowAsString()) ;
+        print("  Elapsed: %,.2f seconds [%s]", elapsedSecs, 
DateTimeUtils.nowAsString()) ;
     }
     
     /** Print a message in the form for this ProgressLogger */ 

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeProc.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeProc.java 
b/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeProc.java
new file mode 100644
index 0000000..ae6386a
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeProc.java
@@ -0,0 +1,49 @@
+/**
+ * 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.out;
+
+import org.apache.jena.atlas.io.AWriter ;
+import org.apache.jena.atlas.lib.EscapeStr ;
+
+public class EscapeProc {
+    private final boolean ascii ;
+
+    public EscapeProc(CharSpace charSpace) {
+        this.ascii = ( charSpace == CharSpace.ASCII ) ; 
+    } 
+
+    public void writeURI(AWriter w, String s) {
+        if ( ascii )
+            EscapeStr.stringEsc(w, s, true, ascii) ;
+        else
+            // It's a URI - assume legal.
+            w.print(s) ;
+    }
+
+    public void writeStr(AWriter w, String s) {
+        EscapeStr.stringEsc(w, s, true, ascii) ;
+    }
+
+    public void writeStrMultiLine(AWriter w, String s) {
+        // N-Triples does not have """
+        EscapeStr.stringEsc(w, s, false, ascii) ;
+    }
+
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeStr.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeStr.java 
b/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeStr.java
deleted file mode 100644
index bf45890..0000000
--- a/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeStr.java
+++ /dev/null
@@ -1,234 +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.out;
-
-import org.apache.jena.atlas.AtlasException ;
-import org.apache.jena.atlas.io.AWriter ;
-import org.apache.jena.atlas.io.IndentedLineBuffer ;
-
-public class EscapeStr
-{
-    // Tests: TestOutput
-    // See also OutputLangUtils.outputEsc.
-    private final boolean ascii ;
-
-    public EscapeStr(CharSpace charSpace) { this.ascii = ( charSpace == 
CharSpace.ASCII ) ; } 
-
-    public void writeURI(AWriter w, String s)
-    {
-        if ( ascii )
-            stringEsc(w, s, true, ascii) ;
-        else
-            // It's a URI - assume legal.
-            w.print(s) ;
-    }
-
-    public void writeStr(AWriter w, String s) 
-    {
-        stringEsc(w, s, true, ascii) ;
-    }
-
-    public void writeStrMultiLine(AWriter w, String s) 
-    {
-        // N-Triples does not have """
-        stringEsc(w, s, false, ascii) ;
-    }
-
-    // Utility
-    /*
-     * Escape characters in a string according to Turtle rules. 
-     */
-    public static String stringEsc(String s)
-    { return stringEsc(s, true, false) ; }
-
-    private static String stringEsc(String s, boolean singleLineString, 
boolean asciiOnly)
-    {
-        IndentedLineBuffer sb = new IndentedLineBuffer() ;
-        stringEsc(sb, s, singleLineString, asciiOnly) ;
-        return sb.toString() ;
-    }
-
-    public static void stringEsc(AWriter out, String s, boolean 
singleLineString, boolean asciiOnly)
-    {
-        int len = s.length() ;
-        for (int i = 0; i < len; i++) {
-            char c = s.charAt(i);
-
-            // \\ Escape always possible.
-            if (c == '\\') 
-            {
-                out.print('\\') ;
-                out.print(c) ;
-                continue ;
-            }
-            if ( singleLineString )
-            {
-                if ( c == '"' )         { out.print("\\\""); continue ; }
-                else if (c == '\n')     { out.print("\\n");  continue ; }
-                else if (c == '\t')     { out.print("\\t");  continue ; }
-                else if (c == '\r')     { out.print("\\r");  continue ; }
-                else if (c == '\f')     { out.print("\\f");  continue ; }
-            }
-            // Not \-style esacpe. 
-            if ( c >= 32 && c < 127 )
-                out.print(c);
-            else if ( !asciiOnly )
-                out.print(c);
-            else
-            {
-                // Outside the charset range.
-                // Does not cover beyond 16 bits codepoints directly
-                // (i.e. \U escapes) but Java keeps these as surrogate
-                // pairs and will print as characters
-                out.print( "\\u") ;
-                OutputUtils.printHex(out, c, 4) ;
-            }
-        }
-    }
-
-    // Utilities to remove escapes
-
-    /** Replace \ escapes (\\u, \t, \n etc) in a string */
-    public static String unescapeStr(String s)
-    { return unescapeStr(s, '\\') ; }
-    
-    /** Replace \ escapes (\\u, \t, \n etc) in a string */
-    public static String unescapeStr(String s, char escapeChar)
-    { return unescape(s, escapeChar, false) ; }
-
-    // Main worker function for unescaping strings.
-    public static String unescape(String s, char escape, boolean 
pointCodeOnly) {
-        int i = s.indexOf(escape) ;
-        
-        if ( i == -1 )
-            return s ;
-        
-        // Dump the initial part straight into the string buffer
-        StringBuilder sb = new StringBuilder(s.substring(0,i)) ;
-        
-        for ( ; i < s.length() ; i++ )
-        {
-            char ch = s.charAt(i) ;
-
-            if ( ch != escape )
-            {
-                sb.append(ch) ;
-                continue ;
-            }
-                
-            // Escape
-            if ( i >= s.length()-1 )
-                throw new AtlasException("Illegal escape at end of string") ;
-            char ch2 = s.charAt(i+1) ;
-            i = i + 1 ;
-            
-            // \\u and \\U
-            if ( ch2 == 'u' )
-            {
-                // i points to the \ so i+6 is next character
-                if ( i+4 >= s.length() )
-                    throw new AtlasException("\\u escape too short") ;
-                int x = hex(s, i+1, 4) ;
-                sb.append((char)x) ;
-                // Jump 1 2 3 4 -- already skipped \ and u
-                i = i+4 ;
-                continue ;
-            }
-            if ( ch2 == 'U' )
-            {
-                // i points to the \ so i+6 is next character
-                if ( i+8 >= s.length() )
-                    throw new AtlasException("\\U escape too short") ;
-                int x = hex(s, i+1, 8) ;
-                // Convert to UTF-16 codepoint pair.
-                sb.append((char)x) ;
-                // Jump 1 2 3 4 5 6 7 8 -- already skipped \ and u
-                i = i+8 ;
-                continue ;
-            }
-            
-            // Are we doing just point code escapes?
-            // If so, \X-anything else is legal as a literal "\" and "X" 
-            
-            if ( pointCodeOnly )
-            {
-                sb.append('\\') ;
-                sb.append(ch2) ;
-                i = i + 1 ;
-                continue ;
-            }
-            
-            // Not just codepoints.  Must be a legal escape.
-            char ch3 = 0 ;
-            switch (ch2)
-            {
-                case 'n': ch3 = '\n' ;  break ; 
-                case 't': ch3 = '\t' ;  break ;
-                case 'r': ch3 = '\r' ;  break ;
-                case 'b': ch3 = '\b' ;  break ;
-                case 'f': ch3 = '\f' ;  break ;
-                case '\'': ch3 = '\'' ; break ;
-                case '\"': ch3 = '\"' ; break ;
-                case '\\': ch3 = '\\' ; break ;
-                default:
-                    throw new AtlasException("Unknown escape: \\"+ch2) ;
-            }
-            sb.append(ch3) ;
-        }
-        return sb.toString() ;
-    }
-    
-    public static int hex(String s, int i, int len)
-    {
-//        if ( i+len >= s.length() )
-//        {
-//            
-//        }
-        int x = 0 ;
-        for ( int j = i ; j < i+len ; j++ )
-        {
-           char ch = s.charAt(j) ;
-           int k = 0  ;
-           switch (ch)
-           {
-               case '0': k = 0 ; break ; 
-               case '1': k = 1 ; break ;
-               case '2': k = 2 ; break ;
-               case '3': k = 3 ; break ;
-               case '4': k = 4 ; break ;
-               case '5': k = 5 ; break ;
-               case '6': k = 6 ; break ;
-               case '7': k = 7 ; break ;
-               case '8': k = 8 ; break ;
-               case '9': k = 9 ; break ;
-               case 'A': case 'a': k = 10 ; break ;
-               case 'B': case 'b': k = 11 ; break ;
-               case 'C': case 'c': k = 12 ; break ;
-               case 'D': case 'd': k = 13 ; break ;
-               case 'E': case 'e': k = 14 ; break ;
-               case 'F': case 'f': k = 15 ; break ;
-               default:
-                   throw new AtlasException("Illegal hex escape: "+ch) ;
-           }
-           x = (x<<4)+k ;
-        }
-        return x ;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFormatterNT.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFormatterNT.java 
b/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFormatterNT.java
index 0f38768..5a260c7 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFormatterNT.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFormatterNT.java
@@ -26,11 +26,11 @@ public class NodeFormatterNT extends NodeFormatterBase
     // Formatting for NTriples 
     // Turtles extends this class to intercept forms it can do better.
 
-    private final EscapeStr escapeProc ; 
+    private final EscapeProc escapeProc ; 
 
     public NodeFormatterNT() { this(CharSpace.UTF8) ; }
 
-    public NodeFormatterNT(CharSpace charSpace) { escapeProc = new 
EscapeStr(charSpace) ;}
+    public NodeFormatterNT(CharSpace charSpace) { escapeProc = new 
EscapeProc(charSpace) ;}
 
     @Override
     public void formatURI(AWriter w, String uriStr)

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/riot/out/OutputUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/out/OutputUtils.java 
b/jena-arq/src/main/java/org/apache/jena/riot/out/OutputUtils.java
deleted file mode 100644
index 269c0b9..0000000
--- a/jena-arq/src/main/java/org/apache/jena/riot/out/OutputUtils.java
+++ /dev/null
@@ -1,78 +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.out;
-
-import java.io.IOException ;
-import java.io.Writer ;
-
-import org.apache.jena.atlas.io.AWriter ;
-import org.apache.jena.atlas.lib.BitsInt ;
-import org.apache.jena.atlas.lib.Chars ;
-
-public class OutputUtils
-{
-    /** Print the number x in width hex chars.  x must fit */
-    public static void printHex(StringBuilder out, int x, int width)
-    {
-        for ( int i = width-1 ; i >= 0 ; i-- )
-            x = oneHex(out, x, i) ;
-    }
-
-    /** Print one hex digit of the number */
-    public static int oneHex(StringBuilder out, int x, int i)
-    {
-        int y = BitsInt.unpack(x, 4*i, 4*i+4) ;
-        char charHex = Chars.hexDigitsUC[y] ;
-        out.append(charHex) ; 
-        return BitsInt.clear(x, 4*i, 4*i+4) ;
-    }
-    
-    /** Print the number x in width hex chars.  x must fit */
-    public static void printHex(Writer out, int x, int width)
-    {
-        for ( int i = width-1 ; i >= 0 ; i-- )
-            x = oneHex(out, x, i) ;
-    }
-
-    /** Print one hex digit of the number */
-    public static int oneHex(Writer out, int x, int i)
-    {
-        int y = BitsInt.unpack(x, 4*i, 4*i+4) ;
-        char charHex = Chars.hexDigitsUC[y] ;
-        try { out.write(charHex) ; } catch (IOException ex) {} 
-        return BitsInt.clear(x, 4*i, 4*i+4) ;
-    }
-
-    /** Print the number x in width hex chars.  x must fit */
-    public static void printHex(AWriter out, int x, int width)
-    {
-        for ( int i = width-1 ; i >= 0 ; i-- )
-            x = oneHex(out, x, i) ;
-    }
-
-    /** Print one hex digit of the number */
-    public static int oneHex(AWriter out, int x, int i)
-    {
-        int y = BitsInt.unpack(x, 4*i, 4*i+4) ;
-        char charHex = Chars.hexDigitsUC[y] ;
-        out.print(charHex) ; 
-        return BitsInt.clear(x, 4*i, 4*i+4) ;
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/riot/system/RiotChars.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotChars.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotChars.java
index 7b56cf3..a1ac83d 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotChars.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotChars.java
@@ -131,13 +131,4 @@ Notes: PN_CHARS_BASE has a hole above #xD800 -- these are 
the  surrogate pairs
     {
         return ( ch >= a && ch <= b ) ;
     }
-
-    public static boolean charInArray(int ch, char[] chars)
-    {
-        for ( int xch : chars )
-        {
-            if ( ch == xch )  return true ;
-        }
-        return false ;
-    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java 
b/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
index ba420bb..58f6d2f 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
@@ -26,6 +26,7 @@ import java.util.NoSuchElementException ;
 import org.apache.jena.atlas.AtlasException ;
 import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.io.PeekReader ;
+import org.apache.jena.atlas.lib.Chars ;
 import org.apache.jena.riot.RiotParseException ;
 import org.apache.jena.riot.system.RiotChars ;
 import org.apache.jena.sparql.ARQInternalErrorException ;
@@ -738,7 +739,7 @@ public final class TokenizerText implements Tokenizer
         for (;; idx++) {
             int ch = reader.peekChar() ;
 
-            if ( isAlphaNumeric(ch) || charInArray(ch, extraChars) ) {
+            if ( isAlphaNumeric(ch) || Chars.charInArray(ch, extraChars) ) {
                 reader.readChar() ;
                 stringBuilder.append((char)ch) ;
                 continue ;

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/sparql/expr/NodeValue.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/NodeValue.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/expr/NodeValue.java
index 5152683..10cfde5 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/NodeValue.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/NodeValue.java
@@ -57,6 +57,7 @@ import javax.xml.datatype.DatatypeFactory ;
 import javax.xml.datatype.Duration ;
 import javax.xml.datatype.XMLGregorianCalendar ;
 
+import org.apache.jena.atlas.lib.DateTimeUtils ;
 import org.apache.jena.atlas.lib.StrUtils ;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.datatypes.DatatypeFormatException ;
@@ -277,7 +278,7 @@ public abstract class NodeValue extends ExprNode
 
     public static NodeValue makeDateTime(Calendar cal)
     {
-        String lex = Utils.calendarToXSDDateTimeString(cal) ;
+        String lex = DateTimeUtils.calendarToXSDDateTimeString(cal) ;
         return NodeValue.makeNode(lex, XSDdateTime) ;
     }
 
@@ -290,7 +291,7 @@ public abstract class NodeValue extends ExprNode
 
     public static NodeValue makeDate(Calendar cal)
     { 
-        String lex = Utils.calendarToXSDDateString(cal) ;
+        String lex = DateTimeUtils.calendarToXSDDateString(cal) ;
         return NodeValue.makeNode(lex, XSDdate) ;
     }
     
@@ -428,7 +429,7 @@ public abstract class NodeValue extends ExprNode
     
     public static NodeValue makeNodeDateTime(Calendar date)
     {
-        String lex = Utils.calendarToXSDDateTimeString(date) ;
+        String lex = DateTimeUtils.calendarToXSDDateTimeString(date) ;
         NodeValue nv = makeNode(lex, XSDdateTime) ;
         return nv ;
     }
@@ -441,7 +442,7 @@ public abstract class NodeValue extends ExprNode
     
     public static NodeValue makeNodeDate(Calendar date)
     {
-        String lex = Utils.calendarToXSDDateString(date) ;
+        String lex = DateTimeUtils.calendarToXSDDateString(date) ;
         NodeValue nv = makeNode(lex, XSDdate) ;
         return nv ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
index e947360..acdd397 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
@@ -23,6 +23,7 @@ import java.util.HashSet ;
 import java.util.Set ;
 
 import org.apache.jena.atlas.AtlasException ;
+import org.apache.jena.atlas.lib.EscapeStr ;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.datatypes.RDFDatatype ;
 import org.apache.jena.datatypes.TypeMapper ;
@@ -35,7 +36,6 @@ import org.apache.jena.n3.JenaURIException ;
 import org.apache.jena.query.ARQ ;
 import org.apache.jena.query.QueryParseException ;
 import org.apache.jena.riot.checker.CheckerIRI ;
-import org.apache.jena.riot.out.EscapeStr ;
 import org.apache.jena.riot.system.ErrorHandler ;
 import org.apache.jena.riot.system.ErrorHandlerFactory ;
 import org.apache.jena.riot.system.RiotLib ;

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/sparql/mgt/QueryEngineInfo.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/mgt/QueryEngineInfo.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/mgt/QueryEngineInfo.java
index 595de8f..c9079ee 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/mgt/QueryEngineInfo.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/mgt/QueryEngineInfo.java
@@ -20,9 +20,9 @@ package org.apache.jena.sparql.mgt;
 
 import java.util.concurrent.atomic.AtomicLong ;
 
+import org.apache.jena.atlas.lib.DateTimeUtils ;
 import org.apache.jena.query.Query ;
 import org.apache.jena.sparql.algebra.Op ;
-import org.apache.jena.sparql.util.Utils ;
 
 public class QueryEngineInfo implements QueryEngineInfoMBean
 {
@@ -58,7 +58,7 @@ public class QueryEngineInfo implements QueryEngineInfoMBean
     private String timeSeen = "" ;
     @Override
     public String getLastQueryExecAt()          { return timeSeen ; }
-    public void setLastQueryExecAt()            { timeSeen = 
Utils.nowAsString() ; }
+    public void setLastQueryExecAt()            { timeSeen = 
DateTimeUtils.nowAsString() ; }
 
 //    private long lastExecTime ;
 //    public long getLastQueryExecTime()          { return lastExecTime ; }

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/sparql/util/NodeFactoryExtra.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/util/NodeFactoryExtra.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/util/NodeFactoryExtra.java
index 1c45227..fa60fd5 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/NodeFactoryExtra.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/NodeFactoryExtra.java
@@ -20,6 +20,7 @@ package org.apache.jena.sparql.util;
 
 import java.util.Calendar;
 
+import org.apache.jena.atlas.lib.DateTimeUtils ;
 import org.apache.jena.datatypes.RDFDatatype ;
 import org.apache.jena.datatypes.TypeMapper ;
 import org.apache.jena.datatypes.xsd.XSDDatatype ;
@@ -214,35 +215,35 @@ public class NodeFactoryExtra
     /** Calendar to xsd:dateTime Node */
     public static Node dateTimeToNode(Calendar c)
     {
-        String lex = Utils.calendarToXSDDateTimeString(c);
+        String lex = DateTimeUtils.calendarToXSDDateTimeString(c);
         return NodeFactory.createLiteral(lex, XSDDatatype.XSDdateTime);
     }
     
     /** Calendar to xsd:date Node */
     public static Node dateToNode(Calendar c)
     {
-        String lex = Utils.calendarToXSDDateString(c);
+        String lex = DateTimeUtils.calendarToXSDDateString(c);
         return NodeFactory.createLiteral(lex, XSDDatatype.XSDdate);
     }
     
     /** Calendar to xsd:time Node */
     public static Node timeToNode(Calendar c)
     {
-        String lex = Utils.calendarToXSDTimeString(c);
+        String lex = DateTimeUtils.calendarToXSDTimeString(c);
         return NodeFactory.createLiteral(lex, XSDDatatype.XSDtime);
     }
 
     /** Now, as xsd:dateTime Node */
     public static Node nowAsDateTime()
     {
-        String lex = Utils.nowAsXSDDateTimeString() ;
+        String lex = DateTimeUtils.nowAsXSDDateTimeString() ;
         return NodeFactory.createLiteral(lex, XSDDatatype.XSDdateTime) ;
     }
 
     /** Today, as xsd:date Node */
     public static Node todayAsDate()
     {
-        String lex = Utils.todayAsXSDDateString() ;
+        String lex = DateTimeUtils.todayAsXSDDateString() ;
         return NodeFactory.createLiteral(lex, XSDDatatype.XSDdate) ;
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/main/java/org/apache/jena/sparql/util/Utils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/Utils.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/util/Utils.java
index dbcbc24..617f7d7 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/Utils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/Utils.java
@@ -19,43 +19,12 @@
 package org.apache.jena.sparql.util ;
 
 import java.math.BigDecimal ;
-import java.util.Calendar ;
-import java.util.Date ;
-import java.util.GregorianCalendar ;
 
-import org.apache.commons.lang3.time.FastDateFormat ;
 import org.apache.jena.atlas.lib.Lib ;
-import org.apache.jena.datatypes.xsd.XSDDateTime ;
 
 /** Miscellaneous operations - not query specific */
 
 public class Utils {
-    // Include timezone (even xsd:dates have timezones; Calendars have
-    // timezones)
-    // NB in SimpleDateFormat != FastDateFormat
-    //  SimpleDateFormat does not format Calendars.
-    //  SimpleDateFormat has "X" for  ISO format tmezones (+00:00)  
-    //    FastDateFormat uses "ZZ" for this.
-    private static final FastDateFormat dateTimeFmt_display = 
FastDateFormat.getInstance("yyyy/MM/dd HH:mm:ss z") ;
-    private static final FastDateFormat dateFmt_yyyymmdd    = 
FastDateFormat.getInstance("yyyy-MM-ddZZ") ;
-    
-    // Canonical form of datetimes: as of XML Schema Datatypes 1.1
-    // http://www.w3.org/TR/xmlschema11-2/
-    // The canonical form of seconds, including fractional part is the minimum 
length number,
-    // so the milliseconds never ends in zero.  
-    // Whole seconds have no fractional part.
-    // Jena uses millis as 3 digits if non-zero.
-    
-    // For milliseconds == 0
-    private static final FastDateFormat dateTimeFmt_XSD_ms0     = 
FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ssZZ") ;
-    // For milliseconds != 0
-    private static final FastDateFormat dateTimeFmt_XSD_ms      = 
FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSZZ") ;
-
-    // For milliseconds == 0
-    private static final FastDateFormat timeFmt_XSD_ms0         = 
FastDateFormat.getInstance("HH:mm:ssZZ") ;
-    // For milliseconds != 0
-    private static final FastDateFormat timeFmt_XSD_ms          = 
FastDateFormat.getInstance("HH:mm:ss.SSSZZ") ;
-    
     /**
      * @deprecated Use {@link Lib#className(Object)} instead
      */
@@ -72,92 +41,6 @@ public class Utils {
         return Lib.classShortName(cls) ;
     }
 
-    public static String nowAsXSDDateTimeString() {
-        return calendarToXSDDateTimeString(new GregorianCalendar()) ;
-    }
-
-    public static String todayAsXSDDateString() {
-        return calendarToXSDDateString(new GregorianCalendar()) ;
-    }
-
-    public static String XSDDateTime2String(XSDDateTime xdt) {
-        return xdt.toString() ;
-    }
-
-    /** Return "now" as readable string (date in yyyy/MM/dd format) */
-    public static String nowAsString() {
-        return nowAsString(dateTimeFmt_display) ;
-    }
-
-    public static String nowAsString(String formatString) {
-        FastDateFormat df = FastDateFormat.getInstance(formatString) ;
-        return df.format(new Date()) ;
-    }
-
-    public static String nowAsString(FastDateFormat dateFormat) {
-        return dateFormat.format(new Date()) ;
-    }
-
-    private static boolean hasZeroMilliSeconds(Calendar cal) {
-        return ! cal.isSet(Calendar.MILLISECOND) || 
cal.get(Calendar.MILLISECOND) == 0 ;
-    }
-    
-    // Canonical fom : if ms == 0, don't include in the string.
-    public static String calendarToXSDDateTimeString(Calendar cal) {
-        FastDateFormat fmt = hasZeroMilliSeconds(cal) 
-            ? dateTimeFmt_XSD_ms0 
-            : dateTimeFmt_XSD_ms ;
-        return calendarToXSDString(cal, fmt) ;
-    }
-
-    public static String calendarToXSDDateString(Calendar cal) {
-        return calendarToXSDString(cal, dateFmt_yyyymmdd) ;
-    }
-
-    // Canonical fom : if ms == 0, don't include in the string.
-    public static String calendarToXSDTimeString(Calendar cal) {
-        FastDateFormat fmt = hasZeroMilliSeconds(cal) 
-            ? timeFmt_XSD_ms0 
-            : timeFmt_XSD_ms ;
-        return calendarToXSDString(cal, fmt) ;
-    }
-
-    private static String calendarToXSDString(Calendar cal, FastDateFormat 
fmt) {
-        String lex = fmt.format(cal) ;
-        // lex = lex + calcTimezone(cal) ;
-        return lex ;
-    }
-
-    // No tneeded for FastDateFormat.s
-//    private static String calcTimezone(Calendar cal) {
-//        Date date = cal.getTime() ;
-//        TimeZone z = cal.getTimeZone() ;
-//        int tz = z.getRawOffset() ;
-//
-//        if ( z.inDaylightTime(date) ) {
-//            int tzDst = z.getDSTSavings() ;
-//            tz = tz + tzDst ;
-//        }
-//
-//        String sign = "+" ;
-//        if ( tz < 0 ) {
-//            sign = "-" ;
-//            tz = -tz ;
-//        }
-//
-//        int tzH = tz / (60 * 60 * 1000) ; // Integer divide towards zero.
-//        int tzM = (tz - tzH * 60 * 60 * 1000) / (60 * 1000) ;
-//
-//        String tzH_str = Integer.toString(tzH) ;
-//        String tzM_str = Integer.toString(tzM) ;
-//
-//        if ( tzH < 10 )
-//            tzH_str = "0" + tzH_str ;
-//        if ( tzM < 10 )
-//            tzM_str = "0" + tzM_str ;
-//        return sign + tzH_str + ":" + tzM_str ;
-//    }
-
     static public String stringForm(BigDecimal decimal) {
         return decimal.toPlainString() ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/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 21c4d7c..b91d4ad 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
@@ -48,6 +48,7 @@ import org.junit.runners.Suite ;
     , TestFilenameProcessing.class
     , TestMultiSet.class
     , TestNumberUtils.class
+    , TestDateTimeUtils.class
 } )
 
 public class TS_Lib

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestDateTimeUtils.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestDateTimeUtils.java 
b/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestDateTimeUtils.java
new file mode 100644
index 0000000..8aae32b
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/atlas/lib/TestDateTimeUtils.java
@@ -0,0 +1,82 @@
+/*
+ * 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 static org.junit.Assert.*;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+import org.apache.jena.atlas.lib.DateTimeUtils ;
+import org.junit.Test;
+
+public class TestDateTimeUtils {
+
+       @Test
+       public void testCalendarToXSDDateTimeString_1() throws Exception {
+               Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 
1, 0, "Z") ;
+               assertEquals("1984-03-22T14:32:01+00:00", 
DateTimeUtils.calendarToXSDDateTimeString(cal));
+               cal.setTimeZone(TimeZone.getTimeZone("MST"));
+               assertEquals("1984-03-22T07:32:01-07:00", 
DateTimeUtils.calendarToXSDDateTimeString(cal));
+       }
+
+    @Test
+    public void testCalendarToXSDDateTimeString_2() throws Exception {
+        Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1, 50, 
"Z") ;
+        assertEquals("1984-03-22T14:32:01.050+00:00", 
DateTimeUtils.calendarToXSDDateTimeString(cal));
+        cal.setTimeZone(TimeZone.getTimeZone("MST"));
+        assertEquals("1984-03-22T07:32:01.050-07:00", 
DateTimeUtils.calendarToXSDDateTimeString(cal));
+    }
+
+
+    @Test
+       public void testCalendarToXSDDateString() throws Exception {
+               Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 23, 59, 
1, 0, "Z");
+               cal.setTimeZone(TimeZone.getTimeZone("Z")) ;
+               assertEquals("1984-03-22+00:00", 
DateTimeUtils.calendarToXSDDateString(cal));
+               cal.setTimeZone(TimeZone.getTimeZone("MST"));
+               assertEquals("1984-03-22-07:00", 
DateTimeUtils.calendarToXSDDateString(cal));
+       }
+    
+    @Test
+       public void testCalendarToXSDTimeString_1() throws Exception {
+               Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 
1, 0, "GMT+01:00");
+               assertEquals("14:32:01+01:00", 
DateTimeUtils.calendarToXSDTimeString(cal));
+               // Different timezone - moves the cal point-in-time.
+               cal.setTimeZone(TimeZone.getTimeZone("MST"));
+               assertEquals("06:32:01-07:00", 
DateTimeUtils.calendarToXSDTimeString(cal));
+       }
+       
+    @Test
+    public void testCalendarToXSDTimeString_2() throws Exception {
+        Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1, 
500, "GMT+01:00");
+        assertEquals("14:32:01.500+01:00", 
DateTimeUtils.calendarToXSDTimeString(cal));
+        // Different timezone - moves the cal point-in-time.
+        cal.setTimeZone(TimeZone.getTimeZone("MST"));
+        assertEquals("06:32:01.500-07:00", 
DateTimeUtils.calendarToXSDTimeString(cal));
+    }
+    
+       private static Calendar createCalendar(int year, int month, int 
dayOfMonth, int hourOfDay,
+                                              int minute, int second, int 
milli, String tz) {
+           GregorianCalendar cal = new 
GregorianCalendar(TimeZone.getTimeZone(tz)) ;
+           cal.set(year, month, dayOfMonth, hourOfDay, minute, second) ;
+           cal.set(Calendar.MILLISECOND, milli) ;
+           return cal ;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/test/java/org/apache/jena/sparql/junit/EarlReport.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/test/java/org/apache/jena/sparql/junit/EarlReport.java 
b/jena-arq/src/test/java/org/apache/jena/sparql/junit/EarlReport.java
index c8943b6..0ccf846 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/junit/EarlReport.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/junit/EarlReport.java
@@ -18,9 +18,9 @@
 
 package org.apache.jena.sparql.junit;
 
+import org.apache.jena.atlas.lib.DateTimeUtils ;
 import org.apache.jena.datatypes.xsd.XSDDatatype ;
 import org.apache.jena.rdf.model.* ;
-import org.apache.jena.sparql.util.Utils ;
 import org.apache.jena.sparql.vocabulary.DOAP ;
 import org.apache.jena.sparql.vocabulary.EARL ;
 import org.apache.jena.sparql.vocabulary.FOAF ;
@@ -140,7 +140,7 @@ public class EarlReport
 //        Literal now = 
 //            ResourceFactory.createTypedLiteral(nowStr, 
XSDDatatype.XSDdateTime) ;
 
-        String todayStr = Utils.todayAsXSDDateString() ;
+        String todayStr = DateTimeUtils.todayAsXSDDateString() ;
         
         Literal now = 
             ResourceFactory.createTypedLiteral(todayStr, XSDDatatype.XSDdate) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/test/java/org/apache/jena/sparql/util/TS_Util.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/util/TS_Util.java 
b/jena-arq/src/test/java/org/apache/jena/sparql/util/TS_Util.java
index 1b6d5fd..2f105af 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/util/TS_Util.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/util/TS_Util.java
@@ -18,6 +18,7 @@
 
 package org.apache.jena.sparql.util;
 
+import org.apache.jena.atlas.lib.TestDateTimeUtils ;
 import org.junit.runner.RunWith ;
 import org.junit.runners.Suite ;
 import org.junit.runners.Suite.SuiteClasses ;
@@ -27,7 +28,7 @@ import org.junit.runners.Suite.SuiteClasses ;
     TestDateTimeParsing.class ,
     TestList.class ,
     TestVersion.class ,
-    TestUtils.class ,
+    TestDateTimeUtils.class ,
     TestFmtUtils.class
 })
 

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-arq/src/test/java/org/apache/jena/sparql/util/TestUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestUtils.java 
b/jena-arq/src/test/java/org/apache/jena/sparql/util/TestUtils.java
deleted file mode 100644
index 5735963..0000000
--- a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestUtils.java
+++ /dev/null
@@ -1,84 +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.sparql.util;
-
-import static org.apache.jena.sparql.util.Utils.calendarToXSDDateString ;
-import static org.apache.jena.sparql.util.Utils.calendarToXSDDateTimeString ;
-import static org.apache.jena.sparql.util.Utils.calendarToXSDTimeString ;
-import static org.junit.Assert.*;
-
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-
-import org.junit.Test;
-
-public class TestUtils {
-
-       @Test
-       public void testCalendarToXSDDateTimeString_1() throws Exception {
-               Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 
1, 0, "Z") ;
-               assertEquals("1984-03-22T14:32:01+00:00", 
calendarToXSDDateTimeString(cal));
-               cal.setTimeZone(TimeZone.getTimeZone("MST"));
-               assertEquals("1984-03-22T07:32:01-07:00", 
calendarToXSDDateTimeString(cal));
-       }
-
-    @Test
-    public void testCalendarToXSDDateTimeString_2() throws Exception {
-        Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1, 50, 
"Z") ;
-        assertEquals("1984-03-22T14:32:01.050+00:00", 
calendarToXSDDateTimeString(cal));
-        cal.setTimeZone(TimeZone.getTimeZone("MST"));
-        assertEquals("1984-03-22T07:32:01.050-07:00", 
calendarToXSDDateTimeString(cal));
-    }
-
-
-    @Test
-       public void testCalendarToXSDDateString() throws Exception {
-               Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 23, 59, 
1, 0, "Z");
-               cal.setTimeZone(TimeZone.getTimeZone("Z")) ;
-               assertEquals("1984-03-22+00:00", calendarToXSDDateString(cal));
-               cal.setTimeZone(TimeZone.getTimeZone("MST"));
-               assertEquals("1984-03-22-07:00", calendarToXSDDateString(cal));
-       }
-    
-    @Test
-       public void testCalendarToXSDTimeString_1() throws Exception {
-               Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 
1, 0, "GMT+01:00");
-               assertEquals("14:32:01+01:00", calendarToXSDTimeString(cal));
-               // Different timezone - moves the cal point-in-time.
-               cal.setTimeZone(TimeZone.getTimeZone("MST"));
-               assertEquals("06:32:01-07:00", calendarToXSDTimeString(cal));
-       }
-       
-    @Test
-    public void testCalendarToXSDTimeString_2() throws Exception {
-        Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1, 
500, "GMT+01:00");
-        assertEquals("14:32:01.500+01:00", calendarToXSDTimeString(cal));
-        // Different timezone - moves the cal point-in-time.
-        cal.setTimeZone(TimeZone.getTimeZone("MST"));
-        assertEquals("06:32:01.500-07:00", calendarToXSDTimeString(cal));
-    }
-    
-       private static Calendar createCalendar(int year, int month, int 
dayOfMonth, int hourOfDay,
-                                              int minute, int second, int 
milli, String tz) {
-           GregorianCalendar cal = new 
GregorianCalendar(TimeZone.getTimeZone(tz)) ;
-           cal.set(year, month, dayOfMonth, hourOfDay, minute, second) ;
-           cal.set(Calendar.MILLISECOND, milli) ;
-           return cal ;
-       }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/bac746df/jena-base/pom.xml
----------------------------------------------------------------------
diff --git a/jena-base/pom.xml b/jena-base/pom.xml
index a14bda4..a8c05e5 100644
--- a/jena-base/pom.xml
+++ b/jena-base/pom.xml
@@ -46,10 +46,18 @@
       <version>3.0.0-SNAPSHOT</version>
     </dependency>
 
+    <!-- Remove when jena-base is used -->
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-csv</artifactId>
     </dependency> 
+
+    <!-- Remove when jena-base is used -->
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+    </dependency>
+
     
   </dependencies>
 

Reply via email to