Hi, Vladimir:
     Maybe my question is a little picky.:)
     I noticed that the data for getCharsetsInfo of our charsetprovider
implementation is hardcoded. So is it possible to provide a more flexible
approach?
     ResourceBundle is an option, but it has some problem in bootstrap.
Once I am trying ICU4J as default charset provider on Harmony, there will be
a bootstrap problem, since when loading required data for charset by
resourcebundle, the ClassLoader.loadResourceBundle still needs
charset. Then an initilization error will thrown.
    I have thought of two possible approach:
    (1) Load the charset information by native code in initialization.
    (2) Using a bootstrap charset, for example, ISO-8859-1, to load data
for other charset.

   I guess, maybe it deserves to discuss a little about the approach(2) .
It will be a great convenience for our customer if they are permitted to
choose charset provider. But some of them are not designed for class
library, that is, they will have bootstrap problem.

On 4/9/07, Vladimir Strigun <[EMAIL PROTECTED]> wrote:

On 4/9/07, Tony Wu <[EMAIL PROTECTED]> wrote:
> I wonder if it is possible to make it as built-in charset provider and
> make icu as an extension?

Attached test bundle, instruction and patch for current code combined
new implementation with ICU. So, I have the same 228 charsets
available - about 90 charsets used from the new bundle, and not
implemented charsets used from ICU.

The full list of charsets supported with the current bundle + ICU:
Adobe-Standard-Encoding  class=com.ibm.icu4jni.charset.CharsetICU
Big5     class=org.apache.harmony.niochar.charset.additional.Big5
Big5-HKSCS       class=
org.apache.harmony.niochar.charset.additional.Big5_HKSCS
BOCU-1   class=com.ibm.icu4jni.charset.CharsetICU
CESU-8   class=com.ibm.icu4jni.charset.CharsetICU
cp850    class=org.apache.harmony.niochar.charset.additional.IBM850
cp851    class=com.ibm.icu4jni.charset.CharsetICU
cp856    class=org.apache.harmony.niochar.charset.additional.x_IBM856
cp857    class=org.apache.harmony.niochar.charset.additional.IBM857
cp858    class=org.apache.harmony.niochar.charset.additional.IBM00858
cp860    class=org.apache.harmony.niochar.charset.additional.IBM860
cp861    class=org.apache.harmony.niochar.charset.additional.IBM861
cp862    class=org.apache.harmony.niochar.charset.additional.IBM862
cp863    class=org.apache.harmony.niochar.charset.additional.IBM863
cp864    class=org.apache.harmony.niochar.charset.additional.IBM864
cp865    class=org.apache.harmony.niochar.charset.additional.IBM865
cp866    class=org.apache.harmony.niochar.charset.IBM866
cp868    class=org.apache.harmony.niochar.charset.additional.IBM868
cp869    class=org.apache.harmony.niochar.charset.additional.IBM869
cp922    class=org.apache.harmony.niochar.charset.additional.x_IBM922
EUC-JP   class=com.ibm.icu4jni.charset.CharsetICU
EUC-KR   class=org.apache.harmony.niochar.charset.additional.EUC_KR
GB18030  class=org.apache.harmony.niochar.charset.additional.GB18030
GB2312   class=org.apache.harmony.niochar.charset.additional.GB2312
GB_2312-80       class=com.ibm.icu4jni.charset.CharsetICU
GBK      class=org.apache.harmony.niochar.charset.additional.GBK
hp-roman8        class=com.ibm.icu4jni.charset.CharsetICU
HZ-GB-2312       class=com.ibm.icu4jni.charset.CharsetICU
IBM-Thai         class=
org.apache.harmony.niochar.charset.additional.IBM_Thai
IBM01140         class=
org.apache.harmony.niochar.charset.additional.IBM01140
IBM01141         class=
org.apache.harmony.niochar.charset.additional.IBM01141
IBM01142         class=
org.apache.harmony.niochar.charset.additional.IBM01142
IBM01143         class=
org.apache.harmony.niochar.charset.additional.IBM01143
IBM01144         class=
org.apache.harmony.niochar.charset.additional.IBM01144
IBM01145         class=
org.apache.harmony.niochar.charset.additional.IBM01145
IBM01146         class=
org.apache.harmony.niochar.charset.additional.IBM01146
IBM01147         class=
org.apache.harmony.niochar.charset.additional.IBM01147
IBM01148         class=
org.apache.harmony.niochar.charset.additional.IBM01148
IBM01149         class=
org.apache.harmony.niochar.charset.additional.IBM01149
IBM037   class=org.apache.harmony.niochar.charset.additional.IBM037
IBM1026  class=org.apache.harmony.niochar.charset.additional.IBM1026
IBM1047  class=org.apache.harmony.niochar.charset.additional.IBM1047
IBM273   class=org.apache.harmony.niochar.charset.additional.IBM273
IBM277   class=org.apache.harmony.niochar.charset.additional.IBM277
IBM278   class=org.apache.harmony.niochar.charset.additional.IBM278
IBM280   class=org.apache.harmony.niochar.charset.additional.IBM280
IBM284   class=org.apache.harmony.niochar.charset.additional.IBM284
IBM285   class=org.apache.harmony.niochar.charset.additional.IBM285
IBM290   class=com.ibm.icu4jni.charset.CharsetICU
IBM297   class=org.apache.harmony.niochar.charset.additional.IBM297
IBM367   class=org.apache.harmony.niochar.charset.US_ASCII
IBM420   class=org.apache.harmony.niochar.charset.additional.IBM420
IBM424   class=org.apache.harmony.niochar.charset.additional.IBM424
IBM437   class=org.apache.harmony.niochar.charset.additional.IBM437
IBM500   class=org.apache.harmony.niochar.charset.additional.IBM500
IBM775   class=org.apache.harmony.niochar.charset.additional.IBM775
IBM852   class=org.apache.harmony.niochar.charset.additional.IBM852
IBM855   class=org.apache.harmony.niochar.charset.additional.IBM855
IBM870   class=org.apache.harmony.niochar.charset.additional.IBM870
IBM871   class=org.apache.harmony.niochar.charset.additional.IBM871
IBM918   class=org.apache.harmony.niochar.charset.additional.IBM918
ISO-2022-CN      class=com.ibm.icu4jni.charset.CharsetICU
ISO-2022-CN-EXT  class=com.ibm.icu4jni.charset.CharsetICU
ISO-2022-JP      class=com.ibm.icu4jni.charset.CharsetICU
ISO-2022-JP-2    class=com.ibm.icu4jni.charset.CharsetICU
ISO-2022-KR      class=com.ibm.icu4jni.charset.CharsetICU
ISO-8859-1       class=org.apache.harmony.niochar.charset.ISO_8859_1
ISO-8859-13      class=org.apache.harmony.niochar.charset.ISO_8859_13
ISO-8859-15      class=org.apache.harmony.niochar.charset.ISO_8859_15
ISO-8859-2       class=org.apache.harmony.niochar.charset.ISO_8859_2
ISO-8859-3       class=
org.apache.harmony.niochar.charset.additional.ISO_8859_3
ISO-8859-4       class=org.apache.harmony.niochar.charset.ISO_8859_4
ISO-8859-5       class=org.apache.harmony.niochar.charset.ISO_8859_5
ISO-8859-6       class=
org.apache.harmony.niochar.charset.additional.ISO_8859_6
ISO-8859-7       class=org.apache.harmony.niochar.charset.ISO_8859_7
ISO-8859-8       class=
org.apache.harmony.niochar.charset.additional.ISO_8859_8
ISO-8859-9       class=org.apache.harmony.niochar.charset.ISO_8859_9
JIS_Encoding     class=com.ibm.icu4jni.charset.CharsetICU
JIS_X0201        class=com.ibm.icu4jni.charset.CharsetICU
KOI8-R   class=org.apache.harmony.niochar.charset.KOI8_R
KOI8-U   class=com.ibm.icu4jni.charset.CharsetICU
KSC_5601         class=
org.apache.harmony.niochar.charset.additional.x_windows_949
macintosh        class=com.ibm.icu4jni.charset.CharsetICU
SCSU     class=com.ibm.icu4jni.charset.CharsetICU
Shift_JIS        class=
org.apache.harmony.niochar.charset.additional.windows_31j
TIS-620  class=org.apache.harmony.niochar.charset.additional.x_IBM874
US-ASCII         class=org.apache.harmony.niochar.charset.US_ASCII
UTF-16   class=org.apache.harmony.niochar.charset.UTF_16
UTF-16BE         class=org.apache.harmony.niochar.charset.UTF_16BE
UTF-16LE         class=org.apache.harmony.niochar.charset.UTF_16LE
UTF-32   class=com.ibm.icu4jni.charset.CharsetICU
UTF-32BE         class=com.ibm.icu4jni.charset.CharsetICU
UTF-32LE         class=com.ibm.icu4jni.charset.CharsetICU
UTF-7    class=com.ibm.icu4jni.charset.CharsetICU
UTF-8    class=org.apache.harmony.niochar.charset.UTF_8
windows-1250     class=org.apache.harmony.niochar.charset.CP_1250
windows-1251     class=org.apache.harmony.niochar.charset.CP_1251
windows-1252     class=org.apache.harmony.niochar.charset.CP_1252
windows-1253     class=org.apache.harmony.niochar.charset.CP_1253
windows-1254     class=org.apache.harmony.niochar.charset.CP_1254
windows-1255     class=
org.apache.harmony.niochar.charset.additional.windows_1255
windows-1256     class=
org.apache.harmony.niochar.charset.additional.windows_1256
windows-1257     class=org.apache.harmony.niochar.charset.CP_1257
windows-1258     class=com.ibm.icu4jni.charset.CharsetICU
x-ebcdic-xml-us  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1006_P100-1995
class=org.apache.harmony.niochar.charset.additional.x_IBM1006
x-ibm-1025_P100-1995
class=org.apache.harmony.niochar.charset.additional.x_IBM1025
x-ibm-1047-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1097_P100-1995
class=org.apache.harmony.niochar.charset.additional.x_IBM1097
x-ibm-1098_P100-1995
class=org.apache.harmony.niochar.charset.additional.x_IBM1098
x-ibm-1112_P100-1995
class=org.apache.harmony.niochar.charset.additional.x_IBM1112
x-ibm-1122_P100-1999
class=org.apache.harmony.niochar.charset.additional.x_IBM1122
x-ibm-1123_P100-1995
class=org.apache.harmony.niochar.charset.additional.x_IBM1123
x-ibm-1124_P100-1996
class=org.apache.harmony.niochar.charset.additional.x_IBM1124
x-ibm-1125_P100-1997     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1129_P100-1997     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1130_P100-1997     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1131_P100-1997     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1132_P100-1998     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1133_P100-1997     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1137_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1140-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1142-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1143-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1144-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1145-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1146-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1147-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1148-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1149-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1153-s390  class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1153_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1154_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1155_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1156_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1157_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1158_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1160_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1162_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1164_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1250_P100-1995     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1251_P100-1995     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1252_P100-2000     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1253_P100-1995     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1254_P100-1995     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1255_P100-1995     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1256_P110-1997     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1257_P100-1995     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1258_P100-1997     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-12712-s390         class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-12712_P100-1998    class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1363_P110-1997     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1364_P110-1997     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1371_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1373_P100-2002     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1375_P100-2003
class=org.apache.harmony.niochar.charset.additional.x_MS950_HKSCS
x-ibm-1386_P100-2002     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1388_P103-2001     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1390_P110-2003     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-1399_P110-2003     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-16684_P110-2003    class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-16804-s390         class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-16804_X110-1999    class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-25546      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-33722_P120-1999    class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-37-s390    class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-4899_P100-1998     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-4909_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-4971_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-5123_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-5351_P100-1998     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-5352_P100-1998     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-5353_P100-1998     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-737_P100-1997
class=org.apache.harmony.niochar.charset.additional.x_IBM737
x-ibm-803_P100-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-813_P100-1995      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-8482_P100-1999     class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-867_P100-1998      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-875_P100-1995
class=org.apache.harmony.niochar.charset.additional.x_IBM875
x-ibm-901_P100-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-902_P100-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-930_P120-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-933_P110-1995      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-935_P110-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-937_P110-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-939_P120-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-942_P12A-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-943_P130-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-949_P110-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-949_P11A-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-950_P110-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-954_P101-2000      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-964_P110-1999      class=com.ibm.icu4jni.charset.CharsetICU
x-ibm-971_P100-1995      class=com.ibm.icu4jni.charset.CharsetICU
x-IMAP-mailbox-name      class=com.ibm.icu4jni.charset.CharsetICU
x-iscii-be       class=com.ibm.icu4jni.charset.CharsetICU
x-iscii-de       class=com.ibm.icu4jni.charset.CharsetICU
x-iscii-gu       class=com.ibm.icu4jni.charset.CharsetICU
x-iscii-ka       class=com.ibm.icu4jni.charset.CharsetICU
x-iscii-ma       class=com.ibm.icu4jni.charset.CharsetICU
x-iscii-or       class=com.ibm.icu4jni.charset.CharsetICU
x-iscii-pa       class=com.ibm.icu4jni.charset.CharsetICU
x-iscii-ta       class=com.ibm.icu4jni.charset.CharsetICU
x-iscii-te       class=com.ibm.icu4jni.charset.CharsetICU
x-JIS7   class=com.ibm.icu4jni.charset.CharsetICU
x-JIS8   class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-1        class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-11       class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-16       class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-17       class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-18       class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-19       class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-2        class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-3        class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-4        class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-5        class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-6        class=com.ibm.icu4jni.charset.CharsetICU
x-LMBCS-8        class=com.ibm.icu4jni.charset.CharsetICU
x-mac-centraleurroman    class=com.ibm.icu4jni.charset.CharsetICU
x-mac-cyrillic
class=org.apache.harmony.niochar.charset.additional.x_MacCyrillic
x-mac-greek      class=
org.apache.harmony.niochar.charset.additional.x_MacGreek
x-mac-turkish    class=
org.apache.harmony.niochar.charset.additional.x_MacTurkish
x-UTF16_OppositeEndian   class=com.ibm.icu4jni.charset.CharsetICU
x-UTF16_PlatformEndian   class=com.ibm.icu4jni.charset.CharsetICU
x-UTF32_OppositeEndian   class=com.ibm.icu4jni.charset.CharsetICU
x-UTF32_PlatformEndian   class=com.ibm.icu4jni.charset.CharsetICU
x-windows-874-2000       class=com.ibm.icu4jni.charset.CharsetICU
x-windows-949-2000       class=com.ibm.icu4jni.charset.CharsetICU


Thanks.
Vladimir.


> On 4/9/07, Tony Wu <[EMAIL PROTECTED]> wrote:
> > amazing work.
> > generating the charsets...
> >
> > On 4/9/07, Vladimir Strigun <[EMAIL PROTECTED]> wrote:
> > > On 4/9/07, Andrew Zhang <[EMAIL PROTECTED]> wrote:
> > > > On 4/9/07, Vladimir Strigun <[EMAIL PROTECTED]> wrote:
> > > > >
> > > > > On 4/9/07, Andrew Zhang <[EMAIL PROTECTED]> wrote:
> > > > > > Super cool!!!
> > > > > > Does it mean we're not dependent on ICU any more?
> > > > >
> > > > > Unfortunately not all charsets supported with attached bundle.
The
> > > > > list of supported charsets you could find in README file.
> > > >
> > > >
> > > > Hi Vladimir, not unfortunately at all. :)
> > > >
> > > > We're on the way to be independent of ICU, right? ;)
> > >
> > > Yes, you right,  we're on the way :)
> > >
> > >
> > > > > On 4/9/07, Vladimir Strigun <[EMAIL PROTECTED]> wrote:
> > > > > > >
> > > > > > > Hi all!
> > > > > > >
> > > > > > > I'm happy to announce one more contribution to harmony on
behalf of
> > > > > > > Intel. Provided implementation of charset encoders/decoders
is
> > > > > > > intended to replace the ICU-based charsets encoding/decoding
> > > > > > > operations. The code was developed in clean-room environment
inside
> > > > > > > Intel and I'd like you to play with it and include to
current Harmony
> > > > > > > tree.
> > > > > > >
> > > > > > > The package could be found there:
> > > > > > > HARMONY-3593
> > > > > > >
> > > > > > > The algorithms for charsets encoding/decoding differs from
that of
> > > > > > > ICU, all charsets are generated from current Harmony or any
other
> > > > > > > implementation of Java and could be properly integrated into
current
> > > > > > > nio_char module. The archive contains source files for 6
charsets:
> > > > > > > GB18030, US-ASCII, ISO-8859-1, UTF-8, UTF-16, UTF-16BE,
UTF-16LE;
> > > > > > > implementation of CharsetProvider; generator for other
Charsets and
> > > > > > > native part. I've tested the package with more that 90
charsets, and
> > > > > > > all benchmarks and tests passed with new bundle.
Additionally I have
> > > > > > > significant boost for Dacapo.antlr and Dacapo.xalanbenchmarks with
> > > > > > > current Harmony tree on DRLVM and IBM VM. On DRLVM I have
2.5x boost
> > > > > > > for antlr and ~5-8x for xalan.
> > > > > > >
> > > > > > > The main advantages of the package are the following:
> > > > > > >   - Code for every charset is generated by CharsetGenerator,
thus, if
> > > > > > > some modification would be necessary we need just correct
generator
> > > > > > > and re-generate all sources.
> > > > > > >   - We use 2 different encoders and decoders for java and
direct
> > > > > > > buffers. Since most applications use java heap buffers,
unlike
> > > > > > > existing implementation it doesn't produce lots of native
calls to
> > > > > > > perform encoding/decoding operations on the java buffers
those
> > > > > > > significantly improving performance. This is the main reason
why we
> > > > > > > have such a significant boost for Dacapo.
> > > > > > >   - Charset tables for encoding/decoding are stored in
appropriate
> > > > > > > classes.
> > > > > > >
> > > > > > > Since the package contains implementation for 6 charsets
only,
> > > > > > > documentations how to generate and build additional charsets
you could
> > > > > > > find in README file from contributed package.
> > > > > > >
> > > > > > > Please do not hesitate to contact me for more details.
> > > > > > >
> > > > > > > Thanks,
> > > > > > > Vladimir.
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Best regards,
> > > > > > Andrew Zhang
> > > > > >
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Best regards,
> > > > Andrew Zhang
> > > >
> > >
> >
> >
> > --
> > Tony Wu
> > China Software Development Lab, IBM
> >
>
>
> --
> Tony Wu
> China Software Development Lab, IBM
>




--
Leo Li
China Software Development Lab, IBM

Reply via email to