Skip to content

Commit 06b8b1d

Browse files
committed
perf: UnitsOfTimeFormatter instead of properties files
1 parent a6de24c commit 06b8b1d

File tree

10 files changed

+23
-35
lines changed

10 files changed

+23
-35
lines changed

common/src/main/java/io/github/jy95/fds/common/functions/QuantityToString.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import java.math.BigDecimal;
66
import java.util.List;
7+
import java.util.Locale;
78
import java.util.ResourceBundle;
89
import java.util.concurrent.CompletableFuture;
910
import java.util.stream.Collectors;
@@ -73,12 +74,11 @@ default CompletableFuture<String> convert(ResourceBundle bundle, C config, Q qua
7374
/**
7475
* Provides enhanced logic for converting units to a human-readable string.
7576
*
76-
* @param bundle The resource bundle for localization.
7777
* @param config The configuration object for additional logic.
7878
* @param quantity The quantity object.
7979
* @return A CompletableFuture that resolves to the human-readable string for the unit.
8080
*/
81-
CompletableFuture<String> enhancedFromUnitToString(ResourceBundle bundle, C config, Q quantity);
81+
CompletableFuture<String> enhancedFromUnitToString(C config, Q quantity);
8282

8383
/**
8484
* Converts the comparator of a quantity to a human-readable string.

common/src/main/java/io/github/jy95/fds/common/translators/PeriodPeriodMax.java

-13
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,6 @@ default MessageFormat getPeriodMsg(ResourceBundle bundle, Locale locale) {
4242
return new MessageFormat(msg, locale);
4343
}
4444

45-
/**
46-
* Retrieves the localized unit name for the given period unit and amount.
47-
*
48-
* @param bundle The bundle to extract the key
49-
* @param periodUnit The unit code of the period (e.g., "d", "h").
50-
* @param amount The quantity associated with the period unit.
51-
* @return A localized string representing the unit.
52-
*/
53-
default String getUnit(ResourceBundle bundle, String periodUnit, BigDecimal amount) {
54-
var unitMsg = bundle.getString("withoutCount." + periodUnit);
55-
return MessageFormat.format(unitMsg, amount);
56-
}
57-
5845
/** {@inheritDoc} */
5946
@Override
6047
default CompletableFuture<String> convert(D dosage) {

r4/src/main/java/io/github/jy95/fds/r4/functions/QuantityToStringR4.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.ibm.icu.text.MessageFormat;
44
import io.github.jy95.fds.common.functions.QuantityToString;
5+
import io.github.jy95.fds.common.functions.UnitsOfTimeFormatter;
56
import io.github.jy95.fds.r4.config.FDSConfigR4;
67
import org.hl7.fhir.r4.model.Quantity;
78

@@ -48,14 +49,13 @@ public BigDecimal getValue(Quantity quantity) {
4849

4950
/** {@inheritDoc} */
5051
@Override
51-
public CompletableFuture<String> enhancedFromUnitToString(ResourceBundle bundle, FDSConfigR4 config, Quantity quantity) {
52+
public CompletableFuture<String> enhancedFromUnitToString(FDSConfigR4 config, Quantity quantity) {
5253
// Duration units are built-in supported
5354
if (quantity.hasSystem() && quantity.hasCode() && TIME_SYSTEMS.contains(quantity.getSystem())) {
5455
return CompletableFuture.supplyAsync(() -> {
5556
String code = quantity.getCode();
5657
BigDecimal amount = quantity.hasValue() ? quantity.getValue() : BigDecimal.ONE;
57-
String message = bundle.getString("withoutCount." + code);
58-
return MessageFormat.format(message, amount);
58+
return UnitsOfTimeFormatter.formatWithoutCount(config.getLocale(), code, amount);
5959
});
6060
}
6161

r4/src/main/java/io/github/jy95/fds/r4/functions/RangeToStringR4.java

-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ public CompletableFuture<String> getUnitText(ResourceBundle bundle, FDSConfigR4
5050
return QuantityToStringR4
5151
.getInstance()
5252
.enhancedFromUnitToString(
53-
bundle,
5453
config,
5554
(hasHigh) ? range.getHigh() : range.getLow()
5655
);

r4/src/main/java/io/github/jy95/fds/r4/functions/RatioToStringR4.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public CompletableFuture<String> convertDenominator(ResourceBundle bundle, FDSCo
8989
if (BigDecimal.ONE.equals(denominatorValue)) {
9090
return QuantityToStringR4
9191
.getInstance()
92-
.enhancedFromUnitToString(bundle, config, denominator);
92+
.enhancedFromUnitToString(config, denominator);
9393
}
9494

9595
return QuantityToStringR4

r4/src/main/java/io/github/jy95/fds/r4/translators/PeriodPeriodMaxR4.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.jy95.fds.r4.translators;
22

33
import com.ibm.icu.text.MessageFormat;
4+
import io.github.jy95.fds.common.functions.UnitsOfTimeFormatter;
45
import io.github.jy95.fds.common.translators.PeriodPeriodMax;
56
import io.github.jy95.fds.r4.config.FDSConfigR4;
67
import org.hl7.fhir.r4.model.Dosage;
@@ -23,9 +24,9 @@ public class PeriodPeriodMaxR4 implements PeriodPeriodMax<FDSConfigR4, Dosage> {
2324
protected final MessageFormat periodMsg;
2425

2526
/**
26-
* The resource bundle containing localized strings for translation.
27+
* The configuration object used by this API.
2728
*/
28-
private final ResourceBundle bundle;
29+
private final FDSConfigR4 config;
2930

3031
/**
3132
* Constructor for {@code PeriodPeriodMaxR4}.
@@ -34,7 +35,7 @@ public class PeriodPeriodMaxR4 implements PeriodPeriodMax<FDSConfigR4, Dosage> {
3435
* @param bundle a {@link java.util.ResourceBundle} object
3536
*/
3637
public PeriodPeriodMaxR4(FDSConfigR4 config, ResourceBundle bundle) {
37-
this.bundle = bundle;
38+
this.config = config;
3839
this.periodMaxMsg = getPeriodMaxMsg(bundle, config.getLocale());
3940
this.periodMsg = getPeriodMsg(bundle, config.getLocale());
4041
}
@@ -73,7 +74,7 @@ public String turnPeriodAndPeriodMaxToString(Dosage dosage) {
7374
var periodMin = repeat.getPeriod();
7475
var periodUnit = repeat.getPeriodUnit().toCode();
7576

76-
var unitText = getUnit(bundle, periodUnit, periodMax);
77+
var unitText = UnitsOfTimeFormatter.formatWithoutCount(config.getLocale(), periodUnit, periodMax);
7778
return formatPeriodAndPeriodMaxText(periodMin, periodMax, unitText);
7879
}
7980

@@ -85,7 +86,7 @@ public String turnPeriodToString(Dosage dosage) {
8586
var period = repeat.getPeriod();
8687
var periodUnit = repeat.getPeriodUnit().toCode();
8788

88-
var unitText = getUnit(bundle, periodUnit, period);
89+
var unitText = UnitsOfTimeFormatter.formatWithoutCount(config.getLocale(), periodUnit, period);
8990
return formatPeriodText(period, unitText);
9091
}
9192

r5/src/main/java/io/github/jy95/fds/r5/functions/QuantityToStringR5.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import com.ibm.icu.text.MessageFormat;
44
import io.github.jy95.fds.common.functions.QuantityToString;
5+
import io.github.jy95.fds.common.functions.UnitsOfTimeFormatter;
56
import io.github.jy95.fds.r5.config.FDSConfigR5;
67
import org.hl7.fhir.r5.model.Quantity;
78

89
import java.math.BigDecimal;
10+
import java.util.Locale;
911
import java.util.ResourceBundle;
1012
import java.util.concurrent.CompletableFuture;
1113

@@ -48,14 +50,13 @@ public BigDecimal getValue(Quantity quantity) {
4850

4951
/** {@inheritDoc} */
5052
@Override
51-
public CompletableFuture<String> enhancedFromUnitToString(ResourceBundle bundle, FDSConfigR5 config, Quantity quantity) {
53+
public CompletableFuture<String> enhancedFromUnitToString(FDSConfigR5 config, Quantity quantity) {
5254
// Duration units are built-in supported
5355
if (quantity.hasSystem() && quantity.hasCode() && TIME_SYSTEMS.contains(quantity.getSystem())) {
5456
return CompletableFuture.supplyAsync(() -> {
5557
String code = quantity.getCode();
5658
BigDecimal amount = quantity.hasValue() ? quantity.getValue() : BigDecimal.ONE;
57-
String message = bundle.getString("withoutCount." + code);
58-
return MessageFormat.format(message, amount);
59+
return UnitsOfTimeFormatter.formatWithoutCount(config.getLocale(), code, amount);
5960
});
6061
}
6162

r5/src/main/java/io/github/jy95/fds/r5/functions/RangeToStringR5.java

-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ public CompletableFuture<String> getUnitText(ResourceBundle bundle, FDSConfigR5
5050
return QuantityToStringR5
5151
.getInstance()
5252
.enhancedFromUnitToString(
53-
bundle,
5453
config,
5554
(hasHigh) ? range.getHigh() : range.getLow()
5655
);

r5/src/main/java/io/github/jy95/fds/r5/functions/RatioToStringR5.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public CompletableFuture<String> convertDenominator(ResourceBundle bundle, FDSCo
8989
if (BigDecimal.ONE.equals(denominatorValue)) {
9090
return QuantityToStringR5
9191
.getInstance()
92-
.enhancedFromUnitToString(bundle, config, denominator);
92+
.enhancedFromUnitToString(config, denominator);
9393
}
9494

9595
return QuantityToStringR5

r5/src/main/java/io/github/jy95/fds/r5/translators/PeriodPeriodMaxR5.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.jy95.fds.r5.translators;
22

33
import com.ibm.icu.text.MessageFormat;
4+
import io.github.jy95.fds.common.functions.UnitsOfTimeFormatter;
45
import io.github.jy95.fds.common.translators.PeriodPeriodMax;
56
import io.github.jy95.fds.r5.config.FDSConfigR5;
67
import org.hl7.fhir.r5.model.Dosage;
@@ -23,9 +24,9 @@ public class PeriodPeriodMaxR5 implements PeriodPeriodMax<FDSConfigR5, Dosage> {
2324
protected final MessageFormat periodMsg;
2425

2526
/**
26-
* The resource bundle containing localized strings for translation.
27+
* The configuration object used by this API.
2728
*/
28-
private final ResourceBundle bundle;
29+
private final FDSConfigR5 config;
2930

3031
/**
3132
* Constructor for {@code PeriodPeriodMaxR5}.
@@ -34,7 +35,7 @@ public class PeriodPeriodMaxR5 implements PeriodPeriodMax<FDSConfigR5, Dosage> {
3435
* @param bundle a {@link java.util.ResourceBundle} object
3536
*/
3637
public PeriodPeriodMaxR5(FDSConfigR5 config, ResourceBundle bundle) {
37-
this.bundle = bundle;
38+
this.config = config;
3839
this.periodMaxMsg = getPeriodMaxMsg(bundle, config.getLocale());
3940
this.periodMsg = getPeriodMsg(bundle, config.getLocale());
4041
}
@@ -73,7 +74,7 @@ public String turnPeriodAndPeriodMaxToString(Dosage dosage) {
7374
var periodMin = repeat.getPeriod();
7475
var periodUnit = repeat.getPeriodUnit().toCode();
7576

76-
var unitText = getUnit(bundle, periodUnit, periodMax);
77+
var unitText = UnitsOfTimeFormatter.formatWithoutCount(config.getLocale(), periodUnit, periodMax);
7778
return formatPeriodAndPeriodMaxText(periodMin, periodMax, unitText);
7879
}
7980

@@ -85,7 +86,7 @@ public String turnPeriodToString(Dosage dosage) {
8586
var period = repeat.getPeriod();
8687
var periodUnit = repeat.getPeriodUnit().toCode();
8788

88-
var unitText = getUnit(bundle, periodUnit, period);
89+
var unitText = UnitsOfTimeFormatter.formatWithoutCount(config.getLocale(), periodUnit, period);
8990
return formatPeriodText(period, unitText);
9091
}
9192

0 commit comments

Comments
 (0)