Skip to content

Commit a73d9ba

Browse files
authored
Merge pull request #3239 from vmware/jhua/g11n-java-client
add wrapper to JSONObject.get() to handle null value
2 parents f2fd91f + 103f85b commit a73d9ba

27 files changed

+208
-123
lines changed

.github/workflows/gradle.yaml

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -59,32 +59,32 @@ jobs:
5959
- name: Perform CodeQL Analysis
6060
uses: github/codeql-action/analyze@v2
6161

62-
codacy-analysis-cli:
63-
name: Codacy Analysis CLI
64-
runs-on: ubuntu-latest
65-
needs: pre-process
66-
if: needs.pre-process.outputs.were-only-docs-updated != 'yes'
67-
permissions:
68-
actions: read
69-
contents: read
70-
security-events: write
71-
steps:
72-
- name: Checkout code
73-
uses: actions/checkout@main
74-
- name: Run Codacy Analysis CLI
75-
uses: codacy/codacy-analysis-cli-action@master
76-
with:
77-
output: results.sarif
78-
format: sarif
79-
# Adjust severity of non-security issues
80-
gh-code-scanning-compat: true
81-
# This will handover control about PR rejection to the GitHub side
82-
max-allowed-issues: 2147483647
83-
# Upload the SARIF file generated in the previous step
84-
- name: Upload SARIF results file
85-
uses: github/codeql-action/upload-sarif@main
86-
with:
87-
sarif_file: results.sarif
62+
# codacy-analysis-cli:
63+
# name: Codacy Analysis CLI
64+
# runs-on: ubuntu-latest
65+
# needs: pre-process
66+
# if: needs.pre-process.outputs.were-only-docs-updated != 'yes'
67+
# permissions:
68+
# actions: read
69+
# contents: read
70+
# security-events: write
71+
# steps:
72+
# - name: Checkout code
73+
# uses: actions/checkout@main
74+
# - name: Run Codacy Analysis CLI
75+
# uses: codacy/codacy-analysis-cli-action@master
76+
# with:
77+
# output: results.sarif
78+
# format: sarif
79+
# Adjust severity of non-security issues
80+
# gh-code-scanning-compat: true
81+
# This will handover control about PR rejection to the GitHub side
82+
# max-allowed-issues: 2147483647
83+
# Upload the SARIF file generated in the previous step
84+
# - name: Upload SARIF results file
85+
# uses: github/codeql-action/upload-sarif@main
86+
# with:
87+
# sarif_file: results.sarif
8888

8989
preflight-smoke-test-check:
9090
name: Preflight Smoke Test

src/main/java/com/vmware/vipclient/i18n/base/instances/DateFormatting.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
import com.vmware.vipclient.i18n.I18nFactory;
88
import com.vmware.vipclient.i18n.l2.common.PatternCategory;
9+
import com.vmware.vipclient.i18n.util.JSONUtils;
10+
911
import org.json.JSONObject;
1012

1113
import java.util.Locale;
@@ -78,7 +80,8 @@ public String formatDate(Object obj, String pattern, String timeZone, Locale loc
7880
PatternMessage p = (PatternMessage) factory.getMessageInstance(PatternMessage.class);
7981
JSONObject localeFormatData = p.getPatternMessage(locale);
8082
if(localeFormatData != null)
81-
dateFormatData = (JSONObject) localeFormatData.get(PatternCategory.DATES.toString());
83+
dateFormatData = (JSONObject) JSONUtils.getFromJSONObject(localeFormatData, PatternCategory.DATES.toString());
84+
// dateFormatData = (JSONObject) localeFormatData.get(PatternCategory.DATES.toString());
8285
if (dateFormatData == null) {
8386
throw new RuntimeException("Can't format " + obj + " without pattern data!");
8487
}
@@ -106,7 +109,8 @@ public String formatDate(Object obj, String pattern, String timeZone, String lan
106109
PatternMessage p = (PatternMessage) factory.getMessageInstance(PatternMessage.class);
107110
JSONObject localeFormatData = p.getPatternMessage(language, region);
108111
if(localeFormatData != null)
109-
dateFormatData = (JSONObject) localeFormatData.get(PatternCategory.DATES.toString());
112+
dateFormatData = (JSONObject) JSONUtils.getFromJSONObject(localeFormatData, PatternCategory.DATES.toString());
113+
// dateFormatData = (JSONObject) localeFormatData.get(PatternCategory.DATES.toString());
110114
if (dateFormatData == null) {
111115
throw new RuntimeException("Can't format " + obj + " without pattern data!");
112116
}

src/main/java/com/vmware/vipclient/i18n/base/instances/TranslationMessage.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,8 +414,10 @@ public boolean postStrings(final Locale locale, final String component,
414414
sourcesList.addAll(sources);
415415
List<JSONObject> removedList = new ArrayList<>();
416416
for (JSONObject jo : sourcesList) {
417-
String key = (String) jo.get(ConstantsKeys.KEY);
418-
String source = (String) jo.get(ConstantsKeys.SOURCE);
417+
String key = (String) JSONUtils.getFromJSONObject(jo, ConstantsKeys.KEY);
418+
String source = (String) JSONUtils.getFromJSONObject(jo, ConstantsKeys.SOURCE);
419+
// String key = (String) jo.get(ConstantsKeys.KEY);
420+
// String source = (String) jo.get(ConstantsKeys.SOURCE);
419421
dto.setKey(key);
420422
dto.setSource(source);
421423
dto.setLocale(ConstantsKeys.LATEST);

src/main/java/com/vmware/vipclient/i18n/formats/DateFormat.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.vmware.vipclient.i18n.exceptions.VIPJavaClientException;
1717
import com.vmware.vipclient.i18n.messages.api.url.URLUtils;
1818
import com.vmware.vipclient.i18n.util.ConstantsKeys;
19+
import com.vmware.vipclient.i18n.util.JSONUtils;
1920

2021
public class DateFormat extends BaseFormat {
2122
private Logger logger = LoggerFactory.getLogger(DateFormat.class);
@@ -54,12 +55,16 @@ private String getFormatFromRemote(String longDate, String pattern) {
5455
try {
5556
retJson = new JSONObject(retJsonStr);
5657
if (retJson != null) {
57-
JSONObject dataJson = (JSONObject) retJson
58-
.get(ConstantsKeys.DATA);
58+
JSONObject dataJson = (JSONObject) JSONUtils.getFromJSONObject(retJson, ConstantsKeys.DATA);
59+
// JSONObject dataJson = (JSONObject) retJson
60+
// .get(ConstantsKeys.DATA);
5961
if (dataJson != null) {
60-
format = dataJson.get(ConstantsKeys.FORMATTED_DATE) == null ? ""
61-
: dataJson.get(ConstantsKeys.FORMATTED_DATE)
62+
format = JSONUtils.getFromJSONObject(dataJson, ConstantsKeys.FORMATTED_DATE) == null ? ""
63+
: JSONUtils.getFromJSONObject(dataJson, ConstantsKeys.FORMATTED_DATE)
6264
.toString();
65+
// format = dataJson.get(ConstantsKeys.FORMATTED_DATE) == null ? ""
66+
// : dataJson.get(ConstantsKeys.FORMATTED_DATE)
67+
// .toString();
6368
}
6469
}
6570
} catch (JSONException e) {

src/main/java/com/vmware/vipclient/i18n/formats/NumberFormat.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.vmware.vipclient.i18n.exceptions.VIPJavaClientException;
1717
import com.vmware.vipclient.i18n.messages.api.url.URLUtils;
1818
import com.vmware.vipclient.i18n.util.ConstantsKeys;
19+
import com.vmware.vipclient.i18n.util.JSONUtils;
1920

2021
public class NumberFormat extends BaseFormat {
2122
Logger logger = LoggerFactory.getLogger(NumberFormat.class);
@@ -54,12 +55,16 @@ private String getFormatFromRemote(String number, String scale) {
5455
try {
5556
retJson = new JSONObject(retJsonStr);
5657
if (retJson != null) {
57-
JSONObject dataJson = (JSONObject) retJson
58-
.get(ConstantsKeys.DATA);
58+
JSONObject dataJson = (JSONObject) JSONUtils.getFromJSONObject(retJson, ConstantsKeys.DATA);
59+
// JSONObject dataJson = (JSONObject) retJson
60+
// .get(ConstantsKeys.DATA);
5961
if (dataJson != null) {
60-
format = dataJson.get(ConstantsKeys.FORMATTED_NUMBER) == null ? ""
61-
: dataJson.get(ConstantsKeys.FORMATTED_NUMBER)
62+
format = JSONUtils.getFromJSONObject(dataJson,ConstantsKeys.FORMATTED_NUMBER) == null ? ""
63+
: JSONUtils.getFromJSONObject(dataJson,ConstantsKeys.FORMATTED_NUMBER)
6264
.toString();
65+
// format = dataJson.get(ConstantsKeys.FORMATTED_NUMBER) == null ? ""
66+
// : dataJson.get(ConstantsKeys.FORMATTED_NUMBER)
67+
// .toString();
6368
}
6469
}
6570
} catch (JSONException e) {

src/main/java/com/vmware/vipclient/i18n/l2/number/parser/IntegerDigitsParser.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.json.JSONObject;
88

99
import com.vmware.vipclient.i18n.l2.common.PatternKeys;
10+
import com.vmware.vipclient.i18n.util.JSONUtils;
1011

1112
public class IntegerDigitsParser {
1213
private JSONObject numberSymbols;
@@ -17,7 +18,8 @@ public IntegerDigitsParser(JSONObject numberSymbols) {
1718

1819
public String groupIntegerDigits(String integerDigits, int groupingSize) {
1920
if (integerDigits.length() > groupingSize) {
20-
String localizedGroupSep = (String) numberSymbols.get(PatternKeys.GROUP);
21+
String localizedGroupSep = (String) JSONUtils.getFromJSONObject(numberSymbols, PatternKeys.GROUP);
22+
// String localizedGroupSep = (String) numberSymbols.get(PatternKeys.GROUP);
2123
String reverseNumStr = new StringBuilder(integerDigits).reverse().toString();
2224
StringBuilder groupedReverseNumStr = new StringBuilder(reverseNumStr);
2325
int index;

src/main/java/com/vmware/vipclient/i18n/l2/plural/parser/PluralRules.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.vmware.vipclient.i18n.l2.common.PatternCategory;
3030
import com.vmware.vipclient.i18n.l2.common.PatternKeys;
3131
import com.vmware.vipclient.i18n.messages.service.PatternService;
32+
import com.vmware.vipclient.i18n.util.JSONUtils;
3233

3334
public class PluralRules implements Serializable {
3435
static Logger logger = LoggerFactory.getLogger(PluralRules.class);
@@ -1247,7 +1248,8 @@ public static PluralRules forLocale(Locale locale, PluralType type) {
12471248
try {
12481249
JSONObject pluralPattern = new PatternService().getPatternsByCategory(locale.toLanguageTag(),
12491250
PatternCategory.PLURALS.toString());
1250-
pluralRules = (JSONObject) pluralPattern.get(PatternKeys.PLURALRULES);
1251+
pluralRules = (JSONObject) JSONUtils.getFromJSONObject(pluralPattern, PatternKeys.PLURALRULES);
1252+
// pluralRules = (JSONObject) pluralPattern.get(PatternKeys.PLURALRULES);
12511253
} catch (NullPointerException e) {
12521254
logger.info("Lack plural pattern!");
12531255
}

src/main/java/com/vmware/vipclient/i18n/l2/service/NumberFormatService.java

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import com.vmware.vipclient.i18n.l2.common.PatternKeys;
1212
import com.vmware.vipclient.i18n.l2.text.NumberFormat;
1313
import com.vmware.vipclient.i18n.util.ConstantsKeys;
14+
import com.vmware.vipclient.i18n.util.JSONUtils;
15+
1416
import org.json.JSONObject;
1517
import org.slf4j.Logger;
1618
import org.slf4j.LoggerFactory;
@@ -57,7 +59,8 @@ public String format(Object value, String currencyCode, Integer fractionSize, St
5759
validateCurrencyCode(currencyCode);
5860
numberFormatData = getCurrencyRelatedData(localeFormatData, currencyCode);
5961
} else {
60-
numberFormatData = (JSONObject) localeFormatData.get(PatternCategory.NUMBERS.toString());
62+
numberFormatData = (JSONObject) JSONUtils.getFromJSONObject(localeFormatData, PatternCategory.NUMBERS.toString());
63+
// numberFormatData = (JSONObject) localeFormatData.get(PatternCategory.NUMBERS.toString());
6164
}
6265
if (numberFormatData == null) {
6366
// return (String) value;
@@ -66,15 +69,19 @@ public String format(Object value, String currencyCode, Integer fractionSize, St
6669
NumberFormat numberFormat = NumberFormat.getInstance(numberFormatData, style);
6770
formatNumber = numberFormat.format(value, fractionSize);
6871
if (style == NumberFormat.PERCENTSTYLE) {
69-
String percentSymbol = (String) ((JSONObject) numberFormatData.get(PatternKeys.NUMBERSYMBOLS))
70-
.get(PatternKeys.PERCENTSIGN);
72+
String percentSymbol = (String) JSONUtils.getFromJSONObject(((JSONObject) JSONUtils.getFromJSONObject(numberFormatData, PatternKeys.NUMBERSYMBOLS))
73+
, PatternKeys.PERCENTSIGN);
74+
//String percentSymbol = (String) ((JSONObject) numberFormatData.get(PatternKeys.NUMBERSYMBOLS))
75+
// .get(PatternKeys.PERCENTSIGN);
7176
formatNumber = formatNumber.replace(String.valueOf(ConstantChars.PERCENTSIGN), percentSymbol);
7277
} else if (style == NumberFormat.CURRENCYSTYLE) {
73-
JSONObject currencyData = (JSONObject) numberFormatData.get(PatternKeys.CURRENCY);
78+
JSONObject currencyData = (JSONObject) JSONUtils.getFromJSONObject(numberFormatData, PatternKeys.CURRENCY);
79+
// JSONObject currencyData = (JSONObject) numberFormatData.get(PatternKeys.CURRENCY);
7480
// String narrowCurrencySymbol = (String) currencyData.get(PatternKeys.NARROWCURRENCYSYMBOL);
7581
// String currencySymbol = narrowCurrencySymbol != null? narrowCurrencySymbol : (String)
7682
// currencyData.get(PatternKeys.CURRENCYSYMBOL);
77-
String currencySymbol = (String) currencyData.get(PatternKeys.CURRENCYSYMBOL);
83+
String currencySymbol = (String) JSONUtils.getFromJSONObject(currencyData, PatternKeys.CURRENCYSYMBOL);
84+
// String currencySymbol = (String) currencyData.get(PatternKeys.CURRENCYSYMBOL);
7885
formatNumber = formatNumber.replace(String.valueOf(ConstantChars.CURRENCY_SIGN),
7986
currencySymbol);
8087
}
@@ -113,7 +120,8 @@ public String format(Object value, String currencyCode, Integer fractionSize, Lo
113120
}
114121
numberFormatData = getCurrencyRelatedData(localeFormatData, actualCurrencyCode);
115122
} else {
116-
numberFormatData = (JSONObject) localeFormatData.get(PatternCategory.NUMBERS.toString());
123+
numberFormatData = (JSONObject) JSONUtils.getFromJSONObject(localeFormatData, PatternCategory.NUMBERS.toString());
124+
// numberFormatData = (JSONObject) localeFormatData.get(PatternCategory.NUMBERS.toString());
117125
}
118126
if (numberFormatData == null) {
119127
// return (String) value;
@@ -122,15 +130,19 @@ public String format(Object value, String currencyCode, Integer fractionSize, Lo
122130
NumberFormat numberFormat = NumberFormat.getInstance(numberFormatData, style);
123131
formatNumber = numberFormat.format(value, fractionSize);
124132
if (style == NumberFormat.PERCENTSTYLE) {
125-
String percentSymbol = (String) ((JSONObject) numberFormatData.get(PatternKeys.NUMBERSYMBOLS))
126-
.get(PatternKeys.PERCENTSIGN);
133+
String percentSymbol = (String) JSONUtils.getFromJSONObject(((JSONObject) JSONUtils.getFromJSONObject(numberFormatData, PatternKeys.NUMBERSYMBOLS))
134+
,PatternKeys.PERCENTSIGN);
135+
// String percentSymbol = (String) ((JSONObject) numberFormatData.get(PatternKeys.NUMBERSYMBOLS))
136+
// .get(PatternKeys.PERCENTSIGN);
127137
formatNumber = formatNumber.replace(String.valueOf(ConstantChars.PERCENTSIGN), percentSymbol);
128138
} else if (style == NumberFormat.CURRENCYSTYLE) {
129-
JSONObject currencyData = (JSONObject) numberFormatData.get(PatternKeys.CURRENCY);
139+
JSONObject currencyData = (JSONObject) JSONUtils.getFromJSONObject(numberFormatData, PatternKeys.CURRENCY);
140+
// JSONObject currencyData = (JSONObject) numberFormatData.get(PatternKeys.CURRENCY);
130141
// String narrowCurrencySymbol = (String) currencyData.get(PatternKeys.NARROWCURRENCYSYMBOL);
131142
// String currencySymbol = narrowCurrencySymbol != null? narrowCurrencySymbol : (String)
132143
// currencyData.get(PatternKeys.CURRENCYSYMBOL);
133-
String currencySymbol = (String) currencyData.get(PatternKeys.CURRENCYSYMBOL);
144+
String currencySymbol = (String) JSONUtils.getFromJSONObject(currencyData, PatternKeys.CURRENCYSYMBOL);
145+
// String currencySymbol = (String) currencyData.get(PatternKeys.CURRENCYSYMBOL);
134146
formatNumber = formatNumber.replace(String.valueOf(ConstantChars.CURRENCY_SIGN),
135147
currencySymbol);
136148
}
@@ -139,17 +151,24 @@ public String format(Object value, String currencyCode, Integer fractionSize, Lo
139151

140152
private JSONObject getCurrencyRelatedData(JSONObject allCategoriesData, String currencyCode) {
141153
JSONObject currencyFormatData = new JSONObject();
142-
JSONObject numberFormatData = (JSONObject) allCategoriesData.get(PatternCategory.NUMBERS.toString());
143-
JSONObject currencyData = (JSONObject) ((JSONObject) allCategoriesData.get(PatternKeys.CURRENCIES))
144-
.get(currencyCode);
154+
JSONObject numberFormatData = (JSONObject) JSONUtils.getFromJSONObject(allCategoriesData, PatternCategory.NUMBERS.toString());
155+
JSONObject currencyData = (JSONObject) JSONUtils.getFromJSONObject(((JSONObject) JSONUtils.getFromJSONObject(allCategoriesData, PatternKeys.CURRENCIES))
156+
, currencyCode);
157+
// JSONObject numberFormatData = (JSONObject) allCategoriesData.get(PatternCategory.NUMBERS.toString());
158+
// JSONObject currencyData = (JSONObject) ((JSONObject) allCategoriesData.get(PatternKeys.CURRENCIES))
159+
// .get(currencyCode);
145160
if (currencyData == null) {
146161
throw new IllegalArgumentException("Unsupported currency code " + currencyCode + ".");
147162
}
148-
JSONObject currencySupplementalData = (JSONObject) ((JSONObject) allCategoriesData
149-
.get(PatternCategory.SUPPLEMENTAL.toString())).get(PatternKeys.CURRENCIES);
163+
JSONObject currencySupplementalData = (JSONObject) JSONUtils.getFromJSONObject(((JSONObject) JSONUtils.getFromJSONObject(allCategoriesData
164+
, PatternCategory.SUPPLEMENTAL.toString())), PatternKeys.CURRENCIES);
165+
//JSONObject currencySupplementalData = (JSONObject) ((JSONObject) allCategoriesData
166+
// .get(PatternCategory.SUPPLEMENTAL.toString())).get(PatternKeys.CURRENCIES);
150167
JSONObject fractionData = null;
151168
try {
152-
fractionData = (JSONObject) ((JSONObject) currencySupplementalData.get(PatternKeys.FRACTIONS)).get(currencyCode);
169+
fractionData = (JSONObject) JSONUtils.getFromJSONObject(((JSONObject) JSONUtils.getFromJSONObject(currencySupplementalData,
170+
PatternKeys.FRACTIONS)), currencyCode);
171+
// fractionData = (JSONObject) ((JSONObject) currencySupplementalData.get(PatternKeys.FRACTIONS)).get(currencyCode);
153172
} catch (org.json.JSONException e) {
154173
logger.info("NumberFormatService - Can't find fractionData, null will be set");
155174
}

0 commit comments

Comments
 (0)