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

Reduce duplicate code #13

Merged
merged 5 commits into from
Jan 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import com.ibm.icu.text.MessageFormat;

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

public abstract class AbstractBoundsDuration<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractBoundsDuration<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

// Translations
protected final MessageFormat boundsDurationMsg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import com.ibm.icu.text.MessageFormat;

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

public abstract class AbstractBoundsPeriod<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractBoundsPeriod<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

// Translations
protected final MessageFormat boundsPeriodMsg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import com.ibm.icu.text.MessageFormat;

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

public abstract class AbstractBoundsRange<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractBoundsRange<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

// Translations
protected final MessageFormat boundsRangeMsg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import com.ibm.icu.text.MessageFormat;

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

import java.util.Map;

public abstract class AbstractCountCountMax<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractCountCountMax<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

// Translations
protected final MessageFormat countMaxMsg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.functions.ListToString;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

import java.util.List;
import java.util.Map;

public abstract class AbstractDayOfWeek<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractDayOfWeek<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

// Translations
protected final MessageFormat dayOfWeekMsg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
import com.ibm.icu.text.MessageFormat;

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.concurrent.CompletableFuture;
import java.util.List;

public abstract class AbstractDurationDurationMax<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractDurationDurationMax<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

// Translations
protected final MessageFormat durationMsg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
import com.ibm.icu.text.MessageFormat;

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

import java.util.Map;
import java.util.concurrent.CompletableFuture;

public abstract class AbstractFrequencyFrequencyMax<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractFrequencyFrequencyMax<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

// Translations
protected final MessageFormat frequencyAndFrequencyMaxMsg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.functions.ListToString;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

public abstract class AbstractOffsetWhen<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractOffsetWhen<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

public AbstractOffsetWhen(C config) {
super(config);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
import com.ibm.icu.text.MessageFormat;

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

import java.math.BigDecimal;
import java.util.Map;
import java.util.concurrent.CompletableFuture;

public abstract class AbstractPeriodPeriodMax<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractPeriodPeriodMax<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

// Translations
protected final MessageFormat periodMaxMsg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.functions.ListToString;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;

public abstract class AbstractTimeOfDay<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractTimeOfDay<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

// Translations
protected final MessageFormat timeOfDayMsg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@

import jy95.fhir.common.config.FDSConfig;
import jy95.fhir.common.functions.ListToString;
import jy95.fhir.common.types.AbstractTranslator;
import jy95.fhir.common.types.AbstractTranslatorTiming;

import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;

public abstract class AbstractTimingEvent<C extends FDSConfig, D> extends AbstractTranslator<C, D> {
public abstract class AbstractTimingEvent<C extends FDSConfig, D> extends AbstractTranslatorTiming<C, D> {

// Translations
protected final MessageFormat timingEventMsg;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package jy95.fhir.common.types;

import jy95.fhir.common.config.FDSConfig;

public abstract class AbstractTranslatorTiming<C extends FDSConfig, D> extends AbstractTranslator<C, D>{

public AbstractTranslatorTiming(C config) {
super(config);
}

// To check if dosage object truly has a "Timing" object
protected abstract boolean hasTiming(D dosage);

// To check if timing object truly has the required condition for this translator
protected abstract boolean hasRequiredElements(D dosage);

@Override
public boolean isPresent(D dosage) {
return hasTiming(dosage) && hasRequiredElements(dosage);
}
}
47 changes: 47 additions & 0 deletions common/src/test/java/jy95/fhir/common/AbstractTranslatorTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package jy95.fhir.common;

import jy95.fhir.common.types.AbstractTranslator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.concurrent.CompletableFuture;

import jy95.fhir.common.config.FDSConfig;
import static org.junit.jupiter.api.Assertions.*;

public class AbstractTranslatorTest {

// Concrete implementation of AbstractTranslator
private static class TestTranslator extends AbstractTranslator<FDSConfig, String> {

public TestTranslator(FDSConfig config) {
super(config);
}

@Override
public CompletableFuture<String> convert(String dosage) {
return CompletableFuture.completedFuture("Converted: " + dosage);
}
}

private AbstractTranslator<FDSConfig, String> translator;

@BeforeEach
void setUp() {
translator = new TestTranslator(FDSConfig.builder().build());
}

@Test
void testConvert() {
String input = "dosage123";
CompletableFuture<String> result = translator.convert(input);

assertNotNull(result);
assertEquals("Converted: dosage123", result.join());
}

@Test
void testIsPresent() {
assertFalse(translator.isPresent("dosage123"));
}
}
10 changes: 7 additions & 3 deletions r4/src/main/java/jy95/fhir/r4/translators/BoundsDurationR4.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ public BoundsDurationR4(FDSConfigR4 config) {
quantityToStringR4 = new QuantityToStringR4();
}

@Override
protected boolean hasTiming(Dosage dosage) {
return dosage.hasTiming();
}

@Override
public CompletableFuture<String> convert(Dosage dosage) {
var bundle = getResources();
Expand All @@ -26,8 +31,7 @@ public CompletableFuture<String> convert(Dosage dosage) {
}

@Override
public boolean isPresent(Dosage dosage) {
return dosage.hasTiming() && dosage.getTiming().hasRepeat()
&& dosage.getTiming().getRepeat().hasBoundsDuration();
protected boolean hasRequiredElements(Dosage dosage) {
return dosage.getTiming().hasRepeat() && dosage.getTiming().getRepeat().hasBoundsDuration();
}
}
9 changes: 7 additions & 2 deletions r4/src/main/java/jy95/fhir/r4/translators/BoundsPeriodR4.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,12 @@ public CompletableFuture<String> convert(Dosage dosage) {
}

@Override
public boolean isPresent(Dosage dosage) {
return dosage.hasTiming() && dosage.getTiming().hasRepeat() && dosage.getTiming().getRepeat().hasBoundsPeriod();
protected boolean hasRequiredElements(Dosage dosage) {
return dosage.getTiming().hasRepeat() && dosage.getTiming().getRepeat().hasBoundsPeriod();
}

@Override
protected boolean hasTiming(Dosage dosage) {
return dosage.hasTiming();
}
}
9 changes: 7 additions & 2 deletions r4/src/main/java/jy95/fhir/r4/translators/BoundsRangeR4.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ public BoundsRangeR4(FDSConfigR4 config) {
rangeToStringR4 = new RangeToStringR4();
}

@Override
protected boolean hasTiming(Dosage dosage) {
return dosage.hasTiming();
}

@Override
public CompletableFuture<String> convert(Dosage dosage) {
var boundsRange = dosage.getTiming().getRepeat().getBoundsRange();
Expand All @@ -27,7 +32,7 @@ public CompletableFuture<String> convert(Dosage dosage) {
}

@Override
public boolean isPresent(Dosage dosage) {
return dosage.hasTiming() && dosage.getTiming().hasRepeat() && dosage.getTiming().getRepeat().hasBoundsRange();
protected boolean hasRequiredElements(Dosage dosage) {
return dosage.getTiming().hasRepeat() && dosage.getTiming().getRepeat().hasBoundsRange();
}
}
13 changes: 9 additions & 4 deletions r4/src/main/java/jy95/fhir/r4/translators/CountCountMaxR4.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,14 @@ public CompletableFuture<String> convert(Dosage dosage) {
}

@Override
public boolean isPresent(Dosage dosage) {
return dosage.hasTiming() && dosage.getTiming().hasRepeat()
&& (dosage.getTiming().getRepeat().hasCount() ||
dosage.getTiming().getRepeat().hasCountMax());
protected boolean hasRequiredElements(Dosage dosage) {
return dosage.getTiming().hasRepeat()
&& (dosage.getTiming().getRepeat().hasCount()
|| dosage.getTiming().getRepeat().hasCountMax());
}

@Override
protected boolean hasTiming(Dosage dosage) {
return dosage.hasTiming();
}
}
15 changes: 10 additions & 5 deletions r4/src/main/java/jy95/fhir/r4/translators/DayOfWeekR4.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@ public DayOfWeekR4(FDSConfigR4 config) {
super(config);
}

@Override
protected boolean hasTiming(Dosage dosage) {
return dosage.hasTiming();
}

@Override
protected boolean hasRequiredElements(Dosage dosage) {
return dosage.getTiming().hasRepeat() && dosage.getTiming().getRepeat().hasDayOfWeek();
}

@Override
public CompletableFuture<String> convert(Dosage dosage) {
return CompletableFuture.supplyAsync(() -> {
Expand All @@ -27,9 +37,4 @@ public CompletableFuture<String> convert(Dosage dosage) {
return daysToText(dayOfWeeksCodes);
});
}

@Override
public boolean isPresent(Dosage dosage) {
return dosage.hasTiming() && dosage.getTiming().hasRepeat() && dosage.getTiming().getRepeat().hasDayOfWeek();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,18 @@ protected boolean hasDurationMax(Dosage dosage) {
return dosage.getTiming().getRepeat().hasDurationMax();
}

@Override
protected boolean hasRequiredElements(Dosage dosage) {
return dosage.getTiming().hasRepeat()
&& dosage.getTiming().getRepeat().hasDurationUnit()
&& (hasDuration(dosage) || hasDurationMax(dosage));
}

@Override
protected boolean hasTiming(Dosage dosage) {
return dosage.hasTiming();
}

@Override
protected String turnDurationToString(Dosage dosage) {
var repeat = dosage.getTiming().getRepeat();
Expand All @@ -39,11 +51,4 @@ protected String turnDurationMaxToString(Dosage dosage) {
var durationText = quantityToString(durationUnit, durationQuantity);
return durationMaxMsg.format(new Object[]{durationText});
}

@Override
public boolean isPresent(Dosage dosage) {
return dosage.hasTiming() && dosage.getTiming().hasRepeat()
&& dosage.getTiming().getRepeat().hasDurationUnit()
&& (hasDuration(dosage) || hasDurationMax(dosage));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ public FrequencyFrequencyMaxR4(FDSConfigR4 config) {
super(config);
}

@Override
protected boolean hasTiming(Dosage dosage) {
return dosage.hasTiming();
}

@Override
protected boolean hasFrequency(Dosage dosage) {
return dosage.getTiming().getRepeat().hasFrequency();
Expand All @@ -20,6 +25,11 @@ protected boolean hasFrequencyMax(Dosage dosage) {
return dosage.getTiming().getRepeat().hasFrequencyMax();
}

@Override
protected boolean hasRequiredElements(Dosage dosage) {
return dosage.getTiming().hasRepeat() && (hasFrequency(dosage) || hasFrequencyMax(dosage));
}

@Override
protected String turnFrequencyAndFrequencyMaxToString(Dosage dosage) {
var repeat = dosage.getTiming().getRepeat();
Expand All @@ -41,10 +51,4 @@ protected String turnFrequencyToString(Dosage dosage) {
var frequency = repeat.getFrequency();
return formatFrequencyText(frequency);
}

@Override
public boolean isPresent(Dosage dosage) {
return dosage.hasTiming() && dosage.getTiming().hasRepeat()
&& (hasFrequency(dosage) || hasFrequencyMax(dosage));
}
}
Loading
Loading