| /** |
| ******************************************************************************* |
| * Copyright (C) 2001-2002, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| */ |
| package com.ibm.icu.impl; |
| |
| import com.ibm.icu.util.VersionInfo; |
| |
| public final class ICUDebug { |
| private static String params; |
| static { |
| try { |
| params = System.getProperty("ICUDebug"); |
| } |
| catch (SecurityException e) { |
| } |
| } |
| private static boolean debug = params != null; |
| private static boolean help = debug && (params.equals("") || params.indexOf("help") != -1); |
| |
| static { |
| if (debug) { |
| System.out.println("\nICUDebug=" + params); |
| } |
| } |
| |
| public static final String javaVersionString = System.getProperty("java.version"); |
| public static final boolean isJDK14OrHigher; |
| public static final VersionInfo javaVersion; |
| |
| public static VersionInfo getInstanceLenient(String s) { |
| // clean string |
| // preserve only digits, separated by single '.' |
| // ignore over 4 digit sequences |
| // does not test < 255, very odd... |
| |
| char[] chars = s.toCharArray(); |
| int r = 0, w = 0, count = 0; |
| boolean numeric = false; // ignore leading non-numerics |
| while (r < chars.length) { |
| char c = chars[r++]; |
| if (c < '0' || c > '9') { |
| if (numeric) { |
| if (count == 3) { |
| // only four digit strings allowed |
| break; |
| } |
| numeric = false; |
| chars[w++] = '.'; |
| ++count; |
| } |
| } else { |
| numeric = true; |
| chars[w++] = c; |
| } |
| } |
| while (w > 0 && chars[w-1] == '.') { |
| --w; |
| } |
| |
| String vs = new String(chars, 0, w); |
| |
| return VersionInfo.getInstance(vs); |
| } |
| |
| static { |
| javaVersion = getInstanceLenient(javaVersionString); |
| |
| VersionInfo java14Version = VersionInfo.getInstance("1.4.0"); |
| |
| isJDK14OrHigher = javaVersion.compareTo(java14Version) >= 0; |
| } |
| |
| public static boolean enabled() { |
| return debug; |
| } |
| |
| public static boolean enabled(String arg) { |
| if (debug) { |
| boolean result = params.indexOf(arg) != -1; |
| if (help) System.out.println("\nICUDebug.enabled(" + arg + ") = " + result); |
| return result; |
| } |
| return false; |
| } |
| |
| public static String value(String arg) { |
| String result = "false"; |
| if (debug) { |
| int index = params.indexOf(arg); |
| if (index != -1) { |
| index += arg.length(); |
| if (params.length() > index && params.charAt(index) == '=') { |
| index += 1; |
| int limit = params.indexOf(",", index); |
| result = params.substring(index, limit == -1 ? params.length() : limit); |
| } |
| result = "true"; |
| } |
| |
| if (help) System.out.println("\nICUDebug.value(" + arg + ") = " + result); |
| } |
| return result; |
| } |
| |
| static public void main(String[] args) { |
| // test |
| String[] tests = { |
| "1.3.0", |
| "1.3.0_02", |
| "1.3.1ea", |
| "1.4.1b43", |
| "___41___5", |
| "x1.4.51xx89ea.7f" |
| }; |
| for (int i = 0; i < tests.length; ++i) { |
| System.out.println(tests[i] + " => " + getInstanceLenient(tests[i])); |
| } |
| } |
| } |