Skip to content

Commit

Permalink
Rel 6 10 mb (#5441)
Browse files Browse the repository at this point in the history
* Allow cached search with consent active when safe (#5387)

Allow the search cache when using consent if safe

* Change package installation behaviour such that it updates the existing SearchParameter base with remaining resources (#5376)

* Change package installation behavior such that it updates the existing SearchParameter base with remaining resources

* Change package installation behavior such that it updates the existing SearchParameter base with remaining resources

* Use resourceType in the package installer output to fix tests. Minor change with resourceType condition. Update changelog description to make it more readable.

* Use resourceType in the package installer output to fix tests. Minor change with resourceType condition. Update changelog description to make it more readable.

* Transaction with conditional update fails if SearchNarrowingInterceptor is registered and Enabled Partitioning (#5389)

* Transaction with conditional update fails if SearchNarrowingInterceptor is registered and Enabled Partitioning - Implementation

* Reverse Chaining searches returns an error when invoked with parameter _lastUpdated. (#5177)

* version bump

* Bump to core release 6.0.22 (#5028)

* Bump to core release 6.0.16

* Bump to core version 6.0.20

* Fix errors thrown as a result of VersionSpecificWorkerContextWrapper

* Bump to core 6.0.22

* Resolve 5126 hfj res ver prov might cause migration error on db that automatically indexes the primary key (#5127)

* dropped old index FK_RESVERPROV_RES_PID on RES_PID column before adding IDX_RESVERPROV_RES_PID

* added changelog

* changed to valid version number

* changed to valid version number, need to be ordered by version number...

* 5123 - Use DEFAULT partition for server-based requests if none specified (#5124)

5123 - Use DEFAULT partition for server-based requests if none specified

* consent remove all suppresses next link in bundle (#5119)

* added FIXME with source of issue

* added FIXME with root cause

* added FIXME with root cause

* Providing solution to the issue and removing fixmes.

* Providing changelog

* auto-formatting.

* Adding new test.

* Adding a new test for standard paging

* let's try this and see if it works...?

* fix tests

* cleanup to trigger a new run

* fixing tests

---------

Co-authored-by: Ken Stevens <[email protected]>
Co-authored-by: peartree <[email protected]>

* 5117 MDM Score for No Match Fields Should Not Be Included in Total Score  (#5118)

* fix, test, changelog

* fix, test, changelog

---------

Co-authored-by: justindar <[email protected]>

* _source search parameter needs to support modifiers (#5095)

_source search parameter needs to support modifiers - added support form :contains, :missing, :above modifiers

* Fix HFQL docs (#5151)

* Expunge operation on codesystem may throw 500 internal error with precondition fail message. (#5156)

* Initial failing test.

* Solution with changelog.

* fixing format.

* Addressing comment from code review.

* fixing failing test.

---------

Co-authored-by: peartree <[email protected]>

* documentation update (#5154)

Co-authored-by: leif stawnyczy <[email protected]>

* Fix hsql jdbc driver deps (#5168)

Avoid non-included classes in jdbc driver dependencies.

* $delete-expunge over 10k resources will now delete all resources (#5144)

* First commit with very rough fix and unit test.

* Refinements to ResourceIdListStep and Batch2DaoSvcImpl.  Make LoadIdsStepTest pass.   Enhance Batch2DaoSvcImplTest.

* Spotless

* Fix checkstyle errors.

* Fix test failures.

* Minor refactoring.  New unit test.  Finalize changelist.

* Spotless fix.

* Delete now useless code from unit test.

* Delete more useless code.

* Test pre-commit hook

* More spotless fixes.

* Address most code review feedback.

* Remove use of pageSize parameter and see if this breaks the pipeline.

* Remove use of pageSize parameter and see if this breaks the pipeline.

* Fix the noUrl case by passing an unlimited Pegeable instead.  Effectively stop using page size for most databases.

* Deprecate the old method and have it call the new one by default.

* updating documentation (#5170)

Co-authored-by: leif stawnyczy <[email protected]>

* _source search parameter modifiers for Subscription matching (#5159)

* _source search parameter modifiers for Subscription matching - test, implementation and changelog

* first fix

* tests and preliminary fixes

* wip, commit before switching to release branch.

* adding capability to handle _lastUpdated in reverse search (_has)

* adding changelog

* applying spotless.

* addressing code review comments.

---------

Co-authored-by: tadgh <[email protected]>
Co-authored-by: dotasek <[email protected]>
Co-authored-by: Steve Corbett <[email protected]>
Co-authored-by: Ken Stevens <[email protected]>
Co-authored-by: Ken Stevens <[email protected]>
Co-authored-by: peartree <[email protected]>
Co-authored-by: jdar8 <[email protected]>
Co-authored-by: justindar <[email protected]>
Co-authored-by: volodymyr-korzh <[email protected]>
Co-authored-by: Nathan Doef <[email protected]>
Co-authored-by: Etienne Poirier <[email protected]>
Co-authored-by: TipzCM <[email protected]>
Co-authored-by: leif stawnyczy <[email protected]>
Co-authored-by: michaelabuckley <[email protected]>
Co-authored-by: Luke deGruchy <[email protected]>

* Br 20231019 add cr settings for cds hooks (#5394)

* Add settings used in CR CDS Services.  Remove config dependency on Spring Boot.

* Add changelog

* Use String.format rather than concat strings

* spotless apply

* Add javadoc

* Upgrade notes for the forced-id change (#5400)

Add upgrade notes for forced-id

* Clean stale search results more aggressively. (#5396)

Use bulk DMA statements when cleaning the search cache.
The cleaner job now works as long as possible until a deadline based on the scheduling frequency.

* bump version of clinical reasoning (#5406)

* Transaction fails if SearchNarrowingInterceptor is registered and Partitioning Enabled - fix cross-tenant requests failure (#5408)

* Transaction with conditional update fails if SearchNarrowingInterceptor is registered and Enabled Partitioning - fix and tests added

* removed unused alias from SQL query of mdm-clear (#5416)

* Issue 5418 support Boolean class return type in BaseInterceptorService (#5421)

* Enable child classes to use Boolean class return type

* spotless

---------

Co-authored-by: juan.marchionatto <[email protected]>

* If AutoInflateBinaries is enabled, binaries are created on the disk only for the first resource entry of the bundle (#5420)

* If AutoInflateBinaries is enabled, binaries created on disk by bundled requests are created only for the first resource entry - fix

* Revert "Issue 5418 support Boolean class return type in BaseInterceptorService (#5421)" (#5423)

This reverts commit 4e295a5.

Co-authored-by: Nathan Doef <[email protected]>

* Use new FHIR_ID column for sorting (#5405)

* Sort `_id` using new FHIR_ID column.
* Fix old tests that put client-assigned ids first.

* Better indexing for sort

* Bump core to 6.1.2.2 (#5425)

* Bump core to 6.1.2.1

Patch release that uses https for primary org.hl7.fhir.core package server

* Bump core to 6.1.2.2

* Make sure to return always a value for Boolean class return type. (#5424)

Implement change in a non-disruptive way for overriders

Co-authored-by: juan.marchionatto <[email protected]>

* Add non-standard __pid SP for breaking ties cheaply during sorts. (#5428)

Add a non-standard __pid SP.

* Review changes for new _pid SP. (#5430)

Change name to _pid to match our standard and add warning.

* Fix VersionCanonicalizer conversion from R5 into DSTU2 for CapabilityStatement, Parameters and StructuredDefinition (#5432)

* Fix VersionCanonicalizer conversion from R5 into DSTU2 for CapabilityStatement, Parameters and StructuredDefinition.

* Fix spotless issue

* CVEs for 6.10.0 (#5433)

* Bump jetty

* Bump okio-jvm

* 8.2.0 mysql connector

* Jena and elastic bumps

* Fix test

* 5412 post bundle on partition incorrect response.link shown (#5413)

* Initial fix and unit test provided

* spottless check

* Made relevant changes to make solution version agnostic

* relevant logic changes made

* spotless changes made

* New logic added to fix failing test cases

* formatting

* New logic to make the function more robust

* spotless checks

* Left a trailing slash in the tests

* Made relevant test changes and changed logic

* spotless changes

* Update hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_0/5412-during-partition-fullUrl-not-shown-in-response.yaml

changing changelog

Co-authored-by: volodymyr-korzh <[email protected]>

* Formatting requirements

---------

Co-authored-by: volodymyr-korzh <[email protected]>

* Resolve We don't have guaranteed subscription delivery if a resource is too large (#5414)

* first fix

* - added the ability to handle null payload to SubscriptionDeliveringMessageSubscriber and SubscriptionDeliveringEmailSubscriber
- refactored code to reduce repeated code
- cleaned unnecessary comments and reformatted files

* Changed myResourceModifiedMessagePersistenceSvc to be autowired

* removed unused import

* added error handling when inflating the message to email and message subscriber

* reformatted code

* Fixing subscription tests with mocked IResourceModifiedMessagePersistenceSvc

* Changes by gary

* Reformatted file

* fixed failed tests

* implemented test for message and email delivery subscriber. Fixed logical error. Reformatted File.

* - implemented IT
- fixed logical error
- added changelog

* fix for cdr tests, NOTE: this makes the assumption that we will always succeed for inflating the database in the tests that uses SynchronousSubscriptionMatcherInterceptor

* fix for cdr tests, NOTE: this makes the assumption that we will always succeed for inflating the database in the tests that uses SynchronousSubscriptionMatcherInterceptor

* resolve code review comments

* reformatted files

* fixed tests

* Fix for failing IT test in jpaserver-starter (#5435)

Co-authored-by: dotasek <[email protected]>

* wip

---------

Co-authored-by: michaelabuckley <[email protected]>
Co-authored-by: Martha Mitran <[email protected]>
Co-authored-by: volodymyr-korzh <[email protected]>
Co-authored-by: TynerGjs <[email protected]>
Co-authored-by: dotasek <[email protected]>
Co-authored-by: Steve Corbett <[email protected]>
Co-authored-by: Ken Stevens <[email protected]>
Co-authored-by: Ken Stevens <[email protected]>
Co-authored-by: peartree <[email protected]>
Co-authored-by: jdar8 <[email protected]>
Co-authored-by: justindar <[email protected]>
Co-authored-by: Nathan Doef <[email protected]>
Co-authored-by: Etienne Poirier <[email protected]>
Co-authored-by: TipzCM <[email protected]>
Co-authored-by: leif stawnyczy <[email protected]>
Co-authored-by: Luke deGruchy <[email protected]>
Co-authored-by: Brenin Rhodes <[email protected]>
Co-authored-by: Justin McKelvy <[email protected]>
Co-authored-by: jmarchionatto <[email protected]>
Co-authored-by: juan.marchionatto <[email protected]>
Co-authored-by: Nathan Doef <[email protected]>
Co-authored-by: LalithE <[email protected]>
Co-authored-by: dotasek <[email protected]>
  • Loading branch information
24 people committed Nov 10, 2023
1 parent 3bba9fb commit 777859a
Show file tree
Hide file tree
Showing 136 changed files with 2,802 additions and 996 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -263,10 +263,14 @@ public boolean hasHooks(POINTCUT thePointcut) {
return myRegisteredPointcuts.contains(thePointcut);
}

protected Class<?> getBooleanReturnType() {
return boolean.class;
}

@Override
public boolean callHooks(POINTCUT thePointcut, HookParams theParams) {
assert haveAppropriateParams(thePointcut, theParams);
assert thePointcut.getReturnType() == void.class || thePointcut.getReturnType() == boolean.class;
assert thePointcut.getReturnType() == void.class || thePointcut.getReturnType() == getBooleanReturnType();

Object retValObj = doCallHooks(thePointcut, theParams, true);
return (Boolean) retValObj;
Expand All @@ -282,14 +286,16 @@ private Object doCallHooks(POINTCUT thePointcut, HookParams theParams, Object th
for (BaseInvoker nextInvoker : invokers) {
Object nextOutcome = nextInvoker.invoke(theParams);
Class<?> pointcutReturnType = thePointcut.getReturnType();
if (pointcutReturnType.equals(boolean.class)) {
if (pointcutReturnType.equals(getBooleanReturnType())) {
Boolean nextOutcomeAsBoolean = (Boolean) nextOutcome;
if (Boolean.FALSE.equals(nextOutcomeAsBoolean)) {
ourLog.trace("callHooks({}) for invoker({}) returned false", thePointcut, nextInvoker);
theRetVal = false;
break;
} else {
theRetVal = true;
}
} else if (pointcutReturnType.equals(void.class) == false) {
} else if (!pointcutReturnType.equals(void.class)) {
if (nextOutcome != null) {
theRetVal = nextOutcome;
break;
Expand Down Expand Up @@ -349,7 +355,7 @@ private List<BaseInvoker> union(List<BaseInvoker>... theInvokersLists) {

List<BaseInvoker> retVal;

if (haveMultiple == false) {
if (!haveMultiple) {

// The global list doesn't need to be sorted every time since it's sorted on
// insertion each time. Doing so is a waste of cycles..
Expand Down Expand Up @@ -485,9 +491,9 @@ private HookInvoker(
myMethod = theHookMethod;

Class<?> returnType = theHookMethod.getReturnType();
if (myPointcut.getReturnType().equals(boolean.class)) {
if (myPointcut.getReturnType().equals(getBooleanReturnType())) {
Validate.isTrue(
boolean.class.equals(returnType) || void.class.equals(returnType),
getBooleanReturnType().equals(returnType) || void.class.equals(returnType),
"Method does not return boolean or void: %s",
theHookMethod);
} else if (myPointcut.getReturnType().equals(void.class)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,8 @@ public class Constants {
public static final String PARAM_PRETTY_VALUE_FALSE = "false";
public static final String PARAM_PRETTY_VALUE_TRUE = "true";
public static final String PARAM_PROFILE = "_profile";
public static final String PARAM_PID = "_pid";

public static final String PARAM_QUERY = "_query";
public static final String PARAM_RESPONSE_URL = "response-url"; // Used in messaging
public static final String PARAM_REVINCLUDE = "_revinclude";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ public SearchParameter searchParameterToCanonical(IBaseResource theSearchParamet
@Override
public IBaseParameters parametersFromCanonical(Parameters theParameters) {
Resource converted = VersionConvertorFactory_10_40.convertResource(theParameters, ADVISOR_10_40);
return (IBaseParameters) reencodeToHl7Org(converted);
return (IBaseParameters) reencodeFromHl7Org(converted);
}

@Override
Expand All @@ -470,7 +470,7 @@ public StructureDefinition structureDefinitionToCanonical(IBaseResource theResou
@Override
public IBaseResource structureDefinitionFromCanonical(StructureDefinition theResource) {
Resource converted = VersionConvertorFactory_10_50.convertResource(theResource, ADVISOR_10_50);
return reencodeToHl7Org(converted);
return reencodeFromHl7Org(converted);
}

@Override
Expand Down Expand Up @@ -514,7 +514,7 @@ public IBaseResource searchParameterFromCanonical(SearchParameter theResource) {
@Override
public IBaseConformance capabilityStatementFromCanonical(CapabilityStatement theResource) {
Resource converted = VersionConvertorFactory_10_50.convertResource(theResource, ADVISOR_10_50);
return (IBaseConformance) reencodeToHl7Org(converted);
return (IBaseConformance) reencodeFromHl7Org(converted);
}

private Resource reencodeToHl7Org(IBaseResource theInput) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,96 +2,120 @@

import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.model.dstu2.composite.CodingDt;
import ca.uhn.fhir.model.dstu2.resource.Conformance;
import ca.uhn.fhir.util.HapiExtensions;
import org.apache.commons.lang3.StringUtils;
import org.hl7.fhir.convertors.factory.VersionConvertorFactory_40_50;
import org.hl7.fhir.instance.model.api.IBaseCoding;
import org.hl7.fhir.instance.model.api.IBaseHasExtensions;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IPrimitiveType;
import org.hl7.fhir.r4.model.CodeType;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r5.model.Base;
import org.hl7.fhir.r4.model.Parameters;
import org.hl7.fhir.r5.model.CapabilityStatement;
import org.hl7.fhir.r5.model.Enumeration;
import org.hl7.fhir.r5.model.SearchParameter;
import org.hl7.fhir.r5.model.StructureDefinition;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

import javax.annotation.Nonnull;
import java.util.List;
import java.util.stream.Collectors;

import static ca.uhn.fhir.util.ExtensionUtil.getExtensionPrimitiveValues;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.empty;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

class VersionCanonicalizerTest {

@Test
public void testToCanonicalCoding() {
VersionCanonicalizer canonicalizer = new VersionCanonicalizer(FhirVersionEnum.DSTU2);
IBaseCoding coding = new CodingDt("dstuSystem", "dstuCode");
Coding convertedCoding = canonicalizer.codingToCanonical(coding);
assertEquals("dstuCode", convertedCoding.getCode());
assertEquals("dstuSystem", convertedCoding.getSystem());
@Nested
class VersionCanonicalizerR4 {

private static final FhirVersionEnum FHIR_VERSION = FhirVersionEnum.R4;
private static final VersionCanonicalizer ourCanonicalizer = new VersionCanonicalizer(FHIR_VERSION);
@Test
public void testToCanonical_SearchParameterNoCustomResourceType_ConvertedCorrectly() {
org.hl7.fhir.r4.model.SearchParameter input = new org.hl7.fhir.r4.model.SearchParameter();
input.addBase("Patient");
input.addBase("Observation");
input.addTarget("Organization");

// Test
org.hl7.fhir.r5.model.SearchParameter actual = ourCanonicalizer.searchParameterToCanonical(input);

// Verify
assertThat(actual.getBase().stream().map(Enumeration::getCode).collect(Collectors.toList()), contains("Patient", "Observation"));
assertThat(actual.getTarget().stream().map(Enumeration::getCode).collect(Collectors.toList()), contains("Organization"));
assertThat(getExtensionPrimitiveValues(actual, HapiExtensions.EXTENSION_SEARCHPARAM_CUSTOM_BASE_RESOURCE), empty());
assertThat(getExtensionPrimitiveValues(actual, HapiExtensions.EXTENSION_SEARCHPARAM_CUSTOM_TARGET_RESOURCE), empty());

}

@Test
public void testToCanonical_SearchParameterWithCustomResourceType__ConvertedCorrectly() {
// Setup
org.hl7.fhir.r4.model.SearchParameter input = new org.hl7.fhir.r4.model.SearchParameter();
input.addBase("Base1");
input.addBase("Base2");
input.addTarget("Target1");
input.addTarget("Target2");

// Test
org.hl7.fhir.r5.model.SearchParameter actual = ourCanonicalizer.searchParameterToCanonical(input);

// Verify
assertThat(actual.getBase().stream().map(Enumeration::getCode).collect(Collectors.toList()), empty());
assertThat(actual.getTarget().stream().map(Enumeration::getCode).collect(Collectors.toList()), empty());
assertThat(getExtensionPrimitiveValues(actual, HapiExtensions.EXTENSION_SEARCHPARAM_CUSTOM_BASE_RESOURCE), contains("Base1", "Base2"));
assertThat(getExtensionPrimitiveValues(actual, HapiExtensions.EXTENSION_SEARCHPARAM_CUSTOM_TARGET_RESOURCE), contains("Target1", "Target2"));
// Original shouldn't be modified
assertThat(input.getBase().stream().map(CodeType::getCode).toList(), contains("Base1", "Base2"));
assertThat(input.getTarget().stream().map(CodeType::getCode).toList(), contains("Target1", "Target2"));

}
}

@Test
public void testFromCanonicalSearchParameter() {
VersionCanonicalizer canonicalizer = new VersionCanonicalizer(FhirVersionEnum.DSTU2);

SearchParameter inputR5 = new SearchParameter();
inputR5.setUrl("http:https://foo");
ca.uhn.fhir.model.dstu2.resource.SearchParameter outputDstu2 = (ca.uhn.fhir.model.dstu2.resource.SearchParameter) canonicalizer.searchParameterFromCanonical(inputR5);
assertEquals("http:https://foo", outputDstu2.getUrl());
@Nested
class VersionCanonicalizerDstu2 {
private static final FhirVersionEnum FHIR_VERSION = FhirVersionEnum.DSTU2;
private static final VersionCanonicalizer ourCanonicalizer = new VersionCanonicalizer(FHIR_VERSION);

@Test
public void testToCanonical_Coding_ConvertSuccessful() {
IBaseCoding coding = new CodingDt("dstuSystem", "dstuCode");
Coding convertedCoding = ourCanonicalizer.codingToCanonical(coding);
assertEquals("dstuCode", convertedCoding.getCode());
assertEquals("dstuSystem", convertedCoding.getSystem());
}

@Test
public void testFromCanonical_SearchParameter_ConvertSuccessful() {
SearchParameter inputR5 = new SearchParameter();
inputR5.setUrl("http:https://foo");
ca.uhn.fhir.model.dstu2.resource.SearchParameter outputDstu2 = (ca.uhn.fhir.model.dstu2.resource.SearchParameter) ourCanonicalizer.searchParameterFromCanonical(inputR5);
assertEquals("http:https://foo", outputDstu2.getUrl());
}

@Test
public void testFromCanonical_CapabilityStatement_ConvertSuccessful() {
CapabilityStatement inputR5 = new CapabilityStatement();
inputR5.setUrl("http:https://foo");
Conformance conformance = (Conformance) ourCanonicalizer.capabilityStatementFromCanonical(inputR5);
assertEquals("http:https://foo", conformance.getUrl());
}

@Test
public void testFromCanonical_StructureDefinition_ConvertSuccessful() {
StructureDefinition inputR5 = new StructureDefinition();
inputR5.setId("123");
ca.uhn.fhir.model.dstu2.resource.StructureDefinition structureDefinition = (ca.uhn.fhir.model.dstu2.resource.StructureDefinition) ourCanonicalizer.structureDefinitionFromCanonical(inputR5);
assertEquals("StructureDefinition/123", structureDefinition.getId().getValue());
}

@Test
public void testFromCanonical_Parameters_ConvertSuccessful() {
org.hl7.fhir.r4.model.Parameters inputR4 = new Parameters();
inputR4.setParameter("paramA", "1");
ca.uhn.fhir.model.dstu2.resource.Parameters parameters = (ca.uhn.fhir.model.dstu2.resource.Parameters) ourCanonicalizer.parametersFromCanonical(inputR4);
assertNotNull(parameters.getParameter());
assertEquals("paramA", parameters.getParameter().get(0).getName());
}
}

@Test
public void testToCanonicalSearchParameter_NoCustomResourceType() {
// Setup
VersionCanonicalizer canonicalizer = new VersionCanonicalizer(FhirVersionEnum.R4);

org.hl7.fhir.r4.model.SearchParameter input = new org.hl7.fhir.r4.model.SearchParameter();
input.addBase("Patient");
input.addBase("Observation");
input.addTarget("Organization");

// Test
org.hl7.fhir.r5.model.SearchParameter actual = canonicalizer.searchParameterToCanonical(input);

// Verify
assertThat(actual.getBase().stream().map(Enumeration::getCode).collect(Collectors.toList()), contains("Patient", "Observation"));
assertThat(actual.getTarget().stream().map(Enumeration::getCode).collect(Collectors.toList()), contains("Organization"));
assertThat(getExtensionPrimitiveValues(actual, HapiExtensions.EXTENSION_SEARCHPARAM_CUSTOM_BASE_RESOURCE), empty());
assertThat(getExtensionPrimitiveValues(actual, HapiExtensions.EXTENSION_SEARCHPARAM_CUSTOM_TARGET_RESOURCE), empty());

}

@Test
public void testToCanonicalSearchParameter_WithCustomResourceType() {
// Setup
VersionCanonicalizer canonicalizer = new VersionCanonicalizer(FhirVersionEnum.R4);

org.hl7.fhir.r4.model.SearchParameter input = new org.hl7.fhir.r4.model.SearchParameter();
input.addBase("Base1");
input.addBase("Base2");
input.addTarget("Target1");
input.addTarget("Target2");

// Test
org.hl7.fhir.r5.model.SearchParameter actual = canonicalizer.searchParameterToCanonical(input);

// Verify
assertThat(actual.getBase().stream().map(Enumeration::getCode).collect(Collectors.toList()), empty());
assertThat(actual.getTarget().stream().map(Enumeration::getCode).collect(Collectors.toList()), empty());
assertThat(getExtensionPrimitiveValues(actual, HapiExtensions.EXTENSION_SEARCHPARAM_CUSTOM_BASE_RESOURCE), contains("Base1", "Base2"));
assertThat(getExtensionPrimitiveValues(actual, HapiExtensions.EXTENSION_SEARCHPARAM_CUSTOM_TARGET_RESOURCE), contains("Target1", "Target2"));
// Original shouldn't be modified
assertThat(input.getBase().stream().map(CodeType::getCode).toList(), contains("Base1", "Base2"));
assertThat(input.getTarget().stream().map(CodeType::getCode).toList(), contains("Target1", "Target2"));

}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
type: fix
issue: 5176
jira: SMILE-6333
title: "Previously, the use of search parameter _lastUpdated as part of a reverse chaining search would return an error
message to the client. This issue has been fixed"
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
type: add
issue: 5366
jira: SMILE-5184
title: "The package installer overrides existing (built-in) SearchParameter with multiple base resources.
This is happening when installing US Core package for Practitioner.given as an example.
This change allows the existing SearchParameter to continue to exist with the remaining base resources."
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
type: add
issue: 5375
title: "Add settings for CDS Services using CDS on FHIR. Also removed the dependency on Spring Boot from the CR configs used by CDS Hooks."
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
type: perf
issue: 5387
title: "Enable the search cache for some requests even when a consent interceptor is active.
If no consent service uses canSeeResource (i.e. shouldProcessCanSeeResource() returns false);
or startOperation() returns AUTHORIZED; then the search cache is enabled."
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
type: fix
issue: 5388
title: "Previously, with partitioning enabled and `UrlBaseTenantIdentificationStrategy` used, registering
`SearchNarrowingInterceptor` would cause to incorrect resolution of `entry.request.url` parameter during
transaction bundle processing. This has been fixed."
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
type: perf
issue: 5395
title: "The background activity that clears stale search results now has higher throughput.
Busy servers should no longer accumulate dead stale search results."
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
type: fix
issue: 5404
title: "Cql translating bug where FHIRHelpers library function was erroring and blocking clinical reasoning content functionality"
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
type: perf
issue: 5405
title: "Sorting by _id now uses the FHIR_ID column on HFJ_RESOURCE and avoid joins."
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
type: add
issue: 5407
title: "Previously, when the payload of a subscription message exceeds the broker maximum message size, exception would
be thrown and retry will be performed indefinitely until the maximum message size is adjusted. Now, the message will be
successfully delivered for rest-hook and email subscriptions, while message subscriptions remains the same behavior as
before."
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
type: fix
issue: 5412
title: "Previously, with Partitioning enabled, submitting a bundle request would return a response with the partition name displayed twice in `response.link` property. This has been fixed."
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
type: fix
issue: 5415
title: "Previously, `$mdm-clear` jobs would fail on MSSQL. This is now fixed."
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
type: fix
issue: 5419
title: "Previously, when `AllowAutoInflateBinaries` was enabled in `JpaStorageSettings` and bundles with multiple
resources were submitted, binaries were created on the disk only for the first resource entry of the bundle.
This has been fixed."
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
type: add
issue: 5428
title: "Add support for non-standard _pid SearchParameter to the the JPA engine.
This new SP provides an efficient tie-breaking sort key."
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
type: fix
issue: 5431
jira: SMILE-5306
title: "Previously, using VersionCanonicalizer to convert a CapabilityStatement from R5 to DSTU2 would fail. This is now fixed."
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@
<li>Thymeleaf (Testpage Overlay): 3.0.14.RELEASE -&gt; 3.1.2.RELEASE</li>
<li>xpp3 (All): 1.1.4c.0 -&gt; 1.1.6</li>
<li>HtmlUnit (All): 2.67.0 -&gt; 2.70.0</li>
<li>org.hl7.fhir.core (All): 6.0.22.2 -&gt; 6.1.2</li>
<li>org.hl7.fhir.core (All): 6.0.22.2 -&gt; 6.1.2.2</li>
</ul>"
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
### Major Database Change

This release makes performance changes to the database definition in a way that is incompatible with releases before 6.4.
Attempting to run version 6.2 or older simultaneously with this release may experience errors when saving new resources.

### Change Tracking and Subscriptions
This release introduces significant a change to the mechanism performing submission of resource modification events
to the message broker. Previously, an event would be submitted as part of the synchronous transaction
modifying a resource. Synchronous submission yielded responsive publishing with the caveat that events would be dropped
Expand All @@ -8,6 +14,7 @@ database upon completion of the transaction and subsequently submitted to the br
This new asynchronous submission mechanism will introduce a slight delay in event publishing. It is our view that such
delay is largely compensated by the capability to retry submission upon failure which will eliminate event losses.

### Tag, Security Label, and Profile changes

There are some potentially breaking changes:
* On resource retrieval and before storage, tags, security label and profile collections in resource meta will be
Expand Down
Loading

0 comments on commit 777859a

Please sign in to comment.