Skip to content
This repository was archived by the owner on Oct 6, 2025. It is now read-only.

Commit 06778c1

Browse files
committed
Merge branch 'search_and_store_upgrades' into develop
2 parents f9766a8 + bc9ceb5 commit 06778c1

17 files changed

Lines changed: 1176 additions & 519 deletions

File tree

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/ConstantsDataTransfer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public interface ConstantsDataTransfer
2121
String NAMING_SYSTEM_NUM_CODEX_CRR_PSEUDONYM = "http://www.netzwerk-universitaetsmedizin.de/sid/crr-pseudonym";
2222
String NAMING_SYSTEM_NUM_CODEX_BLOOM_FILTER = "http://www.netzwerk-universitaetsmedizin.de/sid/bloom-filter";
2323

24+
String RFC_4122_SYSTEM = "urn:ietf:rfc:4122";
25+
2426
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER = "http://www.netzwerk-universitaetsmedizin.de/fhir/CodeSystem/data-transfer";
2527
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_PATIENT = "patient";
2628
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_PSEUDONYM = "pseudonym";

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/client/FhirClientFactory.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
import ca.uhn.fhir.context.FhirContext;
2424
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer;
25+
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client.fhir.FhirClient;
26+
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client.fhir.FhirClientBuilder;
2527
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.domain.DateWithPrecision;
2628
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PatientReference;
2729
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PatientReferenceList;
@@ -39,19 +41,23 @@ public class FhirClientFactory
3941
private final Path searchBundleOverride;
4042
private final String localIdentifierValue;
4143

44+
private final FhirClientBuilder builder;
45+
4246
public FhirClientFactory(HapiFhirClientFactory hapiClientFactory, FhirContext fhirContext,
43-
Path searchBundleOverride, String localIdentifierValue)
47+
Path searchBundleOverride, String localIdentifierValue, FhirClientBuilder builder)
4448
{
4549
this.hapiClientFactory = hapiClientFactory;
4650
this.fhirContext = fhirContext;
4751
this.searchBundleOverride = searchBundleOverride;
4852
this.localIdentifierValue = localIdentifierValue;
53+
54+
this.builder = builder;
4955
}
5056

5157
public FhirClient getFhirClient()
5258
{
5359
if (hapiClientFactory.isConfigured())
54-
return new FhirClientImpl(hapiClientFactory, fhirContext, searchBundleOverride);
60+
return builder.build(fhirContext, hapiClientFactory, searchBundleOverride);
5561
else
5662
return createFhirClientStub();
5763
}

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/client/FttpClientImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ public Optional<String> getDicPseudonym(String bloomFilter)
172172
.withParameters(createParametersForBfWorkflow(bloomFilter)).accept(Constants.CT_FHIR_XML_NEW)
173173
.encoded(EncodingEnum.XML).execute();
174174

175-
return getPseudonym(parameters);
175+
return getPseudonym(parameters).map(p -> fttpTarget + "/" + p);
176176
}
177177
catch (Exception e)
178178
{

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/client/HapiFhirClientFactory.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ public class HapiFhirClientFactory
4747
private final String basicAuthUsername;
4848
private final String basicAuthPassword;
4949
private final String bearerToken;
50-
private final boolean supportsIdentifierReferenceSearch;
5150

5251
private final ApacheRestfulClientFactory clientFactory;
5352

@@ -62,10 +61,9 @@ public class HapiFhirClientFactory
6261
* may be <code>null</code>
6362
* @param bearerToken
6463
* may be <code>null</code>
65-
* @param supportsIdentifierReferenceSearch
6664
*/
6765
public HapiFhirClientFactory(FhirContext fhirContext, String serverBase, String basicAuthUsername,
68-
String basicAuthPassword, String bearerToken, boolean supportsIdentifierReferenceSearch)
66+
String basicAuthPassword, String bearerToken)
6967
{
7068
if (fhirContext != null)
7169
this.fhirContext = fhirContext;
@@ -76,7 +74,6 @@ public HapiFhirClientFactory(FhirContext fhirContext, String serverBase, String
7674
this.basicAuthUsername = basicAuthUsername;
7775
this.basicAuthPassword = basicAuthPassword;
7876
this.bearerToken = bearerToken;
79-
this.supportsIdentifierReferenceSearch = supportsIdentifierReferenceSearch;
8077

8178
if (isConfigured())
8279
{
@@ -87,11 +84,6 @@ public HapiFhirClientFactory(FhirContext fhirContext, String serverBase, String
8784
clientFactory = null;
8885
}
8986

90-
public boolean supportsIdentifierReferenceSearch()
91-
{
92-
return supportsIdentifierReferenceSearch;
93-
}
94-
9587
protected boolean isConfigured()
9688
{
9789
return serverBase != null && !serverBase.isEmpty();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client;
2+
3+
import java.util.function.BiConsumer;
4+
import java.util.stream.Collectors;
5+
import java.util.stream.Stream;
6+
7+
import org.hl7.fhir.r4.model.OperationOutcome;
8+
import org.hl7.fhir.r4.model.OperationOutcome.IssueSeverity;
9+
import org.slf4j.Logger;
10+
11+
public class OutcomeLogger
12+
{
13+
private final Logger logger;
14+
15+
public OutcomeLogger(Logger logger)
16+
{
17+
this.logger = logger;
18+
}
19+
20+
public void logOutcome(OperationOutcome outcome)
21+
{
22+
outcome.getIssue().forEach(issue ->
23+
{
24+
String display = issue.getCode() == null ? null : issue.getCode().getDisplay();
25+
String details = issue.getDetails() == null ? null : issue.getDetails().getText();
26+
String diagnostics = issue.getDiagnostics();
27+
28+
String message = Stream.of(display, details, diagnostics).filter(s -> s != null && !s.isBlank())
29+
.collect(Collectors.joining(" "));
30+
31+
getLoggerForSeverity(issue.getSeverity(), logger).accept("Issue: {}", message);
32+
});
33+
}
34+
35+
private BiConsumer<String, Object> getLoggerForSeverity(IssueSeverity severity, Logger logger)
36+
{
37+
if (severity != null)
38+
{
39+
switch (severity)
40+
{
41+
case ERROR:
42+
case FATAL:
43+
return logger::error;
44+
case WARNING:
45+
return logger::warn;
46+
case NULL:
47+
case INFORMATION:
48+
default:
49+
return logger::info;
50+
}
51+
}
52+
53+
return logger::info;
54+
}
55+
}

0 commit comments

Comments
 (0)