Skip to content

Commit

Permalink
perf: UnitsOfTimeFormatter instead of properties files
Browse files Browse the repository at this point in the history
  • Loading branch information
jy95 committed Feb 9, 2025
1 parent 98be4c1 commit a6de24c
Show file tree
Hide file tree
Showing 12 changed files with 37 additions and 104 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ public static ResourceBundle selectResourceBundle(Locale locale) {
"common",
"daysOfWeek",
"eventTiming",
"quantityComparator",
"unitsOfTime"
"quantityComparator"
);
return ResourceBundle.getBundle(
bundleControl.getBaseName(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import io.github.jy95.fds.common.config.FDSConfig;
import io.github.jy95.fds.common.types.TranslatorTiming;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Locale;
import java.util.ResourceBundle;
Expand Down Expand Up @@ -79,19 +78,6 @@ default CompletableFuture<String> convert(D dosage) {
});
}

/**
* Converts the duration quantity and unit into a formatted string.
*
* @param bundle The resourceBundle to use
* @param durationUnit the unit code of duration (e.g., "d", "h").
* @param quantity the quantity of the duration.
* @return the formatted string representing the duration.
*/
default String quantityToString(ResourceBundle bundle, String durationUnit, BigDecimal quantity){
var commonDurationMsg = bundle.getString("withCount." + durationUnit);
return MessageFormat.format(commonDurationMsg, quantity);
}

/**
* Determines if the dosage data contains a valid "duration" value.
*
Expand Down
17 changes: 0 additions & 17 deletions common/src/main/resources/unitsOfTime_de.properties

This file was deleted.

17 changes: 0 additions & 17 deletions common/src/main/resources/unitsOfTime_en.properties

This file was deleted.

17 changes: 0 additions & 17 deletions common/src/main/resources/unitsOfTime_fr.properties

This file was deleted.

17 changes: 0 additions & 17 deletions common/src/main/resources/unitsOfTime_nl.properties

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package io.github.jy95.fds.r4.translators;

import com.ibm.icu.text.MessageFormat;
import io.github.jy95.fds.common.functions.UnitsOfTimeFormatter;
import io.github.jy95.fds.common.translators.DurationDurationMax;
import io.github.jy95.fds.r4.config.FDSConfigR4;
import org.hl7.fhir.r4.model.Dosage;

import java.util.Locale;
import java.util.ResourceBundle;

/**
Expand All @@ -21,9 +23,9 @@ public class DurationDurationMaxR4 implements DurationDurationMax<FDSConfigR4, D
protected final MessageFormat durationMaxMsg;

/**
* The resource bundle containing localized strings for translation.
* The locale for translation.
*/
private final ResourceBundle bundle;
private final Locale locale;

/**
* Constructor for {@code DurationDurationMaxR4}.
Expand All @@ -32,9 +34,9 @@ public class DurationDurationMaxR4 implements DurationDurationMax<FDSConfigR4, D
* @param bundle a {@link java.util.ResourceBundle} object
*/
public DurationDurationMaxR4(FDSConfigR4 config, ResourceBundle bundle) {
this.durationMsg = getDurationMsg(bundle, config.getLocale());
this.durationMaxMsg = getDurationMaxMsg(bundle, config.getLocale());
this.bundle = bundle;
this.locale = config.getLocale();
this.durationMsg = getDurationMsg(bundle, locale);
this.durationMaxMsg = getDurationMaxMsg(bundle, locale);
}

/** {@inheritDoc} */
Expand Down Expand Up @@ -70,7 +72,7 @@ public String turnDurationToString(Dosage dosage) {
var durationUnit = repeat.getDurationUnit().toCode();
var durationQuantity = repeat.getDuration();

var durationText = quantityToString(bundle, durationUnit, durationQuantity);
var durationText = UnitsOfTimeFormatter.formatWithCount(locale, durationUnit, durationQuantity);
return durationMsg.format(new Object[]{durationText});
}

Expand All @@ -81,7 +83,7 @@ public String turnDurationMaxToString(Dosage dosage) {
var durationUnit = repeat.getDurationUnit().toCode();
var durationQuantity = repeat.getDurationMax();

var durationText = quantityToString(bundle, durationUnit, durationQuantity);
var durationText = UnitsOfTimeFormatter.formatWithCount(locale, durationUnit, durationQuantity);
return durationMaxMsg.format(new Object[]{durationText});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

import com.ibm.icu.text.MessageFormat;
import io.github.jy95.fds.common.functions.ListToString;
import io.github.jy95.fds.common.functions.UnitsOfTimeFormatter;
import io.github.jy95.fds.common.translators.OffsetWhen;
import io.github.jy95.fds.r4.config.FDSConfigR4;
import lombok.RequiredArgsConstructor;
import org.hl7.fhir.r4.model.Dosage;
import org.hl7.fhir.r4.model.Enumeration;

import java.util.Locale;
import java.util.ResourceBundle;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
Expand All @@ -26,6 +28,11 @@ public class OffsetWhenR4 implements OffsetWhen<FDSConfigR4, Dosage> {
*/
private final ResourceBundle bundle;

/**
* The locale for translation.
*/
private final Locale locale;

/** {@inheritDoc} */
@Override
public CompletableFuture<String> convert(Dosage dosage) {
Expand Down Expand Up @@ -96,9 +103,8 @@ protected CompletableFuture<String> turnOffsetValueToText(int offset) {
.stream()
.filter(unit -> extractedTime.getOrDefault(unit, 0) > 0)
.map(unit -> {
var unitMsg = bundle.getString("withCount." + unit);
var amount = extractedTime.get(unit);
return MessageFormat.format(unitMsg, amount);
return UnitsOfTimeFormatter.formatWithCount(locale, unit, amount);
})
.collect(Collectors.toList());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ private static Map<DisplayOrder, Supplier<Translator<FDSConfigR4, Dosage>>> crea
suppliers.put(DisplayOrder.RATE_QUANTITY, () -> new RateQuantityR4(config, bundle));
suppliers.put(DisplayOrder.RATE_RANGE, () -> new RateRangeR4(config, bundle));
suppliers.put(DisplayOrder.RATE_RATIO, () -> new RateRatioR4(config, bundle));
suppliers.put(DisplayOrder.OFFSET_WHEN, () -> new OffsetWhenR4(bundle));
suppliers.put(DisplayOrder.OFFSET_WHEN, () -> new OffsetWhenR4(bundle, config.getLocale()));
suppliers.put(DisplayOrder.MAX_DOSE_PER_LIFETIME, () -> new MaxDosePerLifetimeR4(config, bundle));
suppliers.put(DisplayOrder.MAX_DOSE_PER_ADMINISTRATION, () -> new MaxDosePerAdministrationR4(config, bundle));
suppliers.put(DisplayOrder.MAX_DOSE_PER_PERIOD, () -> new MaxDosePerPeriodR4(config, bundle));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package io.github.jy95.fds.r5.translators;

import com.ibm.icu.text.MessageFormat;
import io.github.jy95.fds.common.functions.UnitsOfTimeFormatter;
import io.github.jy95.fds.common.translators.DurationDurationMax;
import io.github.jy95.fds.r5.config.FDSConfigR5;
import org.hl7.fhir.r5.model.Dosage;

import java.util.Locale;
import java.util.ResourceBundle;

/**
Expand All @@ -21,9 +23,9 @@ public class DurationDurationMaxR5 implements DurationDurationMax<FDSConfigR5, D
protected final MessageFormat durationMaxMsg;

/**
* The resource bundle containing localized strings for translation.
* The locale for translation.
*/
private final ResourceBundle bundle;
private final Locale locale;

/**
* Constructor for {@code DurationDurationMaxR5}.
Expand All @@ -32,9 +34,9 @@ public class DurationDurationMaxR5 implements DurationDurationMax<FDSConfigR5, D
* @param bundle a {@link java.util.ResourceBundle} object
*/
public DurationDurationMaxR5(FDSConfigR5 config, ResourceBundle bundle) {
this.durationMsg = getDurationMsg(bundle, config.getLocale());
this.durationMaxMsg = getDurationMaxMsg(bundle, config.getLocale());
this.bundle = bundle;
this.locale = config.getLocale();
this.durationMsg = getDurationMsg(bundle, locale);
this.durationMaxMsg = getDurationMaxMsg(bundle, locale);
}

/** {@inheritDoc} */
Expand Down Expand Up @@ -70,7 +72,7 @@ public String turnDurationToString(Dosage dosage) {
var durationUnit = repeat.getDurationUnit().toCode();
var durationQuantity = repeat.getDuration();

var durationText = quantityToString(bundle, durationUnit, durationQuantity);
var durationText = UnitsOfTimeFormatter.formatWithCount(locale, durationUnit, durationQuantity);
return durationMsg.format(new Object[]{durationText});
}

Expand All @@ -81,7 +83,7 @@ public String turnDurationMaxToString(Dosage dosage) {
var durationUnit = repeat.getDurationUnit().toCode();
var durationQuantity = repeat.getDurationMax();

var durationText = quantityToString(bundle, durationUnit, durationQuantity);
var durationText = UnitsOfTimeFormatter.formatWithCount(locale, durationUnit, durationQuantity);
return durationMaxMsg.format(new Object[]{durationText});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

import com.ibm.icu.text.MessageFormat;
import io.github.jy95.fds.common.functions.ListToString;
import io.github.jy95.fds.common.functions.UnitsOfTimeFormatter;
import io.github.jy95.fds.common.translators.OffsetWhen;
import io.github.jy95.fds.r5.config.FDSConfigR5;
import lombok.RequiredArgsConstructor;
import org.hl7.fhir.r5.model.Dosage;
import org.hl7.fhir.r5.model.Enumeration;

import java.util.Locale;
import java.util.ResourceBundle;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
Expand All @@ -26,6 +28,11 @@ public class OffsetWhenR5 implements OffsetWhen<FDSConfigR5, Dosage> {
*/
private final ResourceBundle bundle;

/**
* The locale for translation.
*/
private final Locale locale;

/** {@inheritDoc} */
@Override
public CompletableFuture<String> convert(Dosage dosage) {
Expand Down Expand Up @@ -96,9 +103,8 @@ protected CompletableFuture<String> turnOffsetValueToText(int offset) {
.stream()
.filter(unit -> extractedTime.getOrDefault(unit, 0) > 0)
.map(unit -> {
var unitMsg = bundle.getString("withCount." + unit);
var amount = extractedTime.get(unit);
return MessageFormat.format(unitMsg, amount);
return UnitsOfTimeFormatter.formatWithCount(locale, unit, amount);
})
.collect(Collectors.toList());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ private static Map<DisplayOrder, Supplier<Translator<FDSConfigR5, Dosage>>> crea
suppliers.put(DisplayOrder.RATE_QUANTITY, () -> new RateQuantityR5(config, bundle));
suppliers.put(DisplayOrder.RATE_RANGE, () -> new RateRangeR5(config, bundle));
suppliers.put(DisplayOrder.RATE_RATIO, () -> new RateRatioR5(config, bundle));
suppliers.put(DisplayOrder.OFFSET_WHEN, () -> new OffsetWhenR5(bundle));
suppliers.put(DisplayOrder.OFFSET_WHEN, () -> new OffsetWhenR5(bundle, config.getLocale()));
suppliers.put(DisplayOrder.MAX_DOSE_PER_LIFETIME, () -> new MaxDosePerLifetimeR5(config, bundle));
suppliers.put(DisplayOrder.MAX_DOSE_PER_ADMINISTRATION, () -> new MaxDosePerAdministrationR5(config, bundle));
suppliers.put(DisplayOrder.MAX_DOSE_PER_PERIOD, () -> new MaxDosePerPeriodR5(config, bundle));
Expand Down

0 comments on commit a6de24c

Please sign in to comment.