Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java.util.Locale support #264

Merged
merged 34 commits into from
Apr 20, 2021
Merged
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
2c6c772
add license checker
Mar 28, 2020
384263a
dd javaProject java8time test code and add go hessian/java8_time strc…
zhangymPerson Jul 4, 2020
bb39912
alter author and error word
zhangymPerson Jul 4, 2020
22adeb6
Merge pull request #3 from zhangymPerson/feature/issue193
willson-chen Jul 6, 2020
93c2a43
Merge remote-tracking branch 'origin/master'
zhangymPerson Jan 23, 2021
24eef7f
Merge branch 'feature/AddLicenseChcker' of https://github.com/willson…
zhangymPerson Jan 23, 2021
2c799ac
Merge branch 'master' of https://github.com/apache/dubbo-go-hessian2
zhangymPerson Jan 23, 2021
9588106
add java.util.UUID encode
zhangymPerson Jan 23, 2021
2558a8d
Revert "reset go.mod after go fmt"
zhangymPerson Jan 27, 2021
c509ac4
add UUID test
zhangymPerson Jan 27, 2021
661738a
alter .travis.yml
zhangymPerson Jan 27, 2021
088ee6c
alter code
zhangymPerson Jan 27, 2021
2bf9f0c
add license
zhangymPerson Jan 27, 2021
7a9bd56
shift count type int, must be unsigned integer
zhangymPerson Jan 31, 2021
b869609
alter file name and delete test file
zhangymPerson Mar 5, 2021
9367cc2
alter file name
zhangymPerson Mar 5, 2021
079fd68
delete file
zhangymPerson Mar 5, 2021
7705871
alter file name
zhangymPerson Mar 5, 2021
fb1378c
alter file name
zhangymPerson Mar 5, 2021
20ec0e1
add uuid struct info and split import block.
zhangymPerson Mar 11, 2021
cab32a4
add java UUID encode and uuid.toString() equals go uuid.ToString() te…
zhangymPerson Mar 12, 2021
06613ee
alter ToString() -> String()
zhangymPerson Mar 12, 2021
3d81e3b
Merge branch 'master' into java.util
wongoo Mar 13, 2021
dae1b38
fix code review
wongoo Mar 13, 2021
a266973
Merge branch 'master' of https://github.com/apache/dubbo-go-hessian2
zhangymPerson Mar 15, 2021
0c46e82
Merge branch 'master' of https://github.com/apache/dubbo-go-hessian2
zhangymPerson Apr 9, 2021
b789584
Merge branch 'master' into java.util
zhangymPerson Apr 9, 2021
274bf93
add go struct Locale = java:java.util.Locale
zhangymPerson Apr 17, 2021
89ace94
alter Locales is const slice
zhangymPerson Apr 19, 2021
c447e5c
alter Locales add clearer definition
zhangymPerson Apr 19, 2021
0a4f22a
alter locales is private
zhangymPerson Apr 19, 2021
1284eb1
add ToLocale() and localeMap
zhangymPerson Apr 19, 2021
a768663
delete fmt.Sprintf()
zhangymPerson Apr 19, 2021
368b46a
alter Locale struct field unexported
zhangymPerson Apr 20, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions java_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,7 @@ func init() {
MostSigBits: int64(200),
LeastSigBits: int64(200),
})
RegisterPOJO(&java_util.LocaleHandle{
Value: "",
})
}
4 changes: 4 additions & 0 deletions java_util/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,7 @@
- dubbo-go-hessian2 cannot create UUID strut
- see jdk source code of class:[java.util.UUID] learning how to create UUID struct
- see https://github.com/satori/go.uuid
2. explain dubbo-go-hession2 strut locale
-java object locale -> go struct Locale (PASS), but currently implemented are objects enumerated in java. See class:java.util.Locale
-First convert to struct LocaleHandle and then call `GetLocaleFromHandler(localeHandler *LocaleHandle)` function to convert to struct Locale
-You can use the `language.ParseBase("zh-CN")` function in the `golang.org/x/text/language` package to convert the value of `locale.String()` get go struct and do other things
5 changes: 5 additions & 0 deletions java_util/README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,8 @@
- java-server 提供的 uuid 可以解析,可以通过 UUID 的 ToString()函数解析成字符串,但是 go 目前未提供生成 uuid 的功能
- java uuid 生成可以参考 jdk 下 java.util.UUID 类的相关源码
- uuid 结构体创建参考 https://github.com/satori/go.uuid

2. locale对象
- Locale.java中的对象可以转换成go的结构体Locale,但目前实现的是java中枚举的对象,具体见 class:java.util.Locale
- 先转换成LocaleHandle对象,然后调用 `GetLocaleFromHandler(localeHandler *LocaleHandle)` 函数转成Locale对象
- 可以使用 `golang.org/x/text/language` 包中的 `language.ParseBase("zh-CN")` 函数将 `locale.String()` 值转成go中的相关对象进行后续操作
240 changes: 240 additions & 0 deletions java_util/locale.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package java_util

import "fmt"

// LocaleEnum is Locale enumeration value
type LocaleEnum int

// Locale object enum
const (
ROOT LocaleEnum = iota
ENGLISH
FRENCH
GERMAN
ITALIAN
JAPANESE
KOREAN
CHINESE
SIMPLIFIED_CHINESE
TRADITIONAL_CHINESE
FRANCE
GERMANY
ITALY
JAPAN
KOREA
CHINA
PRC
TAIWAN
UK
US
CANADA
CANADA_FRENCH
)

// Locale => java.util.Locale
type Locale struct {
// ID is used to implement enumeration
id LocaleEnum
Lang string
County string
}

func (locale *Locale) String() string {
if len(locale.County) != 0 {
return fmt.Sprintf("%s_%s", locale.Lang, locale.County)
}
return locale.Lang
}

// LocaleHandle => com.alibaba.com.caucho.hessian.io.LocaleHandle object
type LocaleHandle struct {
Value string `hessian:"value"`
}

func (LocaleHandle) JavaClassName() string {
return "com.alibaba.com.caucho.hessian.io.LocaleHandle"
}

var locales []Locale = make([]Locale, 22, 22)

// init java.util.Locale static object
func init() {
// Useful constant for language.
var ENGLISH = Locale{
wongoo marked this conversation as resolved.
Show resolved Hide resolved
id: ENGLISH,
Lang: "en",
County: "",
}
// Useful constant for language.
var FRENCH = Locale{
id: FRENCH,
Lang: "fr",
County: "",
}
// Useful constant for language.
var GERMAN = Locale{
id: GERMAN,
Lang: "de",
County: "",
}
// Useful constant for language.
var ITALIAN = Locale{
id: ITALIAN,
Lang: "it",
County: "",
}
// Useful constant for language.
var JAPANESE = Locale{
id: JAPANESE,
Lang: "ja",
County: "",
}
// Useful constant for language.
var KOREAN = Locale{
id: KOREAN,
Lang: "ko",
County: "",
}
// Useful constant for language.
var CHINESE = Locale{
id: CHINESE,
Lang: "zh",
County: "",
}
// Useful constant for language.
var SIMPLIFIED_CHINESE = Locale{
id: SIMPLIFIED_CHINESE,
Lang: "zh",
County: "CN",
}
// Useful constant for language.
var TRADITIONAL_CHINESE = Locale{
id: TRADITIONAL_CHINESE,
Lang: "zh",
County: "TW",
}
// Useful constant for language.
var FRANCE = Locale{
id: FRANCE,
Lang: "fr",
County: "FR",
}
// Useful constant for language.
var GERMANY = Locale{
id: GERMANY,
Lang: "de",
County: "DE",
}
// Useful constant for language.
var ITALY = Locale{
id: ITALY,
Lang: "it",
County: "it",
}
// Useful constant for language.
var JAPAN = Locale{
id: JAPAN,
Lang: "ja",
County: "JP",
}
// Useful constant for language.
var KOREA = Locale{
id: KOREA,
Lang: "ko",
County: "KR",
}
// Useful constant for language.
var CHINA = SIMPLIFIED_CHINESE
// Useful constant for language.
var PRC = SIMPLIFIED_CHINESE
// Useful constant for language.
var TAIWAN = TRADITIONAL_CHINESE
// Useful constant for language.
var UK = Locale{
id: UK,
Lang: "en",
County: "GB",
}
// Useful constant for language.
var US = Locale{
id: US,
Lang: "en",
County: "US",
}
// Useful constant for language.
var CANADA = Locale{
id: CANADA,
Lang: "en",
County: "CA",
}
// Useful constant for language.
var CANADA_FRENCH = Locale{
id: CANADA_FRENCH,
Lang: "fr",
County: "CA",
}
// Useful constant for language.
var ROOT = Locale{
id: ROOT,
Lang: "",
County: "",
}
locales = append(locales, ENGLISH, FRENCH, GERMAN, ITALIAN, JAPANESE, KOREAN, CHINESE, SIMPLIFIED_CHINESE, TRADITIONAL_CHINESE, FRANCE,
GERMANY, ITALY, JAPAN, KOREA, CHINA, PRC, TAIWAN, UK, US, CANADA, CANADA_FRENCH, ROOT)
}

// GetLocale is use enum value get Locale,
// default value is ROOT
func GetLocale(localeEnum LocaleEnum) *Locale {
// Useful constant for language.
var ROOT = Locale{
wongoo marked this conversation as resolved.
Show resolved Hide resolved
id: 22,
Lang: "",
County: "",
}
for _, locale := range locales {
if localeEnum == CHINA || localeEnum == PRC {
wongoo marked this conversation as resolved.
Show resolved Hide resolved
return GetLocale(SIMPLIFIED_CHINESE)
}
if localeEnum == TAIWAN {
return GetLocale(TRADITIONAL_CHINESE)
}
if localeEnum == locale.id {
return &locale
}
}
return &ROOT
}

// GetLocaleFromHandler is use LocaleHandle get Locale
func GetLocaleFromHandler(localeHandler *LocaleHandle) *Locale {
// Useful constant for language.
var ROOT = Locale{
id: 22,
Lang: "",
County: "",
}
for _, locale := range locales {
if localeHandler.Value == locale.String() {
return &locale
}
}
return &ROOT
wongoo marked this conversation as resolved.
Show resolved Hide resolved
}
73 changes: 73 additions & 0 deletions java_util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,76 @@ func TestJavaUtil(t *testing.T) {
assert.Equal(t, uuid1.String(), resUuid1String)
assert.Equal(t, (resUuid2.(*java_util.UUID)).String(), resUuid2String)
}

func TestJavaUtilLocale(t *testing.T) {
res, err := decodeJavaResponse(`customReplyLocale`, ``, false)
if err != nil {
t.Error(err)
return
}
m := res.(map[interface{}]interface{})

english := m["english"]
french := m["french"]
german := m["german"]
italian := m["italian"]
japanese := m["japanese"]
korean := m["korean"]
chinese := m["chinese"]
simplified_chinese := m["simplified_chinese"]
traditional_chinese := m["traditional_chinese"]
france := m["france"]
germany := m["germany"]
japan := m["japan"]
korea := m["korea"]
china := m["china"]
prc := m["prc"]
taiwan := m["taiwan"]
uk := m["uk"]
us := m["us"]
canada := m["canada"]
root := m["root"]

assert.NotNil(t, english)
assert.NotNil(t, french)
assert.NotNil(t, german)
assert.NotNil(t, italian)
assert.NotNil(t, japanese)
assert.NotNil(t, korean)
assert.NotNil(t, chinese)
assert.NotNil(t, simplified_chinese)
assert.NotNil(t, traditional_chinese)
assert.NotNil(t, france)
assert.NotNil(t, germany)
assert.NotNil(t, japan)
assert.NotNil(t, korea)
assert.NotNil(t, china)
assert.NotNil(t, prc)
assert.NotNil(t, taiwan)
assert.NotNil(t, uk)
assert.NotNil(t, us)
assert.NotNil(t, canada)
//assert.NotNil(t, canada_french)
assert.NotNil(t, root)

assert.Equal(t, java_util.GetLocale(java_util.ENGLISH), java_util.GetLocaleFromHandler(english.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.FRENCH), java_util.GetLocaleFromHandler(french.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.GERMANY), java_util.GetLocaleFromHandler(germany.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.ITALIAN), java_util.GetLocaleFromHandler(italian.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.JAPANESE), java_util.GetLocaleFromHandler(japanese.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.KOREAN), java_util.GetLocaleFromHandler(korean.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.CHINESE), java_util.GetLocaleFromHandler(chinese.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.SIMPLIFIED_CHINESE), java_util.GetLocaleFromHandler(simplified_chinese.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.TRADITIONAL_CHINESE), java_util.GetLocaleFromHandler(traditional_chinese.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.FRANCE), java_util.GetLocaleFromHandler(france.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.GERMANY), java_util.GetLocaleFromHandler(germany.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.JAPAN), java_util.GetLocaleFromHandler(japan.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.KOREA), java_util.GetLocaleFromHandler(korea.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.CHINA), java_util.GetLocaleFromHandler(china.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.PRC), java_util.GetLocaleFromHandler(prc.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.TAIWAN), java_util.GetLocaleFromHandler(taiwan.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.UK), java_util.GetLocaleFromHandler(uk.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.US), java_util.GetLocaleFromHandler(us.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.CANADA), java_util.GetLocaleFromHandler(canada.(*java_util.LocaleHandle)))
assert.Equal(t, java_util.GetLocale(java_util.ROOT), java_util.GetLocaleFromHandler(root.(*java_util.LocaleHandle)))
}
Loading