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

6486 implement patient merge #6568

Merged
merged 170 commits into from
Dec 24, 2024
Merged
Show file tree
Hide file tree
Changes from 167 commits
Commits
Show all changes
170 commits
Select commit Hold shift + click to select a range
054f7e6
begin with failing test
Nov 20, 2024
ab43265
merge master
Nov 21, 2024
97ea3c9
wpi merge operation provider
mrdnctrk Nov 26, 2024
9fd4ebc
wip code resolve references and some refactoring
mrdnctrk Nov 27, 2024
08e1517
respect status code set in providers
mrdnctrk Nov 28, 2024
a8fc127
merge master
Nov 29, 2024
adcc25d
merge master
Dec 2, 2024
16961a8
more validation and code to update resources after refs are updated
mrdnctrk Nov 29, 2024
e34d788
added source-delete parameter and some validation tests on result-pat…
mrdnctrk Dec 2, 2024
80e6439
update test
Dec 2, 2024
3468120
Merge remote-tracking branch 'origin/6486-implement-patient-merge' in…
Dec 2, 2024
f265e64
update test
Dec 3, 2024
eee9856
return target patient as output parameter, do not add replacedby link…
mrdnctrk Dec 3, 2024
828931c
output definition
Dec 3, 2024
e34b989
ignore identifiers in ref, more unit tests, return target in preview …
mrdnctrk Dec 3, 2024
e0328b0
output definition
Dec 3, 2024
6fff683
Merge remote-tracking branch 'origin/6486-implement-patient-merge' in…
Dec 3, 2024
1e97309
return input parameters in the merge operation output
mrdnctrk Dec 4, 2024
09f101d
copy identifiers from source to target (no duplicate check)
mrdnctrk Dec 4, 2024
4439fa9
add shared identifier
Dec 4, 2024
a8b8486
add shared identifier
Dec 4, 2024
89da910
moar asserts
Dec 4, 2024
10bbd56
moar asserts
Dec 4, 2024
b2213b4
fixing result patient
Dec 4, 2024
deb69bf
fixing result patient
Dec 4, 2024
7cd1241
fixing result patient
Dec 4, 2024
af7b984
merge master
Dec 4, 2024
eb27317
add duplicate check when copying source identifiers to target
mrdnctrk Dec 4, 2024
baa8d2f
copy result-patient before passing it to service
mrdnctrk Dec 4, 2024
e08b3e6
add preview to test
Dec 4, 2024
0100c72
update preview asserts
Dec 4, 2024
e96895b
move IReplaceReferencesSvc to storage-package, and call replaceRefere…
mrdnctrk Dec 4, 2024
d7e7a6d
moar tests
Dec 4, 2024
8d05f10
cleanup
Dec 4, 2024
747ee8f
add task test
Dec 5, 2024
149070d
merge master
Dec 5, 2024
bcc987d
add replace references test
Dec 5, 2024
0bfb3c1
kebab-case replace references
Dec 5, 2024
497c8b0
add sync -> async switch
Dec 6, 2024
5da5943
test
Dec 6, 2024
0093313
test
Dec 6, 2024
189d2d5
merge master
Dec 6, 2024
30d637c
merge master
Dec 6, 2024
0562e24
start migrating to stream
Dec 6, 2024
bce4868
validate result-patient does not have link to source if delete-source…
mrdnctrk Dec 5, 2024
957b7da
add update count to msg in preview mode
mrdnctrk Dec 5, 2024
4f423e0
spotless
mrdnctrk Dec 6, 2024
999bd39
change page size -> batch size and create new default max in storage …
Dec 6, 2024
0d1c941
Merge remote-tracking branch 'origin/6486-implement-patient-merge' in…
Dec 6, 2024
39d41f2
spotless
Dec 6, 2024
6e22940
switched to patch transaction
Dec 6, 2024
81af354
switched to patch transaction
Dec 6, 2024
07c2d7d
switched to patch transaction
Dec 6, 2024
d78ebe0
switched to patch transaction
Dec 6, 2024
570ec4f
strip version from returned task
Dec 6, 2024
1d0a114
spotless
Dec 6, 2024
4d851ee
merge master
Dec 8, 2024
e63c00b
spotless
Dec 8, 2024
1feadbf
async replace references test passes
Dec 9, 2024
7999dd2
align tests
Dec 9, 2024
eee1613
test small batch size
Dec 9, 2024
bd05838
merge master
Dec 9, 2024
6a481e9
do src and target updates in trx, add validation src is not already r…
mrdnctrk Dec 9, 2024
dbb17de
start building batch 2
Dec 9, 2024
01d1eaf
start building batch 2
Dec 9, 2024
aa2ea0a
start building batch 2
Dec 9, 2024
1a4ae51
move test setup out to helper
Dec 10, 2024
46a5611
move replace references tests out
Dec 10, 2024
f2a3cd2
switch helper to use dao
Dec 10, 2024
b2c9bd3
merge master
Dec 10, 2024
daeee39
incresed unit test coverage
mrdnctrk Dec 10, 2024
ca97a8a
build out batch
Dec 10, 2024
d6c1cc8
build out batch
Dec 10, 2024
33c8c15
update test to add link to result-patient only if the source is not t…
mrdnctrk Dec 10, 2024
457b0b4
batch passes test
Dec 10, 2024
7ddb2c4
Merge remote-tracking branch 'origin/6486-implement-patient-merge' in…
Dec 10, 2024
9896b87
batch passes test
Dec 10, 2024
d137299
batch passes test
Dec 10, 2024
9df9cf7
made patient-merge return the Task returned from replace references
mrdnctrk Dec 11, 2024
6685fb6
batch passes test
Dec 11, 2024
57843aa
Merge remote-tracking branch 'origin/6486-implement-patient-merge' in…
Dec 11, 2024
709513d
batch passes test
Dec 11, 2024
282da0d
merge master
Dec 11, 2024
bb0ed33
consolidate async and sync supporting methods into a single storage s…
Dec 11, 2024
dae5b55
consolidate async and sync supporting methods into a single storage s…
Dec 11, 2024
775090a
add merge batch job
Dec 11, 2024
5c2cac8
add merge batch job
Dec 11, 2024
2c5aa70
added FIXMES for ED
Dec 11, 2024
629b9e4
added FIXMES for ED
Dec 11, 2024
293d03e
update test to not validate task in preview mode
mrdnctrk Dec 11, 2024
1fe54ca
mark identfier copied from source to target as old
mrdnctrk Dec 11, 2024
d3ad9f9
copyright headers
mrdnctrk Dec 11, 2024
bca0f77
merge master
Dec 12, 2024
d2ba602
runMaintenancePass before checking merge task status, and renamed tes…
mrdnctrk Dec 12, 2024
b997927
merge master
Dec 13, 2024
22ec293
fix test
Dec 13, 2024
b5894d1
fix test
Dec 13, 2024
49917ec
default
Dec 13, 2024
33fd9ff
invoke async merge job in merge service
mrdnctrk Dec 13, 2024
6fab7b7
starting work on new docs
Dec 13, 2024
e58dda7
Merge remote-tracking branch 'origin/6486-implement-patient-merge' in…
Dec 13, 2024
6da071c
starting work on new docs
Dec 13, 2024
45ccd71
document $replace-references
Dec 15, 2024
2b22bd3
separate default from max
Dec 15, 2024
907cf8d
fixme
Dec 15, 2024
7a7e5e1
moar fixme
Dec 15, 2024
b7717af
merge master
Dec 15, 2024
cd92d11
moar fixme
Dec 15, 2024
9203a83
ken last fixme
Dec 15, 2024
7492498
return 202 status on async merge, update MergeBatchTest to do more va…
mrdnctrk Dec 16, 2024
21bdb0e
async success message, inject mergeservice, add async merge unit tests
mrdnctrk Dec 17, 2024
9268b94
make validatePatchResultBundle static again
mrdnctrk Dec 17, 2024
238ff3f
added test for adding reference while merge in progress, and merge er…
mrdnctrk Dec 18, 2024
38dee6e
fixed
Dec 19, 2024
487a928
fixed
Dec 19, 2024
9043b10
added error handler to replace references job
mrdnctrk Dec 19, 2024
fbd21e0
merge master
Dec 19, 2024
187feb1
review
Dec 19, 2024
7f30354
javadoc
Dec 19, 2024
542b469
organize imports
Dec 19, 2024
6e47d87
make ValidationResult immutable
Dec 19, 2024
cdb3239
make ValidationResult immutable
Dec 19, 2024
bece0bb
rename ReplaceReferencesRequest
Dec 19, 2024
617936a
rename ReplaceReferencesRequest
Dec 19, 2024
2137921
rename MergeResourceHelper
Dec 19, 2024
52bff4d
rename MergeResourceHelper
Dec 19, 2024
34b8ac2
javadoc
Dec 19, 2024
6386362
split merge validation service out from merge service
Dec 19, 2024
9d79ffe
split merge validation service out from merge service
Dec 19, 2024
e7bb294
split merge validation service out from merge service
Dec 19, 2024
57f14e0
review feedback
Dec 20, 2024
74852d2
review feedback
Dec 20, 2024
3b754ff
rename param constants
Dec 20, 2024
38b76d2
rename param constants
Dec 20, 2024
af57f58
remove IdentifierUtil for visibility
Dec 20, 2024
61576be
remove IdentifierUtil for visibility
Dec 20, 2024
ded58e7
final review of hapi side
Dec 20, 2024
c393366
merge master
Dec 20, 2024
40b8d75
review feedback
Dec 20, 2024
f58188b
review feedback
Dec 20, 2024
71f87f7
fix checkstyle errors, rename MergeOperationInputParameters and add M…
mrdnctrk Dec 20, 2024
10e23ec
fix replace reference parameter type, and some copyright headers
mrdnctrk Dec 20, 2024
a3a98ea
review feedback
Dec 23, 2024
f3003f4
review feedback
Dec 23, 2024
ca20ef3
review feedback
Dec 23, 2024
837b09a
review feedback
Dec 23, 2024
0d4c07c
review feedback
Dec 23, 2024
a0ea555
review feedback
Dec 23, 2024
611e196
review feedback
Dec 23, 2024
df5e733
review feedback
Dec 23, 2024
20707ac
move $merge into JPA R4
Dec 23, 2024
da2530e
move $merge into JPA R4
Dec 23, 2024
d1367cd
still need to return 412
Dec 24, 2024
d308dc7
still need to return 412
Dec 24, 2024
e5ef9a7
return 412
Dec 24, 2024
6067641
moar tests
Dec 24, 2024
e52a8f4
moar tests
Dec 24, 2024
fead7c3
fix async batch size
Dec 24, 2024
4a35fa1
fix async batch size
Dec 24, 2024
44b49eb
fix async batch size
Dec 24, 2024
be8f820
exception code
Dec 24, 2024
a6544b7
exception code
Dec 24, 2024
fd02d5f
fix bean wiring
Dec 24, 2024
620538e
fix bean wiring
Dec 24, 2024
f629522
fix test
Dec 24, 2024
3dd3ebb
fix test
Dec 24, 2024
b83339b
fix test
Dec 24, 2024
5611079
fix test
Dec 24, 2024
1dbac62
fix test
Dec 24, 2024
51cbe71
bump pom versions
Dec 24, 2024
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 @@ -265,30 +265,48 @@ public static IBase addIssueWithMessageId(
}

public static void addDetailsToIssue(FhirContext theFhirContext, IBase theIssue, String theSystem, String theCode) {
addDetailsToIssue(theFhirContext, theIssue, theSystem, theCode, null);
}

public static void addDetailsToIssue(
FhirContext theFhirContext, IBase theIssue, String theSystem, String theCode, String theText) {
BaseRuntimeElementCompositeDefinition<?> issueElement =
(BaseRuntimeElementCompositeDefinition<?>) theFhirContext.getElementDefinition(theIssue.getClass());
BaseRuntimeChildDefinition detailsChildDef = issueElement.getChildByName("details");

BaseRuntimeElementCompositeDefinition<?> codingDef =
(BaseRuntimeElementCompositeDefinition<?>) theFhirContext.getElementDefinition("Coding");
ICompositeType coding = (ICompositeType) codingDef.newInstance();

// System
IPrimitiveType<?> system =
(IPrimitiveType<?>) theFhirContext.getElementDefinition("uri").newInstance();
system.setValueAsString(theSystem);
codingDef.getChildByName("system").getMutator().addValue(coding, system);

// Code
IPrimitiveType<?> code =
(IPrimitiveType<?>) theFhirContext.getElementDefinition("code").newInstance();
code.setValueAsString(theCode);
codingDef.getChildByName("code").getMutator().addValue(coding, code);
BaseRuntimeElementCompositeDefinition<?> ccDef =
(BaseRuntimeElementCompositeDefinition<?>) theFhirContext.getElementDefinition("CodeableConcept");

ICompositeType codeableConcept = (ICompositeType) ccDef.newInstance();
ccDef.getChildByName("coding").getMutator().addValue(codeableConcept, coding);

if (isNotBlank(theSystem) || isNotBlank(theCode)) {
BaseRuntimeElementCompositeDefinition<?> codingDef =
(BaseRuntimeElementCompositeDefinition<?>) theFhirContext.getElementDefinition("Coding");
ICompositeType coding = (ICompositeType) codingDef.newInstance();

// System
if (isNotBlank(theSystem)) {
IPrimitiveType<?> system = (IPrimitiveType<?>)
theFhirContext.getElementDefinition("uri").newInstance();
system.setValueAsString(theSystem);
codingDef.getChildByName("system").getMutator().addValue(coding, system);
}

// Code
if (isNotBlank(theCode)) {
IPrimitiveType<?> code = (IPrimitiveType<?>)
theFhirContext.getElementDefinition("code").newInstance();
code.setValueAsString(theCode);
codingDef.getChildByName("code").getMutator().addValue(coding, code);
}

ccDef.getChildByName("coding").getMutator().addValue(codeableConcept, coding);
}

if (isNotBlank(theText)) {
IPrimitiveType<?> textElem = (IPrimitiveType<?>)
ccDef.getChildByName("text").getChildByName("text").newInstance(theText);
ccDef.getChildByName("text").getMutator().addValue(codeableConcept, textElem);
}

detailsChildDef.getMutator().addValue(theIssue, codeableConcept);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*-
* #%L
* HAPI FHIR - Core Library
* %%
* Copyright (C) 2014 - 2024 Smile CDR, Inc.
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package ca.uhn.fhir.util;

import jakarta.annotation.Nonnull;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Stream;

/**
* This class collects items from a stream to a given limit and know whether there are
* still more items beyond that limit.
*
* @param <T> the type of object being streamed
*/
public class StopLimitAccumulator<T> {
fil512 marked this conversation as resolved.
Show resolved Hide resolved
private final boolean isTruncated;
private final List<T> myList;

private StopLimitAccumulator(List<T> theList, boolean theIsTruncated) {
myList = Collections.unmodifiableList(theList);
isTruncated = theIsTruncated;
}

public static <T> StopLimitAccumulator<T> fromStreamAndLimit(@Nonnull Stream<T> theItemStream, long theLimit) {
assert theLimit > 0;
AtomicBoolean isBeyondLimit = new AtomicBoolean(false);
List<T> accumulator = new ArrayList<>();

theItemStream
.limit(theLimit + 1) // Fetch one extra item to see if there are any more items past our limit
.forEach(item -> {
if (accumulator.size() < theLimit) {
accumulator.add(item);
} else {
isBeyondLimit.set(true);
}
});
return new StopLimitAccumulator<>(accumulator, isBeyondLimit.get());
}

public boolean isTruncated() {
return isTruncated;
}

public List<T> getItemList() {
return myList;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package ca.uhn.fhir.util;

import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;

class StopLimitAccumulatorTest {

@Test
void testFromStreamAndLimit_withNoTruncation() {
// setup
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
int limit = 5;

// execute
StopLimitAccumulator<Integer> accumulator = StopLimitAccumulator.fromStreamAndLimit(stream, limit);

// verify
assertFalse(accumulator.isTruncated(), "The result should not be truncated");
assertEquals(List.of(1, 2, 3, 4, 5), accumulator.getItemList(), "The list should contain all items within the limit");
}

@Test
void testFromStreamAndLimit_withTruncation() {
// setup
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6, 7);
int limit = 5;

// execute
StopLimitAccumulator<Integer> accumulator = StopLimitAccumulator.fromStreamAndLimit(stream, limit);

// verify
assertTrue(accumulator.isTruncated(), "The result should be truncated");
assertEquals(List.of(1, 2, 3, 4, 5), accumulator.getItemList(), "The list should contain only the items within the limit");
}

@Test
void testFromStreamAndLimit_withEmptyStream() {
// setup
Stream<Integer> stream = Stream.empty();
int limit = 5;

// execute
StopLimitAccumulator<Integer> accumulator = StopLimitAccumulator.fromStreamAndLimit(stream, limit);

// verify
assertFalse(accumulator.isTruncated(), "The result should not be truncated for an empty stream");
assertTrue(accumulator.getItemList().isEmpty(), "The list should be empty");
}

@Test
void testImmutabilityOfItemList() {
// setup
Stream<Integer> stream = Stream.of(1, 2, 3);
int limit = 3;

StopLimitAccumulator<Integer> accumulator = StopLimitAccumulator.fromStreamAndLimit(stream, limit);

// execute and Assert
List<Integer> itemList = accumulator.getItemList();
assertThrows(UnsupportedOperationException.class, () -> itemList.add(4), "The list should be immutable");
}
tadgh marked this conversation as resolved.
Show resolved Hide resolved
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,13 @@
import ca.uhn.fhir.jpa.api.pid.TypedResourcePid;
import ca.uhn.fhir.jpa.api.pid.TypedResourceStream;
import ca.uhn.fhir.jpa.api.svc.IBatch2DaoSvc;
import ca.uhn.fhir.jpa.dao.data.IResourceLinkDao;
import ca.uhn.fhir.jpa.dao.data.IResourceTableDao;
import ca.uhn.fhir.jpa.dao.tx.IHapiTransactionService;
import ca.uhn.fhir.jpa.model.dao.JpaPid;
import ca.uhn.fhir.jpa.searchparam.MatchUrlService;
import ca.uhn.fhir.jpa.searchparam.SearchParameterMap;
import ca.uhn.fhir.model.primitive.IdDt;
import ca.uhn.fhir.rest.api.Constants;
import ca.uhn.fhir.rest.api.SortSpec;
import ca.uhn.fhir.rest.api.server.SystemRequestDetails;
Expand All @@ -46,6 +48,7 @@
import jakarta.annotation.Nullable;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.hl7.fhir.instance.model.api.IIdType;

import java.util.Date;
import java.util.function.Supplier;
Expand All @@ -56,6 +59,8 @@ public class Batch2DaoSvcImpl implements IBatch2DaoSvc {

private final IResourceTableDao myResourceTableDao;

private final IResourceLinkDao myResourceLinkDao;

private final MatchUrlService myMatchUrlService;

private final DaoRegistry myDaoRegistry;
Expand All @@ -71,11 +76,13 @@ public boolean isAllResourceTypeSupported() {

public Batch2DaoSvcImpl(
IResourceTableDao theResourceTableDao,
IResourceLinkDao theResourceLinkDao,
MatchUrlService theMatchUrlService,
DaoRegistry theDaoRegistry,
FhirContext theFhirContext,
IHapiTransactionService theTransactionService) {
myResourceTableDao = theResourceTableDao;
myResourceLinkDao = theResourceLinkDao;
myMatchUrlService = theMatchUrlService;
myDaoRegistry = theDaoRegistry;
myFhirContext = theFhirContext;
Expand All @@ -95,6 +102,11 @@ public IResourcePidStream fetchResourceIdStream(
}
}

@Override
public Stream<IdDt> streamSourceIdsThatReferenceTargetId(IIdType theTargetId) {
fil512 marked this conversation as resolved.
Show resolved Hide resolved
return myResourceLinkDao.streamSourceIdsForTargetFhirId(theTargetId.getResourceType(), theTargetId.getIdPart());
}

private Stream<TypedResourcePid> streamResourceIdsWithUrl(
Date theStart, Date theEnd, String theUrl, RequestPartitionId theRequestPartitionId) {
validateUrl(theUrl);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,18 @@ public class Batch2SupportConfig {
@Bean
public IBatch2DaoSvc batch2DaoSvc(
IResourceTableDao theResourceTableDao,
IResourceLinkDao theResourceLinkDao,
MatchUrlService theMatchUrlService,
DaoRegistry theDaoRegistry,
FhirContext theFhirContext,
IHapiTransactionService theTransactionService) {
return new Batch2DaoSvcImpl(
theResourceTableDao, theMatchUrlService, theDaoRegistry, theFhirContext, theTransactionService);
theResourceTableDao,
theResourceLinkDao,
theMatchUrlService,
theDaoRegistry,
theFhirContext,
theTransactionService);
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@
*/
package ca.uhn.fhir.jpa.config;

import ca.uhn.fhir.batch2.api.IJobCoordinator;
import ca.uhn.fhir.batch2.api.IJobPersistence;
import ca.uhn.fhir.batch2.jobs.export.BulkDataExportProvider;
import ca.uhn.fhir.batch2.jobs.expunge.DeleteExpungeJobSubmitterImpl;
import ca.uhn.fhir.batch2.util.Batch2TaskHelper;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.context.support.IValidationSupport;
Expand Down Expand Up @@ -55,6 +57,7 @@
import ca.uhn.fhir.jpa.dao.ResourceHistoryCalculator;
import ca.uhn.fhir.jpa.dao.SearchBuilderFactory;
import ca.uhn.fhir.jpa.dao.TransactionProcessor;
import ca.uhn.fhir.jpa.dao.data.IResourceLinkDao;
import ca.uhn.fhir.jpa.dao.data.IResourceModifiedDao;
import ca.uhn.fhir.jpa.dao.data.IResourceSearchUrlDao;
import ca.uhn.fhir.jpa.dao.data.ITagDefinitionDao;
Expand Down Expand Up @@ -175,6 +178,7 @@
import ca.uhn.fhir.jpa.validation.ResourceLoaderImpl;
import ca.uhn.fhir.jpa.validation.ValidationSettings;
import ca.uhn.fhir.model.api.IPrimitiveDatatype;
import ca.uhn.fhir.replacereferences.ReplaceReferencesPatchBundleSvc;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.api.server.storage.IDeleteExpungeJobSubmitter;
import ca.uhn.fhir.rest.api.server.storage.IResourcePersistentId;
Expand Down Expand Up @@ -930,7 +934,31 @@ public CacheTagDefinitionDao tagDefinitionDao(
}

@Bean
public IReplaceReferencesSvc replaceReferencesSvc(FhirContext theFhirContext, DaoRegistry theDaoRegistry) {
return new ReplaceReferencesSvcImpl(theFhirContext, theDaoRegistry);
public Batch2TaskHelper batch2TaskHelper() {
return new Batch2TaskHelper();
}

@Bean
public IReplaceReferencesSvc replaceReferencesSvc(
DaoRegistry theDaoRegistry,
HapiTransactionService theHapiTransactionService,
IResourceLinkDao theResourceLinkDao,
IJobCoordinator theJobCoordinator,
ReplaceReferencesPatchBundleSvc theReplaceReferencesPatchBundle,
Batch2TaskHelper theBatch2TaskHelper,
JpaStorageSettings theStorageSettings) {
return new ReplaceReferencesSvcImpl(
theDaoRegistry,
theHapiTransactionService,
theResourceLinkDao,
theJobCoordinator,
theReplaceReferencesPatchBundle,
theBatch2TaskHelper,
theStorageSettings);
}

@Bean
public ReplaceReferencesPatchBundleSvc replaceReferencesPatchBundleSvc(DaoRegistry theDaoRegistry) {
return new ReplaceReferencesPatchBundleSvc(theDaoRegistry);
}
}
Loading
Loading