code review

This commit is contained in:
Ken Stevens 2020-01-24 13:08:47 -05:00
parent 672902486a
commit 11dc087750
3 changed files with 20 additions and 20 deletions

View File

@ -126,14 +126,14 @@ abstract class BasePredicateBuilder {
} }
Predicate createPredicateNumeric(String theResourceName, Predicate createPredicateNumeric(String theResourceName,
String theParamName, String theParamName,
From<?, ? extends BaseResourceIndexedSearchParam> theFrom, From<?, ? extends BaseResourceIndexedSearchParam> theFrom,
CriteriaBuilder builder, CriteriaBuilder builder,
IQueryParameterType theParam, IQueryParameterType theParam,
ParamPrefixEnum thePrefix, ParamPrefixEnum thePrefix,
BigDecimal theValue, BigDecimal theValue,
final Expression<BigDecimal> thePath, final Expression<BigDecimal> thePath,
String invalidMessageName) { String invalidMessageName) {
Predicate num; Predicate num;
// Per discussions with Grahame Grieve and James Agnew on 11/13/19, modified logic for EQUAL and NOT_EQUAL operators below so as to // Per discussions with Grahame Grieve and James Agnew on 11/13/19, modified logic for EQUAL and NOT_EQUAL operators below so as to
// use exact value matching. The "fuzz amount" matching is still used with the APPROXIMATE operator. // use exact value matching. The "fuzz amount" matching is still used with the APPROXIMATE operator.
@ -157,7 +157,7 @@ abstract class BasePredicateBuilder {
num = builder.notEqual(thePath, theValue); num = builder.notEqual(thePath, theValue);
break; break;
case APPROXIMATE: case APPROXIMATE:
BigDecimal mul = FuzzCalculator.calculateFuzzAmount(thePrefix, theValue); BigDecimal mul = SearchFuzzUtil.calculateFuzzAmount(thePrefix, theValue);
BigDecimal low = theValue.subtract(mul, MathContext.DECIMAL64); BigDecimal low = theValue.subtract(mul, MathContext.DECIMAL64);
BigDecimal high = theValue.add(mul, MathContext.DECIMAL64); BigDecimal high = theValue.add(mul, MathContext.DECIMAL64);
Predicate lowPred; Predicate lowPred;

View File

@ -4,7 +4,7 @@ import ca.uhn.fhir.rest.param.ParamPrefixEnum;
import java.math.BigDecimal; import java.math.BigDecimal;
public interface FuzzCalculator { public interface SearchFuzzUtil {
/** /**
* Figures out the tolerance for a search. For example, if the user is searching for <code>4.00</code>, this method * Figures out the tolerance for a search. For example, if the user is searching for <code>4.00</code>, this method
* returns <code>0.005</code> because we shold actually match values which are * returns <code>0.005</code> because we shold actually match values which are

View File

@ -13,13 +13,13 @@ import static org.hamcrest.Matchers.startsWith;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
public class FuzzCalculatorTest { public class SearchFuzzUtilTest {
private static final Logger ourLog = LoggerFactory.getLogger(SearchBuilderTest.class); private static final Logger ourLog = LoggerFactory.getLogger(SearchBuilderTest.class);
@Test @Test
public void testCalculateMultiplierEqualNoDecimal() { public void testCalculateMultiplierEqualNoDecimal() {
BigDecimal in = new BigDecimal("200"); BigDecimal in = new BigDecimal("200");
BigDecimal out = FuzzCalculator.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in); BigDecimal out = SearchFuzzUtil.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in);
ourLog.info(out.toPlainString()); ourLog.info(out.toPlainString());
assertEquals("0.5", out.toPlainString()); assertEquals("0.5", out.toPlainString());
} }
@ -27,7 +27,7 @@ public class FuzzCalculatorTest {
@Test @Test
public void testCalculateMultiplierEqualDecimalPrecision200_() { public void testCalculateMultiplierEqualDecimalPrecision200_() {
BigDecimal in = new BigDecimal("200."); BigDecimal in = new BigDecimal("200.");
BigDecimal out = FuzzCalculator.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in); BigDecimal out = SearchFuzzUtil.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in);
ourLog.info(out.toPlainString()); ourLog.info(out.toPlainString());
assertEquals("0.5", out.toPlainString()); assertEquals("0.5", out.toPlainString());
} }
@ -35,7 +35,7 @@ public class FuzzCalculatorTest {
@Test @Test
public void testCalculateMultiplierEqualDecimalPrecision123_010() { public void testCalculateMultiplierEqualDecimalPrecision123_010() {
BigDecimal in = new BigDecimal("123.010"); BigDecimal in = new BigDecimal("123.010");
BigDecimal out = FuzzCalculator.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in); BigDecimal out = SearchFuzzUtil.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in);
ourLog.info(out.toPlainString()); ourLog.info(out.toPlainString());
assertThat(out.toPlainString(), startsWith("0.0005")); assertThat(out.toPlainString(), startsWith("0.0005"));
@ -47,7 +47,7 @@ public class FuzzCalculatorTest {
@Test @Test
public void testCalculateMultiplierEqualDecimalPrecision200_0() { public void testCalculateMultiplierEqualDecimalPrecision200_0() {
BigDecimal in = new BigDecimal("200.0"); BigDecimal in = new BigDecimal("200.0");
BigDecimal out = FuzzCalculator.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in); BigDecimal out = SearchFuzzUtil.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in);
ourLog.info(out.toPlainString()); ourLog.info(out.toPlainString());
assertThat(out.toPlainString(), startsWith("0.05000000")); assertThat(out.toPlainString(), startsWith("0.05000000"));
} }
@ -55,7 +55,7 @@ public class FuzzCalculatorTest {
@Test @Test
public void testCalculateMultiplierEqualDecimalPrecision200_3() { public void testCalculateMultiplierEqualDecimalPrecision200_3() {
BigDecimal in = new BigDecimal("200.3"); BigDecimal in = new BigDecimal("200.3");
BigDecimal out = FuzzCalculator.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in); BigDecimal out = SearchFuzzUtil.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in);
ourLog.info(out.toPlainString()); ourLog.info(out.toPlainString());
assertThat(out.toPlainString(), startsWith("0.05000000")); assertThat(out.toPlainString(), startsWith("0.05000000"));
} }
@ -63,7 +63,7 @@ public class FuzzCalculatorTest {
@Test @Test
public void testCalculateMultiplierEqualDecimalPrecision200_300() { public void testCalculateMultiplierEqualDecimalPrecision200_300() {
BigDecimal in = new BigDecimal("200.300"); BigDecimal in = new BigDecimal("200.300");
BigDecimal out = FuzzCalculator.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in); BigDecimal out = SearchFuzzUtil.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in);
ourLog.info(out.toPlainString()); ourLog.info(out.toPlainString());
assertThat(out.toPlainString(), startsWith("0.0005000000")); assertThat(out.toPlainString(), startsWith("0.0005000000"));
} }
@ -71,7 +71,7 @@ public class FuzzCalculatorTest {
@Test @Test
public void testCalculateMultiplierEqualDecimalPrecision200_30000000() { public void testCalculateMultiplierEqualDecimalPrecision200_30000000() {
BigDecimal in = new BigDecimal("200.30000000"); BigDecimal in = new BigDecimal("200.30000000");
BigDecimal out = FuzzCalculator.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in); BigDecimal out = SearchFuzzUtil.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in);
ourLog.info(out.toPlainString()); ourLog.info(out.toPlainString());
assertThat(out.toPlainString(), startsWith("0.000000005000000")); assertThat(out.toPlainString(), startsWith("0.000000005000000"));
} }
@ -79,7 +79,7 @@ public class FuzzCalculatorTest {
@Test @Test
public void testCalculateMultiplierEqualDecimalPrecision200_300000001() { public void testCalculateMultiplierEqualDecimalPrecision200_300000001() {
BigDecimal in = new BigDecimal("200.300000001"); BigDecimal in = new BigDecimal("200.300000001");
BigDecimal out = FuzzCalculator.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in); BigDecimal out = SearchFuzzUtil.calculateFuzzAmount(ParamPrefixEnum.EQUAL, in);
ourLog.info(out.toPlainString()); ourLog.info(out.toPlainString());
assertThat(out.toPlainString(), startsWith("0.0000000005000000")); assertThat(out.toPlainString(), startsWith("0.0000000005000000"));
} }
@ -87,7 +87,7 @@ public class FuzzCalculatorTest {
@Test @Test
public void testCalculateMultiplierApprox() { public void testCalculateMultiplierApprox() {
BigDecimal in = new BigDecimal("200"); BigDecimal in = new BigDecimal("200");
BigDecimal out = FuzzCalculator.calculateFuzzAmount(ParamPrefixEnum.APPROXIMATE, in); BigDecimal out = SearchFuzzUtil.calculateFuzzAmount(ParamPrefixEnum.APPROXIMATE, in);
ourLog.info(out.toPlainString()); ourLog.info(out.toPlainString());
assertThat(out.toPlainString(), startsWith("20.000")); assertThat(out.toPlainString(), startsWith("20.000"));
} }