done
This commit is contained in:
parent
98ed9b8cbb
commit
abef4455eb
|
@ -41,7 +41,8 @@ public abstract class BaseDateTimeDt extends BasePrimitive<Date> {
|
||||||
|
|
||||||
private static final FastDateFormat ourHumanDateFormat = FastDateFormat.getDateInstance(FastDateFormat.MEDIUM);
|
private static final FastDateFormat ourHumanDateFormat = FastDateFormat.getDateInstance(FastDateFormat.MEDIUM);
|
||||||
private static final FastDateFormat ourHumanDateTimeFormat = FastDateFormat.getDateTimeInstance(FastDateFormat.MEDIUM, FastDateFormat.MEDIUM);
|
private static final FastDateFormat ourHumanDateTimeFormat = FastDateFormat.getDateTimeInstance(FastDateFormat.MEDIUM, FastDateFormat.MEDIUM);
|
||||||
|
private static final FastDateFormat ourXmlDateTimeFormat = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss");
|
||||||
|
public static final String NOW_DATE_CONSTANT = "%now";
|
||||||
private String myFractionalSeconds;
|
private String myFractionalSeconds;
|
||||||
private TemporalPrecisionEnum myPrecision = null;
|
private TemporalPrecisionEnum myPrecision = null;
|
||||||
private TimeZone myTimeZone;
|
private TimeZone myTimeZone;
|
||||||
|
@ -342,10 +343,6 @@ public abstract class BaseDateTimeDt extends BasePrimitive<Date> {
|
||||||
throwBadDateFormat(value);
|
throwBadDateFormat(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.equalsIgnoreCase("%now")) {
|
|
||||||
return new Date();
|
|
||||||
}
|
|
||||||
|
|
||||||
TemporalPrecisionEnum precision = null;
|
TemporalPrecisionEnum precision = null;
|
||||||
cal.set(Calendar.YEAR, parseInt(value, value.substring(0, 4), 0, 9999));
|
cal.set(Calendar.YEAR, parseInt(value, value.substring(0, 4), 0, 9999));
|
||||||
precision = TemporalPrecisionEnum.YEAR;
|
precision = TemporalPrecisionEnum.YEAR;
|
||||||
|
@ -638,8 +635,13 @@ public abstract class BaseDateTimeDt extends BasePrimitive<Date> {
|
||||||
@Override
|
@Override
|
||||||
public void setValueAsString(String theValue) throws DataFormatException {
|
public void setValueAsString(String theValue) throws DataFormatException {
|
||||||
clearTimeZone();
|
clearTimeZone();
|
||||||
|
|
||||||
|
if (NOW_DATE_CONSTANT.equalsIgnoreCase(theValue)) {
|
||||||
|
super.setValueAsString(ourXmlDateTimeFormat.format(new Date()));
|
||||||
|
} else {
|
||||||
super.setValueAsString(theValue);
|
super.setValueAsString(theValue);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the year, e.g. 2015
|
* Sets the year, e.g. 2015
|
||||||
|
|
|
@ -6,6 +6,7 @@ import ca.uhn.fhir.jpa.model.entity.ResourceIndexedSearchParamDate;
|
||||||
import ca.uhn.fhir.jpa.searchparam.MatchUrlService;
|
import ca.uhn.fhir.jpa.searchparam.MatchUrlService;
|
||||||
import ca.uhn.fhir.jpa.searchparam.extractor.ResourceIndexedSearchParams;
|
import ca.uhn.fhir.jpa.searchparam.extractor.ResourceIndexedSearchParams;
|
||||||
import ca.uhn.fhir.jpa.searchparam.registry.ISearchParamRegistry;
|
import ca.uhn.fhir.jpa.searchparam.registry.ISearchParamRegistry;
|
||||||
|
import ca.uhn.fhir.model.primitive.BaseDateTimeDt;
|
||||||
import ca.uhn.fhir.rest.api.RestSearchParameterTypeEnum;
|
import ca.uhn.fhir.rest.api.RestSearchParameterTypeEnum;
|
||||||
import ca.uhn.fhir.rest.param.ParamPrefixEnum;
|
import ca.uhn.fhir.rest.param.ParamPrefixEnum;
|
||||||
import org.hl7.fhir.r5.model.BaseDateTimeType;
|
import org.hl7.fhir.r5.model.BaseDateTimeType;
|
||||||
|
@ -20,13 +21,17 @@ import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@RunWith(SpringRunner.class)
|
@RunWith(SpringRunner.class)
|
||||||
public class InMemoryResourceMatcherTest {
|
public class InMemoryResourceMatcherTest {
|
||||||
public static final String OBS_DATE = "1970-10-17";
|
public static final String OBSERVATION_DATE = "1970-10-17";
|
||||||
private static final String EARLY_DATE = "1965-08-09";
|
private static final String EARLY_DATE = "1965-08-09";
|
||||||
private static final String LATE_DATE = "2000-06-29";
|
private static final String LATE_DATE = "2000-06-29";
|
||||||
|
|
||||||
|
@ -63,7 +68,7 @@ public class InMemoryResourceMatcherTest {
|
||||||
when(mySearchParamRegistry.getSearchParamByName(any(), any())).thenReturn(searchParams);
|
when(mySearchParamRegistry.getSearchParamByName(any(), any())).thenReturn(searchParams);
|
||||||
when(mySearchParamRegistry.getActiveSearchParam("Observation", "date")).thenReturn(searchParams);
|
when(mySearchParamRegistry.getActiveSearchParam("Observation", "date")).thenReturn(searchParams);
|
||||||
myObservation = new Observation();
|
myObservation = new Observation();
|
||||||
myObservation.setEffective(new DateTimeType(OBS_DATE));
|
myObservation.setEffective(new DateTimeType(OBSERVATION_DATE));
|
||||||
mySearchParams = extractDateSearchParam(myObservation);
|
mySearchParams = extractDateSearchParam(myObservation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +82,7 @@ public class InMemoryResourceMatcherTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testDateUnsupportedOp(ParamPrefixEnum theOperator) {
|
private void testDateUnsupportedOp(ParamPrefixEnum theOperator) {
|
||||||
InMemoryMatchResult result = myInMemoryResourceMatcher.match("date=" + theOperator.getValue() + OBS_DATE, myObservation, mySearchParams);
|
InMemoryMatchResult result = myInMemoryResourceMatcher.match("date=" + theOperator.getValue() + OBSERVATION_DATE, myObservation, mySearchParams);
|
||||||
assertFalse(result.supported());
|
assertFalse(result.supported());
|
||||||
assertEquals("Parameter: <date> Reason: The prefix " + theOperator + " is not supported for param type DATE", result.getUnsupportedReason());
|
assertEquals("Parameter: <date> Reason: The prefix " + theOperator + " is not supported for param type DATE", result.getUnsupportedReason());
|
||||||
}
|
}
|
||||||
|
@ -99,7 +104,7 @@ public class InMemoryResourceMatcherTest {
|
||||||
assertEquals(result.matched(), theEarly);
|
assertEquals(result.matched(), theEarly);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
InMemoryMatchResult result = myInMemoryResourceMatcher.match(equation + OBS_DATE, myObservation, mySearchParams);
|
InMemoryMatchResult result = myInMemoryResourceMatcher.match(equation + OBSERVATION_DATE, myObservation, mySearchParams);
|
||||||
assertTrue(result.getUnsupportedReason(), result.supported());
|
assertTrue(result.getUnsupportedReason(), result.supported());
|
||||||
assertEquals(result.matched(), theSame);
|
assertEquals(result.matched(), theSame);
|
||||||
}
|
}
|
||||||
|
@ -111,8 +116,32 @@ public class InMemoryResourceMatcherTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNow() {
|
public void testNowPast() {
|
||||||
InMemoryMatchResult result = myInMemoryResourceMatcher.match("date=lt%now", myObservation, mySearchParams);
|
InMemoryMatchResult result = myInMemoryResourceMatcher.match("date=lt" + BaseDateTimeDt.NOW_DATE_CONSTANT, myObservation, mySearchParams);
|
||||||
|
assertTrue(result.getUnsupportedReason(), result.supported());
|
||||||
|
assertTrue(result.matched());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNowNextWeek() {
|
||||||
|
Observation futureObservation = new Observation();
|
||||||
|
Instant nextWeek = Instant.now().plus(Duration.ofDays(7));
|
||||||
|
futureObservation.setEffective(new DateTimeType(Date.from(nextWeek)));
|
||||||
|
ResourceIndexedSearchParams searchParams = extractDateSearchParam(futureObservation);
|
||||||
|
|
||||||
|
InMemoryMatchResult result = myInMemoryResourceMatcher.match("date=gt" + BaseDateTimeDt.NOW_DATE_CONSTANT, futureObservation, searchParams);
|
||||||
|
assertTrue(result.getUnsupportedReason(), result.supported());
|
||||||
|
assertTrue(result.matched());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNowNextMinute() {
|
||||||
|
Observation futureObservation = new Observation();
|
||||||
|
Instant nextMinute = Instant.now().plus(Duration.ofMinutes(1));
|
||||||
|
futureObservation.setEffective(new DateTimeType(Date.from(nextMinute)));
|
||||||
|
ResourceIndexedSearchParams searchParams = extractDateSearchParam(futureObservation);
|
||||||
|
|
||||||
|
InMemoryMatchResult result = myInMemoryResourceMatcher.match("date=gt" + BaseDateTimeDt.NOW_DATE_CONSTANT, futureObservation, searchParams);
|
||||||
assertTrue(result.getUnsupportedReason(), result.supported());
|
assertTrue(result.getUnsupportedReason(), result.supported());
|
||||||
assertTrue(result.matched());
|
assertTrue(result.matched());
|
||||||
}
|
}
|
||||||
|
|
2
pom.xml
2
pom.xml
|
@ -562,7 +562,7 @@
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
||||||
<fhir_core_version>4.0.8-SNAPSHOT</fhir_core_version>
|
<fhir_core_version>4.0.10-SNAPSHOT</fhir_core_version>
|
||||||
<ucum_version>1.0.2</ucum_version>
|
<ucum_version>1.0.2</ucum_version>
|
||||||
|
|
||||||
<!-- configure timestamp in MANIFEST.MF for maven-war-provider -->
|
<!-- configure timestamp in MANIFEST.MF for maven-war-provider -->
|
||||||
|
|
Loading…
Reference in New Issue