]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/classes/core/src/com/ibm/icu/impl/ICUDebug.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / classes / core / src / com / ibm / icu / impl / ICUDebug.java
1 /**\r
2  *******************************************************************************\r
3  * Copyright (C) 2001-2010, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.impl;\r
8 \r
9 import com.ibm.icu.util.VersionInfo;\r
10 \r
11 public final class ICUDebug {\r
12     private static String params;\r
13     static {\r
14         try {\r
15             params = System.getProperty("ICUDebug");\r
16         }\r
17         catch (SecurityException e) {\r
18         }\r
19     }\r
20     private static boolean debug = params != null;\r
21     private static boolean help = debug && (params.equals("") || params.indexOf("help") != -1);\r
22 \r
23     static {\r
24         if (debug) {\r
25             System.out.println("\nICUDebug=" + params);\r
26         }\r
27     }\r
28 \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
32 \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
42                 if (numeric) {\r
43                     if (vidx == 3) {\r
44                         // up to 4 numbers\r
45                         break;\r
46                     }\r
47                     numeric = false;\r
48                     vidx++;\r
49                 }\r
50             } else {\r
51                 if (numeric) {\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
57                         ver[vidx] = 0;\r
58                         break;\r
59                     }\r
60                 } else {\r
61                     numeric = true;\r
62                     ver[vidx] = c - '0';\r
63                 }\r
64             }\r
65         }\r
66 \r
67         return VersionInfo.getInstance(ver[0], ver[1], ver[2], ver[3]);\r
68     }\r
69 \r
70     static {\r
71         javaVersion = getInstanceLenient(javaVersionString);\r
72 \r
73         VersionInfo java14Version = VersionInfo.getInstance("1.4.0");\r
74 \r
75         isJDK14OrHigher = javaVersion.compareTo(java14Version) >= 0;\r
76     }\r
77 \r
78     public static boolean enabled() {\r
79         return debug;\r
80     }\r
81 \r
82     public static boolean enabled(String arg) {\r
83         if (debug) {\r
84             boolean result = params.indexOf(arg) != -1;\r
85             if (help) System.out.println("\nICUDebug.enabled(" + arg + ") = " + result);\r
86             return result;\r
87         }\r
88         return false;\r
89     }\r
90 \r
91     public static String value(String arg) {\r
92         String result = "false";\r
93         if (debug) {\r
94             int index = params.indexOf(arg);\r
95             if (index != -1) {\r
96                 index += arg.length();\r
97                 if (params.length() > index && params.charAt(index) == '=') {\r
98                     index += 1;\r
99                     int limit = params.indexOf(",", index);\r
100                     result = params.substring(index, limit == -1 ? params.length() : limit);\r
101                 } else {\r
102                     result = "true";\r
103                 }\r
104             }\r
105 \r
106             if (help) System.out.println("\nICUDebug.value(" + arg + ") = " + result);\r
107         }\r
108         return result;\r
109     }\r
110 \r
111 //    static public void main(String[] args) {\r
112 //        // test\r
113 //        String[] tests = {\r
114 //            "1.3.0",\r
115 //            "1.3.0_02",\r
116 //            "1.3.1ea",\r
117 //            "1.4.1b43",\r
118 //            "___41___5",\r
119 //            "x1.4.51xx89ea.7f",\r
120 //            "1.6_2009",\r
121 //            "10-100-1000-10000",\r
122 //            "beta",\r
123 //            "0",\r
124 //        };\r
125 //        for (int i = 0; i < tests.length; ++i) {\r
126 //            System.out.println(tests[i] + " => " + getInstanceLenient(tests[i]));\r
127 //        }\r
128 //    }\r
129 }\r