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>
