]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/impl/ICUDebug.java
go
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / impl / ICUDebug.java
1 /**\r
2  *******************************************************************************\r
3  * Copyright (C) 2001-2007, 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");\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         // clean string\r
35         // preserve only digits, separated by single '.' \r
36         // ignore over 4 digit sequences\r
37         // does not test < 255, very odd...\r
38 \r
39         char[] chars = s.toCharArray();\r
40         int r = 0, w = 0, count = 0;\r
41         boolean numeric = false; // ignore leading non-numerics\r
42         while (r < chars.length) {\r
43             char c = chars[r++];\r
44             if (c < '0' || c > '9') {\r
45                 if (numeric) {\r
46                     if (count == 3) {\r
47                         // only four digit strings allowed\r
48                         break;\r
49                     }\r
50                     numeric = false;\r
51                     chars[w++] = '.';\r
52                     ++count;\r
53                 }\r
54             } else {\r
55                 numeric = true;\r
56                 chars[w++] = c;\r
57             }\r
58         }\r
59         while (w > 0 && chars[w-1] == '.') {\r
60             --w;\r
61         }\r
62     \r
63         String vs = new String(chars, 0, w);\r
64 \r
65         return VersionInfo.getInstance(vs);\r
66     }\r
67 \r
68     static {\r
69         javaVersion = getInstanceLenient(javaVersionString);\r
70 \r
71         VersionInfo java14Version = VersionInfo.getInstance("1.4.0");\r
72 \r
73         isJDK14OrHigher = javaVersion.compareTo(java14Version) >= 0;\r
74     }\r
75 \r
76     public static boolean enabled() {\r
77         return debug;\r
78     }\r
79 \r
80     public static boolean enabled(String arg) {\r
81         if (debug) {\r
82             boolean result = params.indexOf(arg) != -1;\r
83             if (help) System.out.println("\nICUDebug.enabled(" + arg + ") = " + result);\r
84             return result;\r
85         }\r
86         return false;\r
87     }\r
88 \r
89     public static String value(String arg) {\r
90         String result = "false";\r
91         if (debug) {\r
92             int index = params.indexOf(arg);\r
93             if (index != -1) {\r
94                 index += arg.length();\r
95                 if (params.length() > index && params.charAt(index) == '=') {\r
96                     index += 1;\r
97                     int limit = params.indexOf(",", index);\r
98                     result = params.substring(index, limit == -1 ? params.length() : limit);\r
99                 } else {\r
100                     result = "true";\r
101                 }\r
102             }\r
103 \r
104             if (help) System.out.println("\nICUDebug.value(" + arg + ") = " + result);\r
105         }\r
106         return result;\r
107     }\r
108 \r
109 /*    static public void main(String[] args) {\r
110         // test\r
111         String[] tests = {\r
112             "1.3.0",\r
113             "1.3.0_02",\r
114             "1.3.1ea",\r
115             "1.4.1b43",\r
116             "___41___5",\r
117             "x1.4.51xx89ea.7f"\r
118         };\r
119         for (int i = 0; i < tests.length; ++i) {\r
120             System.out.println(tests[i] + " => " + getInstanceLenient(tests[i]));\r
121         }\r
122     }*/\r
123 }\r