Skip to content

Commit

Permalink
Merge remote-tracking branch
Browse files Browse the repository at this point in the history
'origin/issues/36_feedback_messages_binary_delete' into develop
  • Loading branch information
hhund committed Jun 20, 2022
2 parents eb0027a + 103b2c0 commit d80f467
Show file tree
Hide file tree
Showing 88 changed files with 5,402 additions and 511 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.DataTransferProcessPluginDefinition.VERSION;

import java.nio.charset.StandardCharsets;

public interface ConstantsDataTransfer
{
String BPMN_EXECUTION_VARIABLE_PATIENT_REFERENCE_LIST = "patientReferenceList";
Expand All @@ -13,9 +15,16 @@ public interface ConstantsDataTransfer
String BPMN_EXECUTION_VARIABLE_EXPORT_FROM_PRECISION = "exportFromPrecision";
String BPMN_EXECUTION_VARIABLE_EXPORT_TO = "exportTo";
String BPMN_EXECUTION_VARIABLE_BUNDLE = "bundle";
String BPMN_EXECUTION_VARIABLE_AES_RETURN_KEY = "aes-return-key";
String BPMN_EXECUTION_VARIABLE_IDAT_MERGE_GRANTED = "idatMergeGranted";
String BPMN_EXECUTION_VARIABLE_USAGE_AND_TRANSFER_GRANTED = "usageAndTransferGranted";
String BPMN_EXECUTION_VARIABLE_BINARY_URL = "binaryUrl";
String BPMN_EXECUTION_VARIABLE_ERROR_CODE = "errorCode";
String BPMN_EXECUTION_VARIABLE_ERROR_MESSAGE = "errorMessage";
String BPMN_EXECUTION_VARIABLE_ERROR_SOURCE = "errorSource";
String BPMN_EXECUTION_VARIABLE_CONTINUE_STATUS = "continueStatus";
String BPMN_EXECUTION_VARIABLE_RETURN_TARGET = "returnTarget";
String BPMN_EXECUTION_VARIABLE_SOURCE_IDS_BY_BUNDLE_UUID = "sourceIdsByBundleUuid";

String NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM = "http://www.netzwerk-universitaetsmedizin.de/sid/dic-pseudonym";
String NAMING_SYSTEM_NUM_CODEX_CRR_PSEUDONYM = "http://www.netzwerk-universitaetsmedizin.de/sid/crr-pseudonym";
Expand All @@ -33,30 +42,42 @@ public interface ConstantsDataTransfer
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_EXPORT_TO = "export-to";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_DATA_REFERENCE = "data-reference";

String PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-trigger";
String PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-stop-data-trigger";
String PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI = "http://www.netzwerk-universitaetsmedizin.de/bpe/Process/dataTrigger/";
String PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI
+ VERSION;
String PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-trigger";
String PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER_MESSAGE_NAME = "startDataTrigger";
String PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-stop-data-trigger";
String PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER_MESSAGE_NAME = "stopDataTrigger";

String PROFILE_NUM_CODEX_TASK_START_DATA_SEND = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-send";
String PROFILE_NUM_CODEX_TASK_DATA_SEND_PROCESS_URI = "http://www.netzwerk-universitaetsmedizin.de/bpe/Process/dataSend/";
String PROFILE_NUM_CODEX_TASK_DATA_SEND_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_SEND_PROCESS_URI
+ VERSION;
String PROFILE_NUM_CODEX_TASK_START_DATA_SEND = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-send";
String PROFILE_NUM_CODEX_TASK_START_DATA_SEND_MESSAGE_NAME = "startDataSend";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_SEND = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-continue-data-send";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_SEND_MESSAGE_NAME = "continueDataSend";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_SEND_WITH_VALIDATION_ERROR = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-continue-data-send-with-validation-error";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_SEND_WITH_VALIDATION_ERROR_MESSAGE_NAME = "continueDataSendWithValidationError";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_SEND_WITH_ERROR = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-continue-data-send-with-error";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_SEND_WITH_ERROR_MESSAGE_NAME = "continueDataSendWithError";

String PROFILE_NUM_CODEX_TASK_START_DATA_TRANSLATE = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-translate";
String PROFILE_NUM_CODEX_TASK_DATA_TRANSLATE_PROCESS_URI = "http://www.netzwerk-universitaetsmedizin.de/bpe/Process/dataTranslate/";
String PROFILE_NUM_CODEX_TASK_DATA_TRANSLATE_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_TRANSLATE_PROCESS_URI
+ VERSION;
String PROFILE_NUM_CODEX_TASK_START_DATA_TRANSLATE = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-translate";
String PROFILE_NUM_CODEX_TASK_START_DATA_TRANSLATE_MESSAGE_NAME = "startDataTranslate";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_TRANSLATE = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-continue-data-translate";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_TRANSLATE_MESSAGE_NAME = "continueDataTranslate";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_TRANSLATE_WITH_VALIDATION_ERROR = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-continue-data-translate-with-validation-error";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_TRANSLATE_WITH_VALIDATION_ERROR_MESSAGE_NAME = "continueDataTranslateWithValidationError";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_TRANSLATE_WITH_ERROR = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-continue-data-translate-with-error";
String PROFILE_NUM_CODEX_TASK_CONTINUE_DATA_TRANSLATE_WITH_ERROR_MESSAGE_NAME = "continueDataTranslateWithError";

String PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-receive";
String PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI = "http://www.netzwerk-universitaetsmedizin.de/bpe/Process/dataReceive/";
String PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI
+ VERSION;
String PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-receive";
String PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE_MESSAGE_NAME = "startDataReceive";

String PSEUDONYM_PLACEHOLDER = "${pseudonym}";
Expand All @@ -68,16 +89,27 @@ public interface ConstantsDataTransfer
String HAPI_USER_DATA_SOURCE_ID_ELEMENT = "source-id";

String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR = "http://www.netzwerk-universitaetsmedizin.de/fhir/CodeSystem/data-transfer-error";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_PATIENT_NOT_FOUND = "patient-not-found";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_BAD_PATIENT_REFERENCE = "bad-patient-reference";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_FTTP_NOT_REACHABLE = "fttp-not-reachable";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_NO_DIC_PSEUDONYM_FOR_BLOOMFILTER = "no-dic-pseudonym-for-bloomfilter";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_VALIDATION_FAILED = "validation-failed";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_TIMEOUT_WAITING_FOR_RESPONSE_FROM_CRR = "timeout-waiting-for-response-from-crr";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_DOWNLOAD_DATA_FROM_DIC_FAILED = "download-data-from-dic-failed";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_NO_CRR_PSEUDONYM_FOR_DIC_PSEUDONYM = "no-crr-pseudonym-for-dic-pseudonym";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_TIMEOUT_WAITING_FOR_RESPONSE_FROM_GTH = "timeout-waiting-for-response-from-gth";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_DOWNLOAD_DATA_FROM_GTH_FAILED = "download-data-from-gth-failed";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_INSERT_INTO_CRR_FHIR_REPOSITORY_FAILED = "insert-into-crr-fhir-respository-failed";

String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_SOURCE = "http://www.netzwerk-universitaetsmedizin.de/fhir/CodeSystem/data-transfer-error-source";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_SOURCE_VALUE_MEDIC = "MeDIC";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_SOURCE_VALUE_GTH = "GTH";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_SOURCE_VALUE_FTTP = "fTTP";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_SOURCE_VALUE_CRR = "CRR";

String EXTENSION_ERROR_METADATA = "https://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/error-metadata";
String EXTENSION_ERROR_METADATA_TYPE = "type";
String EXTENSION_ERROR_METADATA_SOURCE = "source";
String EXTENSION_ERROR_METADATA_REFERENCE = "reference";

byte[] RETURN_AAD = "aLCdSbI55VAv2BaKs4ypnDw3AaRfSBWXa8Bxl78BJw".getBytes(StandardCharsets.UTF_8);
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,14 @@
import ca.uhn.fhir.context.FhirContext;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client.FttpClientFactory;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client.GeccoClientFactory;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.spring.config.ReceiveConfig;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.spring.config.SendConfig;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.spring.config.TransferDataConfig;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.spring.config.TransferDataSerializerConfig;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.spring.config.TranslateConfig;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.spring.config.TriggerConfig;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.spring.config.ValidationConfig;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.spring.config.ValidationConfig.TerminologyServerConnectionTestStatus;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.validation.BundleValidatorFactory;

public class DataTransferProcessPluginDefinition implements ProcessPluginDefinition
Expand Down Expand Up @@ -61,7 +66,8 @@ public Stream<String> getBpmnFiles()
@Override
public Stream<Class<?>> getSpringConfigClasses()
{
return Stream.of(TransferDataConfig.class, TransferDataSerializerConfig.class, ValidationConfig.class);
return Stream.of(TransferDataConfig.class, TransferDataSerializerConfig.class, ValidationConfig.class,
TriggerConfig.class, SendConfig.class, TranslateConfig.class, ReceiveConfig.class);
}

@Override
Expand All @@ -83,29 +89,42 @@ public ResourceProvider getResourceProvider(FhirContext fhirContext, ClassLoader

var sTexErMe = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-extension-error-metadata.xml");
var sTstaDrec = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-start-data-receive.xml");
var sTstaDsen = StructureDefinitionResource.file("fhir/StructureDefinition/num-codex-task-start-data-send.xml");
var sTstaDtra = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-start-data-translate.xml");
var sTstaDtri = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-start-data-trigger.xml");
var sTstoDtri = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-stop-data-trigger.xml");
var sTstaDsen = StructureDefinitionResource.file("fhir/StructureDefinition/num-codex-task-start-data-send.xml");
var sTconDsen = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-continue-data-send.xml");
var sTconDsenWvE = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-continue-data-send-with-validation-error.xml");
var sTconDsenWe = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-continue-data-send-with-error.xml");
var sTstaDtra = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-start-data-translate.xml");
var sTconDtra = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-continue-data-translate.xml");
var sTconDtraWvE = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-continue-data-translate-with-validation-error.xml");
var sTconDtraWe = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-continue-data-translate-with-error.xml");
var sTstaDrec = StructureDefinitionResource
.file("fhir/StructureDefinition/num-codex-task-start-data-receive.xml");

var vD = ValueSetResource.file("fhir/ValueSet/num-codex-data-transfer.xml");
var vDeS = ValueSetResource.file("fhir/ValueSet/num-codex-data-transfer-error-source.xml");
var vDe = ValueSetResource.file("fhir/ValueSet/num-codex-data-transfer-error.xml");

Map<String, List<AbstractResource>> resourcesByProcessKeyAndVersion = Map.of( //
Map<String, List<AbstractResource>> resourcesByProcessKeyAndVersion = Map.of(
"wwwnetzwerk-universitaetsmedizinde_dataTrigger/" + VERSION,
Arrays.asList(aTri, cD, nD, sTstaDtri, sTstoDtri, vD), //
"wwwnetzwerk-universitaetsmedizinde_dataSend/" + VERSION,
Arrays.asList(aSen, cD, cDeS, cDe, nD, nB, sTexErMe, sTstaDsen, vD, vDeS, vDe), //
Arrays.asList(aTri, cD, nD, sTstaDtri, sTstoDtri, vD),
"wwwnetzwerk-universitaetsmedizinde_dataSend/" + VERSION, Arrays.asList(aSen, cD, cDeS, cDe, nB, nD,
sTexErMe, sTstaDsen, sTconDsen, sTconDsenWvE, sTconDsenWe, vD, vDeS, vDe),
"wwwnetzwerk-universitaetsmedizinde_dataTranslate/" + VERSION,
Arrays.asList(aTra, cD, nD, nC, sTstaDtra, vD), //
Arrays.asList(aTra, cD, cDeS, cDe, nD, nC, sTexErMe, sTstaDtra, sTconDtra, sTconDtraWvE, sTconDtraWe,
vD),
"wwwnetzwerk-universitaetsmedizinde_dataReceive/" + VERSION,
Arrays.asList(aRec, cD, nC, sTstaDrec, vD));
Arrays.asList(aRec, cD, cDeS, cDe, nC, sTexErMe, sTstaDrec, vD));

return ResourceProvider.read(VERSION, DATE,
() -> fhirContext.newXmlParser().setStripVersionsFromReferences(false), classLoader, propertyResolver,
Expand All @@ -129,12 +148,12 @@ public void onProcessesDeployed(ApplicationContext pluginApplicationContext, Lis

if (activeProcesses.contains("wwwnetzwerk-universitaetsmedizinde_dataSend"))
{
boolean testOk = pluginApplicationContext.getBean(ValidationConfig.class)
TerminologyServerConnectionTestStatus status = pluginApplicationContext.getBean(ValidationConfig.class)
.testConnectionToTerminologyServer();

if (testOk)
if (TerminologyServerConnectionTestStatus.OK.equals(status))
pluginApplicationContext.getBean(BundleValidatorFactory.class).init();
else
else if (TerminologyServerConnectionTestStatus.NOT_OK.equals(status))
logger.warn(
"Due to an error while testing the connection to the terminology server {} was not initialized, validation of bundles will be skipped.",
BundleValidatorFactory.class.getSimpleName());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client;

import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_FTTP_NOT_REACHABLE;
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PSEUDONYM_PATTERN_STRING;

import java.net.MalformedURLException;
Expand All @@ -10,6 +11,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.camunda.bpm.engine.delegate.BpmnError;
import org.hl7.fhir.r4.model.Base64BinaryType;
import org.hl7.fhir.r4.model.CapabilityStatement;
import org.hl7.fhir.r4.model.Identifier;
Expand Down Expand Up @@ -128,8 +130,8 @@ public Optional<String> getCrrPseudonym(String dicSourceAndPseudonym)
}
catch (Exception e)
{
logger.error("Error while retrieving CRR pseudonym", e);
return Optional.empty();
logger.error("Error while retrieving CRR pseudonym: {} - {}", e.getClass().getName(), e.getMessage());
throw new BpmnError(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_FTTP_NOT_REACHABLE, e.getMessage());
}
}

Expand Down Expand Up @@ -171,8 +173,8 @@ public Optional<String> getDicPseudonym(String bloomFilter)
}
catch (Exception e)
{
logger.error("Error while retrieving DIC pseudonym", e);
return Optional.empty();
logger.error("Error while retrieving DIC pseudonym: {} - {}", e.getClass().getName(), e.getMessage());
throw new BpmnError(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_FTTP_NOT_REACHABLE, e.getMessage());
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client.fhir;

import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_BAD_PATIENT_REFERENCE;
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM;

import java.io.IOException;
Expand All @@ -23,6 +24,7 @@
import java.util.stream.IntStream;
import java.util.stream.Stream;

import org.camunda.bpm.engine.delegate.BpmnError;
import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
import org.hl7.fhir.r4.model.Bundle;
import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent;
Expand Down Expand Up @@ -578,8 +580,9 @@ public Optional<Patient> getPatient(String reference)
}
}
else
throw new RuntimeException(
"Reference should be an absolute local fhir store url to " + client.getServerBase());
throw new BpmnError(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_ERROR_VALUE_BAD_PATIENT_REFERENCE,
"Patient reference not an absolute reference to a resouce at the local GECCO FHIR server: "
+ client.getServerBase());
}

@Override
Expand Down
Loading

0 comments on commit d80f467

Please sign in to comment.