2 *******************************************************************************
\r
3 * Copyright (C) 2001-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.impl;
\r
9 import com.ibm.icu.util.VersionInfo;
\r
11 public final class ICUDebug {
\r
12 private static String params;
\r
15 params = System.getProperty("ICUDebug");
\r
17 catch (SecurityException e) {
\r
20 private static boolean debug = params != null;
\r
21 private static boolean help = debug && (params.equals("") || params.indexOf("help") != -1);
\r
25 System.out.println("\nICUDebug=" + params);
\r
29 public static final String javaVersionString = System.getProperty("java.version", "0");
\r
30 public static final boolean isJDK14OrHigher;
\r
31 public static final VersionInfo javaVersion;
\r
33 public static VersionInfo getInstanceLenient(String s) {
\r
34 // Extracting ASCII numbers up to 4 delimited by
\r
35 // any non digit characters
\r
36 int[] ver = new int[4];
\r
37 boolean numeric = false;
\r
38 int i = 0, vidx = 0;
\r
39 while (i < s.length()) {
\r
40 char c = s.charAt(i++);
\r
41 if (c < '0' || c > '9') {
\r
52 ver[vidx] = ver[vidx] * 10 + (c - '0');
\r
53 if (ver[vidx] > 255) {
\r
54 // VersionInfo does not support numbers
\r
55 // greater than 255. In such case, we
\r
56 // ignore the number and the rest
\r
62 ver[vidx] = c - '0';
\r
67 return VersionInfo.getInstance(ver[0], ver[1], ver[2], ver[3]);
\r
71 javaVersion = getInstanceLenient(javaVersionString);
\r
73 VersionInfo java14Version = VersionInfo.getInstance("1.4.0");
\r
75 isJDK14OrHigher = javaVersion.compareTo(java14Version) >= 0;
\r
78 public static boolean enabled() {
\r
82 public static boolean enabled(String arg) {
\r
84 boolean result = params.indexOf(arg) != -1;
\r
85 if (help) System.out.println("\nICUDebug.enabled(" + arg + ") = " + result);
\r
91 public static String value(String arg) {
\r
92 String result = "false";
\r
94 int index = params.indexOf(arg);
\r
96 index += arg.length();
\r
97 if (params.length() > index && params.charAt(index) == '=') {
\r
99 int limit = params.indexOf(",", index);
\r
100 result = params.substring(index, limit == -1 ? params.length() : limit);
\r
106 if (help) System.out.println("\nICUDebug.value(" + arg + ") = " + result);
\r
111 // static public void main(String[] args) {
\r
113 // String[] tests = {
\r
119 // "x1.4.51xx89ea.7f",
\r
121 // "10-100-1000-10000",
\r
125 // for (int i = 0; i < tests.length; ++i) {
\r
126 // System.out.println(tests[i] + " => " + getInstanceLenient(tests[i]));
\r