From 652acf315448a9a499bc899287e08918f7bb7e69 Mon Sep 17 00:00:00 2001 From: Simon Hirtreiter Date: Thu, 4 Jul 2024 14:20:40 +0200 Subject: [PATCH] Feauter/archunit hexagonal (#1811) * example-integration refactor streaming response * unit-test lib init new hexagonal ArchUnit test * example integration add hex ArchUnit test * unit-test lib init hex ArchUnit adapters not depending on each other * address-integration refactor for ArchUnit * alw-integration refactor for ArchUnit * cosys-integration refactor for ArchUnit * dms-integration refactor for ArchUnit * email-integration refactor for ArchUnit * cosys-integration refactor for ArchUnit * okewo-integration refactor for ArchUnit * ticket-integration refactor for ArchUnit * openai-integration refactor for ArchUnit * connector refactor for ArchUnit * integrations unit test lib as parent dependency * connector refactor for ArchUnit * integration fix naming from refactoring for ArchUnit * integration fix test packages after ArchUnit refactoring * integration fix test packages after ArchUnit refactoring * integration fix test packages after ArchUnit refactoring --- .../digiwf/connector/ArchitectureTest.java | 12 ++ .../in => in/camunda/rest}/CamundaClient.java | 9 +- .../rest}/CamundaClientConfiguration.java | 2 +- .../camunda/rest/FromEngineDataMapper.java} | 27 +--- .../camunda/rest}/BpmnErrorAdapter.java | 9 +- .../camunda/rest}/IncidentAdapter.java | 2 +- .../camunda/rest}/MessageAdapter.java | 11 +- .../out/camunda/rest/ToEngineDataMapper.java | 36 ++++++ .../ProcessDefinitionAdapter.java | 2 +- .../ProcessInstanceClient.java | 2 +- .../processdefinition/ServiceInstanceTO.java | 2 +- ...giWFCamundaConnectorAutoConfiguration.java | 19 +-- .../DigiWFCamundaConnectorProperties.java | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- .../connector/adapter/ArchitectureTest.java | 24 ---- .../rest}/CamundaClientConfigurationTest.java | 2 +- .../camunda/rest}/CamundaClientTest.java | 5 +- .../camunda/rest}/BpmnErrorAdapterTest.java | 9 +- .../camunda/rest}/IncidentAdapterTest.java | 2 +- .../camunda/rest}/MessageAdapterTest.java | 8 +- .../ProcessDefinitionAdapterTest.java | 2 +- ...er.java => BpmnErrorStreamingAdapter.java} | 2 +- ...mer.java => IncidentStreamingAdapter.java} | 6 +- ...umer.java => MessageStreamingAdapter.java} | 2 +- .../{ => streaming}/EventEmitterAdapter.java | 2 +- .../StreamingOutAdapterConfiguration.java | 2 +- ...ava => BpmnErrorStreamingAdapterTest.java} | 6 +- ...java => IncidentStreamingAdapterTest.java} | 13 +- ....java => MessageStreamingAdapterTest.java} | 6 +- .../adapter/out/EventEmitterAdapterTest.java | 1 + ...geProcessor.java => StreamingAdapter.java} | 71 +++++++---- .../adapter/out/IntegrationOutAdapter.java | 42 ------- .../AddressClientOutAdapter.java | 2 +- .../port/out/IntegrationOutPort.java | 38 ------ .../in/streaming/StreamingAdapterTest.java} | 115 +++++++++-------- .../address}/AddressClientOutAdapterTest.java | 39 +++--- .../usecase/AddressesGermanyUseCaseTest.java | 3 +- .../usecase/AddressesMunichUseCaseTest.java | 9 +- .../usecase/StreetsMunichUseCaseTest.java | 3 +- .../out/IntegrationOutAdapterTest.java | 83 ------------- ...ssServiceIntegrationAutoConfiguration.java | 54 ++++---- .../address/integration/ArchitectureTest.java | 12 ++ .../digiwf-alw-integration-core/pom.xml | 12 +- ...geProcessor.java => StreamingAdapter.java} | 33 +++-- .../integration/IntegrationOutAdapter.java | 42 ------- ... => OrgStructureMapperOutPortAdapter.java} | 14 +-- .../port/out/IntegrationOutPort.java | 37 ------ .../port/out/OrgStructureMapper.java | 17 --- .../port/out/OrgStructureMapperOutPort.java | 18 +++ .../GetResponsibilityUseCase.java | 10 +- .../{ => usecase}/PingAlwServiceUseCase.java | 29 +++-- .../SachbearbeitungMapperConfig.java | 10 +- .../GetResponsibilityUseCaseTest.java | 74 ----------- .../usecase/GetResponsibilityUseCaseTest.java | 74 +++++++++++ .../configuration/AlwAutoConfiguration.java | 18 +-- .../alw/integration/ArchitectureTest.java | 12 ++ .../digiwf-cosys-integration-core/pom.xml | 12 +- .../StreamingAdapter.java} | 14 ++- .../adapter/out/ProcessAdapter.java | 19 --- .../adapter/out/{ => cosys}/CosysAdapter.java | 6 +- .../adapter/out/{ => cosys}/FileUtils.java | 2 +- .../adapter/out/{ => s3}/S3Adapter.java | 6 +- .../port/in/CreateDocumentInPort.java | 4 +- .../port/out/CorrelateMessageOutPort.java | 9 -- .../port/out/GenerateDocumentOutPort.java | 2 +- .../port/out/SaveFileToStorageOutPort.java | 2 +- .../usecase/CreateDocumentUseCase.java | 13 +- .../model/DocumentStorageUrl.java | 7 +- .../{ => domain}/model/GenerateDocument.java | 2 +- .../model/GenerateDocumentRequest.java | 2 +- .../StreamingAdapterTest.java} | 30 ++--- .../adapter/out/ProcessAdapterTest.java | 30 ----- .../out/{ => cosys}/CosysAdapterTest.java | 6 +- .../adapter/out/{ => s3}/S3AdapterTest.java | 24 ++-- .../usecase/CreateDocumentUseCaseTest.java | 15 +-- .../domain/model/GenerateDocumentTest.java | 2 - .../api/controller/ExampleController.java | 4 +- .../configuration/CosysAutoConfiguration.java | 28 ++--- .../cosys/integration/ArchitectureTest.java | 12 ++ .../digiwf-dms-integration-core/pom.xml | 6 - .../in/{ => streaming}/CancelObjectDto.java | 2 +- .../in/{ => streaming}/CreateDocumentDto.java | 2 +- .../in/{ => streaming}/CreateFileDto.java | 2 +- .../{ => streaming}/CreateProcedureDto.java | 2 +- .../in/{ => streaming}/DepositObjectDto.java | 2 +- .../in/{ => streaming}/ReadContentDto.java | 2 +- .../in/{ => streaming}/SearchObjectDto.java | 2 +- .../StreamingAdapter.java} | 4 +- .../in/{ => streaming}/UpdateDocumentDto.java | 2 +- .../CancelObjectStreamingAdapterTest.java} | 10 +- .../CreateDocumentStreamingAdapterTest.java} | 10 +- .../CreateFileStreamingAdapterTest.java} | 10 +- .../CreateProcedureStreamingAdapterTest.java} | 10 +- .../DepositObjectStreamingAdapterTest.java} | 10 +- .../ReadContentStreamingAdapterTest.java} | 6 +- .../SearchFileStreamingAdapterTest.java} | 7 +- ...earchSubjectAreaStreamingAdapterTest.java} | 6 +- .../StreamingAdapterTestBase.java} | 8 +- .../UpdateDocumentStreamingAdapterTest.java} | 10 +- .../configuration/DmsAutoConfiguration.java | 42 +++---- .../dms/integration/ArchitectureTest.java | 12 ++ .../digiwf-email-integration-core/pom.xml | 12 +- .../in/{ => streaming}/BasicMailDto.java | 4 +- .../MailWithLogoAndLinkDto.java | 4 +- .../StreamingAdapter.java} | 19 +-- .../adapter/out/ProcessAdapter.java | 19 --- .../adapter/out/{ => mail}/MailAdapter.java | 2 +- .../adapter/out/{ => s3}/S3Adapter.java | 7 +- .../application/port/in/SendMailInPort.java | 8 +- .../port/out/CorrelateMessageOutPort.java | 9 -- .../port/out/LoadMailAttachmentOutPort.java | 2 +- .../application/usecase/SendMailUseCase.java | 22 ++-- .../{ => domain}/model/BasicMail.java | 2 +- .../domain}/model/PresignedUrl.java | 7 +- .../{ => domain}/model/TemplateMail.java | 2 +- .../{ => domain}/model/TextMail.java | 5 +- ...lWithLogoAndLinkStreamingAdapterTest.java} | 22 ++-- ...SendMailWithTextStreamingAdapterTest.java} | 22 ++-- .../StreamingAdapterTestBase.java} | 11 +- .../adapter/out/ProcessAdapterTest.java | 30 ----- .../out/{ => mail}/MailAdapterTest.java | 2 +- .../adapter/out/{ => s3}/S3AdapterTest.java | 10 +- .../usecase/SendMailUseCaseTest.java | 35 ++---- .../api/controller/ExampleController.java | 2 +- .../integration/{ => domain}/model/Mail.java | 6 +- .../domain}/model/PresignedUrl.java | 7 +- .../configuration/MailAutoConfiguration.java | 41 +++--- .../email/integration/ArchitectureTest.java | 12 ++ ...geProcessor.java => StreamingAdapter.java} | 29 +++-- .../adapter/out/example/ExampleAdapter.java | 17 +++ .../adapter/out/streaming/ProcessAdapter.java | 40 ------ .../port/in/ProcessResponseInPort.java | 14 --- .../application/port/out/ExampleOutPort.java | 8 ++ .../port/out/ProcessResponseOutPort.java | 14 --- .../application/usecase/ExampleUseCase.java | 12 +- .../usecase/ProcessResponseUseCase.java | 30 ----- ...IntegrationAdapterInAutoconfiguration.java | 16 +-- ...ntegrationAdapterOutAutoconfiguration.java | 11 +- .../ExampleIntegrationAutoconfiguration.java | 13 +- .../example/integration/ArchitectureTest.java | 12 ++ .../digiwf-integration-parent/pom.xml | 8 ++ .../digiwf-okewo-integration-core/pom.xml | 10 +- ...geProcessor.java => StreamingAdapter.java} | 47 ++++--- .../adapter/out/IntegrationOutAdapter.java | 42 ------- .../adapter/out/{ => okewo}/OkEwoAdapter.java | 4 +- .../GetPersonErweitertUseCase.java | 20 --- .../application/GetPersonUseCase.java | 20 --- .../SearchPersonErweitertUseCase.java | 20 --- .../application/SearchPersonUseCase.java | 19 --- .../application/out/IntegrationOutPort.java | 38 ------ .../application/out/OkEwoClientOutPort.java | 19 --- .../in/GetPersonErweitertInPort.java | 4 +- .../{ => port}/in/GetPersonInPort.java | 4 +- .../in/SearchPersonErweitertInPort.java | 4 +- .../{ => port}/in/SearchPersonInPort.java | 4 +- .../port/out/OkEwoClientOutPort.java | 19 +++ .../usecase/GetPersonErweitertUseCase.java | 21 ++++ .../application/usecase/GetPersonUseCase.java | 21 ++++ .../usecase/SearchPersonErweitertUseCase.java | 20 +++ .../usecase/SearchPersonUseCase.java | 20 +++ .../adapter/out/OkEwoAdapterTest.java | 115 ----------------- .../adapter/out/okewo/OkEwoAdapterTest.java | 115 +++++++++++++++++ .../OkEwoIntegrationAutoConfiguration.java | 46 +++---- .../okewo/integration/ArchitectureTest.java | 12 ++ .../adapter/in/streaming/OpenAiMapper.java | 14 +-- ...geProcessor.java => StreamingAdapter.java} | 58 +++++---- .../adapter/out/IntegrationOutAdapter.java | 42 ------- .../adapter/out/{ => ai}/Assistant.java | 2 +- .../out/{ => ai}/OpenAiClientOutAdapter.java | 10 +- .../application/port/in/OpenAiInPort.java | 8 +- .../port/out/IntegrationOutPort.java | 38 ------ .../port/out/OpenAiClientOutPort.java | 8 +- .../application/usecase/OpenAiUseCase.java | 8 +- .../out/dto => domain}/ChatRequest.java | 2 +- .../out/dto => domain}/ClassifyRequest.java | 2 +- .../dto => domain}/ExtractDataRequest.java | 2 +- .../dto => domain}/GenerateMailRequest.java | 2 +- .../out/dto => domain}/OpenAiResponse.java | 2 +- .../out/dto => domain}/SummarizeRequest.java | 2 +- .../out/dto => domain}/TranslateRequest.java | 2 +- ...sorTest.java => StreamingAdapterTest.java} | 117 ++++++++---------- .../{ => ai}/OpenAiClientOutAdapterTest.java | 10 +- .../OpenAIIntegrationAutoConfiguration.java | 55 ++++---- .../openai/integration/ArchitectureTest.java | 12 ++ .../digiwf-s3-integration-core/pom.xml | 10 +- .../digiwf-ticket-integration-core/pom.xml | 8 -- ...essor.java => TicketStreamingAdapter.java} | 2 +- .../adapter/out/zammad/ZammadAdapter.java | 8 +- .../{ => usecase}/WriteArticleUseCase.java | 2 +- .../WriteArticleStreamingAdapterTest.java} | 8 +- .../adapter/out/zammad/ZammadAdapterTest.java | 10 +- .../WriteArticleUseCaseTest.java | 2 +- .../TicketIntegrationAutoConfiguration.java | 22 ++-- .../ticket/integration/ArchitectureTest.java | 12 ++ .../pom.xml | 8 +- .../zammad/ZammadAutoConfiguration.java | 6 +- .../oss/digiwf/archunit/Adapters.java | 74 ----------- .../oss/digiwf/archunit/ApplicationLayer.java | 66 ---------- .../digiwf/archunit/ArchitectureElement.java | 65 ---------- .../archunit/HexagonalArchitecture.java | 66 ---------- .../archunit/HexagonalArchitectureTest.java | 94 ++++++++++++++ 201 files changed, 1399 insertions(+), 2170 deletions(-) create mode 100644 digiwf-connector/digiwf-camunda-connector-service/src/test/java/de/muenchen/oss/digiwf/connector/ArchitectureTest.java rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/in => in/camunda/rest}/CamundaClient.java (90%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/in => in/camunda/rest}/CamundaClientConfiguration.java (91%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/mapper/EngineDataSerializer.java => in/camunda/rest/FromEngineDataMapper.java} (51%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/out => out/camunda/rest}/BpmnErrorAdapter.java (81%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/out => out/camunda/rest}/IncidentAdapter.java (97%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/out => out/camunda/rest}/MessageAdapter.java (84%) create mode 100644 digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/ToEngineDataMapper.java rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/out => out/camunda/rest}/processdefinition/ProcessDefinitionAdapter.java (93%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/out => out/camunda/rest}/processdefinition/ProcessInstanceClient.java (92%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/out => out/camunda/rest}/processdefinition/ServiceInstanceTO.java (87%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/{adapter => }/camunda/rest/DigiWFCamundaConnectorAutoConfiguration.java (78%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/{adapter => }/camunda/rest/DigiWFCamundaConnectorProperties.java (86%) delete mode 100644 digiwf-connector/digiwf-camunda-rest-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/adapter/ArchitectureTest.java rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/in => in/camunda/rest}/CamundaClientConfigurationTest.java (93%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/in => in/camunda/rest}/CamundaClientTest.java (95%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/out => out/camunda/rest}/BpmnErrorAdapterTest.java (82%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/out => out/camunda/rest}/IncidentAdapterTest.java (98%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/out => out/camunda/rest}/MessageAdapterTest.java (80%) rename digiwf-connector/digiwf-camunda-rest-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/adapter/{camunda/rest/out => out/camunda/rest}/processdefinition/ProcessDefinitionAdapterTest.java (97%) rename digiwf-connector/digiwf-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/{BpmnErrorEventConsumer.java => BpmnErrorStreamingAdapter.java} (96%) rename digiwf-connector/digiwf-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/{IncidentConsumer.java => IncidentStreamingAdapter.java} (97%) rename digiwf-connector/digiwf-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/{MessageEventConsumer.java => MessageStreamingAdapter.java} (97%) rename digiwf-connector/digiwf-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/core/adapter/out/{ => streaming}/EventEmitterAdapter.java (96%) rename digiwf-connector/digiwf-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/core/adapter/out/{ => streaming}/StreamingOutAdapterConfiguration.java (91%) rename digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/{BpmnErrorEventConsumerTest.java => BpmnErrorStreamingAdapterTest.java} (91%) rename digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/{IncidentConsumerTest.java => IncidentStreamingAdapterTest.java} (87%) rename digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/{MessageEventConsumerTest.java => MessageStreamingAdapterTest.java} (93%) rename digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/{MessageProcessor.java => StreamingAdapter.java} (63%) delete mode 100644 digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/IntegrationOutAdapter.java rename digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/{ => address}/AddressClientOutAdapter.java (98%) delete mode 100644 digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/application/port/out/IntegrationOutPort.java rename digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/{integration/adapter/in/streaming/MessageProcessorTest.java => de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/StreamingAdapterTest.java} (69%) rename digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/{integration/adapter/out => de/muenchen/oss/digiwf/address/integration/adapter/out/address}/AddressClientOutAdapterTest.java (86%) rename digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/{ => de/muenchen/oss/digiwf/address}/integration/application/usecase/AddressesGermanyUseCaseTest.java (95%) rename digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/{ => de/muenchen/oss/digiwf/address}/integration/application/usecase/AddressesMunichUseCaseTest.java (95%) rename digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/{ => de/muenchen/oss/digiwf/address}/integration/application/usecase/StreetsMunichUseCaseTest.java (96%) delete mode 100644 digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/adapter/out/IntegrationOutAdapterTest.java create mode 100644 digiwf-integrations/digiwf-address-integration/digiwf-address-integration-starter/src/test/java/de/muenchen/oss/digiwf/address/integration/ArchitectureTest.java rename digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/in/streaming/{MessageProcessor.java => StreamingAdapter.java} (65%) delete mode 100644 digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/integration/IntegrationOutAdapter.java rename digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/orgstructure/{OrgStructureMapperAdapter.java => OrgStructureMapperOutPortAdapter.java} (50%) delete mode 100644 digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/IntegrationOutPort.java delete mode 100644 digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/OrgStructureMapper.java create mode 100644 digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/OrgStructureMapperOutPort.java rename digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/{ => usecase}/GetResponsibilityUseCase.java (84%) rename digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/{ => usecase}/PingAlwServiceUseCase.java (50%) delete mode 100644 digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/test/java/de/muenchen/oss/digiwf/alw/integration/application/GetResponsibilityUseCaseTest.java create mode 100644 digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/test/java/de/muenchen/oss/digiwf/alw/integration/application/usecase/GetResponsibilityUseCaseTest.java create mode 100644 digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-starter/src/test/java/de/muenchen/oss/digiwf/alw/integration/ArchitectureTest.java rename digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/{MessageProcessor.java => streaming/StreamingAdapter.java} (79%) delete mode 100644 digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/ProcessAdapter.java rename digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/{ => cosys}/CosysAdapter.java (93%) rename digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/{ => cosys}/FileUtils.java (84%) rename digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/{ => s3}/S3Adapter.java (89%) delete mode 100644 digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/CorrelateMessageOutPort.java rename digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/{ => domain}/model/DocumentStorageUrl.java (93%) rename digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/{ => domain}/model/GenerateDocument.java (95%) rename digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/{ => domain}/model/GenerateDocumentRequest.java (85%) rename digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/{MessageProcessorTest.java => streaming/StreamingAdapterTest.java} (77%) delete mode 100644 digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/ProcessAdapterTest.java rename digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/{ => cosys}/CosysAdapterTest.java (92%) rename digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/{ => s3}/S3AdapterTest.java (84%) create mode 100644 digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-starter/src/test/java/de/muenchen/oss/digiwf/cosys/integration/ArchitectureTest.java rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{ => streaming}/CancelObjectDto.java (79%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{ => streaming}/CreateDocumentDto.java (89%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{ => streaming}/CreateFileDto.java (80%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{ => streaming}/CreateProcedureDto.java (82%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{ => streaming}/DepositObjectDto.java (79%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{ => streaming}/ReadContentDto.java (83%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{ => streaming}/SearchObjectDto.java (86%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{MessageProcessor.java => streaming/StreamingAdapter.java} (99%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{ => streaming}/UpdateDocumentDto.java (88%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{CancelObjectMessageProcessorTest.java => streaming/CancelObjectStreamingAdapterTest.java} (89%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{CreateDocumentMessageProcessorTest.java => streaming/CreateDocumentStreamingAdapterTest.java} (92%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{CreateFileMessageProcessorTest.java => streaming/CreateFileStreamingAdapterTest.java} (89%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{CreateProcedureMessageProcessorTest.java => streaming/CreateProcedureStreamingAdapterTest.java} (90%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{DepositObjectMessageProcessorTest.java => streaming/DepositObjectStreamingAdapterTest.java} (88%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{ReadContentMessageProcessorTest.java => streaming/ReadContentStreamingAdapterTest.java} (88%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{SearchFileMessageProcessorTest.java => streaming/SearchFileStreamingAdapterTest.java} (87%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{SearchSubjectAreaMessageProcessorTest.java => streaming/SearchSubjectAreaStreamingAdapterTest.java} (86%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{MessageProcessorTestBase.java => streaming/StreamingAdapterTestBase.java} (91%) rename digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/{UpdateDocumentMessageProcessorTest.java => streaming/UpdateDocumentStreamingAdapterTest.java} (91%) create mode 100644 digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-starter/src/test/java/de/muenchen/oss/digiwf/dms/integration/ArchitectureTest.java rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/{ => streaming}/BasicMailDto.java (86%) rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/{ => streaming}/MailWithLogoAndLinkDto.java (90%) rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/{MessageProcessor.java => streaming/StreamingAdapter.java} (83%) delete mode 100644 digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/ProcessAdapter.java rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/{ => mail}/MailAdapter.java (92%) rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/{ => s3}/S3Adapter.java (90%) delete mode 100644 digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/out/CorrelateMessageOutPort.java rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/{ => domain}/model/BasicMail.java (93%) rename digiwf-integrations/digiwf-email-integration/{digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration => digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain}/model/PresignedUrl.java (93%) rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/{ => domain}/model/TemplateMail.java (93%) rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/{ => domain}/model/TextMail.java (91%) rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/{SendMailWithLogoAndLinkMessageProcessorTest.java => streaming/SendMailWithLogoAndLinkStreamingAdapterTest.java} (85%) rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/{SendMailWithTextMessageProcessorTest.java => streaming/SendMailWithTextStreamingAdapterTest.java} (81%) rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/{MessageProcessorTestBase.java => streaming/StreamingAdapterTestBase.java} (74%) delete mode 100644 digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/ProcessAdapterTest.java rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/{ => mail}/MailAdapterTest.java (95%) rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/{ => s3}/S3AdapterTest.java (90%) rename digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/{ => domain}/model/Mail.java (94%) rename digiwf-integrations/digiwf-email-integration/{digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration => digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/domain}/model/PresignedUrl.java (93%) create mode 100644 digiwf-integrations/digiwf-email-integration/digiwf-email-integration-starter/src/test/java/de/muenchen/oss/digiwf/email/integration/ArchitectureTest.java rename digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/in/streaming/{MessageProcessor.java => StreamingAdapter.java} (50%) create mode 100644 digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/out/example/ExampleAdapter.java delete mode 100644 digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/out/streaming/ProcessAdapter.java delete mode 100644 digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/in/ProcessResponseInPort.java create mode 100644 digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/out/ExampleOutPort.java delete mode 100644 digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/out/ProcessResponseOutPort.java delete mode 100644 digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/usecase/ProcessResponseUseCase.java create mode 100644 digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/test/java/de/muenchen/oss/digiwf/example/integration/ArchitectureTest.java rename digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/in/streaming/{MessageProcessor.java => StreamingAdapter.java} (71%) delete mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/IntegrationOutAdapter.java rename digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/{ => okewo}/OkEwoAdapter.java (94%) delete mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/GetPersonErweitertUseCase.java delete mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/GetPersonUseCase.java delete mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/SearchPersonErweitertUseCase.java delete mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/SearchPersonUseCase.java delete mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/out/IntegrationOutPort.java delete mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/out/OkEwoClientOutPort.java rename digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/{ => port}/in/GetPersonErweitertInPort.java (58%) rename digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/{ => port}/in/GetPersonInPort.java (58%) rename digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/{ => port}/in/SearchPersonErweitertInPort.java (62%) rename digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/{ => port}/in/SearchPersonInPort.java (62%) create mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/out/OkEwoClientOutPort.java create mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/GetPersonErweitertUseCase.java create mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/GetPersonUseCase.java create mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/SearchPersonErweitertUseCase.java create mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/SearchPersonUseCase.java delete mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/test/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/OkEwoAdapterTest.java create mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/test/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/okewo/OkEwoAdapterTest.java create mode 100644 digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-starter/src/test/java/de/muenchen/oss/digiwf/okewo/integration/ArchitectureTest.java rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/{MessageProcessor.java => StreamingAdapter.java} (59%) delete mode 100644 digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/IntegrationOutAdapter.java rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/{ => ai}/Assistant.java (96%) rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/{ => ai}/OpenAiClientOutAdapter.java (80%) delete mode 100644 digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/out/IntegrationOutPort.java rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/{adapter/out/dto => domain}/ChatRequest.java (56%) rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/{adapter/out/dto => domain}/ClassifyRequest.java (63%) rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/{adapter/out/dto => domain}/ExtractDataRequest.java (63%) rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/{adapter/out/dto => domain}/GenerateMailRequest.java (69%) rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/{adapter/out/dto => domain}/OpenAiResponse.java (57%) rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/{adapter/out/dto => domain}/SummarizeRequest.java (62%) rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/{adapter/out/dto => domain}/TranslateRequest.java (63%) rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/{MessageProcessorTest.java => StreamingAdapterTest.java} (60%) rename digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/{ => ai}/OpenAiClientOutAdapterTest.java (88%) create mode 100644 digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-starter/src/test/java/de/muenchen/oss/digiwf/openai/integration/ArchitectureTest.java rename digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/streaming/{TicketMessageProcessor.java => TicketStreamingAdapter.java} (99%) rename digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/application/{ => usecase}/WriteArticleUseCase.java (95%) rename digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/{WriteArticleMessageProcessorTest.java => streaming/WriteArticleStreamingAdapterTest.java} (87%) rename digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/application/{ => usecase}/WriteArticleUseCaseTest.java (97%) create mode 100644 digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-starter/src/test/java/de/muenchen/oss/digiwf/ticket/integration/ArchitectureTest.java delete mode 100644 digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/Adapters.java delete mode 100644 digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/ApplicationLayer.java delete mode 100644 digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/ArchitectureElement.java delete mode 100644 digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/HexagonalArchitecture.java create mode 100644 digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/HexagonalArchitectureTest.java diff --git a/digiwf-connector/digiwf-camunda-connector-service/src/test/java/de/muenchen/oss/digiwf/connector/ArchitectureTest.java b/digiwf-connector/digiwf-camunda-connector-service/src/test/java/de/muenchen/oss/digiwf/connector/ArchitectureTest.java new file mode 100644 index 0000000000..b3ad3e3fee --- /dev/null +++ b/digiwf-connector/digiwf-camunda-connector-service/src/test/java/de/muenchen/oss/digiwf/connector/ArchitectureTest.java @@ -0,0 +1,12 @@ +package de.muenchen.oss.digiwf.connector; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchTests; +import de.muenchen.oss.digiwf.archunit.HexagonalArchitectureTest; + +@AnalyzeClasses +public class ArchitectureTest { + @ArchTest + static final ArchTests hexagonalArchitecture = ArchTests.in(HexagonalArchitectureTest.class); +} diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/in/CamundaClient.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/in/camunda/rest/CamundaClient.java similarity index 90% rename from digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/in/CamundaClient.java rename to digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/in/camunda/rest/CamundaClient.java index 8868dcb347..b70da192bb 100644 --- a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/in/CamundaClient.java +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/in/camunda/rest/CamundaClient.java @@ -1,6 +1,5 @@ -package de.muenchen.oss.digiwf.connector.adapter.camunda.rest.in; +package de.muenchen.oss.digiwf.connector.adapter.in.camunda.rest; -import de.muenchen.oss.digiwf.connector.adapter.camunda.rest.mapper.EngineDataSerializer; import de.muenchen.oss.digiwf.connector.core.application.port.in.ExecuteTaskInPort; import de.muenchen.oss.digiwf.connector.core.application.port.in.ExecuteTaskInPort.ExecuteTaskCommand; import de.muenchen.oss.digiwf.connector.core.domain.IntegrationNameConfigException; @@ -22,7 +21,7 @@ public class CamundaClient implements ExternalTaskHandler { private final ExecuteTaskInPort executeTaskInPort; private final CamundaClientConfiguration outputConfiguration; - private final EngineDataSerializer serializer; + private final FromEngineDataMapper mapper; @Override public void execute(final ExternalTask externalTask, final ExternalTaskService externalTaskService) { @@ -54,7 +53,7 @@ public void execute(final ExternalTask externalTask, final ExternalTaskService e } catch (final ProcessDefinitionLoadingException e) { externalTaskService.handleFailure(externalTask, e.getMessage(), e.getDetailedMessage(), 0, 0); } catch (final Exception e) { - externalTaskService.handleFailure(externalTask, e.getMessage(), ExceptionUtils.getStackTrace(e),0, 0); + externalTaskService.handleFailure(externalTask, e.getMessage(), ExceptionUtils.getStackTrace(e), 0, 0); } } @@ -67,7 +66,7 @@ private Map filterVariables(final Map variables) } private Map getData(final ExternalTask externalTask) { - return this.serializer.fromEngineData(externalTask.getAllVariablesTyped()); + return this.mapper.fromEngineData(externalTask.getAllVariablesTyped()); } diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/in/CamundaClientConfiguration.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/in/camunda/rest/CamundaClientConfiguration.java similarity index 91% rename from digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/in/CamundaClientConfiguration.java rename to digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/in/camunda/rest/CamundaClientConfiguration.java index c0fe01f0e4..2f63fb4af4 100644 --- a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/in/CamundaClientConfiguration.java +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/in/camunda/rest/CamundaClientConfiguration.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.connector.adapter.camunda.rest.in; +package de.muenchen.oss.digiwf.connector.adapter.in.camunda.rest; import lombok.RequiredArgsConstructor; diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/mapper/EngineDataSerializer.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/in/camunda/rest/FromEngineDataMapper.java similarity index 51% rename from digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/mapper/EngineDataSerializer.java rename to digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/in/camunda/rest/FromEngineDataMapper.java index 6a30113309..868445ab42 100644 --- a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/mapper/EngineDataSerializer.java +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/in/camunda/rest/FromEngineDataMapper.java @@ -1,8 +1,7 @@ -package de.muenchen.oss.digiwf.connector.adapter.camunda.rest.mapper; +package de.muenchen.oss.digiwf.connector.adapter.in.camunda.rest; import org.camunda.bpm.engine.variable.VariableMap; import org.camunda.bpm.engine.variable.value.TypedValue; -import org.camunda.community.rest.client.model.VariableValueDto; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.stereotype.Component; @@ -12,18 +11,7 @@ @Component -public class EngineDataSerializer { - - public Map toEngineData(final Map data) { - final JSONObject jsonData = new JSONObject(data); - final Map variables = new HashMap<>(); - jsonData.keySet().forEach(key -> { - final Object value = jsonData.get(key); - variables.put(key, this.toEngineData(value)); - } - ); - return variables; - } +public class FromEngineDataMapper { public Map fromEngineData(final VariableMap variables) { final Map data = new HashMap<>(); @@ -39,17 +27,6 @@ public Map fromEngineData(final VariableMap variables) { return data; } - public VariableValueDto toEngineData(final Object value) { - final VariableValueDto variableValueDto = new VariableValueDto(); - if (value instanceof JSONObject || value instanceof JSONArray) { - variableValueDto.setValue(value.toString()); - variableValueDto.setType("json"); - } else { - variableValueDto.setValue(value); - } - return variableValueDto; - } - //---------------------------------- helper methods ----------------------------------// private Object fromEngineData(final Object value) { diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/BpmnErrorAdapter.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/BpmnErrorAdapter.java similarity index 81% rename from digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/BpmnErrorAdapter.java rename to digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/BpmnErrorAdapter.java index 1a25bc2018..45ec7f8540 100644 --- a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/BpmnErrorAdapter.java +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/BpmnErrorAdapter.java @@ -1,7 +1,6 @@ -package de.muenchen.oss.digiwf.connector.adapter.camunda.rest.out; +package de.muenchen.oss.digiwf.connector.adapter.out.camunda.rest; -import de.muenchen.oss.digiwf.connector.adapter.camunda.rest.mapper.EngineDataSerializer; import de.muenchen.oss.digiwf.connector.core.application.port.out.CreateBpmnErrorOutPort; import de.muenchen.oss.digiwf.connector.core.domain.BpmnError; import lombok.RequiredArgsConstructor; @@ -20,7 +19,7 @@ public class BpmnErrorAdapter implements CreateBpmnErrorOutPort { public static final String VARIABLEKEY_ERROR_MESSAGE = "errorMessage"; private final MessageApi messageApi; - private final EngineDataSerializer serializer; + private final ToEngineDataMapper mapper; @Override public void createBpmnError(final BpmnError bpmnError) { @@ -34,11 +33,11 @@ public void createBpmnError(final BpmnError bpmnError) { } if (StringUtils.isNotBlank(bpmnError.getErrorCode())) { - correlationMessageDto.putProcessVariablesItem(VARIABLEKEY_ERROR_CODE, this.serializer.toEngineData(bpmnError.getErrorCode())); + correlationMessageDto.putProcessVariablesItem(VARIABLEKEY_ERROR_CODE, this.mapper.toEngineData(bpmnError.getErrorCode())); } if (StringUtils.isNotBlank(bpmnError.getErrorMessage())) { - correlationMessageDto.putProcessVariablesItem(VARIABLEKEY_ERROR_MESSAGE, this.serializer.toEngineData(bpmnError.getErrorMessage())); + correlationMessageDto.putProcessVariablesItem(VARIABLEKEY_ERROR_MESSAGE, this.mapper.toEngineData(bpmnError.getErrorMessage())); } this.messageApi.deliverMessage(correlationMessageDto); diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/IncidentAdapter.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/IncidentAdapter.java similarity index 97% rename from digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/IncidentAdapter.java rename to digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/IncidentAdapter.java index bffd57b961..d596665091 100644 --- a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/IncidentAdapter.java +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/IncidentAdapter.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.connector.adapter.camunda.rest.out; +package de.muenchen.oss.digiwf.connector.adapter.out.camunda.rest; import de.muenchen.oss.digiwf.connector.core.application.port.out.CreateIncidentOutPort; import lombok.RequiredArgsConstructor; diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/MessageAdapter.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/MessageAdapter.java similarity index 84% rename from digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/MessageAdapter.java rename to digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/MessageAdapter.java index 33d6ca1a98..06f4b8c648 100644 --- a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/MessageAdapter.java +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/MessageAdapter.java @@ -1,7 +1,6 @@ -package de.muenchen.oss.digiwf.connector.adapter.camunda.rest.out; +package de.muenchen.oss.digiwf.connector.adapter.out.camunda.rest; -import de.muenchen.oss.digiwf.connector.adapter.camunda.rest.mapper.EngineDataSerializer; import de.muenchen.oss.digiwf.connector.core.application.port.out.CorrelateMessageOutPort; import de.muenchen.oss.digiwf.connector.core.domain.MessageCorrelation; import lombok.RequiredArgsConstructor; @@ -20,7 +19,7 @@ public class MessageAdapter implements CorrelateMessageOutPort { private final MessageApi messageApi; - private final EngineDataSerializer serializer; + private final ToEngineDataMapper mapper; @Override public void correlateMessage(final MessageCorrelation messageCorrelation) { @@ -30,12 +29,12 @@ public void correlateMessage(final MessageCorrelation messageCorrelation) { correlationMessageDto.setMessageName(messageCorrelation.getMessageName()); if (messageCorrelation.getPayloadVariables() != null && !messageCorrelation.getPayloadVariables().isEmpty()) { - final Map variables = this.serializer.toEngineData(messageCorrelation.getPayloadVariables()); + final Map variables = this.mapper.toEngineData(messageCorrelation.getPayloadVariables()); correlationMessageDto.setProcessVariables(variables); } if (messageCorrelation.getPayloadVariablesLocal() != null && !messageCorrelation.getPayloadVariablesLocal().isEmpty()) { - final Map variables = this.serializer.toEngineData(messageCorrelation.getPayloadVariablesLocal()); + final Map variables = this.mapper.toEngineData(messageCorrelation.getPayloadVariablesLocal()); correlationMessageDto.setProcessVariablesLocal(variables); } @@ -46,7 +45,7 @@ public void correlateMessage(final MessageCorrelation messageCorrelation) { if (StringUtils.isNotBlank(messageCorrelation.getBusinessKey())) { correlationMessageDto.setBusinessKey(messageCorrelation.getBusinessKey()); } - + this.messageApi.deliverMessage(correlationMessageDto); } diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/ToEngineDataMapper.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/ToEngineDataMapper.java new file mode 100644 index 0000000000..0d261ef323 --- /dev/null +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/ToEngineDataMapper.java @@ -0,0 +1,36 @@ +package de.muenchen.oss.digiwf.connector.adapter.out.camunda.rest; + +import org.camunda.community.rest.client.model.VariableValueDto; +import org.json.JSONArray; +import org.json.JSONObject; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + + +@Component +public class ToEngineDataMapper { + + public Map toEngineData(final Map data) { + final JSONObject jsonData = new JSONObject(data); + final Map variables = new HashMap<>(); + jsonData.keySet().forEach(key -> { + final Object value = jsonData.get(key); + variables.put(key, this.toEngineData(value)); + } + ); + return variables; + } + + public VariableValueDto toEngineData(final Object value) { + final VariableValueDto variableValueDto = new VariableValueDto(); + if (value instanceof JSONObject || value instanceof JSONArray) { + variableValueDto.setValue(value.toString()); + variableValueDto.setType("json"); + } else { + variableValueDto.setValue(value); + } + return variableValueDto; + } +} diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/processdefinition/ProcessDefinitionAdapter.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/processdefinition/ProcessDefinitionAdapter.java similarity index 93% rename from digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/processdefinition/ProcessDefinitionAdapter.java rename to digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/processdefinition/ProcessDefinitionAdapter.java index 4fe1d6ed2a..3064f404d0 100644 --- a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/processdefinition/ProcessDefinitionAdapter.java +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/processdefinition/ProcessDefinitionAdapter.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.connector.adapter.camunda.rest.out.processdefinition; +package de.muenchen.oss.digiwf.connector.adapter.out.camunda.rest.processdefinition; import de.muenchen.oss.digiwf.connector.core.application.port.out.ProcessOutPort; import de.muenchen.oss.digiwf.connector.core.domain.ProcessDefinitionLoadingException; diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/processdefinition/ProcessInstanceClient.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/processdefinition/ProcessInstanceClient.java similarity index 92% rename from digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/processdefinition/ProcessInstanceClient.java rename to digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/processdefinition/ProcessInstanceClient.java index 133bfb0383..4c126d9beb 100644 --- a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/processdefinition/ProcessInstanceClient.java +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/processdefinition/ProcessInstanceClient.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.connector.adapter.camunda.rest.out.processdefinition; +package de.muenchen.oss.digiwf.connector.adapter.out.camunda.rest.processdefinition; import de.muenchen.oss.digiwf.spring.security.client.DigiwfFeignOauthClientConfig; import org.springframework.cloud.openfeign.FeignClient; diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/processdefinition/ServiceInstanceTO.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/processdefinition/ServiceInstanceTO.java similarity index 87% rename from digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/processdefinition/ServiceInstanceTO.java rename to digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/processdefinition/ServiceInstanceTO.java index fa90a0c89f..5531153859 100644 --- a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/out/processdefinition/ServiceInstanceTO.java +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/out/camunda/rest/processdefinition/ServiceInstanceTO.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.connector.adapter.camunda.rest.out.processdefinition; +package de.muenchen.oss.digiwf.connector.adapter.out.camunda.rest.processdefinition; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/DigiWFCamundaConnectorAutoConfiguration.java b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/camunda/rest/DigiWFCamundaConnectorAutoConfiguration.java similarity index 78% rename from digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/DigiWFCamundaConnectorAutoConfiguration.java rename to digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/camunda/rest/DigiWFCamundaConnectorAutoConfiguration.java index 6ac7f05864..e950267075 100644 --- a/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/adapter/camunda/rest/DigiWFCamundaConnectorAutoConfiguration.java +++ b/digiwf-connector/digiwf-camunda-rest-connector-starter/src/main/java/de/muenchen/oss/digiwf/connector/camunda/rest/DigiWFCamundaConnectorAutoConfiguration.java @@ -1,9 +1,9 @@ -package de.muenchen.oss.digiwf.connector.adapter.camunda.rest; +package de.muenchen.oss.digiwf.connector.camunda.rest; -import de.muenchen.oss.digiwf.connector.adapter.camunda.rest.in.CamundaClient; -import de.muenchen.oss.digiwf.connector.adapter.camunda.rest.in.CamundaClientConfiguration; -import de.muenchen.oss.digiwf.connector.adapter.camunda.rest.mapper.EngineDataSerializer; -import de.muenchen.oss.digiwf.connector.core.adapter.out.EventEmitterAdapter; +import de.muenchen.oss.digiwf.connector.adapter.in.camunda.rest.CamundaClient; +import de.muenchen.oss.digiwf.connector.adapter.in.camunda.rest.CamundaClientConfiguration; +import de.muenchen.oss.digiwf.connector.adapter.in.camunda.rest.FromEngineDataMapper; +import de.muenchen.oss.digiwf.connector.core.adapter.out.streaming.EventEmitterAdapter; import de.muenchen.oss.digiwf.connector.core.application.port.in.ExecuteTaskInPort; import de.muenchen.oss.digiwf.connector.core.application.port.out.EmitEventOutPort; import lombok.RequiredArgsConstructor; @@ -22,9 +22,9 @@ @RequiredArgsConstructor -@ComponentScan(basePackages = "de.muenchen.oss.digiwf.connector.adapter.camunda.rest") +@ComponentScan(basePackages = "de.muenchen.oss.digiwf.connector.adapter.*.camunda.rest") @EnableConfigurationProperties(DigiWFCamundaConnectorProperties.class) -@EnableFeignClients(basePackages = "de.muenchen.oss.digiwf.connector.adapter.camunda.rest.out") +@EnableFeignClients(basePackages = "de.muenchen.oss.digiwf.connector.adapter.out.camunda.rest") public class DigiWFCamundaConnectorAutoConfiguration { @@ -44,8 +44,9 @@ public EmitEventOutPort outputService(final Sinks.Many> consumer = incidentConsumer.createIncident(); + Consumer> consumer = incidentStreamingAdapter.createIncident(); consumer.accept(new Message() { @Override @@ -44,7 +43,7 @@ void shouldDoNothingIfHeadersAreEmpty() { @Test @DisplayName("should create incident if headers are given") void shouldCreateIncidentIfHeadersAreGiven() { - Consumer> consumer = incidentConsumer.createIncident(); + Consumer> consumer = incidentStreamingAdapter.createIncident(); consumer.accept(new Message() { @Override @@ -68,7 +67,7 @@ void shouldCreateIncidentIfHeadersAreGiven() { @Test @DisplayName("should create incident if payload is missing") void shouldCreateIncidentIfPayloadIsMissing() { - Consumer> consumer = incidentConsumer.createIncident(); + Consumer> consumer = incidentStreamingAdapter.createIncident(); consumer.accept(new Message() { @Override diff --git a/digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/MessageEventConsumerTest.java b/digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/MessageStreamingAdapterTest.java similarity index 93% rename from digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/MessageEventConsumerTest.java rename to digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/MessageStreamingAdapterTest.java index 52b71f19ab..9105913cb6 100644 --- a/digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/MessageEventConsumerTest.java +++ b/digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/in/streaming/MessageStreamingAdapterTest.java @@ -13,15 +13,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.*; -class MessageEventConsumerTest { +class MessageStreamingAdapterTest { - private MessageEventConsumer consumer; + private MessageStreamingAdapter consumer; private CorrelateMessageInPort inPort; @BeforeEach void setUp() { inPort = mock(CorrelateMessageInPort.class); - consumer = new MessageEventConsumer(inPort); + consumer = new MessageStreamingAdapter(inPort); } @Test diff --git a/digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/out/EventEmitterAdapterTest.java b/digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/out/EventEmitterAdapterTest.java index a31d487343..df15a5aa1d 100644 --- a/digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/out/EventEmitterAdapterTest.java +++ b/digiwf-connector/digiwf-connector-starter/src/test/java/de/muenchen/oss/digiwf/connector/core/adapter/out/EventEmitterAdapterTest.java @@ -2,6 +2,7 @@ import de.muenchen.oss.digiwf.connector.BaseSpringTest; +import de.muenchen.oss.digiwf.connector.core.adapter.out.streaming.EventEmitterAdapter; import de.muenchen.oss.digiwf.connector.core.application.port.out.EmitEventOutPort; import org.junit.jupiter.api.*; import org.mockito.Mock; diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/MessageProcessor.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/StreamingAdapter.java similarity index 63% rename from digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/MessageProcessor.java rename to digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/StreamingAdapter.java index 3b370e2e17..c60f637863 100644 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/MessageProcessor.java +++ b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/StreamingAdapter.java @@ -4,27 +4,34 @@ import de.muenchen.oss.digiwf.address.integration.application.port.in.AddressGermanyInPort; import de.muenchen.oss.digiwf.address.integration.application.port.in.AddressMunichInPort; import de.muenchen.oss.digiwf.address.integration.application.port.in.StreetsMunichInPort; -import de.muenchen.oss.digiwf.address.integration.application.port.out.IntegrationOutPort; import de.muenchen.oss.digiwf.address.integration.client.gen.model.*; import de.muenchen.oss.digiwf.address.integration.client.model.request.*; import de.muenchen.oss.digiwf.address.integration.client.model.response.AddressDistancesModel; +import de.muenchen.oss.digiwf.message.common.MessageConstants; +import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.lang.NonNull; import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; +import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.function.Consumer; @RequiredArgsConstructor @Slf4j -public class MessageProcessor { +public class StreamingAdapter { private final AddressGermanyInPort addressGermanyInPort; private final AddressMunichInPort addressMunichInPort; private final StreetsMunichInPort streetsMunichInPort; - private final IntegrationOutPort integrationOutPort; + private final ProcessApi processApi; + private final ErrorApi errorApi; private final AddressMapper addressServiceMapper; @@ -36,11 +43,11 @@ public Consumer> searchAddressesGermany() log.debug(message.toString()); final SearchAddressesGermanyModel model = this.addressServiceMapper.dto2Model(message.getPayload()); final BundesweiteAdresseResponse result = this.addressGermanyInPort.searchAddresses(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); } catch (final BpmnError bpmnError) { - this.integrationOutPort.handleBpmnError(message.getHeaders(), bpmnError); + this.errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final IncidentError incidentError) { - this.integrationOutPort.handleIncident(message.getHeaders(), incidentError); + this.errorApi.handleIncident(message.getHeaders(), incidentError); } }; } @@ -51,11 +58,11 @@ public Consumer> checkAddressMunich() { log.debug(message.toString()); final CheckAddressesModel model = this.addressServiceMapper.dto2Model(message.getPayload()); final MuenchenAdresse result = this.addressMunichInPort.checkAddress(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); } catch (final BpmnError bpmnError) { - this.integrationOutPort.handleBpmnError(message.getHeaders(), bpmnError); + this.errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final IncidentError incidentError) { - this.integrationOutPort.handleIncident(message.getHeaders(), incidentError); + this.errorApi.handleIncident(message.getHeaders(), incidentError); } }; } @@ -66,11 +73,11 @@ public Consumer> listAddressesMunich() { log.debug(message.toString()); final ListAddressesModel model = this.addressServiceMapper.dto2Model(message.getPayload()); final MuenchenAdresseResponse result = this.addressMunichInPort.listAddresses(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); } catch (final BpmnError bpmnError) { - this.integrationOutPort.handleBpmnError(message.getHeaders(), bpmnError); + this.errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final IncidentError incidentError) { - this.integrationOutPort.handleIncident(message.getHeaders(), incidentError); + this.errorApi.handleIncident(message.getHeaders(), incidentError); } }; } @@ -81,11 +88,11 @@ public Consumer> listChangesMunich() { log.debug(message.toString()); final ListAddressChangesModel model = this.addressServiceMapper.dto2Model(message.getPayload()); final AenderungResponse result = this.addressMunichInPort.listChanges(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); } catch (final BpmnError bpmnError) { - this.integrationOutPort.handleBpmnError(message.getHeaders(), bpmnError); + this.errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final IncidentError incidentError) { - this.integrationOutPort.handleIncident(message.getHeaders(), incidentError); + this.errorApi.handleIncident(message.getHeaders(), incidentError); } }; } @@ -96,11 +103,11 @@ public Consumer> searchAddressesMunich() { log.debug(message.toString()); final SearchAddressesModel model = this.addressServiceMapper.dto2Model(message.getPayload()); final MuenchenAdresseResponse result = this.addressMunichInPort.searchAddresses(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); } catch (final BpmnError bpmnError) { - this.integrationOutPort.handleBpmnError(message.getHeaders(), bpmnError); + this.errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final IncidentError incidentError) { - this.integrationOutPort.handleIncident(message.getHeaders(), incidentError); + this.errorApi.handleIncident(message.getHeaders(), incidentError); } }; } @@ -111,11 +118,11 @@ public Consumer> searchAddressesGeoMunich( log.debug(message.toString()); final SearchAddressesGeoModel model = this.addressServiceMapper.dto2Model(message.getPayload()); final AddressDistancesModel result = this.addressMunichInPort.searchAddressesGeo(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); } catch (final BpmnError bpmnError) { - this.integrationOutPort.handleBpmnError(message.getHeaders(), bpmnError); + this.errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final IncidentError incidentError) { - this.integrationOutPort.handleIncident(message.getHeaders(), incidentError); + this.errorApi.handleIncident(message.getHeaders(), incidentError); } }; } @@ -126,11 +133,11 @@ public Consumer> findStreetByIdMunich() { log.debug(message.toString()); final long streetId = message.getPayload().getStrasseId(); final Strasse result = this.streetsMunichInPort.findStreetsById(streetId); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); } catch (final BpmnError bpmnError) { - this.integrationOutPort.handleBpmnError(message.getHeaders(), bpmnError); + this.errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final IncidentError incidentError) { - this.integrationOutPort.handleIncident(message.getHeaders(), incidentError); + this.errorApi.handleIncident(message.getHeaders(), incidentError); } }; } @@ -141,12 +148,22 @@ public Consumer> listStreetMunich() { log.debug(message.toString()); final ListStreetsModel model = this.addressServiceMapper.dto2Model(message.getPayload()); final StrasseResponse result = this.streetsMunichInPort.listStreets(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result)); } catch (final BpmnError bpmnError) { - this.integrationOutPort.handleBpmnError(message.getHeaders(), bpmnError); + this.errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final IncidentError incidentError) { - this.integrationOutPort.handleIncident(message.getHeaders(), incidentError); + this.errorApi.handleIncident(message.getHeaders(), incidentError); } }; } + + public void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload) { + final String processInstanceId = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_PROCESS_INSTANCE_ID)).toString(); + final String integrationName = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_INTEGRATION_NAME)).toString(); + final String type = Objects.requireNonNull(headers.get(MessageConstants.TYPE)).toString(); + if (payload == null) { + payload = new HashMap<>(); + } + this.processApi.correlateMessage(processInstanceId, type, integrationName, payload); + } } diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/IntegrationOutAdapter.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/IntegrationOutAdapter.java deleted file mode 100644 index b62026d3ff..0000000000 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/IntegrationOutAdapter.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.muenchen.oss.digiwf.address.integration.adapter.out; - -import de.muenchen.oss.digiwf.address.integration.application.port.out.IntegrationOutPort; -import de.muenchen.oss.digiwf.message.common.MessageConstants; -import de.muenchen.oss.digiwf.message.process.api.ErrorApi; -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import lombok.RequiredArgsConstructor; -import org.springframework.lang.NonNull; -import org.springframework.messaging.MessageHeaders; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -@RequiredArgsConstructor -public class IntegrationOutAdapter implements IntegrationOutPort { - private final ProcessApi processApi; - private final ErrorApi errorApi; - - @Override - public void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload) { - final String processInstanceId = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_PROCESS_INSTANCE_ID)).toString(); - final String integrationName = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_INTEGRATION_NAME)).toString(); - final String type = Objects.requireNonNull(headers.get(MessageConstants.TYPE)).toString(); - if (payload == null) { - payload = new HashMap<>(); - } - this.processApi.correlateMessage(processInstanceId, type, integrationName, payload); - } - - @Override - public void handleBpmnError(@NonNull MessageHeaders headers, @NonNull BpmnError bpmnError) { - this.errorApi.handleBpmnError(headers, bpmnError); - } - - @Override - public void handleIncident(@NonNull MessageHeaders headers, @NonNull IncidentError incidentError) { - this.errorApi.handleIncident(headers, incidentError); - } -} diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/AddressClientOutAdapter.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/address/AddressClientOutAdapter.java similarity index 98% rename from digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/AddressClientOutAdapter.java rename to digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/address/AddressClientOutAdapter.java index 6dc95cb9bf..18ddbbe7e6 100644 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/AddressClientOutAdapter.java +++ b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/adapter/out/address/AddressClientOutAdapter.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.address.integration.adapter.out; +package de.muenchen.oss.digiwf.address.integration.adapter.out.address; import de.muenchen.oss.digiwf.address.integration.application.port.out.AddressClientOutPort; import de.muenchen.oss.digiwf.address.integration.client.api.AddressGermanyApi; diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/application/port/out/IntegrationOutPort.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/application/port/out/IntegrationOutPort.java deleted file mode 100644 index 9942f7a3b7..0000000000 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/main/java/de/muenchen/oss/digiwf/address/integration/application/port/out/IntegrationOutPort.java +++ /dev/null @@ -1,38 +0,0 @@ -package de.muenchen.oss.digiwf.address.integration.application.port.out; - -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import org.springframework.lang.NonNull; -import org.springframework.messaging.MessageHeaders; - -import java.util.Map; - -/** - * Port to integration infrastructure. - */ -public interface IntegrationOutPort { - - /** - * Correlates message with a process. - * - * @param headers headers describing correlation properties. - * @param payload payload to pass during correlation. - */ - void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload); - - /** - * Handles BPMN error. - * - * @param headers headers for error details. - * @param bpmnError error to handle. - */ - void handleBpmnError(@NonNull MessageHeaders headers, @NonNull BpmnError bpmnError); - - /** - * Handles incident. - * - * @param headers headers for error details. - * @param incidentError incident to handle. - */ - void handleIncident(@NonNull MessageHeaders headers, @NonNull IncidentError incidentError); -} diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/adapter/in/streaming/MessageProcessorTest.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/StreamingAdapterTest.java similarity index 69% rename from digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/adapter/in/streaming/MessageProcessorTest.java rename to digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/StreamingAdapterTest.java index 535719a469..cd03de31ac 100644 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/adapter/in/streaming/MessageProcessorTest.java +++ b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/adapter/in/streaming/StreamingAdapterTest.java @@ -1,14 +1,13 @@ -package integration.adapter.in.streaming; +package de.muenchen.oss.digiwf.address.integration.adapter.in.streaming; -import de.muenchen.oss.digiwf.address.integration.adapter.in.streaming.AddressMapperImpl; -import de.muenchen.oss.digiwf.address.integration.adapter.in.streaming.MessageProcessor; import de.muenchen.oss.digiwf.address.integration.adapter.in.streaming.dto.*; import de.muenchen.oss.digiwf.address.integration.application.port.in.AddressGermanyInPort; import de.muenchen.oss.digiwf.address.integration.application.port.in.AddressMunichInPort; import de.muenchen.oss.digiwf.address.integration.application.port.in.StreetsMunichInPort; -import de.muenchen.oss.digiwf.address.integration.application.port.out.IntegrationOutPort; import de.muenchen.oss.digiwf.address.integration.client.gen.model.*; import de.muenchen.oss.digiwf.address.integration.client.model.response.AddressDistancesModel; +import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import org.junit.jupiter.api.BeforeEach; @@ -24,165 +23,165 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; -class MessageProcessorTest { +class StreamingAdapterTest { private final AddressGermanyInPort addressGermanyInPort = Mockito.mock(AddressGermanyInPort.class); private final AddressMunichInPort addressMunichInPort = Mockito.mock(AddressMunichInPort.class); private final StreetsMunichInPort streetsMunichInPort = Mockito.mock(StreetsMunichInPort.class); - private final IntegrationOutPort integrationOutPort = Mockito.mock(IntegrationOutPort.class); + private final ProcessApi processApi = mock(ProcessApi.class); + private final ErrorApi errorApi = mock(ErrorApi.class); - private MessageProcessor messageProcessor; - + private StreamingAdapter streamingAdapter; @BeforeEach void setup() { - messageProcessor = new MessageProcessor(addressGermanyInPort, addressMunichInPort, streetsMunichInPort, integrationOutPort, new AddressMapperImpl()); + streamingAdapter = new StreamingAdapter(addressGermanyInPort, addressMunichInPort, streetsMunichInPort, processApi, errorApi, new AddressMapperImpl()); } @Test void testSearchAddressesGermany() { final Message searchAdressenDeutschlandMsg = createMessageHelper(SearchAdressenDeutschlandDto.builder().build()); when(addressGermanyInPort.searchAddresses(any())).thenReturn(new BundesweiteAdresseResponse()); - messageProcessor.searchAddressesGermany().accept(searchAdressenDeutschlandMsg); - verify(integrationOutPort, times(1)).correlateProcessMessage(any(), anyMap()); + streamingAdapter.searchAddressesGermany().accept(searchAdressenDeutschlandMsg); + verify(processApi, times(1)).correlateMessage(anyString(), anyString(), anyString(), anyMap()); } @Test void testSearchAddressesGermanyBpmnErrorHandling() { final Message searchAdressenDeutschlandMsg = createMessageHelper(SearchAdressenDeutschlandDto.builder().build()); when(addressGermanyInPort.searchAddresses(any())).thenThrow(new BpmnError("400", "BpmnError")); - messageProcessor.searchAddressesGermany().accept(searchAdressenDeutschlandMsg); - verify(integrationOutPort, times(1)).handleBpmnError(any(), any()); + streamingAdapter.searchAddressesGermany().accept(searchAdressenDeutschlandMsg); + verify(errorApi, times(1)).handleBpmnError(any(), any()); } @Test void testSearchAddressesGermanyIncidentErrorHandling() { final Message searchAdressenDeutschlandMsg = createMessageHelper(SearchAdressenDeutschlandDto.builder().build()); when(addressGermanyInPort.searchAddresses(any())).thenThrow(new IncidentError("IncidentError")); - messageProcessor.searchAddressesGermany().accept(searchAdressenDeutschlandMsg); - verify(integrationOutPort, times(1)).handleIncident(any(), any()); + streamingAdapter.searchAddressesGermany().accept(searchAdressenDeutschlandMsg); + verify(errorApi, times(1)).handleIncident(any(), (IncidentError) any()); } @Test void testCheckAddressMunich() { final Message checkAdresseMuenchenMsg = createMessageHelper(new CheckAdresseMuenchenDto()); when(addressMunichInPort.checkAddress(any())).thenReturn(new MuenchenAdresse()); - messageProcessor.checkAddressMunich().accept(checkAdresseMuenchenMsg); - verify(integrationOutPort, times(1)).correlateProcessMessage(any(), anyMap()); + streamingAdapter.checkAddressMunich().accept(checkAdresseMuenchenMsg); + verify(processApi, times(1)).correlateMessage(anyString(), anyString(), anyString(), anyMap()); } @Test void testCheckAddressMunichBpmnErrorHandling() { final Message checkAdresseMuenchenMsg = createMessageHelper(new CheckAdresseMuenchenDto()); when(addressMunichInPort.checkAddress(any())).thenThrow(new BpmnError("400", "BpmnError")); - messageProcessor.checkAddressMunich().accept(checkAdresseMuenchenMsg); - verify(integrationOutPort, times(1)).handleBpmnError(any(), any()); + streamingAdapter.checkAddressMunich().accept(checkAdresseMuenchenMsg); + verify(errorApi, times(1)).handleBpmnError(any(), any()); } @Test void testCheckAddressMunichIncidentErrorHandling() { final Message checkAdresseMuenchenMsg = createMessageHelper(new CheckAdresseMuenchenDto()); when(addressMunichInPort.checkAddress(any())).thenThrow(new IncidentError("IncidentError")); - messageProcessor.checkAddressMunich().accept(checkAdresseMuenchenMsg); - verify(integrationOutPort, times(1)).handleIncident(any(), any()); + streamingAdapter.checkAddressMunich().accept(checkAdresseMuenchenMsg); + verify(errorApi, times(1)).handleIncident(any(), (IncidentError) any()); } @Test void testListAddressesMunich() { final Message listAdresseMuenchenMsg = createMessageHelper(new ListAdressenMuenchenDto()); when(addressMunichInPort.listAddresses(any())).thenReturn(new MuenchenAdresseResponse()); - messageProcessor.listAddressesMunich().accept(listAdresseMuenchenMsg); - verify(integrationOutPort, times(1)).correlateProcessMessage(any(), anyMap()); + streamingAdapter.listAddressesMunich().accept(listAdresseMuenchenMsg); + verify(processApi, times(1)).correlateMessage(anyString(), anyString(), anyString(), anyMap()); } @Test void testListAddressesMunichBpmnErrorHandling() { final Message listAdresseMuenchenMsg = createMessageHelper(new ListAdressenMuenchenDto()); when(addressMunichInPort.listAddresses(any())).thenThrow(new BpmnError("400", "BpmnError")); - messageProcessor.listAddressesMunich().accept(listAdresseMuenchenMsg); - verify(integrationOutPort, times(1)).handleBpmnError(any(), any()); + streamingAdapter.listAddressesMunich().accept(listAdresseMuenchenMsg); + verify(errorApi, times(1)).handleBpmnError(any(), any()); } @Test void testListAddressesMunichIncidentErrorHandling() { final Message listAdresseMuenchenMsg = createMessageHelper(new ListAdressenMuenchenDto()); when(addressMunichInPort.listAddresses(any())).thenThrow(new IncidentError("IncidentError")); - messageProcessor.listAddressesMunich().accept(listAdresseMuenchenMsg); - verify(integrationOutPort, times(1)).handleIncident(any(), any()); + streamingAdapter.listAddressesMunich().accept(listAdresseMuenchenMsg); + verify(errorApi, times(1)).handleIncident(any(), (IncidentError) any()); } @Test void testListChangesMunich() { final Message listAdresseMuenchenMsg = createMessageHelper(new ListAenderungenMuenchenDto()); when(addressMunichInPort.listChanges(any())).thenReturn(new AenderungResponse()); - messageProcessor.listChangesMunich().accept(listAdresseMuenchenMsg); - verify(integrationOutPort, times(1)).correlateProcessMessage(any(), anyMap()); + streamingAdapter.listChangesMunich().accept(listAdresseMuenchenMsg); + verify(processApi, times(1)).correlateMessage(anyString(), anyString(), anyString(), anyMap()); } @Test void testListChangesMunichBpmnErrorHandling() { final Message listAdresseMuenchenMsg = createMessageHelper(new ListAenderungenMuenchenDto()); when(addressMunichInPort.listChanges(any())).thenThrow(new BpmnError("400", "BpmnError")); - messageProcessor.listChangesMunich().accept(listAdresseMuenchenMsg); - verify(integrationOutPort, times(1)).handleBpmnError(any(), any()); + streamingAdapter.listChangesMunich().accept(listAdresseMuenchenMsg); + verify(errorApi, times(1)).handleBpmnError(any(), any()); } @Test void testListChangesMunichIncidentErrorHandling() { final Message listAdresseMuenchenMsg = createMessageHelper(new ListAenderungenMuenchenDto()); when(addressMunichInPort.listChanges(any())).thenThrow(new IncidentError("IncidentError")); - messageProcessor.listChangesMunich().accept(listAdresseMuenchenMsg); - verify(integrationOutPort, times(1)).handleIncident(any(), any()); + streamingAdapter.listChangesMunich().accept(listAdresseMuenchenMsg); + verify(errorApi, times(1)).handleIncident(any(), (IncidentError) any()); } @Test void testSearchAddressesMunich() { final Message searchAdressenMuenchenMsg = createMessageHelper(new SearchAdressenMuenchenDto()); when(addressMunichInPort.searchAddresses(any())).thenReturn(new MuenchenAdresseResponse()); - messageProcessor.searchAddressesMunich().accept(searchAdressenMuenchenMsg); - verify(integrationOutPort, times(1)).correlateProcessMessage(any(), anyMap()); + streamingAdapter.searchAddressesMunich().accept(searchAdressenMuenchenMsg); + verify(processApi, times(1)).correlateMessage(anyString(), anyString(), anyString(), anyMap()); } @Test void testSearchAddressesMunichBpmnErrorHandling() { final Message searchAdressenMuenchenMsg = createMessageHelper(new SearchAdressenMuenchenDto()); when(addressMunichInPort.searchAddresses(any())).thenThrow(new BpmnError("400", "BpmnError")); - messageProcessor.searchAddressesMunich().accept(searchAdressenMuenchenMsg); - verify(integrationOutPort, times(1)).handleBpmnError(any(), any()); + streamingAdapter.searchAddressesMunich().accept(searchAdressenMuenchenMsg); + verify(errorApi, times(1)).handleBpmnError(any(), any()); } @Test void testSearchAddressesMunichIncidentErrorHandling() { final Message searchAdressenMuenchenMsg = createMessageHelper(new SearchAdressenMuenchenDto()); when(addressMunichInPort.searchAddresses(any())).thenThrow(new IncidentError("IncidentError")); - messageProcessor.searchAddressesMunich().accept(searchAdressenMuenchenMsg); - verify(integrationOutPort, times(1)).handleIncident(any(), any()); + streamingAdapter.searchAddressesMunich().accept(searchAdressenMuenchenMsg); + verify(errorApi, times(1)).handleIncident(any(), (IncidentError) any()); } @Test void testSearchAddressesGeoMunich() { final Message searchAdressenGeoMuenchenMsg = createMessageHelper(new SearchAdressenGeoMuenchenDto()); when(addressMunichInPort.searchAddressesGeo(any())).thenReturn(AddressDistancesModel.builder().build()); - messageProcessor.searchAddressesGeoMunich().accept(searchAdressenGeoMuenchenMsg); - verify(integrationOutPort, times(1)).correlateProcessMessage(any(), anyMap()); + streamingAdapter.searchAddressesGeoMunich().accept(searchAdressenGeoMuenchenMsg); + verify(processApi, times(1)).correlateMessage(anyString(), anyString(), anyString(), anyMap()); } @Test void testSearchAddressesGeoMunichBpmnErrorHandling() { final Message searchAdressenGeoMuenchenMsg = createMessageHelper(new SearchAdressenGeoMuenchenDto()); when(addressMunichInPort.searchAddressesGeo(any())).thenThrow(new BpmnError("400", "BpmnError")); - messageProcessor.searchAddressesGeoMunich().accept(searchAdressenGeoMuenchenMsg); - verify(integrationOutPort, times(1)).handleBpmnError(any(), any()); + streamingAdapter.searchAddressesGeoMunich().accept(searchAdressenGeoMuenchenMsg); + verify(errorApi, times(1)).handleBpmnError(any(), any()); } @Test void testSearchAddressesGeoMunichIncidentErrorHandling() { final Message searchAdressenGeoMuenchenMsg = createMessageHelper(new SearchAdressenGeoMuenchenDto()); when(addressMunichInPort.searchAddressesGeo(any())).thenThrow(new IncidentError("IncidentError")); - messageProcessor.searchAddressesGeoMunich().accept(searchAdressenGeoMuenchenMsg); - verify(integrationOutPort, times(1)).handleIncident(any(), any()); + streamingAdapter.searchAddressesGeoMunich().accept(searchAdressenGeoMuenchenMsg); + verify(errorApi, times(1)).handleIncident(any(), (IncidentError) any()); } @Test @@ -191,8 +190,8 @@ void testFindStreetByIdMunich() { strassenIdDto.setStrasseId(1L); final Message msg = createMessageHelper(strassenIdDto); when(streetsMunichInPort.findStreetsById(anyLong())).thenReturn(new Strasse()); - messageProcessor.findStreetByIdMunich().accept(msg); - verify(integrationOutPort, times(1)).correlateProcessMessage(any(), anyMap()); + streamingAdapter.findStreetByIdMunich().accept(msg); + verify(processApi, times(1)).correlateMessage(anyString(), anyString(), anyString(), anyMap()); } @Test @@ -201,8 +200,8 @@ void testFindStreetByIdMunichBpmnErrorHandling() { strassenIdDto.setStrasseId(1L); final Message msg = createMessageHelper(strassenIdDto); when(streetsMunichInPort.findStreetsById(anyLong())).thenThrow(new BpmnError("400", "BpmnError")); - messageProcessor.findStreetByIdMunich().accept(msg); - verify(integrationOutPort, times(1)).handleBpmnError(any(), any()); + streamingAdapter.findStreetByIdMunich().accept(msg); + verify(errorApi, times(1)).handleBpmnError(any(), any()); } @Test @@ -211,32 +210,32 @@ void testFindStreetByIdMunichIncidentErrorHandling() { strassenIdDto.setStrasseId(1L); final Message msg = createMessageHelper(strassenIdDto); when(streetsMunichInPort.findStreetsById(anyLong())).thenThrow(new IncidentError("IncidentError")); - messageProcessor.findStreetByIdMunich().accept(msg); - verify(integrationOutPort, times(1)).handleIncident(any(), any()); + streamingAdapter.findStreetByIdMunich().accept(msg); + verify(errorApi, times(1)).handleIncident(any(), (IncidentError) any()); } @Test void testListStreetsMunich() { final Message listStrassenMsg = createMessageHelper(new ListStrassenDto()); when(streetsMunichInPort.listStreets(any())).thenReturn(new StrasseResponse()); - messageProcessor.listStreetMunich().accept(listStrassenMsg); - verify(integrationOutPort, times(1)).correlateProcessMessage(any(), anyMap()); + streamingAdapter.listStreetMunich().accept(listStrassenMsg); + verify(processApi, times(1)).correlateMessage(anyString(), anyString(), anyString(), anyMap()); } @Test void testListStreetsMunichBpmnErrorHandling() { final Message listStrassenMsg = createMessageHelper(new ListStrassenDto()); when(streetsMunichInPort.listStreets(any())).thenThrow(new BpmnError("400", "BpmnError")); - messageProcessor.listStreetMunich().accept(listStrassenMsg); - verify(integrationOutPort, times(1)).handleBpmnError(any(), any()); + streamingAdapter.listStreetMunich().accept(listStrassenMsg); + verify(errorApi, times(1)).handleBpmnError(any(), any()); } @Test void testListStreetsMunichIncidentErrorHandling() { final Message listStrassenMsg = createMessageHelper(new ListStrassenDto()); when(streetsMunichInPort.listStreets(any())).thenThrow(new IncidentError("IncidentError")); - messageProcessor.listStreetMunich().accept(listStrassenMsg); - verify(integrationOutPort, times(1)).handleIncident(any(), any()); + streamingAdapter.listStreetMunich().accept(listStrassenMsg); + verify(errorApi, times(1)).handleIncident(any(), (IncidentError) any()); } private Message createMessageHelper(final T payload) { @@ -248,7 +247,7 @@ public T getPayload() { @Override public MessageHeaders getHeaders() { - return new MessageHeaders(Map.of(DIGIWF_PROCESS_INSTANCE_ID, "exampleProcessInstanceId", DIGIWF_INTEGRATION_NAME, "addressIntegration")); + return new MessageHeaders(Map.of(DIGIWF_PROCESS_INSTANCE_ID, "exampleProcessInstanceId", DIGIWF_INTEGRATION_NAME, "addressIntegration", "type", "addressType")); } }; } diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/adapter/out/AddressClientOutAdapterTest.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/adapter/out/address/AddressClientOutAdapterTest.java similarity index 86% rename from digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/adapter/out/AddressClientOutAdapterTest.java rename to digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/adapter/out/address/AddressClientOutAdapterTest.java index c1446f7aa0..3f641cab73 100644 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/adapter/out/AddressClientOutAdapterTest.java +++ b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/adapter/out/address/AddressClientOutAdapterTest.java @@ -1,6 +1,5 @@ -package integration.adapter.out; +package de.muenchen.oss.digiwf.address.integration.adapter.out.address; -import de.muenchen.oss.digiwf.address.integration.adapter.out.AddressClientOutAdapter; import de.muenchen.oss.digiwf.address.integration.application.port.out.AddressClientOutPort; import de.muenchen.oss.digiwf.address.integration.client.api.AddressGermanyApi; import de.muenchen.oss.digiwf.address.integration.client.api.AddressMunichApi; @@ -78,126 +77,126 @@ void testCheckAddressThrowsIncidentErrorIfAddressServiceIntegrationExceptionOccu @Test void testListAddressesThrowsBpmnError() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationClientErrorException("test", new RuntimeException())).when(addressMunichApi).listAddresses(any(ListAddressesModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.listAddresses(ListAddressesModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.listAddresses(ListAddressesModel.builder().build())) .isInstanceOf(BpmnError.class); } @Test void testListAddressesThrowsIncidentErrorIfAddressServiceIntegrationServerErrorExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationServerErrorException("test", new RuntimeException())).when(addressMunichApi).listAddresses(any(ListAddressesModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.listAddresses(ListAddressesModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.listAddresses(ListAddressesModel.builder().build())) .isInstanceOf(IncidentError.class); } @Test void testListAddressesThrowsIncidentErrorIfAddressServiceIntegrationExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationException("test", new RuntimeException())).when(addressMunichApi).listAddresses(any(ListAddressesModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.listAddresses(ListAddressesModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.listAddresses(ListAddressesModel.builder().build())) .isInstanceOf(IncidentError.class); } @Test void testListChangesThrowsBpmnError() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationClientErrorException("test", new RuntimeException())).when(addressMunichApi).listChanges(any(ListAddressChangesModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.listChanges(ListAddressChangesModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.listChanges(ListAddressChangesModel.builder().build())) .isInstanceOf(BpmnError.class); } @Test void testListChangesThrowsIncidentErrorIfAddressServiceIntegrationServerErrorExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationServerErrorException("test", new RuntimeException())).when(addressMunichApi).listChanges(any(ListAddressChangesModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.listChanges(ListAddressChangesModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.listChanges(ListAddressChangesModel.builder().build())) .isInstanceOf(IncidentError.class); } @Test void testListChangesThrowsIncidentErrorIfAddressServiceIntegrationExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationException("test", new RuntimeException())).when(addressMunichApi).listChanges(any(ListAddressChangesModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.listChanges(ListAddressChangesModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.listChanges(ListAddressChangesModel.builder().build())) .isInstanceOf(IncidentError.class); } @Test void testSearchAddressesMunichThrowsBpmnError() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationClientErrorException("test", new RuntimeException())).when(addressMunichApi).searchAddresses(any(SearchAddressesModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.searchAddresses(SearchAddressesModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.searchAddresses(SearchAddressesModel.builder().build())) .isInstanceOf(BpmnError.class); } @Test void testSearchAddressesMunichThrowsIncidentErrorIfAddressServiceIntegrationServerErrorExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationServerErrorException("test", new RuntimeException())).when(addressMunichApi).searchAddresses(any(SearchAddressesModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.searchAddresses(SearchAddressesModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.searchAddresses(SearchAddressesModel.builder().build())) .isInstanceOf(IncidentError.class); } @Test void testSearchAddressesMunichThrowsIncidentErrorIfAddressServiceIntegrationExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationException("test", new RuntimeException())).when(addressMunichApi).searchAddresses(any(SearchAddressesModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.searchAddresses(SearchAddressesModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.searchAddresses(SearchAddressesModel.builder().build())) .isInstanceOf(IncidentError.class); } @Test void testSearchAddressesGeoThrowsBpmnError() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationClientErrorException("test", new RuntimeException())).when(addressMunichApi).searchAddressesGeo(any(SearchAddressesGeoModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.searchAddressesGeo(SearchAddressesGeoModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.searchAddressesGeo(SearchAddressesGeoModel.builder().build())) .isInstanceOf(BpmnError.class); } @Test void testSearchAddressesGeoThrowsIncidentErrorIfAddressServiceIntegrationServerErrorExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationServerErrorException("test", new RuntimeException())).when(addressMunichApi).searchAddressesGeo(any(SearchAddressesGeoModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.searchAddressesGeo(SearchAddressesGeoModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.searchAddressesGeo(SearchAddressesGeoModel.builder().build())) .isInstanceOf(IncidentError.class); } @Test void testSearchAddressesGeoThrowsIncidentErrorIfAddressServiceIntegrationExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationException("test", new RuntimeException())).when(addressMunichApi).searchAddressesGeo(any(SearchAddressesGeoModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.searchAddressesGeo(SearchAddressesGeoModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.searchAddressesGeo(SearchAddressesGeoModel.builder().build())) .isInstanceOf(IncidentError.class); } @Test void testSearchStreetsThrowsBpmnError() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationClientErrorException("test", new RuntimeException())).when(streetsMunichApi).findStreetsById(anyLong()); - assertThatThrownBy(() -> this.addressClientOutPort.findStreetsById(1L)) + assertThatThrownBy(() -> this.addressClientOutPort.findStreetsById(1L)) .isInstanceOf(BpmnError.class); } @Test void testSearchStreetsThrowsIncidentErrorIfAddressServiceIntegrationServerErrorExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationServerErrorException("test", new RuntimeException())).when(streetsMunichApi).findStreetsById(anyLong()); - assertThatThrownBy(() -> this.addressClientOutPort.findStreetsById(1L)) + assertThatThrownBy(() -> this.addressClientOutPort.findStreetsById(1L)) .isInstanceOf(IncidentError.class); } @Test void testSearchStreetsThrowsIncidentErrorIfAddressServiceIntegrationExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationException("test", new RuntimeException())).when(streetsMunichApi).findStreetsById(anyLong()); - assertThatThrownBy(() -> this.addressClientOutPort.findStreetsById(1L)) + assertThatThrownBy(() -> this.addressClientOutPort.findStreetsById(1L)) .isInstanceOf(IncidentError.class); } @Test void testListStreetsThrowsBpmnError() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationClientErrorException("test", new RuntimeException())).when(streetsMunichApi).listStreets(any(ListStreetsModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.listStreets(ListStreetsModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.listStreets(ListStreetsModel.builder().build())) .isInstanceOf(BpmnError.class); } @Test void testListStreetsThrowsIncidentErrorIfAddressServiceIntegrationServerErrorExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationServerErrorException("test", new RuntimeException())).when(streetsMunichApi).listStreets(any(ListStreetsModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.listStreets(ListStreetsModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.listStreets(ListStreetsModel.builder().build())) .isInstanceOf(IncidentError.class); } @Test void testListStreetsThrowsIncidentErrorIfAddressServiceIntegrationExceptionOccurs() throws AddressServiceIntegrationServerErrorException, AddressServiceIntegrationException, AddressServiceIntegrationClientErrorException { doThrow(new AddressServiceIntegrationException("test", new RuntimeException())).when(streetsMunichApi).listStreets(any(ListStreetsModel.class)); - assertThatThrownBy(() -> this.addressClientOutPort.listStreets(ListStreetsModel.builder().build())) + assertThatThrownBy(() -> this.addressClientOutPort.listStreets(ListStreetsModel.builder().build())) .isInstanceOf(IncidentError.class); } } diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/application/usecase/AddressesGermanyUseCaseTest.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/application/usecase/AddressesGermanyUseCaseTest.java similarity index 95% rename from digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/application/usecase/AddressesGermanyUseCaseTest.java rename to digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/application/usecase/AddressesGermanyUseCaseTest.java index 398ab91854..3c0e5234dc 100644 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/application/usecase/AddressesGermanyUseCaseTest.java +++ b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/application/usecase/AddressesGermanyUseCaseTest.java @@ -1,8 +1,7 @@ -package integration.application.usecase; +package de.muenchen.oss.digiwf.address.integration.application.usecase; import de.muenchen.oss.digiwf.address.integration.application.port.in.AddressGermanyInPort; import de.muenchen.oss.digiwf.address.integration.application.port.out.AddressClientOutPort; -import de.muenchen.oss.digiwf.address.integration.application.usecase.AddressesGermanyUseCase; import de.muenchen.oss.digiwf.address.integration.client.gen.model.BundesweiteAdresseResponse; import de.muenchen.oss.digiwf.address.integration.client.model.request.SearchAddressesGermanyModel; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/application/usecase/AddressesMunichUseCaseTest.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/application/usecase/AddressesMunichUseCaseTest.java similarity index 95% rename from digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/application/usecase/AddressesMunichUseCaseTest.java rename to digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/application/usecase/AddressesMunichUseCaseTest.java index 340e60fe94..1cf8af1041 100644 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/application/usecase/AddressesMunichUseCaseTest.java +++ b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/application/usecase/AddressesMunichUseCaseTest.java @@ -1,8 +1,7 @@ -package integration.application.usecase; +package de.muenchen.oss.digiwf.address.integration.application.usecase; import de.muenchen.oss.digiwf.address.integration.application.port.in.AddressMunichInPort; import de.muenchen.oss.digiwf.address.integration.application.port.out.AddressClientOutPort; -import de.muenchen.oss.digiwf.address.integration.application.usecase.AddressesMunichUseCase; import de.muenchen.oss.digiwf.address.integration.client.gen.model.AenderungResponse; import de.muenchen.oss.digiwf.address.integration.client.gen.model.MuenchenAdresse; import de.muenchen.oss.digiwf.address.integration.client.gen.model.MuenchenAdresseResponse; @@ -128,7 +127,7 @@ void testListChanges_throwsIncidentError() throws BpmnError, IncidentError { when(addressClientOutPort.listChanges(listAddressChangesModel)).thenThrow(expectedError); - assertThatThrownBy(() -> addressesMunichUseCase.listChanges(listAddressChangesModel)) + assertThatThrownBy(() -> addressesMunichUseCase.listChanges(listAddressChangesModel)) .isInstanceOf(IncidentError.class) .isEqualTo(expectedError); } @@ -165,7 +164,7 @@ void testSearchAddresses_throwsIncidentError() throws BpmnError, IncidentError { when(addressClientOutPort.searchAddresses(searchAddressesModel)).thenThrow(expectedError); - assertThatThrownBy(() -> addressesMunichUseCase.searchAddresses(searchAddressesModel)) + assertThatThrownBy(() -> addressesMunichUseCase.searchAddresses(searchAddressesModel)) .isInstanceOf(IncidentError.class) .isEqualTo(expectedError); } @@ -202,7 +201,7 @@ void testSearchAddressesGeo_throwsIncidentError() throws BpmnError, IncidentErro when(addressClientOutPort.searchAddressesGeo(searchAddressesGeoModel)).thenThrow(expectedError); - assertThatThrownBy(() -> addressesMunichUseCase.searchAddressesGeo(searchAddressesGeoModel)) + assertThatThrownBy(() -> addressesMunichUseCase.searchAddressesGeo(searchAddressesGeoModel)) .isInstanceOf(IncidentError.class) .isEqualTo(expectedError); } diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/application/usecase/StreetsMunichUseCaseTest.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/application/usecase/StreetsMunichUseCaseTest.java similarity index 96% rename from digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/application/usecase/StreetsMunichUseCaseTest.java rename to digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/application/usecase/StreetsMunichUseCaseTest.java index 2581423994..2a08707110 100644 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/application/usecase/StreetsMunichUseCaseTest.java +++ b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/de/muenchen/oss/digiwf/address/integration/application/usecase/StreetsMunichUseCaseTest.java @@ -1,8 +1,7 @@ -package integration.application.usecase; +package de.muenchen.oss.digiwf.address.integration.application.usecase; import de.muenchen.oss.digiwf.address.integration.application.port.in.StreetsMunichInPort; import de.muenchen.oss.digiwf.address.integration.application.port.out.AddressClientOutPort; -import de.muenchen.oss.digiwf.address.integration.application.usecase.StreetsMunichUseCase; import de.muenchen.oss.digiwf.address.integration.client.gen.model.Strasse; import de.muenchen.oss.digiwf.address.integration.client.gen.model.StrasseResponse; import de.muenchen.oss.digiwf.address.integration.client.model.request.ListStreetsModel; diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/adapter/out/IntegrationOutAdapterTest.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/adapter/out/IntegrationOutAdapterTest.java deleted file mode 100644 index 751a6a4721..0000000000 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-core/src/test/java/integration/adapter/out/IntegrationOutAdapterTest.java +++ /dev/null @@ -1,83 +0,0 @@ -package integration.adapter.out; - -import de.muenchen.oss.digiwf.address.integration.adapter.out.IntegrationOutAdapter; -import de.muenchen.oss.digiwf.address.integration.application.port.out.IntegrationOutPort; -import de.muenchen.oss.digiwf.message.process.api.ErrorApi; -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.springframework.messaging.MessageHeaders; - -import java.util.Map; - -import static de.muenchen.oss.digiwf.message.common.MessageConstants.*; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -class IntegrationOutAdapterTest { - - private final ProcessApi processApi = mock(ProcessApi.class); - private final ErrorApi errorApi = mock(ErrorApi.class); - - private final IntegrationOutPort integrationOutAdapter = new IntegrationOutAdapter(processApi, errorApi); - - private final MessageHeaders messageHeaders = new MessageHeaders(Map.of( - DIGIWF_PROCESS_INSTANCE_ID, "processInstanceId", - DIGIWF_INTEGRATION_NAME, "addressIntegration", - TYPE, "addressType" - )); - - @Test - void testCorrelateProcessMessage() { - final Map payload = Map.of("foo", "bar"); - - integrationOutAdapter.correlateProcessMessage(messageHeaders, payload); - - final ArgumentCaptor processInstanceIdCaptor = ArgumentCaptor.forClass(String.class); - final ArgumentCaptor integrationNameCaptor = ArgumentCaptor.forClass(String.class); - final ArgumentCaptor typeCaptor = ArgumentCaptor.forClass(String.class); - final ArgumentCaptor> payloadCaptor = ArgumentCaptor.forClass(Map.class); - verify(processApi).correlateMessage(processInstanceIdCaptor.capture(), typeCaptor.capture(), integrationNameCaptor.capture(), payloadCaptor.capture()); - - assertThat(processInstanceIdCaptor.getValue()).isEqualTo(messageHeaders.get(DIGIWF_PROCESS_INSTANCE_ID)); - assertThat(integrationNameCaptor.getValue()).isEqualTo(messageHeaders.get(DIGIWF_INTEGRATION_NAME)); - assertThat(typeCaptor.getValue()).isEqualTo(messageHeaders.get(TYPE)); - assertThat(payloadCaptor.getValue()).isEqualTo(payload); - } - - @Test - void testHandleBPMNError() { - final String errorCode = "errorCode"; - final String errorMessage = "errorMessage"; - final BpmnError bpmnError = new BpmnError(errorCode, errorMessage); - - integrationOutAdapter.handleBpmnError(messageHeaders, bpmnError); - - final ArgumentCaptor messageHeadersCaptor = ArgumentCaptor.forClass(MessageHeaders.class); - final ArgumentCaptor bpmnErrorCaptor = ArgumentCaptor.forClass(BpmnError.class); - verify(errorApi).handleBpmnError(messageHeadersCaptor.capture(), bpmnErrorCaptor.capture()); - - assertThat(messageHeadersCaptor.getValue()).isEqualTo(messageHeaders); - assertThat(bpmnErrorCaptor.getValue()).isEqualTo(bpmnError); - assertThat(bpmnErrorCaptor.getValue().getErrorCode()).isEqualTo(errorCode); - } - - @Test - void testHandleIncident() { - final String errorMessage = "errorMessage"; - final IncidentError incidentError = new IncidentError(errorMessage); - - integrationOutAdapter.handleIncident(messageHeaders, incidentError); - - final ArgumentCaptor messageHeadersCaptor = ArgumentCaptor.forClass(MessageHeaders.class); - final ArgumentCaptor incidentErrorArgumentCaptor = ArgumentCaptor.forClass(IncidentError.class); - verify(errorApi).handleIncident(messageHeadersCaptor.capture(), incidentErrorArgumentCaptor.capture()); - - assertThat(messageHeadersCaptor.getValue()).isEqualTo(messageHeaders); - assertThat(incidentErrorArgumentCaptor.getValue()).isEqualTo(incidentError); - } - -} diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-starter/src/main/java/de/muenchen/oss/digiwf/address/integration/configuration/AddressServiceIntegrationAutoConfiguration.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-starter/src/main/java/de/muenchen/oss/digiwf/address/integration/configuration/AddressServiceIntegrationAutoConfiguration.java index f88aeaa515..98a3b8f2e3 100644 --- a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-starter/src/main/java/de/muenchen/oss/digiwf/address/integration/configuration/AddressServiceIntegrationAutoConfiguration.java +++ b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-starter/src/main/java/de/muenchen/oss/digiwf/address/integration/configuration/AddressServiceIntegrationAutoConfiguration.java @@ -1,15 +1,13 @@ package de.muenchen.oss.digiwf.address.integration.configuration; import de.muenchen.oss.digiwf.address.integration.adapter.in.streaming.AddressMapper; -import de.muenchen.oss.digiwf.address.integration.adapter.in.streaming.MessageProcessor; +import de.muenchen.oss.digiwf.address.integration.adapter.in.streaming.StreamingAdapter; import de.muenchen.oss.digiwf.address.integration.adapter.in.streaming.dto.*; -import de.muenchen.oss.digiwf.address.integration.adapter.out.AddressClientOutAdapter; -import de.muenchen.oss.digiwf.address.integration.adapter.out.IntegrationOutAdapter; +import de.muenchen.oss.digiwf.address.integration.adapter.out.address.AddressClientOutAdapter; import de.muenchen.oss.digiwf.address.integration.application.port.in.AddressGermanyInPort; import de.muenchen.oss.digiwf.address.integration.application.port.in.AddressMunichInPort; import de.muenchen.oss.digiwf.address.integration.application.port.in.StreetsMunichInPort; import de.muenchen.oss.digiwf.address.integration.application.port.out.AddressClientOutPort; -import de.muenchen.oss.digiwf.address.integration.application.port.out.IntegrationOutPort; import de.muenchen.oss.digiwf.address.integration.application.usecase.AddressesGermanyUseCase; import de.muenchen.oss.digiwf.address.integration.application.usecase.AddressesMunichUseCase; import de.muenchen.oss.digiwf.address.integration.application.usecase.StreetsMunichUseCase; @@ -119,12 +117,6 @@ public AddressClientOutPort addressClientOutPort( return new AddressClientOutAdapter(addressGermanyApi, addressMunichApi, streetsMunichApi); } - @Bean - @ConditionalOnMissingBean - public IntegrationOutPort integrationOutPort(final ProcessApi processApi, final ErrorApi errorApi) { - return new IntegrationOutAdapter(processApi, errorApi); - } - @Bean @ConditionalOnMissingBean public AddressGermanyInPort addressGermanyInPort(final AddressClientOutPort addressClientOutPort) { @@ -167,59 +159,61 @@ public StreetsMunichApi munichStreetApi(final StraenMnchenApi apiClient) { @ConditionalOnMissingBean @Bean - public MessageProcessor messageProcessor( + public StreamingAdapter streamingAdapter( final AddressGermanyInPort addressGermanyInPort, final AddressMunichInPort addressMunichInPort, final StreetsMunichInPort streetsMunichInPort, - final IntegrationOutPort integrationOutPort, + final ProcessApi processApi, + final ErrorApi errorApi, final AddressMapper addressServiceMapper ) { - return new MessageProcessor( + return new StreamingAdapter( addressGermanyInPort, addressMunichInPort, streetsMunichInPort, - integrationOutPort, + processApi, + errorApi, addressServiceMapper ); } @Bean - public Consumer> searchAddressesGermany(final MessageProcessor messageProcessor) { - return messageProcessor.searchAddressesGermany(); + public Consumer> searchAddressesGermany(final StreamingAdapter streamingAdapter) { + return streamingAdapter.searchAddressesGermany(); } @Bean - public Consumer> checkAddressMunich(final MessageProcessor messageProcessor) { - return messageProcessor.checkAddressMunich(); + public Consumer> checkAddressMunich(final StreamingAdapter streamingAdapter) { + return streamingAdapter.checkAddressMunich(); } @Bean - public Consumer> listAddressesMunich(final MessageProcessor messageProcessor) { - return messageProcessor.listAddressesMunich(); + public Consumer> listAddressesMunich(final StreamingAdapter streamingAdapter) { + return streamingAdapter.listAddressesMunich(); } @Bean - public Consumer> listChangesMunich(final MessageProcessor messageProcessor) { - return messageProcessor.listChangesMunich(); + public Consumer> listChangesMunich(final StreamingAdapter streamingAdapter) { + return streamingAdapter.listChangesMunich(); } @Bean - public Consumer> searchAddressesMunich(final MessageProcessor messageProcessor) { - return messageProcessor.searchAddressesMunich(); + public Consumer> searchAddressesMunich(final StreamingAdapter streamingAdapter) { + return streamingAdapter.searchAddressesMunich(); } @Bean - public Consumer> searchAddressesGeoMunich(final MessageProcessor messageProcessor) { - return messageProcessor.searchAddressesGeoMunich(); + public Consumer> searchAddressesGeoMunich(final StreamingAdapter streamingAdapter) { + return streamingAdapter.searchAddressesGeoMunich(); } @Bean - public Consumer> findStreetByIdMunich(final MessageProcessor messageProcessor) { - return messageProcessor.findStreetByIdMunich(); + public Consumer> findStreetByIdMunich(final StreamingAdapter streamingAdapter) { + return streamingAdapter.findStreetByIdMunich(); } @Bean - public Consumer> listStreetMunich(final MessageProcessor messageProcessor) { - return messageProcessor.listStreetMunich(); + public Consumer> listStreetMunich(final StreamingAdapter streamingAdapter) { + return streamingAdapter.listStreetMunich(); } } diff --git a/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-starter/src/test/java/de/muenchen/oss/digiwf/address/integration/ArchitectureTest.java b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-starter/src/test/java/de/muenchen/oss/digiwf/address/integration/ArchitectureTest.java new file mode 100644 index 0000000000..b06944acaa --- /dev/null +++ b/digiwf-integrations/digiwf-address-integration/digiwf-address-integration-starter/src/test/java/de/muenchen/oss/digiwf/address/integration/ArchitectureTest.java @@ -0,0 +1,12 @@ +package de.muenchen.oss.digiwf.address.integration; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchTests; +import de.muenchen.oss.digiwf.archunit.HexagonalArchitectureTest; + +@AnalyzeClasses +public class ArchitectureTest { + @ArchTest + static final ArchTests hexagonalArchitecture = ArchTests.in(HexagonalArchitectureTest.class); +} diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/pom.xml b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/pom.xml index 542cb63767..2551d35946 100644 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/pom.xml +++ b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 @@ -33,14 +33,6 @@ org.springframework.boot spring-boot-starter-validation - - - - de.muenchen.oss.digiwf - digiwf-unit-test - ${project.version} - test - diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/in/streaming/MessageProcessor.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/in/streaming/StreamingAdapter.java similarity index 65% rename from digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/in/streaming/MessageProcessor.java rename to digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/in/streaming/StreamingAdapter.java index a3a8ddb49e..4f718c4bcc 100644 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/in/streaming/MessageProcessor.java +++ b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/in/streaming/StreamingAdapter.java @@ -5,29 +5,36 @@ package de.muenchen.oss.digiwf.alw.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.alw.integration.application.port.in.GetResponsibilityInPort; -import de.muenchen.oss.digiwf.alw.integration.application.port.out.IntegrationOutPort; import de.muenchen.oss.digiwf.alw.integration.domain.exception.AlwException; import de.muenchen.oss.digiwf.alw.integration.domain.model.Responsibility; import de.muenchen.oss.digiwf.alw.integration.domain.model.ResponsibilityRequest; +import de.muenchen.oss.digiwf.message.common.MessageConstants; +import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import jakarta.validation.ConstraintViolationException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; +import org.springframework.lang.NonNull; import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; import org.springframework.web.client.HttpStatusCodeException; +import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.function.Consumer; @Slf4j @RequiredArgsConstructor -public class MessageProcessor { +public class StreamingAdapter { private static final String ALW_ZUSTAENDIGE_GRUPPE = "alwZustaendigeGruppe"; - private final IntegrationOutPort integration; + private final ProcessApi processApi; + private final ErrorApi errorApi; private final GetResponsibilityInPort getResponsibilityInPort; /** @@ -52,18 +59,28 @@ public Consumer> getAlwResponsibility() { try { final Responsibility response = getResponsibilityInPort.getResponsibility(request); final Map result = Map.of(ALW_ZUSTAENDIGE_GRUPPE, response.getOrgUnit()); - integration.correlateProcessMessage(headers, result); + this.correlateProcessMessage(headers, result); } catch (final HttpStatusCodeException httpStatusCodeException) { - integration.handleBpmnError(headers, + errorApi.handleBpmnError(headers, new BpmnError(AlwErrorCodes.UNEXPECTED_ERROR.toString(), httpStatusCodeException.getResponseBodyAsString())); } catch (final ConstraintViolationException cve) { - integration.handleBpmnError(headers, new BpmnError(AlwErrorCodes.VALIDATION_ERROR_CODE.toString(), cve.getMessage())); + errorApi.handleBpmnError(headers, new BpmnError(AlwErrorCodes.VALIDATION_ERROR_CODE.toString(), cve.getMessage())); } catch (final AlwException alwException) { - integration.handleBpmnError(headers, new BpmnError(AlwErrorCodes.RESPONSIBILITY_NOT_FOUND.toString(), alwException.getMessage())); + errorApi.handleBpmnError(headers, new BpmnError(AlwErrorCodes.RESPONSIBILITY_NOT_FOUND.toString(), alwException.getMessage())); } catch (final Exception e) { log.error("Request could not be fulfilled", e); - integration.handleIncident(headers, new IncidentError(e.getMessage())); + errorApi.handleIncident(headers, new IncidentError(e.getMessage())); } }; } + + public void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload) { + final String processInstanceId = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_PROCESS_INSTANCE_ID)).toString(); + final String integrationName = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_INTEGRATION_NAME)).toString(); + final String type = Objects.requireNonNull(headers.get(MessageConstants.TYPE)).toString(); + if (payload == null) { + payload = new HashMap<>(); + } + this.processApi.correlateMessage(processInstanceId, type, integrationName, payload); + } } diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/integration/IntegrationOutAdapter.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/integration/IntegrationOutAdapter.java deleted file mode 100644 index d0f0deaaa5..0000000000 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/integration/IntegrationOutAdapter.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.muenchen.oss.digiwf.alw.integration.adapter.out.integration; - -import de.muenchen.oss.digiwf.alw.integration.application.port.out.IntegrationOutPort; -import de.muenchen.oss.digiwf.message.common.MessageConstants; -import de.muenchen.oss.digiwf.message.process.api.ErrorApi; -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import lombok.RequiredArgsConstructor; -import org.springframework.lang.NonNull; -import org.springframework.messaging.MessageHeaders; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -@RequiredArgsConstructor -public class IntegrationOutAdapter implements IntegrationOutPort { - private final ProcessApi processApi; - private final ErrorApi errorApi; - - @Override - public void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload) { - final String processInstanceId = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_PROCESS_INSTANCE_ID)).toString(); - final String integrationName = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_INTEGRATION_NAME)).toString(); - final String type = Objects.requireNonNull(headers.get(MessageConstants.TYPE)).toString(); - if (payload == null) { - payload = new HashMap<>(); - } - this.processApi.correlateMessage(processInstanceId, type, integrationName, payload); - } - - @Override - public void handleBpmnError(@NonNull MessageHeaders headers, @NonNull BpmnError bpmnError) { - this.errorApi.handleBpmnError(headers, bpmnError); - } - - @Override - public void handleIncident(@NonNull MessageHeaders headers, @NonNull IncidentError incidentError) { - this.errorApi.handleIncident(headers, incidentError); - } -} diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/orgstructure/OrgStructureMapperAdapter.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/orgstructure/OrgStructureMapperOutPortAdapter.java similarity index 50% rename from digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/orgstructure/OrgStructureMapperAdapter.java rename to digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/orgstructure/OrgStructureMapperOutPortAdapter.java index c90d754ed5..3968598303 100644 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/orgstructure/OrgStructureMapperAdapter.java +++ b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/adapter/out/orgstructure/OrgStructureMapperOutPortAdapter.java @@ -1,6 +1,6 @@ package de.muenchen.oss.digiwf.alw.integration.adapter.out.orgstructure; -import de.muenchen.oss.digiwf.alw.integration.application.port.out.OrgStructureMapper; +import de.muenchen.oss.digiwf.alw.integration.application.port.out.OrgStructureMapperOutPort; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.lang.NonNull; @@ -9,12 +9,12 @@ @RequiredArgsConstructor @Slf4j -public class OrgStructureMapperAdapter implements OrgStructureMapper { +public class OrgStructureMapperOutPortAdapter implements OrgStructureMapperOutPort { - private final Map sachbearbeiterMap; + private final Map sachbearbeiterMap; - @Override - public String map(@NonNull String sachbearbeiter) { - return sachbearbeiterMap.get(sachbearbeiter); - } + @Override + public String map(@NonNull String sachbearbeiter) { + return sachbearbeiterMap.get(sachbearbeiter); + } } diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/IntegrationOutPort.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/IntegrationOutPort.java deleted file mode 100644 index 5f0385b0c3..0000000000 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/IntegrationOutPort.java +++ /dev/null @@ -1,37 +0,0 @@ -package de.muenchen.oss.digiwf.alw.integration.application.port.out; - -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import org.springframework.lang.NonNull; -import org.springframework.messaging.MessageHeaders; - -import java.util.Map; - -/** - * Port to integration infrastructure. - */ -public interface IntegrationOutPort { - - /** - * Correlates message with a process. - * - * @param headers headers describing correlation properties. - * @param payload payload to pass during correlation. - */ - void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload); - - /** - * Handles BPMN error. - * - * @param headers headers for error details. - * @param bpmnError error to handle. - */ - void handleBpmnError(@NonNull MessageHeaders headers, @NonNull BpmnError bpmnError); - - /** - * Handles incident. - * @param headers headers for error details. - * @param incidentError incident to handle. - */ - void handleIncident(@NonNull MessageHeaders headers, @NonNull IncidentError incidentError); -} diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/OrgStructureMapper.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/OrgStructureMapper.java deleted file mode 100644 index 1948a72895..0000000000 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/OrgStructureMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.muenchen.oss.digiwf.alw.integration.application.port.out; - - -import org.springframework.lang.NonNull; - -/** - * Mapping ALW sachbearbeiter to a structure with a valid directory-ou. - */ -public interface OrgStructureMapper { - - /** - * Returns the org unit of sachbearbeiter or null. - * @param sachbearbeiter sachbearbeiter. - * @return OU or null. - */ - String map(@NonNull String sachbearbeiter); -} diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/OrgStructureMapperOutPort.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/OrgStructureMapperOutPort.java new file mode 100644 index 0000000000..b5fa5ec8c5 --- /dev/null +++ b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/port/out/OrgStructureMapperOutPort.java @@ -0,0 +1,18 @@ +package de.muenchen.oss.digiwf.alw.integration.application.port.out; + + +import org.springframework.lang.NonNull; + +/** + * Mapping ALW sachbearbeiter to a structure with a valid directory-ou. + */ +public interface OrgStructureMapperOutPort { + + /** + * Returns the org unit of sachbearbeiter or null. + * + * @param sachbearbeiter sachbearbeiter. + * @return OU or null. + */ + String map(@NonNull String sachbearbeiter); +} diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/GetResponsibilityUseCase.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/usecase/GetResponsibilityUseCase.java similarity index 84% rename from digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/GetResponsibilityUseCase.java rename to digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/usecase/GetResponsibilityUseCase.java index 1dd47a6701..ab5150ce9e 100644 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/GetResponsibilityUseCase.java +++ b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/usecase/GetResponsibilityUseCase.java @@ -1,8 +1,8 @@ -package de.muenchen.oss.digiwf.alw.integration.application; +package de.muenchen.oss.digiwf.alw.integration.application.usecase; import de.muenchen.oss.digiwf.alw.integration.application.port.in.GetResponsibilityInPort; import de.muenchen.oss.digiwf.alw.integration.application.port.out.AlwResponsibilityOutPort; -import de.muenchen.oss.digiwf.alw.integration.application.port.out.OrgStructureMapper; +import de.muenchen.oss.digiwf.alw.integration.application.port.out.OrgStructureMapperOutPort; import de.muenchen.oss.digiwf.alw.integration.domain.exception.AlwException; import de.muenchen.oss.digiwf.alw.integration.domain.model.Responsibility; import de.muenchen.oss.digiwf.alw.integration.domain.model.ResponsibilityRequest; @@ -19,7 +19,7 @@ @Validated public class GetResponsibilityUseCase implements GetResponsibilityInPort { - private final OrgStructureMapper orgStructureMapper; + private final OrgStructureMapperOutPort orgStructureMapperOutPort; private final AlwResponsibilityOutPort alwResponsibilityOutPort; @Override @@ -27,9 +27,9 @@ public class GetResponsibilityUseCase implements GetResponsibilityInPort { public Responsibility getResponsibility(@NonNull @Valid ResponsibilityRequest request) throws AlwException { val sachbearbeiter = alwResponsibilityOutPort.getResponsibleSachbearbeiter(request.getAzrNummer()) .orElseThrow(() -> new AlwException("Could not find ALW responsible for " + request.getAzrNummer())); - val mappedResponsibility = orgStructureMapper.map(sachbearbeiter); + val mappedResponsibility = orgStructureMapperOutPort.map(sachbearbeiter); if (Strings.isEmpty(mappedResponsibility)) throw new AlwException(String.format("Responsible %s for azr %s does not match any known responsibility!", sachbearbeiter, request.getAzrNummer())); - return Responsibility.builder().orgUnit(orgStructureMapper.map(sachbearbeiter)).build(); + return Responsibility.builder().orgUnit(orgStructureMapperOutPort.map(sachbearbeiter)).build(); } } diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/PingAlwServiceUseCase.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/usecase/PingAlwServiceUseCase.java similarity index 50% rename from digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/PingAlwServiceUseCase.java rename to digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/usecase/PingAlwServiceUseCase.java index dda5fbe2fd..53a9cabef3 100644 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/PingAlwServiceUseCase.java +++ b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/application/usecase/PingAlwServiceUseCase.java @@ -1,32 +1,31 @@ -package de.muenchen.oss.digiwf.alw.integration.application; +package de.muenchen.oss.digiwf.alw.integration.application.usecase; import de.muenchen.oss.digiwf.alw.integration.application.port.in.PingAwlServiceInPort; import de.muenchen.oss.digiwf.alw.integration.application.port.out.AlwResponsibilityOutPort; import de.muenchen.oss.digiwf.alw.integration.domain.model.AlwPingConfig; +import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import jakarta.annotation.PostConstruct; - @Component @RequiredArgsConstructor @Slf4j public class PingAlwServiceUseCase implements PingAwlServiceInPort { - private final AlwResponsibilityOutPort alwResponsibilityOutPort; - private final AlwPingConfig alwPingConfiguration; + private final AlwResponsibilityOutPort alwResponsibilityOutPort; + private final AlwPingConfig alwPingConfiguration; - @PostConstruct - void executeOnStartup() { - pingService(); - } + @PostConstruct + void executeOnStartup() { + pingService(); + } - @Override - public void pingService() { - if (alwPingConfiguration.isPingEnabled()) { - alwResponsibilityOutPort.getResponsibleSachbearbeiter(alwPingConfiguration.getPingAzrNumber()); - log.info("Ping to ALW Service successful."); + @Override + public void pingService() { + if (alwPingConfiguration.isPingEnabled()) { + alwResponsibilityOutPort.getResponsibleSachbearbeiter(alwPingConfiguration.getPingAzrNumber()); + log.info("Ping to ALW Service successful."); + } } - } } diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/infrastructure/SachbearbeitungMapperConfig.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/infrastructure/SachbearbeitungMapperConfig.java index 945ca8bbf2..280d8a75a9 100644 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/infrastructure/SachbearbeitungMapperConfig.java +++ b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/main/java/de/muenchen/oss/digiwf/alw/integration/infrastructure/SachbearbeitungMapperConfig.java @@ -4,12 +4,12 @@ */ package de.muenchen.oss.digiwf.alw.integration.infrastructure; -import de.muenchen.oss.digiwf.alw.integration.adapter.out.orgstructure.OrgStructureMapperAdapter; -import de.muenchen.oss.digiwf.alw.integration.application.port.out.OrgStructureMapper; +import de.muenchen.oss.digiwf.alw.integration.adapter.out.orgstructure.OrgStructureMapperOutPortAdapter; +import de.muenchen.oss.digiwf.alw.integration.application.port.out.OrgStructureMapperOutPort; +import jakarta.annotation.Resource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import jakarta.annotation.Resource; import java.util.Map; /** @@ -27,11 +27,11 @@ public class SachbearbeitungMapperConfig { private Map sachbearbeitungMap; @Bean - public OrgStructureMapper sachbearbeitungMapper() { + public OrgStructureMapperOutPort sachbearbeitungMapper() { if (sachbearbeitungMap.isEmpty()) { throw new IllegalArgumentException("alw-sachbearbeitung.properties is empty"); } - return new OrgStructureMapperAdapter(sachbearbeitungMap); + return new OrgStructureMapperOutPortAdapter(sachbearbeitungMap); } } diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/test/java/de/muenchen/oss/digiwf/alw/integration/application/GetResponsibilityUseCaseTest.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/test/java/de/muenchen/oss/digiwf/alw/integration/application/GetResponsibilityUseCaseTest.java deleted file mode 100644 index 57d8b0f9b3..0000000000 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/test/java/de/muenchen/oss/digiwf/alw/integration/application/GetResponsibilityUseCaseTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package de.muenchen.oss.digiwf.alw.integration.application; - -import de.muenchen.oss.digiwf.alw.integration.adapter.out.orgstructure.OrgStructureMapperAdapter; -import de.muenchen.oss.digiwf.alw.integration.application.port.in.GetResponsibilityInPort; -import de.muenchen.oss.digiwf.alw.integration.application.port.out.AlwResponsibilityOutPort; -import de.muenchen.oss.digiwf.alw.integration.domain.exception.AlwException; -import de.muenchen.oss.digiwf.alw.integration.domain.model.ResponsibilityRequest; -import lombok.val; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.http.HttpStatus; -import org.springframework.web.client.HttpClientErrorException; - -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; - - -class GetResponsibilityUseCaseTest { - - private final Map sachbearbeiterMap = new HashMap<>(); - - private final AlwResponsibilityOutPort alwResponsibilityMock = mock(AlwResponsibilityOutPort.class); - - private final GetResponsibilityInPort getResponsibility = new GetResponsibilityUseCase( - new OrgStructureMapperAdapter(sachbearbeiterMap), - alwResponsibilityMock - ); - - @BeforeEach - void init_mapping() { - sachbearbeiterMap.put("SUB2", "OU1"); - } - - @Test - void finds_responsible() throws Exception { - when(alwResponsibilityMock.getResponsibleSachbearbeiter(any())).thenReturn(Optional.of("SUB2")); - val responsibility = getResponsibility.getResponsibility(ResponsibilityRequest.builder().azrNummer("123456789012").build()); - assertThat(responsibility.getOrgUnit()).isEqualTo("OU1"); - verify(alwResponsibilityMock).getResponsibleSachbearbeiter("123456789012"); - } - - @Test - void finds_responsible_without_mapping() throws Exception { - when(alwResponsibilityMock.getResponsibleSachbearbeiter(any())).thenReturn(Optional.of("UNKNOWN")); - val alwException = assertThrows(AlwException.class, () -> getResponsibility.getResponsibility(ResponsibilityRequest.builder().azrNummer("123456789012").build())); - assertThat(alwException.getMessage()).isEqualTo("Responsible UNKNOWN for azr 123456789012 does not match any known responsibility!"); - verify(alwResponsibilityMock).getResponsibleSachbearbeiter("123456789012"); - } - - @Test - void fails_to_find_responsible() { - when(alwResponsibilityMock.getResponsibleSachbearbeiter(any())).thenReturn(Optional.empty()); - val exception = assertThrows(AlwException.class, - () -> getResponsibility.getResponsibility(ResponsibilityRequest.builder().azrNummer("123456789012").build()) - ); - assertThat(exception.getMessage()).isEqualTo("Could not find ALW responsible for 123456789012"); - } - - @Test - void fails_to_find_responsible_broken_server() { - when(alwResponsibilityMock.getResponsibleSachbearbeiter(any())).thenThrow(new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR, "server error")); - val exception = assertThrows(HttpClientErrorException.class, - () -> getResponsibility.getResponsibility(ResponsibilityRequest.builder().azrNummer("123456789012").build()) - ); - assertThat(exception.getMessage()).isEqualTo("500 server error"); - } - -} \ No newline at end of file diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/test/java/de/muenchen/oss/digiwf/alw/integration/application/usecase/GetResponsibilityUseCaseTest.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/test/java/de/muenchen/oss/digiwf/alw/integration/application/usecase/GetResponsibilityUseCaseTest.java new file mode 100644 index 0000000000..7efb338103 --- /dev/null +++ b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-core/src/test/java/de/muenchen/oss/digiwf/alw/integration/application/usecase/GetResponsibilityUseCaseTest.java @@ -0,0 +1,74 @@ +package de.muenchen.oss.digiwf.alw.integration.application.usecase; + +import de.muenchen.oss.digiwf.alw.integration.adapter.out.orgstructure.OrgStructureMapperOutPortAdapter; +import de.muenchen.oss.digiwf.alw.integration.application.port.in.GetResponsibilityInPort; +import de.muenchen.oss.digiwf.alw.integration.application.port.out.AlwResponsibilityOutPort; +import de.muenchen.oss.digiwf.alw.integration.domain.exception.AlwException; +import de.muenchen.oss.digiwf.alw.integration.domain.model.ResponsibilityRequest; +import lombok.val; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpClientErrorException; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + + +class GetResponsibilityUseCaseTest { + + private final Map sachbearbeiterMap = new HashMap<>(); + + private final AlwResponsibilityOutPort alwResponsibilityMock = mock(AlwResponsibilityOutPort.class); + + private final GetResponsibilityInPort getResponsibility = new GetResponsibilityUseCase( + new OrgStructureMapperOutPortAdapter(sachbearbeiterMap), + alwResponsibilityMock + ); + + @BeforeEach + void init_mapping() { + sachbearbeiterMap.put("SUB2", "OU1"); + } + + @Test + void finds_responsible() throws Exception { + when(alwResponsibilityMock.getResponsibleSachbearbeiter(any())).thenReturn(Optional.of("SUB2")); + val responsibility = getResponsibility.getResponsibility(ResponsibilityRequest.builder().azrNummer("123456789012").build()); + assertThat(responsibility.getOrgUnit()).isEqualTo("OU1"); + verify(alwResponsibilityMock).getResponsibleSachbearbeiter("123456789012"); + } + + @Test + void finds_responsible_without_mapping() throws Exception { + when(alwResponsibilityMock.getResponsibleSachbearbeiter(any())).thenReturn(Optional.of("UNKNOWN")); + val alwException = assertThrows(AlwException.class, () -> getResponsibility.getResponsibility(ResponsibilityRequest.builder().azrNummer("123456789012").build())); + assertThat(alwException.getMessage()).isEqualTo("Responsible UNKNOWN for azr 123456789012 does not match any known responsibility!"); + verify(alwResponsibilityMock).getResponsibleSachbearbeiter("123456789012"); + } + + @Test + void fails_to_find_responsible() { + when(alwResponsibilityMock.getResponsibleSachbearbeiter(any())).thenReturn(Optional.empty()); + val exception = assertThrows(AlwException.class, + () -> getResponsibility.getResponsibility(ResponsibilityRequest.builder().azrNummer("123456789012").build()) + ); + assertThat(exception.getMessage()).isEqualTo("Could not find ALW responsible for 123456789012"); + } + + @Test + void fails_to_find_responsible_broken_server() { + when(alwResponsibilityMock.getResponsibleSachbearbeiter(any())).thenThrow(new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR, "server error")); + val exception = assertThrows(HttpClientErrorException.class, + () -> getResponsibility.getResponsibility(ResponsibilityRequest.builder().azrNummer("123456789012").build()) + ); + assertThat(exception.getMessage()).isEqualTo("500 server error"); + } + +} \ No newline at end of file diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-starter/src/main/java/de/muenchen/oss/digiwf/alw/integration/configuration/AlwAutoConfiguration.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-starter/src/main/java/de/muenchen/oss/digiwf/alw/integration/configuration/AlwAutoConfiguration.java index 730f9c0a3e..340f68e806 100644 --- a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-starter/src/main/java/de/muenchen/oss/digiwf/alw/integration/configuration/AlwAutoConfiguration.java +++ b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-starter/src/main/java/de/muenchen/oss/digiwf/alw/integration/configuration/AlwAutoConfiguration.java @@ -4,13 +4,11 @@ */ package de.muenchen.oss.digiwf.alw.integration.configuration; -import de.muenchen.oss.digiwf.alw.integration.adapter.in.streaming.MessageProcessor; +import de.muenchen.oss.digiwf.alw.integration.adapter.in.streaming.StreamingAdapter; import de.muenchen.oss.digiwf.alw.integration.adapter.out.alw.AlwResponsibilityEmulationAdapter; import de.muenchen.oss.digiwf.alw.integration.adapter.out.alw.AlwResponsibilityRestAdapter; import de.muenchen.oss.digiwf.alw.integration.adapter.out.alw.AlwResponsibilityRestConfig; -import de.muenchen.oss.digiwf.alw.integration.adapter.out.integration.IntegrationOutAdapter; import de.muenchen.oss.digiwf.alw.integration.application.port.in.GetResponsibilityInPort; -import de.muenchen.oss.digiwf.alw.integration.application.port.out.IntegrationOutPort; import de.muenchen.oss.digiwf.alw.integration.domain.model.AlwPingConfig; import de.muenchen.oss.digiwf.alw.integration.domain.model.ResponsibilityRequest; import de.muenchen.oss.digiwf.message.process.api.ErrorApi; @@ -66,21 +64,17 @@ public AlwPingConfig alwPingConfig() { ); } - @Bean - public IntegrationOutPort integration(ProcessApi processApi, ErrorApi errorApi) { - return new IntegrationOutAdapter(processApi, errorApi); - } - @ConditionalOnMissingBean @Bean - public MessageProcessor messageProcessor(final IntegrationOutPort integration, + public StreamingAdapter streamingAdapter(final ProcessApi processApi, + final ErrorApi errorApi, final GetResponsibilityInPort getResponsibilityInPort) { - return new MessageProcessor(integration, getResponsibilityInPort); + return new StreamingAdapter(processApi, errorApi, getResponsibilityInPort); } @Bean - public Consumer> getAlwResponsibility(final MessageProcessor messageProcessor) { - return messageProcessor.getAlwResponsibility(); + public Consumer> getAlwResponsibility(final StreamingAdapter streamingAdapter) { + return streamingAdapter.getAlwResponsibility(); } @ConditionalOnMissingBean diff --git a/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-starter/src/test/java/de/muenchen/oss/digiwf/alw/integration/ArchitectureTest.java b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-starter/src/test/java/de/muenchen/oss/digiwf/alw/integration/ArchitectureTest.java new file mode 100644 index 0000000000..470fff6939 --- /dev/null +++ b/digiwf-integrations/digiwf-alw-integration/digiwf-alw-integration-starter/src/test/java/de/muenchen/oss/digiwf/alw/integration/ArchitectureTest.java @@ -0,0 +1,12 @@ +package de.muenchen.oss.digiwf.alw.integration; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchTests; +import de.muenchen.oss.digiwf.archunit.HexagonalArchitectureTest; + +@AnalyzeClasses +public class ArchitectureTest { + @ArchTest + static final ArchTests hexagonalArchitecture = ArchTests.in(HexagonalArchitectureTest.class); +} diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/pom.xml b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/pom.xml index aa152838b2..c930e1ab56 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/pom.xml +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 digiwf-cosys-integration-core @@ -56,14 +56,6 @@ de.muenchen.oss.digiwf digiwf-message-starter - - - - de.muenchen.oss.digiwf - digiwf-unit-test - ${project.version} - test - diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/MessageProcessor.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/streaming/StreamingAdapter.java similarity index 79% rename from digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/MessageProcessor.java rename to digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/streaming/StreamingAdapter.java index d5f6a2b16f..728b217080 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/MessageProcessor.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/streaming/StreamingAdapter.java @@ -1,9 +1,10 @@ -package de.muenchen.oss.digiwf.cosys.integration.adapter.in; +package de.muenchen.oss.digiwf.cosys.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.cosys.integration.application.port.in.CreateDocumentInPort; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import jakarta.validation.ValidationException; @@ -11,16 +12,18 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.messaging.Message; +import java.util.Map; import java.util.function.Consumer; import static de.muenchen.oss.digiwf.message.common.MessageConstants.*; @Slf4j @RequiredArgsConstructor -public class MessageProcessor { +public class StreamingAdapter { private final CreateDocumentInPort createDocumentInPort; + private final ProcessApi processApi; private final ErrorApi errorApi; public Consumer> createCosysDocument() { @@ -29,11 +32,12 @@ public Consumer> createCosysDocument() { log.info("Processing generate document request from eventbus"); final GenerateDocument document = message.getPayload(); log.debug("Generate document request: {}", document); - this.createDocumentInPort.createDocument( + this.createDocumentInPort.createDocument(document); + this.processApi.correlateMessage( message.getHeaders().get(DIGIWF_PROCESS_INSTANCE_ID, String.class), message.getHeaders().get(TYPE, String.class), message.getHeaders().get(DIGIWF_INTEGRATION_NAME, String.class), - document); + Map.of("status", true)); } catch (final BpmnError bpmnError) { this.errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final ValidationException validationException) { diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/ProcessAdapter.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/ProcessAdapter.java deleted file mode 100644 index f8f6b61eca..0000000000 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/ProcessAdapter.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.muenchen.oss.digiwf.cosys.integration.adapter.out; - -import de.muenchen.oss.digiwf.cosys.integration.application.port.out.CorrelateMessageOutPort; -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import lombok.RequiredArgsConstructor; - -import java.util.Map; - -@RequiredArgsConstructor -public class ProcessAdapter implements CorrelateMessageOutPort { - - private final ProcessApi processApi; - - @Override - public void correlateMessage(final String processInstanceId, final String type, final String integrationName, final Map message) { - this.processApi.correlateMessage(processInstanceId, type, integrationName, message); - } - -} diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/CosysAdapter.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/cosys/CosysAdapter.java similarity index 93% rename from digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/CosysAdapter.java rename to digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/cosys/CosysAdapter.java index d2540b5438..cc57a04a4e 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/CosysAdapter.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/cosys/CosysAdapter.java @@ -1,9 +1,9 @@ -package de.muenchen.oss.digiwf.cosys.integration.adapter.out; +package de.muenchen.oss.digiwf.cosys.integration.adapter.out.cosys; import de.muenchen.oss.digiwf.cosys.integration.api.GenerationApi; import de.muenchen.oss.digiwf.cosys.integration.application.port.out.GenerateDocumentOutPort; import de.muenchen.oss.digiwf.cosys.integration.configuration.CosysConfiguration; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import lombok.RequiredArgsConstructor; @@ -14,7 +14,7 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; -import static de.muenchen.oss.digiwf.cosys.integration.adapter.out.FileUtils.createFile; +import static de.muenchen.oss.digiwf.cosys.integration.adapter.out.cosys.FileUtils.createFile; @Slf4j @RequiredArgsConstructor diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/FileUtils.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/cosys/FileUtils.java similarity index 84% rename from digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/FileUtils.java rename to digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/cosys/FileUtils.java index 728a4f0315..72a53ad468 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/FileUtils.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/cosys/FileUtils.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.cosys.integration.adapter.out; +package de.muenchen.oss.digiwf.cosys.integration.adapter.out.cosys; import java.io.File; import java.io.IOException; diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/S3Adapter.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/s3/S3Adapter.java similarity index 89% rename from digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/S3Adapter.java rename to digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/s3/S3Adapter.java index 8685d70258..009391e33b 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/S3Adapter.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/s3/S3Adapter.java @@ -1,8 +1,8 @@ -package de.muenchen.oss.digiwf.cosys.integration.adapter.out; +package de.muenchen.oss.digiwf.cosys.integration.adapter.out.s3; import de.muenchen.oss.digiwf.cosys.integration.application.port.out.SaveFileToStorageOutPort; -import de.muenchen.oss.digiwf.cosys.integration.model.DocumentStorageUrl; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.DocumentStorageUrl; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.s3.integration.client.exception.DocumentStorageClientErrorException; import de.muenchen.oss.digiwf.s3.integration.client.exception.DocumentStorageException; diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/in/CreateDocumentInPort.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/in/CreateDocumentInPort.java index d061bca3e2..ae20fe2347 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/in/CreateDocumentInPort.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/in/CreateDocumentInPort.java @@ -1,10 +1,10 @@ package de.muenchen.oss.digiwf.cosys.integration.application.port.in; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import jakarta.validation.Valid; public interface CreateDocumentInPort { - void createDocument(final String processInstanceId, final String type, final String integrationName, @Valid final GenerateDocument generateDocument); + void createDocument(@Valid final GenerateDocument generateDocument); } diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/CorrelateMessageOutPort.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/CorrelateMessageOutPort.java deleted file mode 100644 index 347f05adae..0000000000 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/CorrelateMessageOutPort.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.muenchen.oss.digiwf.cosys.integration.application.port.out; - -import java.util.Map; - -public interface CorrelateMessageOutPort { - - void correlateMessage(final String processInstanceId, final String type, final String integrationName, final Map message); - -} diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/GenerateDocumentOutPort.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/GenerateDocumentOutPort.java index dbddc4ac80..af66331ce5 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/GenerateDocumentOutPort.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/GenerateDocumentOutPort.java @@ -1,6 +1,6 @@ package de.muenchen.oss.digiwf.cosys.integration.application.port.out; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import reactor.core.publisher.Mono; public interface GenerateDocumentOutPort { diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/SaveFileToStorageOutPort.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/SaveFileToStorageOutPort.java index 00778461ee..87c140b2ff 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/SaveFileToStorageOutPort.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/port/out/SaveFileToStorageOutPort.java @@ -1,6 +1,6 @@ package de.muenchen.oss.digiwf.cosys.integration.application.port.out; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; public interface SaveFileToStorageOutPort { diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/usecase/CreateDocumentUseCase.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/usecase/CreateDocumentUseCase.java index 34044c28c9..4a6f061b81 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/usecase/CreateDocumentUseCase.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/application/usecase/CreateDocumentUseCase.java @@ -1,24 +1,19 @@ package de.muenchen.oss.digiwf.cosys.integration.application.usecase; import de.muenchen.oss.digiwf.cosys.integration.application.port.in.CreateDocumentInPort; -import de.muenchen.oss.digiwf.cosys.integration.application.port.out.CorrelateMessageOutPort; import de.muenchen.oss.digiwf.cosys.integration.application.port.out.GenerateDocumentOutPort; import de.muenchen.oss.digiwf.cosys.integration.application.port.out.SaveFileToStorageOutPort; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import java.util.HashMap; -import java.util.Map; - @Slf4j @RequiredArgsConstructor public class CreateDocumentUseCase implements CreateDocumentInPort { private final SaveFileToStorageOutPort saveFileToStorageOutPort; - private final CorrelateMessageOutPort correlateMessageOutPort; private final GenerateDocumentOutPort generateDocumentOutPort; @@ -28,13 +23,9 @@ public class CreateDocumentUseCase implements CreateDocumentInPort { * @param generateDocument Data for generating documents */ @Override - public void createDocument(final String processInstanceIde, final String type, final String integrationName, @Valid final GenerateDocument generateDocument) { + public void createDocument(@Valid final GenerateDocument generateDocument) { final byte[] data = this.generateDocumentOutPort.generateCosysDocument(generateDocument).block(); this.saveFileToStorageOutPort.saveDocumentInStorage(generateDocument, data); - - final Map correlatePayload = new HashMap<>(); - correlatePayload.put("status", true); - this.correlateMessageOutPort.correlateMessage(processInstanceIde, type, integrationName, correlatePayload); } diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/model/DocumentStorageUrl.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/DocumentStorageUrl.java similarity index 93% rename from digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/model/DocumentStorageUrl.java rename to digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/DocumentStorageUrl.java index a778fb53d7..cc6ffe4c28 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/model/DocumentStorageUrl.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/DocumentStorageUrl.java @@ -1,13 +1,12 @@ -package de.muenchen.oss.digiwf.cosys.integration.model; +package de.muenchen.oss.digiwf.cosys.integration.domain.model; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.RequiredArgsConstructor; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Pattern; - @Data @Builder @RequiredArgsConstructor diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/model/GenerateDocument.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/GenerateDocument.java similarity index 95% rename from digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/model/GenerateDocument.java rename to digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/GenerateDocument.java index 0ad5b08e2d..89b23ae242 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/model/GenerateDocument.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/GenerateDocument.java @@ -2,7 +2,7 @@ * Copyright (c): it@M - Dienstleister für Informations- und Telekommunikationstechnik * der Landeshauptstadt München, 2020 */ -package de.muenchen.oss.digiwf.cosys.integration.model; +package de.muenchen.oss.digiwf.cosys.integration.domain.model; import com.fasterxml.jackson.databind.JsonNode; import jakarta.validation.Valid; diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/model/GenerateDocumentRequest.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/GenerateDocumentRequest.java similarity index 85% rename from digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/model/GenerateDocumentRequest.java rename to digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/GenerateDocumentRequest.java index f7443480f0..e023270c66 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/model/GenerateDocumentRequest.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/main/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/GenerateDocumentRequest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.cosys.integration.model; +package de.muenchen.oss.digiwf.cosys.integration.domain.model; import lombok.Data; diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/MessageProcessorTest.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/streaming/StreamingAdapterTest.java similarity index 77% rename from digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/MessageProcessorTest.java rename to digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/streaming/StreamingAdapterTest.java index 43930c08db..6969933d25 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/MessageProcessorTest.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/in/streaming/StreamingAdapterTest.java @@ -1,9 +1,10 @@ -package de.muenchen.oss.digiwf.cosys.integration.adapter.in; +package de.muenchen.oss.digiwf.cosys.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.cosys.integration.application.port.in.CreateDocumentInPort; -import de.muenchen.oss.digiwf.cosys.integration.model.DocumentStorageUrl; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.DocumentStorageUrl; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import jakarta.validation.ValidationException; @@ -20,8 +21,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.*; -class MessageProcessorTest { +class StreamingAdapterTest { + private final ProcessApi processApiMock = mock(ProcessApi.class); private final ErrorApi errorApiMock = mock(ErrorApi.class); private final CreateDocumentInPort createDocumentMock = mock(CreateDocumentInPort.class); // dummy data @@ -31,11 +33,11 @@ class MessageProcessorTest { private final List listOfURls = List.of(documentStorageUrl); private final GenerateDocument generateDocument = new GenerateDocument("Client", "Role", "guid", null, listOfURls); Message message; - private MessageProcessor messageProcessor; + private StreamingAdapter streamingAdapter; @BeforeEach void setup() { - this.messageProcessor = new MessageProcessor(createDocumentMock, errorApiMock); + this.streamingAdapter = new StreamingAdapter(createDocumentMock, processApiMock, errorApiMock); this.message = new Message() { @Override public GenerateDocument getPayload() { @@ -51,15 +53,15 @@ public MessageHeaders getHeaders() { @Test void cosysIntegrationCreateDocumentSuccessfully() { - messageProcessor.createCosysDocument().accept(this.message); - verify(createDocumentMock).createDocument(processInstanceId, "type", "integrationName", generateDocument); + streamingAdapter.createCosysDocument().accept(this.message); + verify(createDocumentMock).createDocument(generateDocument); verifyNoMoreInteractions(createDocumentMock); } @Test void cosysIntegrationHandlesValidationException() { - doThrow(new ValidationException("ValidationException")).when(createDocumentMock).createDocument(any(), any(), any(), any()); - messageProcessor.createCosysDocument().accept(this.message); + doThrow(new ValidationException("ValidationException")).when(createDocumentMock).createDocument(any()); + streamingAdapter.createCosysDocument().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock).handleBpmnError(messageHeaderArgumentCaptor.capture(), any(BpmnError.class)); verifyNoMoreInteractions(errorApiMock); @@ -68,8 +70,8 @@ void cosysIntegrationHandlesValidationException() { @Test void cosysIntegrationHandlesBpmnError() { - doThrow(new BpmnError("S3_FILE_SAVE_ERROR", "BpmnErrorCode")).when(createDocumentMock).createDocument(any(), any(), any(), any()); - messageProcessor.createCosysDocument().accept(this.message); + doThrow(new BpmnError("S3_FILE_SAVE_ERROR", "BpmnErrorCode")).when(createDocumentMock).createDocument(any()); + streamingAdapter.createCosysDocument().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock).handleBpmnError(messageHeaderArgumentCaptor.capture(), any(BpmnError.class)); verifyNoMoreInteractions(errorApiMock); @@ -78,8 +80,8 @@ void cosysIntegrationHandlesBpmnError() { @Test void cosysIntegrationIncidentError() { - doThrow(new IncidentError("IncidentError")).when(createDocumentMock).createDocument(any(), any(), any(), any()); - messageProcessor.createCosysDocument().accept(this.message); + doThrow(new IncidentError("IncidentError")).when(createDocumentMock).createDocument(any()); + streamingAdapter.createCosysDocument().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); verifyNoMoreInteractions(errorApiMock); diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/ProcessAdapterTest.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/ProcessAdapterTest.java deleted file mode 100644 index 293e829629..0000000000 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/ProcessAdapterTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.muenchen.oss.digiwf.cosys.integration.adapter.out; - -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import org.junit.jupiter.api.Test; - -import java.util.HashMap; -import java.util.Map; - -import static org.mockito.Mockito.*; - - -class ProcessAdapterTest { - - @Test - void correlateMessage() { - final ProcessApi processApi = mock(ProcessApi.class); - - final ProcessAdapter processAdapter = new ProcessAdapter(processApi); - - final String processInstanceId = "processInstanceId"; - final String integrationName = "cosysIntegration"; - final String type = "type"; - final Map message = new HashMap<>(); - - processAdapter.correlateMessage(processInstanceId,type,integrationName,message); - - verify(processApi).correlateMessage(processInstanceId,type,integrationName,message); - verifyNoMoreInteractions(processApi); - } -} diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/CosysAdapterTest.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/cosys/CosysAdapterTest.java similarity index 92% rename from digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/CosysAdapterTest.java rename to digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/cosys/CosysAdapterTest.java index db88dbe2b9..8b57a009d2 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/CosysAdapterTest.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/cosys/CosysAdapterTest.java @@ -1,11 +1,11 @@ -package de.muenchen.oss.digiwf.cosys.integration.adapter.out; +package de.muenchen.oss.digiwf.cosys.integration.adapter.out.cosys; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import de.muenchen.oss.digiwf.cosys.integration.api.GenerationApi; import de.muenchen.oss.digiwf.cosys.integration.configuration.CosysConfiguration; -import de.muenchen.oss.digiwf.cosys.integration.model.DocumentStorageUrl; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.DocumentStorageUrl; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import lombok.val; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/S3AdapterTest.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/s3/S3AdapterTest.java similarity index 84% rename from digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/S3AdapterTest.java rename to digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/s3/S3AdapterTest.java index e5332b258a..533893941a 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/S3AdapterTest.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/adapter/out/s3/S3AdapterTest.java @@ -1,7 +1,7 @@ -package de.muenchen.oss.digiwf.cosys.integration.adapter.out; +package de.muenchen.oss.digiwf.cosys.integration.adapter.out.s3; -import de.muenchen.oss.digiwf.cosys.integration.model.DocumentStorageUrl; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.DocumentStorageUrl; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.s3.integration.client.exception.DocumentStorageClientErrorException; import de.muenchen.oss.digiwf.s3.integration.client.exception.DocumentStorageException; @@ -14,21 +14,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.*; class S3AdapterTest { private final S3FileTransferRepository s3FileTransferRepository = mock(S3FileTransferRepository.class); - private S3Adapter s3Adapter; - private final String data = "In Cosys generiertes Dokument"; private final byte[] dataAsByteArray = data.getBytes(); + private S3Adapter s3Adapter; @BeforeEach void setup() { @@ -73,13 +67,15 @@ void saveDocumentInStorageWithGetRequest() { final GenerateDocument generateDocument = new GenerateDocument("Client", "Role", "guid", null, listOfURls); - BpmnError bpmnError = assertThrows(BpmnError.class, () -> { s3Adapter.saveDocumentInStorage(generateDocument, dataAsByteArray);}); + BpmnError bpmnError = assertThrows(BpmnError.class, () -> { + s3Adapter.saveDocumentInStorage(generateDocument, dataAsByteArray); + }); String expectedMessage = "Document storage action GET is not supported."; String actualMessage = bpmnError.getErrorMessage(); assertEquals(expectedMessage, actualMessage); - assertEquals("S3_FILE_SAVE_ERROR",bpmnError.getErrorCode()); + assertEquals("S3_FILE_SAVE_ERROR", bpmnError.getErrorCode()); } @@ -102,7 +98,7 @@ void saveDocumentInStorageWithThrowsDocumentStorageException() throws DocumentSt assertEquals(expectedMessage, actualMessage); - assertEquals("S3_FILE_SAVE_ERROR",bpmnError.getErrorCode()); + assertEquals("S3_FILE_SAVE_ERROR", bpmnError.getErrorCode()); } diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/application/usecase/CreateDocumentUseCaseTest.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/application/usecase/CreateDocumentUseCaseTest.java index f2995b47a9..dfe84c3d87 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/application/usecase/CreateDocumentUseCaseTest.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/application/usecase/CreateDocumentUseCaseTest.java @@ -2,12 +2,10 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import de.muenchen.oss.digiwf.cosys.integration.adapter.out.ProcessAdapter; -import de.muenchen.oss.digiwf.cosys.integration.application.port.out.CorrelateMessageOutPort; import de.muenchen.oss.digiwf.cosys.integration.application.port.out.GenerateDocumentOutPort; import de.muenchen.oss.digiwf.cosys.integration.application.port.out.SaveFileToStorageOutPort; -import de.muenchen.oss.digiwf.cosys.integration.model.DocumentStorageUrl; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.DocumentStorageUrl; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import de.muenchen.oss.digiwf.message.core.api.MessageApi; import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.impl.ProcessApiImpl; @@ -32,12 +30,9 @@ class CreateDocumentUseCaseTest { "startProcessDestination" ); - private final CorrelateMessageOutPort correlateMessageOutPort = new ProcessAdapter(processApi); - private final DocumentStorageUrl documentStorageUrl = new DocumentStorageUrl("URL", "Path", "POST"); private final List listOfURls = List.of(documentStorageUrl); - private final GenerateDocument generateDocument = new GenerateDocument("Client", "Role", "guid", - new ObjectMapper().readTree("{\"key1\":\"value\"}"), listOfURls); + private final GenerateDocument generateDocument = new GenerateDocument("Client", "Role", "guid", new ObjectMapper().readTree("{\"key1\":\"value\"}"), listOfURls); CreateDocumentUseCaseTest() throws JsonProcessingException { } @@ -46,8 +41,8 @@ class CreateDocumentUseCaseTest { void createDocument() { when(generateDocumentOutPort.generateCosysDocument(any())).thenReturn(Mono.just("Document".getBytes())); - final CreateDocumentUseCase useCase = new CreateDocumentUseCase(saveFileToStorageOutPort, correlateMessageOutPort, generateDocumentOutPort); - useCase.createDocument("processInstanceIde", "type", "integrationName", generateDocument); + final CreateDocumentUseCase useCase = new CreateDocumentUseCase(saveFileToStorageOutPort, generateDocumentOutPort); + useCase.createDocument(generateDocument); verify(generateDocumentOutPort).generateCosysDocument(generateDocument); verifyNoMoreInteractions(generateDocumentOutPort); diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/GenerateDocumentTest.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/GenerateDocumentTest.java index 08ff1eaefc..828aa7c63a 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/GenerateDocumentTest.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-core/src/test/java/de/muenchen/oss/digiwf/cosys/integration/domain/model/GenerateDocumentTest.java @@ -3,8 +3,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import de.muenchen.oss.digiwf.cosys.integration.model.DocumentStorageUrl; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; import jakarta.validation.ConstraintViolation; import jakarta.validation.Validation; import jakarta.validation.Validator; diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-example/src/main/java/de/muenchen/oss/digiwf/cosys/integration/example/api/controller/ExampleController.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-example/src/main/java/de/muenchen/oss/digiwf/cosys/integration/example/api/controller/ExampleController.java index d00af496d2..714d945e2a 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-example/src/main/java/de/muenchen/oss/digiwf/cosys/integration/example/api/controller/ExampleController.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-example/src/main/java/de/muenchen/oss/digiwf/cosys/integration/example/api/controller/ExampleController.java @@ -2,8 +2,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import de.muenchen.oss.digiwf.cosys.integration.application.port.out.GenerateDocumentOutPort; -import de.muenchen.oss.digiwf.cosys.integration.model.DocumentStorageUrl; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.DocumentStorageUrl; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import de.muenchen.oss.digiwf.message.common.MessageConstants; import de.muenchen.oss.digiwf.message.core.api.MessageApi; import lombok.RequiredArgsConstructor; diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-starter/src/main/java/de/muenchen/oss/digiwf/cosys/integration/configuration/CosysAutoConfiguration.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-starter/src/main/java/de/muenchen/oss/digiwf/cosys/integration/configuration/CosysAutoConfiguration.java index 9c8d274e89..5404fb1674 100644 --- a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-starter/src/main/java/de/muenchen/oss/digiwf/cosys/integration/configuration/CosysAutoConfiguration.java +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-starter/src/main/java/de/muenchen/oss/digiwf/cosys/integration/configuration/CosysAutoConfiguration.java @@ -3,17 +3,15 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import de.muenchen.oss.digiwf.cosys.integration.ApiClient; -import de.muenchen.oss.digiwf.cosys.integration.adapter.in.MessageProcessor; -import de.muenchen.oss.digiwf.cosys.integration.adapter.out.CosysAdapter; -import de.muenchen.oss.digiwf.cosys.integration.adapter.out.ProcessAdapter; -import de.muenchen.oss.digiwf.cosys.integration.adapter.out.S3Adapter; +import de.muenchen.oss.digiwf.cosys.integration.adapter.in.streaming.StreamingAdapter; +import de.muenchen.oss.digiwf.cosys.integration.adapter.out.cosys.CosysAdapter; +import de.muenchen.oss.digiwf.cosys.integration.adapter.out.s3.S3Adapter; import de.muenchen.oss.digiwf.cosys.integration.api.GenerationApi; import de.muenchen.oss.digiwf.cosys.integration.application.port.in.CreateDocumentInPort; -import de.muenchen.oss.digiwf.cosys.integration.application.port.out.CorrelateMessageOutPort; import de.muenchen.oss.digiwf.cosys.integration.application.port.out.GenerateDocumentOutPort; import de.muenchen.oss.digiwf.cosys.integration.application.port.out.SaveFileToStorageOutPort; import de.muenchen.oss.digiwf.cosys.integration.application.usecase.CreateDocumentUseCase; -import de.muenchen.oss.digiwf.cosys.integration.model.GenerateDocument; +import de.muenchen.oss.digiwf.cosys.integration.domain.model.GenerateDocument; import de.muenchen.oss.digiwf.message.process.api.ErrorApi; import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.s3.integration.client.configuration.S3IntegrationClientAutoConfiguration; @@ -101,14 +99,8 @@ private WebClient webClient( @Bean @ConditionalOnMissingBean - public CreateDocumentInPort getCreateDocumentInPort(final SaveFileToStorageOutPort saveFileToStorageOutPort, final CorrelateMessageOutPort correlateMessageOutPort, final GenerateDocumentOutPort generateDocumentOutPort) { - return new CreateDocumentUseCase(saveFileToStorageOutPort, correlateMessageOutPort, generateDocumentOutPort); - } - - @Bean - @ConditionalOnMissingBean - public CorrelateMessageOutPort getCorrelateMessageOutPort(final ProcessApi processApi) { - return new ProcessAdapter(processApi); + public CreateDocumentInPort getCreateDocumentInPort(final SaveFileToStorageOutPort saveFileToStorageOutPort, final GenerateDocumentOutPort generateDocumentOutPort) { + return new CreateDocumentUseCase(saveFileToStorageOutPort, generateDocumentOutPort); } @Bean @@ -125,12 +117,12 @@ public GenerateDocumentOutPort getGenerateDocumentOutPort(final CosysConfigurati @Bean @ConditionalOnMissingBean - public MessageProcessor messageProcessor(final CreateDocumentInPort createDocumentInPort, final ErrorApi errorApi) { - return new MessageProcessor(createDocumentInPort, errorApi); + public StreamingAdapter streamingAdapter(final CreateDocumentInPort createDocumentInPort, final ProcessApi processApi, final ErrorApi errorApi) { + return new StreamingAdapter(createDocumentInPort, processApi, errorApi); } @Bean - public Consumer> createCosysDocument(final MessageProcessor messageProcessor) { - return messageProcessor.createCosysDocument(); + public Consumer> createCosysDocument(final StreamingAdapter streamingAdapter) { + return streamingAdapter.createCosysDocument(); } } diff --git a/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-starter/src/test/java/de/muenchen/oss/digiwf/cosys/integration/ArchitectureTest.java b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-starter/src/test/java/de/muenchen/oss/digiwf/cosys/integration/ArchitectureTest.java new file mode 100644 index 0000000000..bd28953eaf --- /dev/null +++ b/digiwf-integrations/digiwf-cosys-integration/digiwf-cosys-integration-starter/src/test/java/de/muenchen/oss/digiwf/cosys/integration/ArchitectureTest.java @@ -0,0 +1,12 @@ +package de.muenchen.oss.digiwf.cosys.integration; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchTests; +import de.muenchen.oss.digiwf.archunit.HexagonalArchitectureTest; + +@AnalyzeClasses +public class ArchitectureTest { + @ArchTest + static final ArchTests hexagonalArchitecture = ArchTests.in(HexagonalArchitectureTest.class); +} diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/pom.xml b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/pom.xml index 10fa8d2e71..260b972a3f 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/pom.xml +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/pom.xml @@ -39,12 +39,6 @@ - - de.muenchen.oss.digiwf - digiwf-unit-test - ${project.version} - test - de.muenchen.oss.digiwf digiwf-dms-integration-fabasoft-mock diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CancelObjectDto.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CancelObjectDto.java similarity index 79% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CancelObjectDto.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CancelObjectDto.java index 5ddeec1bb7..5bfe2cf8c6 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CancelObjectDto.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CancelObjectDto.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import lombok.AllArgsConstructor; diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateDocumentDto.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateDocumentDto.java similarity index 89% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateDocumentDto.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateDocumentDto.java index 2a6f4aad68..08ca00f006 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateDocumentDto.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateDocumentDto.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateFileDto.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateFileDto.java similarity index 80% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateFileDto.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateFileDto.java index ecf383c7ae..63c77bf4a9 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateFileDto.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateFileDto.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateProcedureDto.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateProcedureDto.java similarity index 82% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateProcedureDto.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateProcedureDto.java index 5e92e11408..d716f6eef5 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateProcedureDto.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateProcedureDto.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import lombok.AllArgsConstructor; diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/DepositObjectDto.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/DepositObjectDto.java similarity index 79% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/DepositObjectDto.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/DepositObjectDto.java index 88e7daf09a..f7309a6642 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/DepositObjectDto.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/DepositObjectDto.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import lombok.AllArgsConstructor; diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/ReadContentDto.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/ReadContentDto.java similarity index 83% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/ReadContentDto.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/ReadContentDto.java index 2ff9750937..b90e817325 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/ReadContentDto.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/ReadContentDto.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/SearchObjectDto.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/SearchObjectDto.java similarity index 86% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/SearchObjectDto.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/SearchObjectDto.java index fbbb9210fc..e42ecb7194 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/SearchObjectDto.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/SearchObjectDto.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import lombok.AllArgsConstructor; diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/MessageProcessor.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/StreamingAdapter.java similarity index 99% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/MessageProcessor.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/StreamingAdapter.java index c8a3ab2c77..078c535a12 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/MessageProcessor.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/StreamingAdapter.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.dms.integration.application.port.in.*; import de.muenchen.oss.digiwf.dms.integration.domain.DocumentResponse; @@ -22,7 +22,7 @@ @Configuration @RequiredArgsConstructor -public class MessageProcessor { +public class StreamingAdapter { private final ProcessApi processApi; private final ErrorApi errorApi; diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/UpdateDocumentDto.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/UpdateDocumentDto.java similarity index 88% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/UpdateDocumentDto.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/UpdateDocumentDto.java index a1634efebd..c1835f24d3 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/UpdateDocumentDto.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/main/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/UpdateDocumentDto.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CancelObjectMessageProcessorTest.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CancelObjectStreamingAdapterTest.java similarity index 89% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CancelObjectMessageProcessorTest.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CancelObjectStreamingAdapterTest.java index 423e815faf..dff3c330bc 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CancelObjectMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CancelObjectStreamingAdapterTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import jakarta.validation.ValidationException; @@ -17,7 +17,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class CancelObjectMessageProcessorTest extends MessageProcessorTestBase { +class CancelObjectStreamingAdapterTest extends StreamingAdapterTestBase { private final CancelObjectDto cancelObjectDto = new CancelObjectDto( "objectCoo", @@ -46,14 +46,14 @@ public MessageHeaders getHeaders() { @Test void testCancelObjectSuccessful() { - messageProcessor.cancelObject().accept(this.message); + streamingAdapter.cancelObject().accept(this.message); verify(cancelObjectInPortMock, times(1)).cancelObject(cancelObjectDto.getObjectCoo(), cancelObjectDto.getUser()); } @Test void testCancelObjectValidationException() { Mockito.doThrow(new ValidationException("Test ValidationException")).when(cancelObjectInPortMock).cancelObject(any(), any()); - messageProcessor.cancelObject().accept(this.message); + streamingAdapter.cancelObject().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); @@ -63,7 +63,7 @@ void testCancelObjectValidationException() { @Test void testCancelObjectIncidentError() { Mockito.doThrow(new IncidentError("Error Message")).when(cancelObjectInPortMock).cancelObject(any(), any()); - messageProcessor.cancelObject().accept(this.message); + streamingAdapter.cancelObject().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateDocumentMessageProcessorTest.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateDocumentStreamingAdapterTest.java similarity index 92% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateDocumentMessageProcessorTest.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateDocumentStreamingAdapterTest.java index c4de297b23..b859e905ea 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateDocumentMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateDocumentStreamingAdapterTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.dms.integration.domain.DocumentResponse; import de.muenchen.oss.digiwf.dms.integration.domain.DocumentType; @@ -22,7 +22,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class CreateDocumentMessageProcessorTest extends MessageProcessorTestBase { +class CreateDocumentStreamingAdapterTest extends StreamingAdapterTestBase { private final CreateDocumentDto createDocumentDto = new CreateDocumentDto( "documentCoo", @@ -67,7 +67,7 @@ public MessageHeaders getHeaders() { @Test void testDmsIntegrationCreateDocumentSuccessfully() { - messageProcessor.createDocument().accept(this.message); + streamingAdapter.createDocument().accept(this.message); verify(createDocumentInPortMock, times(1)).createDocument( createDocumentDto.getProcedureCoo(), createDocumentDto.getTitle(), @@ -83,7 +83,7 @@ void testDmsIntegrationCreateDocumentSuccessfully() { void testDmsIntegrationCreateDocumentHandlesValidationException() { Mockito.doThrow(new ValidationException("Test ValidationException")).when(createDocumentInPortMock) .createDocument(any(), any(), any(), any(), any(), any(), any(), any()); - messageProcessor.createDocument().accept(this.message); + streamingAdapter.createDocument().accept(this.message); final ArgumentCaptor> messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); @@ -93,7 +93,7 @@ void testDmsIntegrationCreateDocumentHandlesValidationException() { void testDmsCreateDocumentIntegrationHandlesIncidentError() { Mockito.doThrow(new IncidentError("Error Message")).when(createDocumentInPortMock) .createDocument(any(), any(), any(), any(), any(), any(), any(), any()); - messageProcessor.createDocument().accept(this.message); + streamingAdapter.createDocument().accept(this.message); final ArgumentCaptor> messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateFileMessageProcessorTest.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateFileStreamingAdapterTest.java similarity index 89% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateFileMessageProcessorTest.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateFileStreamingAdapterTest.java index f9fdd3b453..de97e55c93 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateFileMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateFileStreamingAdapterTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import jakarta.validation.ValidationException; @@ -17,7 +17,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class CreateFileMessageProcessorTest extends MessageProcessorTestBase { +class CreateFileStreamingAdapterTest extends StreamingAdapterTestBase { private final CreateFileDto createFileDto = new CreateFileDto( "apentryCoo", @@ -49,14 +49,14 @@ public MessageHeaders getHeaders() { @Test void testDmsIntegrationCreateFileSuccessfully() { - messageProcessor.createFile().accept(this.message); + streamingAdapter.createFile().accept(this.message); verify(createFileInPortMock, times(1)).createFile(createFileDto.getTitle(), createFileDto.getApentryCOO(), createFileDto.getUser()); } @Test void testDmsIntegrationCreateFileHandlesValidationException() { Mockito.doThrow(new ValidationException("Test ValidationException")).when(createFileInPortMock).createFile(any(), any(), any()); - messageProcessor.createFile().accept(this.message); + streamingAdapter.createFile().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); @@ -66,7 +66,7 @@ void testDmsIntegrationCreateFileHandlesValidationException() { @Test void testDmsIntegrationCreateFileHandlesIncidentError() { Mockito.doThrow(new IncidentError("Error Message")).when(createFileInPortMock).createFile(any(), any(), any()); - messageProcessor.createFile().accept(this.message); + streamingAdapter.createFile().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateProcedureMessageProcessorTest.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateProcedureStreamingAdapterTest.java similarity index 90% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateProcedureMessageProcessorTest.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateProcedureStreamingAdapterTest.java index 9128d0fde7..fe993cd280 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/CreateProcedureMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/CreateProcedureStreamingAdapterTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.dms.integration.domain.Procedure; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; @@ -18,7 +18,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class CreateProcedureMessageProcessorTest extends MessageProcessorTestBase { +class CreateProcedureStreamingAdapterTest extends StreamingAdapterTestBase { private final CreateProcedureDto createProcedureDto = new CreateProcedureDto( "sachakteCoo", @@ -52,14 +52,14 @@ public MessageHeaders getHeaders() { @Test void testDmsIntegrationCreateProcedureSuccessfully() { - messageProcessor.createProcedure().accept(this.message); + streamingAdapter.createProcedure().accept(this.message); verify(createProcedureMock, times(1)).createProcedure(createProcedureDto.getTitle(), createProcedureDto.getFileCOO(), createProcedureDto.getFileSubj(), createProcedureDto.getUser()); } @Test void testDmsIntegrationHandlesValidationException() { Mockito.doThrow(new ValidationException("Test ValidationException")).when(createProcedureMock).createProcedure(any(), any(), any(), any()); - messageProcessor.createProcedure().accept(this.message); + streamingAdapter.createProcedure().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); @@ -69,7 +69,7 @@ void testDmsIntegrationHandlesValidationException() { @Test void testDmsIntegrationHandlesIncidentError() { Mockito.doThrow(new IncidentError("Error Message")).when(createProcedureMock).createProcedure(any(), any(), any(), any()); - messageProcessor.createProcedure().accept(this.message); + streamingAdapter.createProcedure().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/DepositObjectMessageProcessorTest.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/DepositObjectStreamingAdapterTest.java similarity index 88% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/DepositObjectMessageProcessorTest.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/DepositObjectStreamingAdapterTest.java index b43eab2f88..b98e3d90ac 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/DepositObjectMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/DepositObjectStreamingAdapterTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import jakarta.validation.ValidationException; @@ -17,7 +17,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class DepositObjectMessageProcessorTest extends MessageProcessorTestBase { +class DepositObjectStreamingAdapterTest extends StreamingAdapterTestBase { private final DepositObjectDto depositObjectDto = new DepositObjectDto( "objectCoo", @@ -46,14 +46,14 @@ public MessageHeaders getHeaders() { @Test void testDepositObjectSuccessful() { - messageProcessor.depositObject().accept(this.message); + streamingAdapter.depositObject().accept(this.message); verify(depositObjectInPortMock, times(1)).depositObject(depositObjectDto.getObjectCoo(), depositObjectDto.getUser()); } @Test void testDepositObjectValidationException() { Mockito.doThrow(new ValidationException("Test ValidationException")).when(depositObjectInPortMock).depositObject(any(), any()); - messageProcessor.depositObject().accept(this.message); + streamingAdapter.depositObject().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); @@ -63,7 +63,7 @@ void testDepositObjectValidationException() { @Test void testDepositObjectIncidentError() { Mockito.doThrow(new IncidentError("Error Message")).when(depositObjectInPortMock).depositObject(any(), any()); - messageProcessor.depositObject().accept(this.message); + streamingAdapter.depositObject().accept(this.message); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/ReadContentMessageProcessorTest.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/ReadContentStreamingAdapterTest.java similarity index 88% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/ReadContentMessageProcessorTest.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/ReadContentStreamingAdapterTest.java index f48cb5f449..eff51b4803 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/ReadContentMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/ReadContentStreamingAdapterTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -11,7 +11,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class ReadContentMessageProcessorTest extends MessageProcessorTestBase { +class ReadContentStreamingAdapterTest extends StreamingAdapterTestBase { private final ReadContentDto readContentDto = new ReadContentDto( List.of("fileCoo"), @@ -47,7 +47,7 @@ public MessageHeaders getHeaders() { @Test void testDmsIntegrationReadContentSuccessfully() { - messageProcessor.readContent().accept(this.message); + streamingAdapter.readContent().accept(this.message); verify(readContentInPort, times(1)).readContent( readContentDto.getContentCoos(), readContentDto.getUser(), diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/SearchFileMessageProcessorTest.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/SearchFileStreamingAdapterTest.java similarity index 87% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/SearchFileMessageProcessorTest.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/SearchFileStreamingAdapterTest.java index 81d79e48d1..c0dcfae1a8 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/SearchFileMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/SearchFileStreamingAdapterTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -6,13 +6,12 @@ import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; -import java.util.Arrays; import java.util.List; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class SearchFileMessageProcessorTest extends MessageProcessorTestBase { +class SearchFileStreamingAdapterTest extends StreamingAdapterTestBase { private final SearchObjectDto searchFileDto = new SearchObjectDto( "group.*-file-*", @@ -47,7 +46,7 @@ public MessageHeaders getHeaders() { @Test void testReadFileSuccessfully() { - messageProcessor.searchFile().accept(this.message); + streamingAdapter.searchFile().accept(this.message); verify(searchFileInPort, times(1)).searchFile( searchFileDto.getSearchString(), searchFileDto.getUser(), diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/SearchSubjectAreaMessageProcessorTest.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/SearchSubjectAreaStreamingAdapterTest.java similarity index 86% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/SearchSubjectAreaMessageProcessorTest.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/SearchSubjectAreaStreamingAdapterTest.java index 3c08a0f123..8c6620e084 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/SearchSubjectAreaMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/SearchSubjectAreaStreamingAdapterTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -9,7 +9,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class SearchSubjectAreaMessageProcessorTest extends MessageProcessorTestBase { +class SearchSubjectAreaStreamingAdapterTest extends StreamingAdapterTestBase { private final SearchObjectDto searchSubjectAreaDto = new SearchObjectDto( "aktenplan", @@ -42,7 +42,7 @@ public MessageHeaders getHeaders() { @Test void testReadFileSuccessfully() { - messageProcessor.searchSubjectArea().accept(this.message); + streamingAdapter.searchSubjectArea().accept(this.message); verify(searchSubjectAreaInPort, times(1)).searchSubjectArea( searchSubjectAreaDto.getSearchString(), searchSubjectAreaDto.getUser()); diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/MessageProcessorTestBase.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/StreamingAdapterTestBase.java similarity index 91% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/MessageProcessorTestBase.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/StreamingAdapterTestBase.java index af6f1fa502..b3b643c04f 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/MessageProcessorTestBase.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/StreamingAdapterTestBase.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.dms.integration.application.port.in.*; import de.muenchen.oss.digiwf.message.process.api.ErrorApi; @@ -10,7 +10,7 @@ import static de.muenchen.oss.digiwf.message.common.MessageConstants.*; -class MessageProcessorTestBase { +class StreamingAdapterTestBase { protected final ErrorApi errorApiMock = Mockito.mock(ErrorApi.class); protected final ProcessApi processApi = Mockito.mock(ProcessApi.class); protected final CreateFileInPort createFileInPortMock = Mockito.mock(CreateFileInPort.class); @@ -27,10 +27,10 @@ class MessageProcessorTestBase { protected final MessageHeaders messageHeaders = new MessageHeaders( Map.of(DIGIWF_PROCESS_INSTANCE_ID, this.processInstanceId, DIGIWF_INTEGRATION_NAME, "dmsIntegration", TYPE, "type", DIGIWF_PROCESS_DEFINITION, processDefinitionId)); - protected MessageProcessor messageProcessor; + protected StreamingAdapter streamingAdapter; protected void setupBase() { - this.messageProcessor = new MessageProcessor( + this.streamingAdapter = new StreamingAdapter( processApi, errorApiMock, createFileInPortMock, diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/UpdateDocumentMessageProcessorTest.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/UpdateDocumentStreamingAdapterTest.java similarity index 91% rename from digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/UpdateDocumentMessageProcessorTest.java rename to digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/UpdateDocumentStreamingAdapterTest.java index 067b3d831e..6bbde3c2a3 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/UpdateDocumentMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-core/src/test/java/de/muenchen/oss/digiwf/dms/integration/adapter/in/streaming/UpdateDocumentStreamingAdapterTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.dms.integration.adapter.in; +package de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.dms.integration.domain.DocumentResponse; import de.muenchen.oss.digiwf.dms.integration.domain.DocumentType; @@ -21,7 +21,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class UpdateDocumentMessageProcessorTest extends MessageProcessorTestBase { +class UpdateDocumentStreamingAdapterTest extends StreamingAdapterTestBase { private final UpdateDocumentDto updateDocumentDto = new UpdateDocumentDto( "documentCoo", @@ -61,7 +61,7 @@ public MessageHeaders getHeaders() { @Test void testDmsIntegrationUpdateDocumentSuccessfully() { - messageProcessor.updateDocument().accept(this.message); + streamingAdapter.updateDocument().accept(this.message); verify(updateDocumentInPortMock, times(1)).updateDocument( updateDocumentDto.getDocumentCoo(), updateDocumentDto.getUser(), @@ -75,7 +75,7 @@ void testDmsIntegrationUpdateDocumentSuccessfully() { void testDmsIntegrationUpdateDocumentHandlesValidationException() { Mockito.doThrow(new ValidationException("Test ValidationException")).when(updateDocumentInPortMock) .updateDocument(any(), any(), any(), any(), any(), any()); - messageProcessor.updateDocument().accept(this.message); + streamingAdapter.updateDocument().accept(this.message); final ArgumentCaptor> messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); @@ -84,7 +84,7 @@ void testDmsIntegrationUpdateDocumentHandlesValidationException() { @Test void testDmsUpdateDocumentIntegrationHandlesIncidentError() { Mockito.doThrow(new IncidentError("Error Message")).when(updateDocumentInPortMock).updateDocument(any(), any(), any(), any(), any(), any()); - messageProcessor.updateDocument().accept(this.message); + streamingAdapter.updateDocument().accept(this.message); final ArgumentCaptor> messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); Assertions.assertTrue(messageHeaderArgumentCaptor.getValue().containsKey(DIGIWF_PROCESS_INSTANCE_ID)); diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-starter/src/main/java/de/muenchen/oss/digiwf/dms/integration/configuration/DmsAutoConfiguration.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-starter/src/main/java/de/muenchen/oss/digiwf/dms/integration/configuration/DmsAutoConfiguration.java index e6c4c504d7..c0e8952b8f 100644 --- a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-starter/src/main/java/de/muenchen/oss/digiwf/dms/integration/configuration/DmsAutoConfiguration.java +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-starter/src/main/java/de/muenchen/oss/digiwf/dms/integration/configuration/DmsAutoConfiguration.java @@ -1,7 +1,7 @@ package de.muenchen.oss.digiwf.dms.integration.configuration; import com.fabasoft.schemas.websvc.lhmbai_15_1700_giwsd.LHMBAI151700GIWSDSoap; -import de.muenchen.oss.digiwf.dms.integration.adapter.in.*; +import de.muenchen.oss.digiwf.dms.integration.adapter.in.streaming.*; import de.muenchen.oss.digiwf.dms.integration.adapter.out.auth.DmsUserAdapter; import de.muenchen.oss.digiwf.dms.integration.adapter.out.auth.MockDmsUserAdapter; import de.muenchen.oss.digiwf.dms.integration.adapter.out.fabasoft.FabasoftAdapter; @@ -153,48 +153,48 @@ public ReadMetadataInPort readMetadataInPort(ReadMetadataOutPort readMetadataOut } @Bean - public Consumer> createFile(final MessageProcessor messageProcessor) { - return messageProcessor.createFile(); + public Consumer> createFile(final StreamingAdapter streamingAdapter) { + return streamingAdapter.createFile(); } @Bean - public Consumer> createProcedure(final MessageProcessor messageProcessor) { - return messageProcessor.createProcedure(); + public Consumer> createProcedure(final StreamingAdapter streamingAdapter) { + return streamingAdapter.createProcedure(); } @Bean - public Consumer> createDocument(final MessageProcessor messageProcessor) { - return messageProcessor.createDocument(); + public Consumer> createDocument(final StreamingAdapter streamingAdapter) { + return streamingAdapter.createDocument(); } @Bean - public Consumer> updateDocument(final MessageProcessor messageProcessor) { - return messageProcessor.updateDocument(); + public Consumer> updateDocument(final StreamingAdapter streamingAdapter) { + return streamingAdapter.updateDocument(); } @Bean - public Consumer> depositObject(final MessageProcessor messageProcessor) { - return messageProcessor.depositObject(); + public Consumer> depositObject(final StreamingAdapter streamingAdapter) { + return streamingAdapter.depositObject(); } @Bean - public Consumer> cancelObject(final MessageProcessor messageProcessor) { - return messageProcessor.cancelObject(); + public Consumer> cancelObject(final StreamingAdapter streamingAdapter) { + return streamingAdapter.cancelObject(); } @Bean - public Consumer> readContent(final MessageProcessor messageProcessor) { - return messageProcessor.readContent(); + public Consumer> readContent(final StreamingAdapter streamingAdapter) { + return streamingAdapter.readContent(); } @Bean - public Consumer> searchFile(final MessageProcessor messageProcessor) { - return messageProcessor.searchFile(); + public Consumer> searchFile(final StreamingAdapter streamingAdapter) { + return streamingAdapter.searchFile(); } @Bean - public Consumer> searchSubjectArea(final MessageProcessor messageProcessor) { - return messageProcessor.searchSubjectArea(); + public Consumer> searchSubjectArea(final StreamingAdapter streamingAdapter) { + return streamingAdapter.searchSubjectArea(); } @Profile("!local") @@ -213,7 +213,7 @@ public MockDmsUserAdapter mockDmsUserAdapter() { @Bean @ConditionalOnMissingBean - public MessageProcessor createMessageProcessor( + public StreamingAdapter streamingAdapter( final ProcessApi processApi, final ErrorApi errorApi, final CreateFileInPort createFileInPort, @@ -226,7 +226,7 @@ public MessageProcessor createMessageProcessor( final SearchFileInPort searchFileInPort, final SearchSubjectAreaInPort searchSubjectAreaInPort ) { - return new MessageProcessor( + return new StreamingAdapter( processApi, errorApi, createFileInPort, diff --git a/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-starter/src/test/java/de/muenchen/oss/digiwf/dms/integration/ArchitectureTest.java b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-starter/src/test/java/de/muenchen/oss/digiwf/dms/integration/ArchitectureTest.java new file mode 100644 index 0000000000..0c4f3c0679 --- /dev/null +++ b/digiwf-integrations/digiwf-dms-integration/digiwf-dms-integration-starter/src/test/java/de/muenchen/oss/digiwf/dms/integration/ArchitectureTest.java @@ -0,0 +1,12 @@ +package de.muenchen.oss.digiwf.dms.integration; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchTests; +import de.muenchen.oss.digiwf.archunit.HexagonalArchitectureTest; + +@AnalyzeClasses +public class ArchitectureTest { + @ArchTest + static final ArchTests hexagonalArchitecture = ArchTests.in(HexagonalArchitectureTest.class); +} diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/pom.xml b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/pom.xml index f64ccc88fd..92c3011672 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/pom.xml +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 @@ -34,14 +34,6 @@ jai-imageio-jpeg2000 ${jai-imageio-jpeg2000.version} - - - - de.muenchen.oss.digiwf - digiwf-unit-test - ${project.version} - test - diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/BasicMailDto.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/BasicMailDto.java similarity index 86% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/BasicMailDto.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/BasicMailDto.java index c2b83b968c..24498a4c10 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/BasicMailDto.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/BasicMailDto.java @@ -1,6 +1,6 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.in; +package de.muenchen.oss.digiwf.email.integration.adapter.in.streaming; -import de.muenchen.oss.digiwf.email.integration.model.PresignedUrl; +import de.muenchen.oss.digiwf.email.integration.domain.model.PresignedUrl; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/MailWithLogoAndLinkDto.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/MailWithLogoAndLinkDto.java similarity index 90% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/MailWithLogoAndLinkDto.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/MailWithLogoAndLinkDto.java index 5bc2af5be4..0b32141125 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/MailWithLogoAndLinkDto.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/MailWithLogoAndLinkDto.java @@ -1,6 +1,6 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.in; +package de.muenchen.oss.digiwf.email.integration.adapter.in.streaming; -import de.muenchen.oss.digiwf.email.integration.model.PresignedUrl; +import de.muenchen.oss.digiwf.email.integration.domain.model.PresignedUrl; import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/MessageProcessor.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/StreamingAdapter.java similarity index 83% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/MessageProcessor.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/StreamingAdapter.java index 3219872a7c..4c099be759 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/MessageProcessor.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/StreamingAdapter.java @@ -1,10 +1,11 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.in; +package de.muenchen.oss.digiwf.email.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.email.integration.application.port.in.SendMailInPort; +import de.muenchen.oss.digiwf.email.integration.domain.model.TemplateMail; +import de.muenchen.oss.digiwf.email.integration.domain.model.TextMail; import de.muenchen.oss.digiwf.email.integration.infrastructure.MonitoringService; -import de.muenchen.oss.digiwf.email.integration.model.TextMail; -import de.muenchen.oss.digiwf.email.integration.model.TemplateMail; import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import jakarta.validation.ValidationException; @@ -17,8 +18,9 @@ import static de.muenchen.oss.digiwf.message.common.MessageConstants.*; @RequiredArgsConstructor -public class MessageProcessor { +public class StreamingAdapter { + private final ProcessApi processApi; private final ErrorApi errorApi; private final SendMailInPort mailInPort; private final MonitoringService monitoringService; @@ -27,11 +29,12 @@ public Consumer> emailIntegration() { return message -> { withErrorHandling(message, () -> { - this.mailInPort.sendMailWithText( + this.mailInPort.sendMailWithText(message.getPayload()); + this.processApi.correlateMessage( message.getHeaders().get(DIGIWF_PROCESS_INSTANCE_ID, String.class), message.getHeaders().get(TYPE, String.class), message.getHeaders().get(DIGIWF_INTEGRATION_NAME, String.class), - message.getPayload()); + Map.of("mailSentStatus", true)); this.monitoringService.sendMailSucceeded(); }); }; @@ -43,10 +46,12 @@ public Consumer> sendMailWithLogoAndLink() { withErrorHandling(message, () -> { MailWithLogoAndLinkDto mail = message.getPayload(); this.mailInPort.sendMailWithTemplate( + convertToTemplateMail(mail, mail.getTemplate(), Map.of("mail", mail))); + this.processApi.correlateMessage( message.getHeaders().get(DIGIWF_PROCESS_INSTANCE_ID, String.class), message.getHeaders().get(TYPE, String.class), message.getHeaders().get(DIGIWF_INTEGRATION_NAME, String.class), - convertToTemplateMail(mail, mail.getTemplate(), Map.of("mail", mail))); + Map.of("mailSentStatus", true)); this.monitoringService.sendMailSucceeded(); }); }; diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/ProcessAdapter.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/ProcessAdapter.java deleted file mode 100644 index de54583680..0000000000 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/ProcessAdapter.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.out; - -import de.muenchen.oss.digiwf.email.integration.application.port.out.CorrelateMessageOutPort; -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import lombok.RequiredArgsConstructor; - -import java.util.Map; - -@RequiredArgsConstructor -public class ProcessAdapter implements CorrelateMessageOutPort { - - private final ProcessApi processApi; - - @Override - public void correlateMessage(final String processInstanceId, final String type, final String integrationName, final Map message) { - this.processApi.correlateMessage(processInstanceId, type, integrationName, message); - } - -} diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/MailAdapter.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/mail/MailAdapter.java similarity index 92% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/MailAdapter.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/mail/MailAdapter.java index 2a416c6a2f..dcc7c56aeb 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/MailAdapter.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/mail/MailAdapter.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.out; +package de.muenchen.oss.digiwf.email.integration.adapter.out.mail; import de.muenchen.oss.digiwf.email.api.DigiwfEmailApi; import de.muenchen.oss.digiwf.email.integration.application.port.out.MailOutPort; diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/S3Adapter.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/s3/S3Adapter.java similarity index 90% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/S3Adapter.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/s3/S3Adapter.java index 53668e2333..32e028b538 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/S3Adapter.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/adapter/out/s3/S3Adapter.java @@ -1,7 +1,7 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.out; +package de.muenchen.oss.digiwf.email.integration.adapter.out.s3; import de.muenchen.oss.digiwf.email.integration.application.port.out.LoadMailAttachmentOutPort; -import de.muenchen.oss.digiwf.email.integration.model.PresignedUrl; +import de.muenchen.oss.digiwf.email.integration.domain.model.PresignedUrl; import de.muenchen.oss.digiwf.email.model.FileAttachment; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.s3.integration.client.exception.DocumentStorageClientErrorException; @@ -32,7 +32,8 @@ public FileAttachment loadAttachment(final PresignedUrl attachment) throws BpmnE final ByteArrayDataSource file = new ByteArrayDataSource(bytes, type); file.setName(fileName); return new FileAttachment(fileName, file); - } catch (final DocumentStorageException | DocumentStorageServerErrorException | DocumentStorageClientErrorException e) { + } catch (final DocumentStorageException | DocumentStorageServerErrorException | + DocumentStorageClientErrorException e) { log.debug("An attachment could not be loaded from presigned url: {}", attachment); throw new BpmnError("LOAD_FILE_FAILED", "An attachment could not be loaded from presigned url: " + attachment); } diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/in/SendMailInPort.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/in/SendMailInPort.java index fc95a64435..b5e36384a9 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/in/SendMailInPort.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/in/SendMailInPort.java @@ -1,13 +1,13 @@ package de.muenchen.oss.digiwf.email.integration.application.port.in; -import de.muenchen.oss.digiwf.email.integration.model.TextMail; -import de.muenchen.oss.digiwf.email.integration.model.TemplateMail; +import de.muenchen.oss.digiwf.email.integration.domain.model.TemplateMail; +import de.muenchen.oss.digiwf.email.integration.domain.model.TextMail; import jakarta.validation.Valid; public interface SendMailInPort { - void sendMailWithText(final String processInstanceId, final String type, final String integrationName, @Valid final TextMail mail); + void sendMailWithText(@Valid final TextMail mail); - void sendMailWithTemplate(final String processInstanceId, final String type, final String integrationName, @Valid final TemplateMail mail); + void sendMailWithTemplate(@Valid final TemplateMail mail); } diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/out/CorrelateMessageOutPort.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/out/CorrelateMessageOutPort.java deleted file mode 100644 index 29b7b91c1b..0000000000 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/out/CorrelateMessageOutPort.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.muenchen.oss.digiwf.email.integration.application.port.out; - -import java.util.Map; - -public interface CorrelateMessageOutPort { - - void correlateMessage(final String processInstanceId, final String type, final String integrationName, final Map message); - -} diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/out/LoadMailAttachmentOutPort.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/out/LoadMailAttachmentOutPort.java index 8f669653a5..f696f492ac 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/out/LoadMailAttachmentOutPort.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/port/out/LoadMailAttachmentOutPort.java @@ -1,6 +1,6 @@ package de.muenchen.oss.digiwf.email.integration.application.port.out; -import de.muenchen.oss.digiwf.email.integration.model.PresignedUrl; +import de.muenchen.oss.digiwf.email.integration.domain.model.PresignedUrl; import de.muenchen.oss.digiwf.email.model.FileAttachment; public interface LoadMailAttachmentOutPort { diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/usecase/SendMailUseCase.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/usecase/SendMailUseCase.java index ae870f45d2..808e493281 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/usecase/SendMailUseCase.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/application/usecase/SendMailUseCase.java @@ -1,12 +1,11 @@ package de.muenchen.oss.digiwf.email.integration.application.usecase; import de.muenchen.oss.digiwf.email.integration.application.port.in.SendMailInPort; -import de.muenchen.oss.digiwf.email.integration.application.port.out.CorrelateMessageOutPort; import de.muenchen.oss.digiwf.email.integration.application.port.out.LoadMailAttachmentOutPort; import de.muenchen.oss.digiwf.email.integration.application.port.out.MailOutPort; -import de.muenchen.oss.digiwf.email.integration.model.BasicMail; -import de.muenchen.oss.digiwf.email.integration.model.TextMail; -import de.muenchen.oss.digiwf.email.integration.model.TemplateMail; +import de.muenchen.oss.digiwf.email.integration.domain.model.BasicMail; +import de.muenchen.oss.digiwf.email.integration.domain.model.TemplateMail; +import de.muenchen.oss.digiwf.email.integration.domain.model.TextMail; import de.muenchen.oss.digiwf.email.model.FileAttachment; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import freemarker.template.TemplateException; @@ -30,7 +29,6 @@ public class SendMailUseCase implements SendMailInPort { private final LoadMailAttachmentOutPort loadAttachmentOutPort; - private final CorrelateMessageOutPort correlateMessageOutPort; private final MailOutPort mailOutPort; /** @@ -39,15 +37,15 @@ public class SendMailUseCase implements SendMailInPort { * @param mail mail that is sent */ @Override - public void sendMailWithText(final String processInstanceIde, final String type, final String integrationName, @Valid final TextMail mail) throws BpmnError { + public void sendMailWithText(@Valid final TextMail mail) throws BpmnError { de.muenchen.oss.digiwf.email.model.Mail mailModel = createMail(mail); mailModel.setBody(mail.getBody()); - this.sendMail(processInstanceIde, type, integrationName, mailModel, null); + this.sendMail(mailModel, null); } @Override - public void sendMailWithTemplate(final String processInstanceIde, final String type, final String integrationName, @Valid final TemplateMail mail) throws BpmnError { + public void sendMailWithTemplate(@Valid final TemplateMail mail) throws BpmnError { // get body from template try { Map content = new HashMap<>(mail.getContent()); @@ -58,7 +56,7 @@ public void sendMailWithTemplate(final String processInstanceIde, final String t mailModel.setBody(body); mailModel.setHtmlBody(true); - this.sendMail(processInstanceIde, type, integrationName, mailModel, "templates/email-logo.png"); + this.sendMail(mailModel, "templates/email-logo.png"); } catch (IOException ioException) { throw new BpmnError("LOAD_TEMPLATE_FAILED", "The template " + mail.getTemplate() + " could not be loaded"); @@ -86,13 +84,9 @@ private de.muenchen.oss.digiwf.email.model.Mail createMail(BasicMail mail) { .build(); } - private void sendMail(final String processInstanceIde, final String type, final String integrationName, de.muenchen.oss.digiwf.email.model.Mail mailModel, String logoPath) throws BpmnError { + private void sendMail(de.muenchen.oss.digiwf.email.model.Mail mailModel, String logoPath) throws BpmnError { try { this.mailOutPort.sendMail(mailModel, logoPath); - // correlate message - final Map correlatePayload = new HashMap<>(); - correlatePayload.put("mailSentStatus", true); - this.correlateMessageOutPort.correlateMessage(processInstanceIde, type, integrationName, correlatePayload); } catch (final MessagingException ex) { log.error("Sending mail failed with exception: {}", ex.getMessage()); throw new BpmnError("MAIL_SENDING_FAILED", ex.getMessage()); diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/BasicMail.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/BasicMail.java similarity index 93% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/BasicMail.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/BasicMail.java index 9079efd40f..0495668229 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/BasicMail.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/BasicMail.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.email.integration.model; +package de.muenchen.oss.digiwf.email.integration.domain.model; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/model/PresignedUrl.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/PresignedUrl.java similarity index 93% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/model/PresignedUrl.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/PresignedUrl.java index d775d6d478..a2613d7d22 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/model/PresignedUrl.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/PresignedUrl.java @@ -1,12 +1,11 @@ -package de.muenchen.oss.digiwf.email.integration.model; +package de.muenchen.oss.digiwf.email.integration.domain.model; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; import lombok.Data; import lombok.RequiredArgsConstructor; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Pattern; - /** * Attachment File you want to get from the S3 storage. */ diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/TemplateMail.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/TemplateMail.java similarity index 93% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/TemplateMail.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/TemplateMail.java index 344afa0954..8627270a75 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/TemplateMail.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/TemplateMail.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.email.integration.model; +package de.muenchen.oss.digiwf.email.integration.domain.model; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/TextMail.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/TextMail.java similarity index 91% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/TextMail.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/TextMail.java index 116f862b10..f60351de37 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/TextMail.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/TextMail.java @@ -1,11 +1,10 @@ -package de.muenchen.oss.digiwf.email.integration.model; +package de.muenchen.oss.digiwf.email.integration.domain.model; +import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Data; import lombok.RequiredArgsConstructor; -import jakarta.validation.constraints.NotBlank; - import java.util.List; /** diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/SendMailWithLogoAndLinkMessageProcessorTest.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/SendMailWithLogoAndLinkStreamingAdapterTest.java similarity index 85% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/SendMailWithLogoAndLinkMessageProcessorTest.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/SendMailWithLogoAndLinkStreamingAdapterTest.java index cc120d892d..79fddfdddf 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/SendMailWithLogoAndLinkMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/SendMailWithLogoAndLinkStreamingAdapterTest.java @@ -1,6 +1,6 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.in; +package de.muenchen.oss.digiwf.email.integration.adapter.in.streaming; -import de.muenchen.oss.digiwf.email.integration.model.TemplateMail; +import de.muenchen.oss.digiwf.email.integration.domain.model.TemplateMail; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import jakarta.validation.ValidationException; @@ -19,7 +19,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class SendMailWithLogoAndLinkMessageProcessorTest extends MessageProcessorTestBase { +class SendMailWithLogoAndLinkStreamingAdapterTest extends StreamingAdapterTestBase { private final MailWithLogoAndLinkDto mailWithLogoAndLinkDto = new MailWithLogoAndLinkDto( "mailReceiver1@muenchen.de,mailReceiver2@muenchen.de", @@ -65,15 +65,15 @@ void testEmailIntegrationSendsMailSuccessfully() { "template", Map.of("mail", mailWithLogoAndLinkDto) ); - messageProcessor.sendMailWithLogoAndLink().accept(this.message); + streamingAdapter.sendMailWithLogoAndLink().accept(this.message); verify(monitoringServiceMock, times(1)).sendMailSucceeded(); - verify(sendMailInPortMock, times(1)).sendMailWithTemplate(processInstanceId, "emailType", "emailIntegration", templateMail); + verify(sendMailInPortMock, times(1)).sendMailWithTemplate(templateMail); } @Test void testEmailIntegrationHandlesValidationException() { - Mockito.doThrow(new ValidationException("Test ValidationException")).when(sendMailInPortMock).sendMailWithTemplate(any(), any(), any(), any()); - messageProcessor.sendMailWithLogoAndLink().accept(this.message); + Mockito.doThrow(new ValidationException("Test ValidationException")).when(sendMailInPortMock).sendMailWithTemplate(any()); + streamingAdapter.sendMailWithLogoAndLink().accept(this.message); verify(monitoringServiceMock, times(1)).sendMailFailed(); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleBpmnError(messageHeaderArgumentCaptor.capture(), any(BpmnError.class)); @@ -85,8 +85,8 @@ void testEmailIntegrationHandlesValidationException() { @Test void testEmailIntegrationHandlesBpmnError() { - Mockito.doThrow(new BpmnError("errorCode", "errorMessage")).when(sendMailInPortMock).sendMailWithTemplate(any(), any(), any(), any()); - messageProcessor.sendMailWithLogoAndLink().accept(this.message); + Mockito.doThrow(new BpmnError("errorCode", "errorMessage")).when(sendMailInPortMock).sendMailWithTemplate(any()); + streamingAdapter.sendMailWithLogoAndLink().accept(this.message); verify(monitoringServiceMock, times(1)).sendMailFailed(); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleBpmnError(messageHeaderArgumentCaptor.capture(), any(BpmnError.class)); @@ -98,8 +98,8 @@ void testEmailIntegrationHandlesBpmnError() { @Test void testEmailIntegrationHandlesIncidentError() { - Mockito.doThrow(new IncidentError("Error Message")).when(sendMailInPortMock).sendMailWithTemplate(any(), any(), any(), any()); - messageProcessor.sendMailWithLogoAndLink().accept(this.message); + Mockito.doThrow(new IncidentError("Error Message")).when(sendMailInPortMock).sendMailWithTemplate(any()); + streamingAdapter.sendMailWithLogoAndLink().accept(this.message); verify(monitoringServiceMock, times(1)).sendMailFailed(); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/SendMailWithTextMessageProcessorTest.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/SendMailWithTextStreamingAdapterTest.java similarity index 81% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/SendMailWithTextMessageProcessorTest.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/SendMailWithTextStreamingAdapterTest.java index edf2fd1cbc..148c19c465 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/SendMailWithTextMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/SendMailWithTextStreamingAdapterTest.java @@ -1,6 +1,6 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.in; +package de.muenchen.oss.digiwf.email.integration.adapter.in.streaming; -import de.muenchen.oss.digiwf.email.integration.model.TextMail; +import de.muenchen.oss.digiwf.email.integration.domain.model.TextMail; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import jakarta.validation.ValidationException; @@ -19,7 +19,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class SendMailWithTextMessageProcessorTest extends MessageProcessorTestBase { +class SendMailWithTextStreamingAdapterTest extends StreamingAdapterTestBase { private final TextMail mail = new TextMail( "mailReceiver1@muenchen.de,mailReceiver2@muenchen.de", "receiverCC@muenchen.de", @@ -50,15 +50,15 @@ public MessageHeaders getHeaders() { @Test void testEmailIntegrationSendsMailSuccessfully() { - messageProcessor.emailIntegration().accept(this.message); + streamingAdapter.emailIntegration().accept(this.message); verify(monitoringServiceMock, times(1)).sendMailSucceeded(); - verify(sendMailInPortMock, times(1)).sendMailWithText(processInstanceId, "emailType", "emailIntegration", mail); + verify(sendMailInPortMock, times(1)).sendMailWithText(mail); } @Test void testEmailIntegrationHandlesValidationException() { - Mockito.doThrow(new ValidationException("Test ValidationException")).when(sendMailInPortMock).sendMailWithText(any(), any(), any(), any()); - messageProcessor.emailIntegration().accept(this.message); + Mockito.doThrow(new ValidationException("Test ValidationException")).when(sendMailInPortMock).sendMailWithText(any()); + streamingAdapter.emailIntegration().accept(this.message); verify(monitoringServiceMock, times(1)).sendMailFailed(); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleBpmnError(messageHeaderArgumentCaptor.capture(), any(BpmnError.class)); @@ -70,8 +70,8 @@ void testEmailIntegrationHandlesValidationException() { @Test void testEmailIntegrationHandlesBpmnError() { - Mockito.doThrow(new BpmnError("errorCode", "errorMessage")).when(sendMailInPortMock).sendMailWithText(any(), any(), any(), any()); - messageProcessor.emailIntegration().accept(this.message); + Mockito.doThrow(new BpmnError("errorCode", "errorMessage")).when(sendMailInPortMock).sendMailWithText(any()); + streamingAdapter.emailIntegration().accept(this.message); verify(monitoringServiceMock, times(1)).sendMailFailed(); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleBpmnError(messageHeaderArgumentCaptor.capture(), any(BpmnError.class)); @@ -83,8 +83,8 @@ void testEmailIntegrationHandlesBpmnError() { @Test void testEmailIntegrationHandlesIncidentError() { - Mockito.doThrow(new IncidentError("Error Message")).when(sendMailInPortMock).sendMailWithText(any(), any(), any(), any()); - messageProcessor.emailIntegration().accept(this.message); + Mockito.doThrow(new IncidentError("Error Message")).when(sendMailInPortMock).sendMailWithText(any()); + streamingAdapter.emailIntegration().accept(this.message); verify(monitoringServiceMock, times(1)).sendMailFailed(); final ArgumentCaptor messageHeaderArgumentCaptor = ArgumentCaptor.forClass(Map.class); verify(errorApiMock, times(1)).handleIncident(messageHeaderArgumentCaptor.capture(), any(IncidentError.class)); diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/MessageProcessorTestBase.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/StreamingAdapterTestBase.java similarity index 74% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/MessageProcessorTestBase.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/StreamingAdapterTestBase.java index ea12e380da..7f70bd47ce 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/MessageProcessorTestBase.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/in/streaming/StreamingAdapterTestBase.java @@ -1,8 +1,9 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.in; +package de.muenchen.oss.digiwf.email.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.email.integration.application.port.in.SendMailInPort; import de.muenchen.oss.digiwf.email.integration.infrastructure.MonitoringService; import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import org.mockito.Mockito; import org.springframework.messaging.MessageHeaders; @@ -10,8 +11,9 @@ import static de.muenchen.oss.digiwf.message.common.MessageConstants.*; -public class MessageProcessorTestBase { +public class StreamingAdapterTestBase { + protected final ProcessApi processApi = Mockito.mock(ProcessApi.class); protected final ErrorApi errorApiMock = Mockito.mock(ErrorApi.class); protected final SendMailInPort sendMailInPortMock = Mockito.mock(SendMailInPort.class); protected final MonitoringService monitoringServiceMock = Mockito.mock(MonitoringService.class); @@ -20,10 +22,11 @@ public class MessageProcessorTestBase { protected final String processInstanceId = "exampleProcessInstanceId"; protected final MessageHeaders messageHeaders = new MessageHeaders(Map.of(DIGIWF_PROCESS_INSTANCE_ID, this.processInstanceId, DIGIWF_INTEGRATION_NAME, "emailIntegration", TYPE, "emailType")); - protected MessageProcessor messageProcessor; + protected StreamingAdapter streamingAdapter; protected void setupBase() { - this.messageProcessor = new MessageProcessor( + this.streamingAdapter = new StreamingAdapter( + processApi, errorApiMock, sendMailInPortMock, monitoringServiceMock); diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/ProcessAdapterTest.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/ProcessAdapterTest.java deleted file mode 100644 index d6b9813fd5..0000000000 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/ProcessAdapterTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.out; - -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - -import java.util.HashMap; -import java.util.Map; - -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -class ProcessAdapterTest { - - @Test - public void testCorrelateMessage() { - final ProcessApi processApiMock = Mockito.mock(ProcessApi.class); - - final ProcessAdapter processAdapter = new ProcessAdapter(processApiMock); - - final String processInstanceId = "exampleProcessInstanceId"; - final String integrationName = "emailIntegration"; - final String type = "emailType"; - final Map message = new HashMap<>(); - - processAdapter.correlateMessage(processInstanceId, type, integrationName, message); - - verify(processApiMock, times(1)).correlateMessage(processInstanceId, type, integrationName, message); - } -} diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/MailAdapterTest.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/mail/MailAdapterTest.java similarity index 95% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/MailAdapterTest.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/mail/MailAdapterTest.java index 7605a69773..72ebbd2636 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/MailAdapterTest.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/mail/MailAdapterTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.out; +package de.muenchen.oss.digiwf.email.integration.adapter.out.mail; import de.muenchen.oss.digiwf.email.api.DigiwfEmailApi; import de.muenchen.oss.digiwf.email.model.Mail; diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/S3AdapterTest.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/s3/S3AdapterTest.java similarity index 90% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/S3AdapterTest.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/s3/S3AdapterTest.java index 92cac9fa19..c661cb7395 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/S3AdapterTest.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/adapter/out/s3/S3AdapterTest.java @@ -1,6 +1,6 @@ -package de.muenchen.oss.digiwf.email.integration.adapter.out; +package de.muenchen.oss.digiwf.email.integration.adapter.out.s3; -import de.muenchen.oss.digiwf.email.integration.model.PresignedUrl; +import de.muenchen.oss.digiwf.email.integration.domain.model.PresignedUrl; import de.muenchen.oss.digiwf.email.model.FileAttachment; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.s3.integration.client.exception.DocumentStorageClientErrorException; @@ -49,9 +49,9 @@ void testLoadAttachment_DocumentStorageException() throws DocumentStorageExcepti @Test void testLoadAttachment_Success() throws DocumentStorageException, DocumentStorageClientErrorException, DocumentStorageServerErrorException { final Map files = Map.of( - "digiwf_logo.png", "image/png", - "test-pdf.pdf", "application/pdf", - "test-word.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + "digiwf_logo.png", "image/png", + "test-pdf.pdf", "application/pdf", + "test-word.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ); for (final Map.Entry file : files.entrySet()) { diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/application/usecase/SendMailUseCaseTest.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/application/usecase/SendMailUseCaseTest.java index 7a5437eb3f..c120d5dde9 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/application/usecase/SendMailUseCaseTest.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/test/java/de/muenchen/oss/digiwf/email/integration/application/usecase/SendMailUseCaseTest.java @@ -1,13 +1,12 @@ package de.muenchen.oss.digiwf.email.integration.application.usecase; -import de.muenchen.oss.digiwf.email.integration.adapter.in.MailWithLogoAndLinkDto; +import de.muenchen.oss.digiwf.email.integration.adapter.in.streaming.MailWithLogoAndLinkDto; import de.muenchen.oss.digiwf.email.integration.application.port.in.SendMailInPort; -import de.muenchen.oss.digiwf.email.integration.application.port.out.CorrelateMessageOutPort; import de.muenchen.oss.digiwf.email.integration.application.port.out.LoadMailAttachmentOutPort; import de.muenchen.oss.digiwf.email.integration.application.port.out.MailOutPort; -import de.muenchen.oss.digiwf.email.integration.model.TextMail; -import de.muenchen.oss.digiwf.email.integration.model.TemplateMail; -import de.muenchen.oss.digiwf.email.integration.model.PresignedUrl; +import de.muenchen.oss.digiwf.email.integration.domain.model.PresignedUrl; +import de.muenchen.oss.digiwf.email.integration.domain.model.TemplateMail; +import de.muenchen.oss.digiwf.email.integration.domain.model.TextMail; import de.muenchen.oss.digiwf.email.model.FileAttachment; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import freemarker.template.TemplateException; @@ -21,17 +20,12 @@ import java.util.Map; import static org.assertj.core.api.Assertions.*; -import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.*; class SendMailUseCaseTest { private final LoadMailAttachmentOutPort loadMailAttachmentOutPort = mock(LoadMailAttachmentOutPort.class); - private final CorrelateMessageOutPort correlateMessageOutPort = mock(CorrelateMessageOutPort.class); private final MailOutPort mailOutPort = mock(MailOutPort.class); - - private SendMailInPort sendMailInPort; - private final TextMail mail = new TextMail( "mailReceiver1@muenchen.de,mailReceiver2@muenchen.de", "receiverCC@muenchen.de", @@ -41,7 +35,6 @@ class SendMailUseCaseTest { "digiwf@muenchen.de", null ); - private final MailWithLogoAndLinkDto mailWithLogoAndLinkDto = new MailWithLogoAndLinkDto( "mailReceiver1@muenchen.de,mailReceiver2@muenchen.de", "receiverCC@muenchen.de", @@ -55,7 +48,6 @@ class SendMailUseCaseTest { "buttonText", "buttonLink" ); - private final TemplateMail templateMail = new TemplateMail( "mailReceiver1@muenchen.de,mailReceiver2@muenchen.de", "receiverCC@muenchen.de", @@ -66,19 +58,19 @@ class SendMailUseCaseTest { "template", Map.of("mail", mailWithLogoAndLinkDto) ); - private final String processInstanceId = "processInstanceId"; private final String integrationName = "emailIntegration"; private final String type = "type"; + private SendMailInPort sendMailInPort; @BeforeEach void setUp() { - this.sendMailInPort = new SendMailUseCase(loadMailAttachmentOutPort, correlateMessageOutPort, mailOutPort); + this.sendMailInPort = new SendMailUseCase(loadMailAttachmentOutPort, mailOutPort); } @Test void sendMail() throws MessagingException { - sendMailInPort.sendMailWithText(processInstanceId, type, integrationName, mail); + sendMailInPort.sendMailWithText(mail); final de.muenchen.oss.digiwf.email.model.Mail mailOutModel = de.muenchen.oss.digiwf.email.model.Mail.builder() .receivers(mail.getReceivers()) .subject(mail.getSubject()) @@ -89,7 +81,6 @@ void sendMail() throws MessagingException { .attachments(List.of()) .build(); verify(mailOutPort).sendMail(mailOutModel, null); - verify(correlateMessageOutPort).correlateMessage(processInstanceId, type, integrationName, Map.of("mailSentStatus", true)); } @Test @@ -100,7 +91,7 @@ void sendMailWithAttachments() throws MessagingException { final FileAttachment fileAttachment = new FileAttachment("test.txt", new ByteArrayDataSource("Anhang Inhalt".getBytes(), "text/plain")); when(loadMailAttachmentOutPort.loadAttachment(presignedUrl)).thenReturn(fileAttachment); - sendMailInPort.sendMailWithText(processInstanceId, type, integrationName, mail); + sendMailInPort.sendMailWithText(mail); final de.muenchen.oss.digiwf.email.model.Mail mailOutModel = de.muenchen.oss.digiwf.email.model.Mail.builder() .receivers(mail.getReceivers()) .subject(mail.getSubject()) @@ -111,19 +102,18 @@ void sendMailWithAttachments() throws MessagingException { .attachments(List.of(fileAttachment)) .build(); verify(mailOutPort).sendMail(mailOutModel, null); - verify(correlateMessageOutPort).correlateMessage(processInstanceId, type, integrationName, Map.of("mailSentStatus", true)); } @Test void sendMailThrowsBpmnError() throws MessagingException { doThrow(new MessagingException("Test Exception")).when(mailOutPort).sendMail(any(), any()); - assertThatThrownBy(() -> sendMailInPort.sendMailWithText(processInstanceId, type, integrationName, mail)).isInstanceOf(BpmnError.class); + assertThatThrownBy(() -> sendMailInPort.sendMailWithText(mail)).isInstanceOf(BpmnError.class); } @Test void sendMailWithTemplate() throws MessagingException, TemplateException, IOException { when(mailOutPort.getBodyFromTemplate(anyString(), anyMap())).thenReturn("generated body"); - sendMailInPort.sendMailWithTemplate(processInstanceId, type, integrationName, templateMail); + sendMailInPort.sendMailWithTemplate(templateMail); final de.muenchen.oss.digiwf.email.model.Mail mailOutModel = de.muenchen.oss.digiwf.email.model.Mail.builder() .receivers(mail.getReceivers()) .subject(mail.getSubject()) @@ -135,13 +125,12 @@ void sendMailWithTemplate() throws MessagingException, TemplateException, IOExce .attachments(List.of()) .build(); verify(mailOutPort).sendMail(mailOutModel, "templates/email-logo.png"); - verify(correlateMessageOutPort).correlateMessage(processInstanceId, type, integrationName, Map.of("mailSentStatus", true)); } @Test void sendMailWithTemplateThrowsIOException() throws TemplateException, IOException { doThrow(new IOException("IO Exception")).when(mailOutPort).getBodyFromTemplate(anyString(), anyMap()); - BpmnError bpmnError = catchThrowableOfType(() -> sendMailInPort.sendMailWithTemplate(processInstanceId, type, integrationName, templateMail), BpmnError.class); + BpmnError bpmnError = catchThrowableOfType(() -> sendMailInPort.sendMailWithTemplate(templateMail), BpmnError.class); String expectedMessage = "The template " + templateMail.getTemplate() + " could not be loaded"; String actualMessage = bpmnError.getErrorMessage(); @@ -156,7 +145,7 @@ void sendMailWithTemplateThrowsTemplateException() throws TemplateException, IOE TemplateException templateException = mock(TemplateException.class); when(templateException.getMessage()).thenReturn("Template Exception Message"); doThrow(templateException).when(mailOutPort).getBodyFromTemplate(anyString(), anyMap()); - BpmnError bpmnError = catchThrowableOfType(() -> sendMailInPort.sendMailWithTemplate(processInstanceId, type, integrationName, templateMail), BpmnError.class); + BpmnError bpmnError = catchThrowableOfType(() -> sendMailInPort.sendMailWithTemplate(templateMail), BpmnError.class); String expectedMessage = "Template Exception Message"; String actualMessage = bpmnError.getErrorMessage(); diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/api/controller/ExampleController.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/api/controller/ExampleController.java index 9180ec01e5..b53514d021 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/api/controller/ExampleController.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/api/controller/ExampleController.java @@ -1,6 +1,6 @@ package de.muenchen.oss.digiwf.email.integration.api.controller; -import de.muenchen.oss.digiwf.email.integration.model.Mail; +import de.muenchen.oss.digiwf.email.integration.domain.model.Mail; import de.muenchen.oss.digiwf.message.common.MessageConstants; import de.muenchen.oss.digiwf.message.core.api.MessageApi; import lombok.RequiredArgsConstructor; diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/model/Mail.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/Mail.java similarity index 94% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/model/Mail.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/Mail.java index c5bf6bb9ed..acee95e5fa 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/model/Mail.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/Mail.java @@ -1,11 +1,11 @@ -package de.muenchen.oss.digiwf.email.integration.model; +package de.muenchen.oss.digiwf.email.integration.domain.model; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Data; import lombok.RequiredArgsConstructor; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotBlank; import java.util.List; /** diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/PresignedUrl.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/PresignedUrl.java similarity index 93% rename from digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/PresignedUrl.java rename to digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/PresignedUrl.java index d775d6d478..a2613d7d22 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-core/src/main/java/de/muenchen/oss/digiwf/email/integration/model/PresignedUrl.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-example/src/main/java/de/muenchen/oss/digiwf/email/integration/domain/model/PresignedUrl.java @@ -1,12 +1,11 @@ -package de.muenchen.oss.digiwf.email.integration.model; +package de.muenchen.oss.digiwf.email.integration.domain.model; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; import lombok.Data; import lombok.RequiredArgsConstructor; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Pattern; - /** * Attachment File you want to get from the S3 storage. */ diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-starter/src/main/java/de/muenchen/oss/digiwf/email/integration/configuration/MailAutoConfiguration.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-starter/src/main/java/de/muenchen/oss/digiwf/email/integration/configuration/MailAutoConfiguration.java index 3168a88036..7f1d920d6b 100644 --- a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-starter/src/main/java/de/muenchen/oss/digiwf/email/integration/configuration/MailAutoConfiguration.java +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-starter/src/main/java/de/muenchen/oss/digiwf/email/integration/configuration/MailAutoConfiguration.java @@ -1,18 +1,16 @@ package de.muenchen.oss.digiwf.email.integration.configuration; import de.muenchen.oss.digiwf.email.api.DigiwfEmailApi; -import de.muenchen.oss.digiwf.email.integration.adapter.in.MailWithLogoAndLinkDto; -import de.muenchen.oss.digiwf.email.integration.adapter.in.MessageProcessor; -import de.muenchen.oss.digiwf.email.integration.adapter.out.MailAdapter; -import de.muenchen.oss.digiwf.email.integration.adapter.out.ProcessAdapter; -import de.muenchen.oss.digiwf.email.integration.adapter.out.S3Adapter; +import de.muenchen.oss.digiwf.email.integration.adapter.in.streaming.MailWithLogoAndLinkDto; +import de.muenchen.oss.digiwf.email.integration.adapter.in.streaming.StreamingAdapter; +import de.muenchen.oss.digiwf.email.integration.adapter.out.mail.MailAdapter; +import de.muenchen.oss.digiwf.email.integration.adapter.out.s3.S3Adapter; import de.muenchen.oss.digiwf.email.integration.application.port.in.SendMailInPort; -import de.muenchen.oss.digiwf.email.integration.application.port.out.CorrelateMessageOutPort; import de.muenchen.oss.digiwf.email.integration.application.port.out.LoadMailAttachmentOutPort; import de.muenchen.oss.digiwf.email.integration.application.port.out.MailOutPort; import de.muenchen.oss.digiwf.email.integration.application.usecase.SendMailUseCase; +import de.muenchen.oss.digiwf.email.integration.domain.model.TextMail; import de.muenchen.oss.digiwf.email.integration.infrastructure.MonitoringService; -import de.muenchen.oss.digiwf.email.integration.model.TextMail; import de.muenchen.oss.digiwf.message.process.api.ErrorApi; import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.s3.integration.client.repository.transfer.S3FileTransferRepository; @@ -38,15 +36,14 @@ public class MailAutoConfiguration { /** * Configures the {@link SendMailInPort} use case. * - * @param loadAttachmentPort LoadMailAttachmentPort - * @param correlateMessageOutPort CorrelateMessagePort - * @param mailOutPort MailPort + * @param loadAttachmentPort LoadMailAttachmentPort + * @param mailOutPort MailPort * @return configured SendMail use case */ @Bean @ConditionalOnMissingBean - public SendMailInPort getSendMailUseCase(final LoadMailAttachmentOutPort loadAttachmentPort, final CorrelateMessageOutPort correlateMessageOutPort, final MailOutPort mailOutPort) { - return new SendMailUseCase(loadAttachmentPort, correlateMessageOutPort, mailOutPort); + public SendMailInPort getSendMailUseCase(final LoadMailAttachmentOutPort loadAttachmentPort, final MailOutPort mailOutPort) { + return new SendMailUseCase(loadAttachmentPort, mailOutPort); } @Bean @@ -55,12 +52,6 @@ public MonitoringService getMonitoringService(final MeterRegistry meterRegistry) return new MonitoringService(meterRegistry, this.metricsProperties.getTotalMailCounterName(), this.metricsProperties.getFailureCounterName()); } - @Bean - @ConditionalOnMissingBean - public CorrelateMessageOutPort getCorrelateMessagePort(final ProcessApi processApi) { - return new ProcessAdapter(processApi); - } - @Bean @ConditionalOnMissingBean public LoadMailAttachmentOutPort getLoadMailAttachmentPort(final S3FileTransferRepository s3FileTransferRepository, final FileExtensionService fileExtensionService) { @@ -74,23 +65,25 @@ public MailOutPort getMailPort(final DigiwfEmailApi digiwfEmailApi) { } @Bean - public Consumer> sendMailFromEventBus(final MessageProcessor messageProcessor) { - return messageProcessor.emailIntegration(); + public Consumer> sendMailFromEventBus(final StreamingAdapter streamingAdapter) { + return streamingAdapter.emailIntegration(); } @Bean - public Consumer> sendMailWithLogoAndLink(final MessageProcessor messageProcessor) { - return messageProcessor.sendMailWithLogoAndLink(); + public Consumer> sendMailWithLogoAndLink(final StreamingAdapter streamingAdapter) { + return streamingAdapter.sendMailWithLogoAndLink(); } @ConditionalOnMissingBean @Bean - public MessageProcessor createMessageProcessor( + public StreamingAdapter streamingAdapter( + final ProcessApi processApi, final ErrorApi errorApi, final MonitoringService monitoringService, final SendMailInPort mailUseCase ) { - return new MessageProcessor( + return new StreamingAdapter( + processApi, errorApi, mailUseCase, monitoringService); diff --git a/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-starter/src/test/java/de/muenchen/oss/digiwf/email/integration/ArchitectureTest.java b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-starter/src/test/java/de/muenchen/oss/digiwf/email/integration/ArchitectureTest.java new file mode 100644 index 0000000000..62d2fd4006 --- /dev/null +++ b/digiwf-integrations/digiwf-email-integration/digiwf-email-integration-starter/src/test/java/de/muenchen/oss/digiwf/email/integration/ArchitectureTest.java @@ -0,0 +1,12 @@ +package de.muenchen.oss.digiwf.email.integration; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchTests; +import de.muenchen.oss.digiwf.archunit.HexagonalArchitectureTest; + +@AnalyzeClasses +public class ArchitectureTest { + @ArchTest + static final ArchTests hexagonalArchitecture = ArchTests.in(HexagonalArchitectureTest.class); +} diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/in/streaming/MessageProcessor.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/in/streaming/StreamingAdapter.java similarity index 50% rename from digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/in/streaming/MessageProcessor.java rename to digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/in/streaming/StreamingAdapter.java index 50b4d6d414..64ddfc1449 100644 --- a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/in/streaming/MessageProcessor.java +++ b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/in/streaming/StreamingAdapter.java @@ -1,20 +1,27 @@ package de.muenchen.oss.digiwf.example.integration.core.adapter.in.streaming; import de.muenchen.oss.digiwf.example.integration.core.application.port.in.ExampleInPort; -import de.muenchen.oss.digiwf.example.integration.core.application.port.in.ProcessResponseInPort; +import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; import jakarta.validation.ValidationException; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.messaging.Message; import java.util.Map; +import java.util.Objects; import java.util.function.Consumer; +import static de.muenchen.oss.digiwf.message.common.MessageConstants.*; + @RequiredArgsConstructor -public class MessageProcessor { +@Slf4j +public class StreamingAdapter { - private final ProcessResponseInPort processResponseInPort; + private final ErrorApi errorApi; + private final ProcessApi processApi; private final ExampleInPort exampleInPort; private final ExampleMapper exampleMapper; @@ -23,7 +30,7 @@ public Consumer> exampleIntegration() { final ExampleDto exampleDto = message.getPayload(); this.exampleInPort.processExampleData(this.exampleMapper.toModel(exampleDto)); - this.processResponseInPort.correlateMessage( + this.correlateMessage( message.getHeaders(), Map.of("someData", exampleDto.getSomeData()) ); @@ -34,11 +41,19 @@ private void withErrorHandling(final Message message, final Runnable runnable try { runnable.run(); } catch (final BpmnError bpmnError) { - processResponseInPort.handleBpmnError(message.getHeaders(), bpmnError); + errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final IncidentError incidentError) { - processResponseInPort.handleIncident(message.getHeaders(), incidentError); + errorApi.handleIncident(message.getHeaders(), incidentError); } catch (final ValidationException validationException) { - processResponseInPort.handleIncident(message.getHeaders(), new IncidentError(validationException.getMessage())); + errorApi.handleIncident(message.getHeaders(), new IncidentError(validationException.getMessage())); } } + + private void correlateMessage(final Map originMessageHeaders, final Map message) { + String processInstanceId = Objects.requireNonNull(originMessageHeaders.get(DIGIWF_PROCESS_INSTANCE_ID).toString()); + String type = Objects.requireNonNull(originMessageHeaders.get(TYPE).toString()); + String integrationName = Objects.requireNonNull(originMessageHeaders.get(DIGIWF_INTEGRATION_NAME).toString()); + log.info("sending response message for process {}: {}", processInstanceId, message); + this.processApi.correlateMessage(processInstanceId, type, integrationName, message); + } } diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/out/example/ExampleAdapter.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/out/example/ExampleAdapter.java new file mode 100644 index 0000000000..adc1f65c42 --- /dev/null +++ b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/out/example/ExampleAdapter.java @@ -0,0 +1,17 @@ +package de.muenchen.oss.digiwf.example.integration.core.adapter.out.example; + +import de.muenchen.oss.digiwf.example.integration.core.application.port.out.ExampleOutPort; +import de.muenchen.oss.digiwf.example.integration.core.domain.ExampleModel; +import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class ExampleAdapter implements ExampleOutPort { + @Override + public void processExampleData(ExampleModel exampleModel) { + if (exampleModel.getSomeData() == null || exampleModel.getSomeData().isBlank()) { + throw new BpmnError("someDataMissing", "Some data is missing"); + } + log.info("Processing example data: {}", exampleModel); + } +} diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/out/streaming/ProcessAdapter.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/out/streaming/ProcessAdapter.java deleted file mode 100644 index ce7ace4b15..0000000000 --- a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/adapter/out/streaming/ProcessAdapter.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.muenchen.oss.digiwf.example.integration.core.adapter.out.streaming; - -import de.muenchen.oss.digiwf.example.integration.core.application.port.out.ProcessResponseOutPort; -import de.muenchen.oss.digiwf.message.process.api.ErrorApi; -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import java.util.Map; -import java.util.Objects; - -import static de.muenchen.oss.digiwf.message.common.MessageConstants.*; - -@Slf4j -@RequiredArgsConstructor -public class ProcessAdapter implements ProcessResponseOutPort { - private final ProcessApi processApi; - private final ErrorApi errorApi; - - @Override - public void correlateMessage(final Map originMessageHeaders, final Map message) { - String processInstanceId = Objects.requireNonNull(originMessageHeaders.get(DIGIWF_PROCESS_INSTANCE_ID).toString()); - String type = Objects.requireNonNull(originMessageHeaders.get(TYPE).toString()); - String integrationName = Objects.requireNonNull(originMessageHeaders.get(DIGIWF_INTEGRATION_NAME).toString()); - log.info("sending response message for process {}: {}", processInstanceId, message); - this.processApi.correlateMessage(processInstanceId, type, integrationName, message); - } - - @Override - public boolean handleBpmnError(final Map originMessageHeaders, final BpmnError bpmnError) { - return errorApi.handleBpmnError(originMessageHeaders, bpmnError); - } - - @Override - public boolean handleIncident(final Map originMessageHeaders, final IncidentError incidentError) { - return errorApi.handleIncident(originMessageHeaders, incidentError); - } -} diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/in/ProcessResponseInPort.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/in/ProcessResponseInPort.java deleted file mode 100644 index 4b9f6bd67a..0000000000 --- a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/in/ProcessResponseInPort.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.muenchen.oss.digiwf.example.integration.core.application.port.in; - -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; - -import java.util.Map; - -public interface ProcessResponseInPort { - void correlateMessage(final Map originMessageHeaders, final Map message); - - boolean handleBpmnError(final Map originMessageHeaders, final BpmnError bpmnError); - - boolean handleIncident(final Map originMessageHeaders, final IncidentError incidentError); -} diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/out/ExampleOutPort.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/out/ExampleOutPort.java new file mode 100644 index 0000000000..76a14cc699 --- /dev/null +++ b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/out/ExampleOutPort.java @@ -0,0 +1,8 @@ +package de.muenchen.oss.digiwf.example.integration.core.application.port.out; + +import de.muenchen.oss.digiwf.example.integration.core.domain.ExampleModel; + +public interface ExampleOutPort { + + void processExampleData(final ExampleModel exampleModel); +} diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/out/ProcessResponseOutPort.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/out/ProcessResponseOutPort.java deleted file mode 100644 index ca34f5a0e5..0000000000 --- a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/port/out/ProcessResponseOutPort.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.muenchen.oss.digiwf.example.integration.core.application.port.out; - -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; - -import java.util.Map; - -public interface ProcessResponseOutPort { - void correlateMessage(final Map originMessageHeaders, final Map message); - - boolean handleBpmnError(final Map originMessageHeaders, final BpmnError bpmnError); - - boolean handleIncident(final Map originMessageHeaders, final IncidentError incidentError); -} diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/usecase/ExampleUseCase.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/usecase/ExampleUseCase.java index 2dae53654e..eae9266a41 100644 --- a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/usecase/ExampleUseCase.java +++ b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/usecase/ExampleUseCase.java @@ -1,18 +1,16 @@ package de.muenchen.oss.digiwf.example.integration.core.application.usecase; import de.muenchen.oss.digiwf.example.integration.core.application.port.in.ExampleInPort; +import de.muenchen.oss.digiwf.example.integration.core.application.port.out.ExampleOutPort; import de.muenchen.oss.digiwf.example.integration.core.domain.ExampleModel; -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import lombok.extern.slf4j.Slf4j; +import lombok.RequiredArgsConstructor; -@Slf4j +@RequiredArgsConstructor public class ExampleUseCase implements ExampleInPort { + private final ExampleOutPort exampleOutPort; @Override public void processExampleData(final ExampleModel exampleModel) { - if (exampleModel.getSomeData() == null || exampleModel.getSomeData().isBlank()) { - throw new BpmnError("someDataMissing", "Some data is missing"); - } - log.info("Processing example data: {}", exampleModel); + exampleOutPort.processExampleData(exampleModel); } } diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/usecase/ProcessResponseUseCase.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/usecase/ProcessResponseUseCase.java deleted file mode 100644 index ed296ce73a..0000000000 --- a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-core/src/main/java/de/muenchen/oss/digiwf/example/integration/core/application/usecase/ProcessResponseUseCase.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.muenchen.oss.digiwf.example.integration.core.application.usecase; - -import de.muenchen.oss.digiwf.example.integration.core.application.port.in.ProcessResponseInPort; -import de.muenchen.oss.digiwf.example.integration.core.application.port.out.ProcessResponseOutPort; -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import lombok.RequiredArgsConstructor; - -import java.util.Map; - -@RequiredArgsConstructor -public class ProcessResponseUseCase implements ProcessResponseInPort { - private final ProcessResponseOutPort processResponseOutPort; - - - @Override - public void correlateMessage(final Map originMessageHeaders, final Map message) { - processResponseOutPort.correlateMessage(originMessageHeaders, message); - } - - @Override - public boolean handleBpmnError(final Map originMessageHeaders, final BpmnError bpmnError) { - return processResponseOutPort.handleBpmnError(originMessageHeaders, bpmnError); - } - - @Override - public boolean handleIncident(final Map originMessageHeaders, final IncidentError incidentError) { - return processResponseOutPort.handleIncident(originMessageHeaders, incidentError); - } -} diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAdapterInAutoconfiguration.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAdapterInAutoconfiguration.java index b332f4eb5b..a708442679 100644 --- a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAdapterInAutoconfiguration.java +++ b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAdapterInAutoconfiguration.java @@ -2,9 +2,10 @@ import de.muenchen.oss.digiwf.example.integration.core.adapter.in.streaming.ExampleDto; import de.muenchen.oss.digiwf.example.integration.core.adapter.in.streaming.ExampleMapper; -import de.muenchen.oss.digiwf.example.integration.core.adapter.in.streaming.MessageProcessor; +import de.muenchen.oss.digiwf.example.integration.core.adapter.in.streaming.StreamingAdapter; import de.muenchen.oss.digiwf.example.integration.core.application.port.in.ExampleInPort; -import de.muenchen.oss.digiwf.example.integration.core.application.port.in.ProcessResponseInPort; +import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -17,16 +18,17 @@ public class ExampleIntegrationAdapterInAutoconfiguration { @ConditionalOnMissingBean @Bean - public MessageProcessor messageProcessor( - final ProcessResponseInPort processResponseInPort, + public StreamingAdapter streamingAdapter( + final ErrorApi errorApi, + final ProcessApi processApi, final ExampleInPort exampleInPort, final ExampleMapper exampleMapper ) { - return new MessageProcessor(processResponseInPort, exampleInPort, exampleMapper); + return new StreamingAdapter(errorApi, processApi, exampleInPort, exampleMapper); } @Bean - public Consumer> exampleIntegration(final MessageProcessor messageProcessor) { - return messageProcessor.exampleIntegration(); + public Consumer> exampleIntegration(final StreamingAdapter streamingAdapter) { + return streamingAdapter.exampleIntegration(); } } diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAdapterOutAutoconfiguration.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAdapterOutAutoconfiguration.java index c73b71647a..621558a02d 100644 --- a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAdapterOutAutoconfiguration.java +++ b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAdapterOutAutoconfiguration.java @@ -1,18 +1,17 @@ package de.muenchen.oss.digiwf.example.integration; -import de.muenchen.oss.digiwf.example.integration.core.adapter.out.streaming.ProcessAdapter; -import de.muenchen.oss.digiwf.example.integration.core.application.port.out.ProcessResponseOutPort; -import de.muenchen.oss.digiwf.message.process.api.ErrorApi; -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; +import de.muenchen.oss.digiwf.example.integration.core.adapter.out.example.ExampleAdapter; +import de.muenchen.oss.digiwf.example.integration.core.application.port.out.ExampleOutPort; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ExampleIntegrationAdapterOutAutoconfiguration { + @ConditionalOnMissingBean @Bean - public ProcessResponseOutPort processAdapter(final ProcessApi processApi, final ErrorApi errorApi) { - return new ProcessAdapter(processApi, errorApi); + public ExampleOutPort exampleOutPort() { + return new ExampleAdapter(); } } diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAutoconfiguration.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAutoconfiguration.java index e1f5289729..5677aebfd3 100644 --- a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAutoconfiguration.java +++ b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/main/java/de/muenchen/oss/digiwf/example/integration/ExampleIntegrationAutoconfiguration.java @@ -1,10 +1,8 @@ package de.muenchen.oss.digiwf.example.integration; import de.muenchen.oss.digiwf.example.integration.core.application.port.in.ExampleInPort; -import de.muenchen.oss.digiwf.example.integration.core.application.port.in.ProcessResponseInPort; -import de.muenchen.oss.digiwf.example.integration.core.application.port.out.ProcessResponseOutPort; +import de.muenchen.oss.digiwf.example.integration.core.application.port.out.ExampleOutPort; import de.muenchen.oss.digiwf.example.integration.core.application.usecase.ExampleUseCase; -import de.muenchen.oss.digiwf.example.integration.core.application.usecase.ProcessResponseUseCase; import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; @@ -15,15 +13,10 @@ @RequiredArgsConstructor @ComponentScan(basePackages = {"de.muenchen.oss.digiwf.example.integration.core"}) public class ExampleIntegrationAutoconfiguration { - @ConditionalOnMissingBean - @Bean - public ProcessResponseInPort processResponseInPort(final ProcessResponseOutPort processResponseOutPort) { - return new ProcessResponseUseCase(processResponseOutPort); - } @ConditionalOnMissingBean @Bean - public ExampleInPort exampleInPort() { - return new ExampleUseCase(); + public ExampleInPort exampleInPort(final ExampleOutPort exampleOutPort) { + return new ExampleUseCase(exampleOutPort); } } diff --git a/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/test/java/de/muenchen/oss/digiwf/example/integration/ArchitectureTest.java b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/test/java/de/muenchen/oss/digiwf/example/integration/ArchitectureTest.java new file mode 100644 index 0000000000..8faad11d35 --- /dev/null +++ b/digiwf-integrations/digiwf-example-integration/digiwf-example-integration-starter/src/test/java/de/muenchen/oss/digiwf/example/integration/ArchitectureTest.java @@ -0,0 +1,12 @@ +package de.muenchen.oss.digiwf.example.integration; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchTests; +import de.muenchen.oss.digiwf.archunit.HexagonalArchitectureTest; + +@AnalyzeClasses +public class ArchitectureTest { + @ArchTest + static final ArchTests hexagonalArchitecture = ArchTests.in(HexagonalArchitectureTest.class); +} diff --git a/digiwf-integrations/digiwf-integration-parent/pom.xml b/digiwf-integrations/digiwf-integration-parent/pom.xml index 09dd15f418..3ded53de6e 100644 --- a/digiwf-integrations/digiwf-integration-parent/pom.xml +++ b/digiwf-integrations/digiwf-integration-parent/pom.xml @@ -102,6 +102,14 @@ ${lombok.version} provided + + + + de.muenchen.oss.digiwf + digiwf-unit-test + ${project.version} + test + diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/pom.xml b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/pom.xml index d8b99833c8..ca9045b024 100644 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/pom.xml +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/pom.xml @@ -1,5 +1,5 @@ - digiwf-okewo-integration-core @@ -51,13 +51,5 @@ org.springframework.boot spring-boot-starter-validation - - - - de.muenchen.oss.digiwf - digiwf-unit-test - ${project.version} - test - diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/in/streaming/MessageProcessor.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/in/streaming/StreamingAdapter.java similarity index 71% rename from digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/in/streaming/MessageProcessor.java rename to digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/in/streaming/StreamingAdapter.java index cf8a732cab..068baad3ae 100644 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/in/streaming/MessageProcessor.java +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/in/streaming/StreamingAdapter.java @@ -1,11 +1,13 @@ package de.muenchen.oss.digiwf.okewo.integration.adapter.in.streaming; +import de.muenchen.oss.digiwf.message.common.MessageConstants; +import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import de.muenchen.oss.digiwf.okewo.integration.application.in.GetPersonErweitertInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.in.GetPersonInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.in.SearchPersonErweitertInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.in.SearchPersonInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.out.IntegrationOutPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.GetPersonErweitertInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.GetPersonInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.SearchPersonErweitertInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.SearchPersonInPort; import de.muenchen.oss.digiwf.okewo.integration.client.model.*; import de.muenchen.oss.digiwf.okewo.integration.domain.model.request.OkEwoOmBasedRequest; import de.muenchen.oss.digiwf.okewo.integration.domain.model.request.OkEwoSearchPersonExtendedRequest; @@ -15,18 +17,23 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; +import org.springframework.lang.NonNull; import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; +import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.function.Consumer; @Slf4j @RequiredArgsConstructor -public class MessageProcessor { +public class StreamingAdapter { private static final String RESPONSE = "response"; - private final IntegrationOutPort integration; + private final ProcessApi processApi; + private final ErrorApi errorApi; private final GetPersonInPort getPersonInPort; private final GetPersonErweitertInPort getPersonErweitertInPort; @@ -49,9 +56,9 @@ public Consumer> getPerson() { try { val response = getPersonInPort.getPerson(request.getOrdnungsmerkmal()); Map result = Map.of(RESPONSE, response); - integration.correlateProcessMessage(headers, result); + this.correlateProcessMessage(headers, result); } catch (Exception e) { - integration.handleIncident(headers, new IncidentError(e.getMessage())); + errorApi.handleIncident(headers, new IncidentError(e.getMessage())); } }; @@ -73,9 +80,9 @@ public Consumer> searchPerson() { try { val response = searchPersonInPort.searchPerson(payload.getRequest()); Map result = Map.of(RESPONSE, response); - integration.correlateProcessMessage(headers, result); + this.correlateProcessMessage(headers, result); } catch (Exception e) { - integration.handleIncident(headers, new IncidentError(e.getMessage())); + errorApi.handleIncident(headers, new IncidentError(e.getMessage())); } }; } @@ -98,9 +105,9 @@ public Consumer> getPersonErweitert() { try { val response = getPersonErweitertInPort.getPerson(request.getOrdnungsmerkmal()); Map result = Map.of(RESPONSE, response); - integration.correlateProcessMessage(headers, result); + this.correlateProcessMessage(headers, result); } catch (Exception e) { - integration.handleIncident(headers, new IncidentError(e.getMessage())); + errorApi.handleIncident(headers, new IncidentError(e.getMessage())); } }; } @@ -121,10 +128,20 @@ public Consumer> searchPersonErweitert try { val response = searchPersonErweitertInPort.searchPerson(payload.getRequest()); Map result = Map.of(RESPONSE, response); - integration.correlateProcessMessage(headers, result); + this.correlateProcessMessage(headers, result); } catch (Exception e) { - integration.handleIncident(headers, new IncidentError(e.getMessage())); + errorApi.handleIncident(headers, new IncidentError(e.getMessage())); } }; } + + public void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload) { + final String processInstanceId = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_PROCESS_INSTANCE_ID)).toString(); + final String integrationName = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_INTEGRATION_NAME)).toString(); + final String type = Objects.requireNonNull(headers.get(MessageConstants.TYPE)).toString(); + if (payload == null) { + payload = new HashMap<>(); + } + this.processApi.correlateMessage(processInstanceId, type, integrationName, payload); + } } diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/IntegrationOutAdapter.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/IntegrationOutAdapter.java deleted file mode 100644 index 4787b91f92..0000000000 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/IntegrationOutAdapter.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.muenchen.oss.digiwf.okewo.integration.adapter.out; - -import de.muenchen.oss.digiwf.message.common.MessageConstants; -import de.muenchen.oss.digiwf.message.process.api.ErrorApi; -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import de.muenchen.oss.digiwf.okewo.integration.application.out.IntegrationOutPort; -import lombok.RequiredArgsConstructor; -import org.springframework.lang.NonNull; -import org.springframework.messaging.MessageHeaders; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -@RequiredArgsConstructor -public class IntegrationOutAdapter implements IntegrationOutPort { - private final ProcessApi processApi; - private final ErrorApi errorApi; - - @Override - public void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload) { - final String processInstanceId = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_PROCESS_INSTANCE_ID)).toString(); - final String integrationName = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_INTEGRATION_NAME)).toString(); - final String type = Objects.requireNonNull(headers.get(MessageConstants.TYPE)).toString(); - if (payload == null) { - payload = new HashMap<>(); - } - this.processApi.correlateMessage(processInstanceId, type, integrationName, payload); - } - - @Override - public void handleBpmnError(@NonNull MessageHeaders headers, @NonNull BpmnError bpmnError) { - this.errorApi.handleBpmnError(headers, bpmnError); - } - - @Override - public void handleIncident(@NonNull MessageHeaders headers, @NonNull IncidentError incidentError) { - this.errorApi.handleIncident(headers, incidentError); - } -} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/OkEwoAdapter.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/okewo/OkEwoAdapter.java similarity index 94% rename from digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/OkEwoAdapter.java rename to digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/okewo/OkEwoAdapter.java index c8dc3afc8a..dbff2c3425 100644 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/OkEwoAdapter.java +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/okewo/OkEwoAdapter.java @@ -1,6 +1,6 @@ -package de.muenchen.oss.digiwf.okewo.integration.adapter.out; +package de.muenchen.oss.digiwf.okewo.integration.adapter.out.okewo; -import de.muenchen.oss.digiwf.okewo.integration.application.out.OkEwoClientOutPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.out.OkEwoClientOutPort; import de.muenchen.oss.digiwf.okewo.integration.client.api.PersonApi; import de.muenchen.oss.digiwf.okewo.integration.client.api.PersonErweitertApi; import de.muenchen.oss.digiwf.okewo.integration.client.model.*; diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/GetPersonErweitertUseCase.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/GetPersonErweitertUseCase.java deleted file mode 100644 index 8172bb4449..0000000000 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/GetPersonErweitertUseCase.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.muenchen.oss.digiwf.okewo.integration.application; - -import de.muenchen.oss.digiwf.okewo.integration.application.in.GetPersonErweitertInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.out.OkEwoClientOutPort; -import de.muenchen.oss.digiwf.okewo.integration.client.model.PersonErweitert; -import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; -import de.muenchen.oss.digiwf.okewo.integration.properties.OkEwoIntegrationProperties; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class GetPersonErweitertUseCase implements GetPersonErweitertInPort { - private final OkEwoIntegrationProperties properties; - private final OkEwoClientOutPort client; - @Override - public PersonErweitert getPerson(String om) throws OkEwoIntegrationClientErrorException { - return client.getExtendedPerson(om, properties.getBenutzerId()); - } -} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/GetPersonUseCase.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/GetPersonUseCase.java deleted file mode 100644 index 3a6c63ecb7..0000000000 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/GetPersonUseCase.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.muenchen.oss.digiwf.okewo.integration.application; - -import de.muenchen.oss.digiwf.okewo.integration.application.in.GetPersonInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.out.OkEwoClientOutPort; -import de.muenchen.oss.digiwf.okewo.integration.client.model.Person; -import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; -import de.muenchen.oss.digiwf.okewo.integration.properties.OkEwoIntegrationProperties; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class GetPersonUseCase implements GetPersonInPort { - private final OkEwoIntegrationProperties properties; - private final OkEwoClientOutPort client; - @Override - public Person getPerson(String om) throws OkEwoIntegrationClientErrorException { - return client.getPerson(om, properties.getBenutzerId()); - } -} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/SearchPersonErweitertUseCase.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/SearchPersonErweitertUseCase.java deleted file mode 100644 index 83f98043c1..0000000000 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/SearchPersonErweitertUseCase.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.muenchen.oss.digiwf.okewo.integration.application; - -import de.muenchen.oss.digiwf.okewo.integration.application.in.SearchPersonErweitertInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.out.OkEwoClientOutPort; -import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonerweitertAnfrage; -import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonerweitertAntwort; -import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; -import de.muenchen.oss.digiwf.okewo.integration.properties.OkEwoIntegrationProperties; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class SearchPersonErweitertUseCase implements SearchPersonErweitertInPort { - private final OkEwoClientOutPort client; - @Override - public SuchePersonerweitertAntwort searchPerson(SuchePersonerweitertAnfrage request) throws OkEwoIntegrationClientErrorException { - return client.searchExtendedPerson(request); - } -} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/SearchPersonUseCase.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/SearchPersonUseCase.java deleted file mode 100644 index d06bb9fa46..0000000000 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/SearchPersonUseCase.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.muenchen.oss.digiwf.okewo.integration.application; - -import de.muenchen.oss.digiwf.okewo.integration.application.in.SearchPersonInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.out.OkEwoClientOutPort; -import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonAnfrage; -import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonAntwort; -import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class SearchPersonUseCase implements SearchPersonInPort { - private final OkEwoClientOutPort client; - @Override - public SuchePersonAntwort searchPerson(SuchePersonAnfrage request) throws OkEwoIntegrationClientErrorException { - return client.searchPerson(request); - } -} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/out/IntegrationOutPort.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/out/IntegrationOutPort.java deleted file mode 100644 index b653fd1893..0000000000 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/out/IntegrationOutPort.java +++ /dev/null @@ -1,38 +0,0 @@ -package de.muenchen.oss.digiwf.okewo.integration.application.out; - -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import org.springframework.lang.NonNull; -import org.springframework.messaging.MessageHeaders; - -import java.util.Map; - -/** - * Port to integration infrastructure. - */ -public interface IntegrationOutPort { - - /** - * Correlates message with a process. - * - * @param headers headers describing correlation properties. - * @param payload payload to pass during correlation. - */ - void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload); - - /** - * Handles BPMN error. - * - * @param headers headers for error details. - * @param bpmnError error to handle. - */ - void handleBpmnError(@NonNull MessageHeaders headers, @NonNull BpmnError bpmnError); - - /** - * Handles incident. - * - * @param headers headers for error details. - * @param incidentError incident to handle. - */ - void handleIncident(@NonNull MessageHeaders headers, @NonNull IncidentError incidentError); -} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/out/OkEwoClientOutPort.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/out/OkEwoClientOutPort.java deleted file mode 100644 index 207cc7be46..0000000000 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/out/OkEwoClientOutPort.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.muenchen.oss.digiwf.okewo.integration.application.out; - - -import de.muenchen.oss.digiwf.okewo.integration.client.model.*; -import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; - -/** - * Port to okEwo System - */ -public interface OkEwoClientOutPort { - - Person getPerson(final String om, final String userId) throws OkEwoIntegrationClientErrorException; - - PersonErweitert getExtendedPerson(final String om, final String userId) throws OkEwoIntegrationClientErrorException; - - SuchePersonAntwort searchPerson(final SuchePersonAnfrage request) throws OkEwoIntegrationClientErrorException; - - SuchePersonerweitertAntwort searchExtendedPerson(SuchePersonerweitertAnfrage request) throws OkEwoIntegrationClientErrorException; -} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/GetPersonErweitertInPort.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/GetPersonErweitertInPort.java similarity index 58% rename from digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/GetPersonErweitertInPort.java rename to digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/GetPersonErweitertInPort.java index 7f28e2c56c..a8384bf527 100644 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/GetPersonErweitertInPort.java +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/GetPersonErweitertInPort.java @@ -1,9 +1,9 @@ -package de.muenchen.oss.digiwf.okewo.integration.application.in; +package de.muenchen.oss.digiwf.okewo.integration.application.port.in; import de.muenchen.oss.digiwf.okewo.integration.client.model.PersonErweitert; import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; public interface GetPersonErweitertInPort { - PersonErweitert getPerson(final String om) throws OkEwoIntegrationClientErrorException; + PersonErweitert getPerson(final String om) throws OkEwoIntegrationClientErrorException; } diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/GetPersonInPort.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/GetPersonInPort.java similarity index 58% rename from digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/GetPersonInPort.java rename to digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/GetPersonInPort.java index 5725856a21..73f6363726 100644 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/GetPersonInPort.java +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/GetPersonInPort.java @@ -1,9 +1,9 @@ -package de.muenchen.oss.digiwf.okewo.integration.application.in; +package de.muenchen.oss.digiwf.okewo.integration.application.port.in; import de.muenchen.oss.digiwf.okewo.integration.client.model.Person; import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; public interface GetPersonInPort { - Person getPerson(final String om) throws OkEwoIntegrationClientErrorException; + Person getPerson(final String om) throws OkEwoIntegrationClientErrorException; } diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/SearchPersonErweitertInPort.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/SearchPersonErweitertInPort.java similarity index 62% rename from digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/SearchPersonErweitertInPort.java rename to digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/SearchPersonErweitertInPort.java index 0308e5ff8d..6ec78b9f98 100644 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/SearchPersonErweitertInPort.java +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/SearchPersonErweitertInPort.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.okewo.integration.application.in; +package de.muenchen.oss.digiwf.okewo.integration.application.port.in; import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonerweitertAnfrage; import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonerweitertAntwort; @@ -6,5 +6,5 @@ public interface SearchPersonErweitertInPort { - SuchePersonerweitertAntwort searchPerson(final SuchePersonerweitertAnfrage request) throws OkEwoIntegrationClientErrorException; + SuchePersonerweitertAntwort searchPerson(final SuchePersonerweitertAnfrage request) throws OkEwoIntegrationClientErrorException; } diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/SearchPersonInPort.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/SearchPersonInPort.java similarity index 62% rename from digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/SearchPersonInPort.java rename to digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/SearchPersonInPort.java index 6304d46e6f..d8d77eb30c 100644 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/in/SearchPersonInPort.java +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/in/SearchPersonInPort.java @@ -1,9 +1,9 @@ -package de.muenchen.oss.digiwf.okewo.integration.application.in; +package de.muenchen.oss.digiwf.okewo.integration.application.port.in; import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonAnfrage; import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonAntwort; import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; public interface SearchPersonInPort { - SuchePersonAntwort searchPerson(final SuchePersonAnfrage request) throws OkEwoIntegrationClientErrorException; + SuchePersonAntwort searchPerson(final SuchePersonAnfrage request) throws OkEwoIntegrationClientErrorException; } diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/out/OkEwoClientOutPort.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/out/OkEwoClientOutPort.java new file mode 100644 index 0000000000..1a423c8169 --- /dev/null +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/port/out/OkEwoClientOutPort.java @@ -0,0 +1,19 @@ +package de.muenchen.oss.digiwf.okewo.integration.application.port.out; + + +import de.muenchen.oss.digiwf.okewo.integration.client.model.*; +import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; + +/** + * Port to okEwo System + */ +public interface OkEwoClientOutPort { + + Person getPerson(final String om, final String userId) throws OkEwoIntegrationClientErrorException; + + PersonErweitert getExtendedPerson(final String om, final String userId) throws OkEwoIntegrationClientErrorException; + + SuchePersonAntwort searchPerson(final SuchePersonAnfrage request) throws OkEwoIntegrationClientErrorException; + + SuchePersonerweitertAntwort searchExtendedPerson(SuchePersonerweitertAnfrage request) throws OkEwoIntegrationClientErrorException; +} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/GetPersonErweitertUseCase.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/GetPersonErweitertUseCase.java new file mode 100644 index 0000000000..bbea17d054 --- /dev/null +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/GetPersonErweitertUseCase.java @@ -0,0 +1,21 @@ +package de.muenchen.oss.digiwf.okewo.integration.application.usecase; + +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.GetPersonErweitertInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.out.OkEwoClientOutPort; +import de.muenchen.oss.digiwf.okewo.integration.client.model.PersonErweitert; +import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; +import de.muenchen.oss.digiwf.okewo.integration.properties.OkEwoIntegrationProperties; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class GetPersonErweitertUseCase implements GetPersonErweitertInPort { + private final OkEwoIntegrationProperties properties; + private final OkEwoClientOutPort client; + + @Override + public PersonErweitert getPerson(String om) throws OkEwoIntegrationClientErrorException { + return client.getExtendedPerson(om, properties.getBenutzerId()); + } +} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/GetPersonUseCase.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/GetPersonUseCase.java new file mode 100644 index 0000000000..ad77502f1a --- /dev/null +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/GetPersonUseCase.java @@ -0,0 +1,21 @@ +package de.muenchen.oss.digiwf.okewo.integration.application.usecase; + +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.GetPersonInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.out.OkEwoClientOutPort; +import de.muenchen.oss.digiwf.okewo.integration.client.model.Person; +import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; +import de.muenchen.oss.digiwf.okewo.integration.properties.OkEwoIntegrationProperties; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class GetPersonUseCase implements GetPersonInPort { + private final OkEwoIntegrationProperties properties; + private final OkEwoClientOutPort client; + + @Override + public Person getPerson(String om) throws OkEwoIntegrationClientErrorException { + return client.getPerson(om, properties.getBenutzerId()); + } +} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/SearchPersonErweitertUseCase.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/SearchPersonErweitertUseCase.java new file mode 100644 index 0000000000..f460e52c7d --- /dev/null +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/SearchPersonErweitertUseCase.java @@ -0,0 +1,20 @@ +package de.muenchen.oss.digiwf.okewo.integration.application.usecase; + +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.SearchPersonErweitertInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.out.OkEwoClientOutPort; +import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonerweitertAnfrage; +import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonerweitertAntwort; +import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class SearchPersonErweitertUseCase implements SearchPersonErweitertInPort { + private final OkEwoClientOutPort client; + + @Override + public SuchePersonerweitertAntwort searchPerson(SuchePersonerweitertAnfrage request) throws OkEwoIntegrationClientErrorException { + return client.searchExtendedPerson(request); + } +} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/SearchPersonUseCase.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/SearchPersonUseCase.java new file mode 100644 index 0000000000..b6d6b5733f --- /dev/null +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/main/java/de/muenchen/oss/digiwf/okewo/integration/application/usecase/SearchPersonUseCase.java @@ -0,0 +1,20 @@ +package de.muenchen.oss.digiwf.okewo.integration.application.usecase; + +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.SearchPersonInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.out.OkEwoClientOutPort; +import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonAnfrage; +import de.muenchen.oss.digiwf.okewo.integration.client.model.SuchePersonAntwort; +import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class SearchPersonUseCase implements SearchPersonInPort { + private final OkEwoClientOutPort client; + + @Override + public SuchePersonAntwort searchPerson(SuchePersonAnfrage request) throws OkEwoIntegrationClientErrorException { + return client.searchPerson(request); + } +} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/test/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/OkEwoAdapterTest.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/test/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/OkEwoAdapterTest.java deleted file mode 100644 index c132e1e00d..0000000000 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/test/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/OkEwoAdapterTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package de.muenchen.oss.digiwf.okewo.integration.adapter.out; - -import de.muenchen.oss.digiwf.okewo.integration.client.api.PersonApi; -import de.muenchen.oss.digiwf.okewo.integration.client.api.PersonErweitertApi; -import de.muenchen.oss.digiwf.okewo.integration.client.model.*; -import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; -import org.junit.jupiter.api.Test; -import org.springframework.http.HttpStatus; -import org.springframework.web.reactive.function.client.WebClientResponseException; -import reactor.core.publisher.Mono; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -class OkEwoAdapterTest { - - private final PersonErweitertApi personErweitertApi = mock(PersonErweitertApi.class); - private final PersonApi personApi = mock(PersonApi.class); - private final OkEwoAdapter adapter = new OkEwoAdapter( - personErweitertApi, - personApi - ); - - private final WebClientResponseException notFoundException = new WebClientResponseException(HttpStatus.NOT_FOUND, "not found", null, null, null, null); - private final WebClientResponseException badRequestException = new WebClientResponseException(HttpStatus.BAD_REQUEST, "bad request", null, null, null, null); - - @Test - void getPerson_shouldReturnPersonWhenRequestWasSuccessfully() throws OkEwoIntegrationClientErrorException { - final Person serverResponse = new Person().ordnungsmerkmal("om"); - when(personApi.deMuenchenEaiEwoRouteROUTEPROCESSGETPERSON("om", "benutzerId")).thenReturn(Mono.just(serverResponse)); - - final Person result = adapter.getPerson("om", "benutzerId"); - assertEquals("om", result.getOrdnungsmerkmal()); - } - - @Test - void getPerson_shouldThrowExceptionIfRequestFailed() { - when(personApi.deMuenchenEaiEwoRouteROUTEPROCESSGETPERSON("om", "benutzerId")).thenThrow(notFoundException); - - final OkEwoIntegrationClientErrorException exception= assertThrows(OkEwoIntegrationClientErrorException.class, () -> { - adapter.getPerson("om", "benutzerId"); - }); - - assertTrue(exception.getMessage().contains("404")); - } - - @Test - void getExtendedPerson_shouldReturnPersonErweitertWhenRequestWasSuccessfully() throws OkEwoIntegrationClientErrorException { - final PersonErweitert serverResponse = new PersonErweitert().ordnungsmerkmal("om"); - when(personErweitertApi.deMuenchenEaiEwoRouteROUTEPROCESSGETPERSONERWEITERT("om", "benutzerId")).thenReturn(Mono.just(serverResponse)); - - final PersonErweitert result = adapter.getExtendedPerson("om", "benutzerId"); - assertEquals("om", result.getOrdnungsmerkmal()); - } - - @Test - void getExtendedPerson_shouldThrowExceptionIfRequestFailed() { - when(personErweitertApi.deMuenchenEaiEwoRouteROUTEPROCESSGETPERSONERWEITERT("om", "benutzerId")).thenThrow(notFoundException); - - final OkEwoIntegrationClientErrorException exception= assertThrows(OkEwoIntegrationClientErrorException.class, () -> { - adapter.getExtendedPerson("om", "benutzerId"); - }); - - assertTrue(exception.getMessage().contains("404")); - } - - @Test - void searchPerson_shouldReturnPersonErweitertWhenRequestWasSuccessfully() throws OkEwoIntegrationClientErrorException { - final SuchePersonAnfrage request = new SuchePersonAnfrage(); - final Person person = new Person().ordnungsmerkmal("om"); - final SuchePersonAntwort serverResponse = new SuchePersonAntwort().addPersonenItem(person); - when(personApi.deMuenchenEaiEwoRouteROUTEPROCESSSEARCHPERSON(request)).thenReturn(Mono.just(serverResponse)); - - final SuchePersonAntwort result = adapter.searchPerson(request); - assertEquals("om", result.getPersonen().get(0).getOrdnungsmerkmal()); - } - - @Test - void searchPerson_shouldThrowExceptionIfRequestFailed() { - final SuchePersonAnfrage request = new SuchePersonAnfrage(); - when(personApi.deMuenchenEaiEwoRouteROUTEPROCESSSEARCHPERSON(request)).thenThrow(badRequestException); - - final OkEwoIntegrationClientErrorException exception= assertThrows(OkEwoIntegrationClientErrorException.class, () -> { - adapter.searchPerson(request); - }); - - assertTrue(exception.getMessage().contains("400")); - } - - @Test - void searchExtendedPerson() throws OkEwoIntegrationClientErrorException { - final SuchePersonerweitertAnfrage request = new SuchePersonerweitertAnfrage(); - final PersonErweitert person = new PersonErweitert().ordnungsmerkmal("om"); - final SuchePersonerweitertAntwort response = new SuchePersonerweitertAntwort().addPersonenItem(person); - when(personErweitertApi.deMuenchenEaiEwoRouteROUTEPROCESSSEARCHPERSONERWEITERT(request)).thenReturn(Mono.just(response)); - - final SuchePersonerweitertAntwort result = adapter.searchExtendedPerson(request); - assertEquals("om", result.getPersonen().get(0).getOrdnungsmerkmal()); - - } - - @Test - void searchExtendedPerson_shouldThrowExceptionIfRequestFailed() { - SuchePersonerweitertAnfrage request = new SuchePersonerweitertAnfrage(); - when(personErweitertApi.deMuenchenEaiEwoRouteROUTEPROCESSSEARCHPERSONERWEITERT(request)).thenThrow(badRequestException); - - final OkEwoIntegrationClientErrorException exception= assertThrows(OkEwoIntegrationClientErrorException.class, () -> { - - adapter.searchExtendedPerson(request); - }); - - assertTrue(exception.getMessage().contains("400")); - } -} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/test/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/okewo/OkEwoAdapterTest.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/test/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/okewo/OkEwoAdapterTest.java new file mode 100644 index 0000000000..3e3ee5c3c7 --- /dev/null +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-core/src/test/java/de/muenchen/oss/digiwf/okewo/integration/adapter/out/okewo/OkEwoAdapterTest.java @@ -0,0 +1,115 @@ +package de.muenchen.oss.digiwf.okewo.integration.adapter.out.okewo; + +import de.muenchen.oss.digiwf.okewo.integration.client.api.PersonApi; +import de.muenchen.oss.digiwf.okewo.integration.client.api.PersonErweitertApi; +import de.muenchen.oss.digiwf.okewo.integration.client.model.*; +import de.muenchen.oss.digiwf.okewo.integration.domain.exception.OkEwoIntegrationClientErrorException; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; +import org.springframework.web.reactive.function.client.WebClientResponseException; +import reactor.core.publisher.Mono; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +class OkEwoAdapterTest { + + private final PersonErweitertApi personErweitertApi = mock(PersonErweitertApi.class); + private final PersonApi personApi = mock(PersonApi.class); + private final OkEwoAdapter adapter = new OkEwoAdapter( + personErweitertApi, + personApi + ); + + private final WebClientResponseException notFoundException = new WebClientResponseException(HttpStatus.NOT_FOUND, "not found", null, null, null, null); + private final WebClientResponseException badRequestException = new WebClientResponseException(HttpStatus.BAD_REQUEST, "bad request", null, null, null, null); + + @Test + void getPerson_shouldReturnPersonWhenRequestWasSuccessfully() throws OkEwoIntegrationClientErrorException { + final Person serverResponse = new Person().ordnungsmerkmal("om"); + when(personApi.deMuenchenEaiEwoRouteROUTEPROCESSGETPERSON("om", "benutzerId")).thenReturn(Mono.just(serverResponse)); + + final Person result = adapter.getPerson("om", "benutzerId"); + assertEquals("om", result.getOrdnungsmerkmal()); + } + + @Test + void getPerson_shouldThrowExceptionIfRequestFailed() { + when(personApi.deMuenchenEaiEwoRouteROUTEPROCESSGETPERSON("om", "benutzerId")).thenThrow(notFoundException); + + final OkEwoIntegrationClientErrorException exception = assertThrows(OkEwoIntegrationClientErrorException.class, () -> { + adapter.getPerson("om", "benutzerId"); + }); + + assertTrue(exception.getMessage().contains("404")); + } + + @Test + void getExtendedPerson_shouldReturnPersonErweitertWhenRequestWasSuccessfully() throws OkEwoIntegrationClientErrorException { + final PersonErweitert serverResponse = new PersonErweitert().ordnungsmerkmal("om"); + when(personErweitertApi.deMuenchenEaiEwoRouteROUTEPROCESSGETPERSONERWEITERT("om", "benutzerId")).thenReturn(Mono.just(serverResponse)); + + final PersonErweitert result = adapter.getExtendedPerson("om", "benutzerId"); + assertEquals("om", result.getOrdnungsmerkmal()); + } + + @Test + void getExtendedPerson_shouldThrowExceptionIfRequestFailed() { + when(personErweitertApi.deMuenchenEaiEwoRouteROUTEPROCESSGETPERSONERWEITERT("om", "benutzerId")).thenThrow(notFoundException); + + final OkEwoIntegrationClientErrorException exception = assertThrows(OkEwoIntegrationClientErrorException.class, () -> { + adapter.getExtendedPerson("om", "benutzerId"); + }); + + assertTrue(exception.getMessage().contains("404")); + } + + @Test + void searchPerson_shouldReturnPersonErweitertWhenRequestWasSuccessfully() throws OkEwoIntegrationClientErrorException { + final SuchePersonAnfrage request = new SuchePersonAnfrage(); + final Person person = new Person().ordnungsmerkmal("om"); + final SuchePersonAntwort serverResponse = new SuchePersonAntwort().addPersonenItem(person); + when(personApi.deMuenchenEaiEwoRouteROUTEPROCESSSEARCHPERSON(request)).thenReturn(Mono.just(serverResponse)); + + final SuchePersonAntwort result = adapter.searchPerson(request); + assertEquals("om", result.getPersonen().get(0).getOrdnungsmerkmal()); + } + + @Test + void searchPerson_shouldThrowExceptionIfRequestFailed() { + final SuchePersonAnfrage request = new SuchePersonAnfrage(); + when(personApi.deMuenchenEaiEwoRouteROUTEPROCESSSEARCHPERSON(request)).thenThrow(badRequestException); + + final OkEwoIntegrationClientErrorException exception = assertThrows(OkEwoIntegrationClientErrorException.class, () -> { + adapter.searchPerson(request); + }); + + assertTrue(exception.getMessage().contains("400")); + } + + @Test + void searchExtendedPerson() throws OkEwoIntegrationClientErrorException { + final SuchePersonerweitertAnfrage request = new SuchePersonerweitertAnfrage(); + final PersonErweitert person = new PersonErweitert().ordnungsmerkmal("om"); + final SuchePersonerweitertAntwort response = new SuchePersonerweitertAntwort().addPersonenItem(person); + when(personErweitertApi.deMuenchenEaiEwoRouteROUTEPROCESSSEARCHPERSONERWEITERT(request)).thenReturn(Mono.just(response)); + + final SuchePersonerweitertAntwort result = adapter.searchExtendedPerson(request); + assertEquals("om", result.getPersonen().get(0).getOrdnungsmerkmal()); + + } + + @Test + void searchExtendedPerson_shouldThrowExceptionIfRequestFailed() { + SuchePersonerweitertAnfrage request = new SuchePersonerweitertAnfrage(); + when(personErweitertApi.deMuenchenEaiEwoRouteROUTEPROCESSSEARCHPERSONERWEITERT(request)).thenThrow(badRequestException); + + final OkEwoIntegrationClientErrorException exception = assertThrows(OkEwoIntegrationClientErrorException.class, () -> { + + adapter.searchExtendedPerson(request); + }); + + assertTrue(exception.getMessage().contains("400")); + } +} diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-starter/src/main/java/de/muenchen/oss/digiwf/okewo/integration/configuration/OkEwoIntegrationAutoConfiguration.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-starter/src/main/java/de/muenchen/oss/digiwf/okewo/integration/configuration/OkEwoIntegrationAutoConfiguration.java index 931da576f7..a1bb7602b9 100644 --- a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-starter/src/main/java/de/muenchen/oss/digiwf/okewo/integration/configuration/OkEwoIntegrationAutoConfiguration.java +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-starter/src/main/java/de/muenchen/oss/digiwf/okewo/integration/configuration/OkEwoIntegrationAutoConfiguration.java @@ -2,15 +2,13 @@ import de.muenchen.oss.digiwf.message.process.api.ErrorApi; import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import de.muenchen.oss.digiwf.okewo.integration.adapter.in.streaming.MessageProcessor; -import de.muenchen.oss.digiwf.okewo.integration.adapter.out.IntegrationOutAdapter; -import de.muenchen.oss.digiwf.okewo.integration.adapter.out.OkEwoAdapter; -import de.muenchen.oss.digiwf.okewo.integration.application.in.GetPersonErweitertInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.in.GetPersonInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.in.SearchPersonErweitertInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.in.SearchPersonInPort; -import de.muenchen.oss.digiwf.okewo.integration.application.out.IntegrationOutPort; -import de.muenchen.oss.digiwf.okewo.integration.application.out.OkEwoClientOutPort; +import de.muenchen.oss.digiwf.okewo.integration.adapter.in.streaming.StreamingAdapter; +import de.muenchen.oss.digiwf.okewo.integration.adapter.out.okewo.OkEwoAdapter; +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.GetPersonErweitertInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.GetPersonInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.SearchPersonErweitertInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.in.SearchPersonInPort; +import de.muenchen.oss.digiwf.okewo.integration.application.port.out.OkEwoClientOutPort; import de.muenchen.oss.digiwf.okewo.integration.client.ApiClient; import de.muenchen.oss.digiwf.okewo.integration.client.api.PersonApi; import de.muenchen.oss.digiwf.okewo.integration.client.api.PersonErweitertApi; @@ -100,12 +98,6 @@ private String updateHostOfBasePath(String apiClientBasePath, URL hostUrl) throw return new URL(hostUrl.getProtocol(), hostUrl.getHost(), hostUrl.getPort(), url.getFile()).toString(); } - @ConditionalOnMissingBean - @Bean - public IntegrationOutPort integrationOutPort(final ProcessApi processApi, final ErrorApi errorApi) { - return new IntegrationOutAdapter(processApi, errorApi); - } - @ConditionalOnMissingBean @Bean public OkEwoClientOutPort okEwoClientOutPort(final PersonErweitertApi personErweitertApi, final PersonApi personApi) { @@ -114,13 +106,15 @@ public OkEwoClientOutPort okEwoClientOutPort(final PersonErweitertApi personErwe @ConditionalOnMissingBean @Bean - public MessageProcessor messageProcessor(final IntegrationOutPort integrationOutPort, + public StreamingAdapter streamingAdapter(final ProcessApi processApi, + final ErrorApi errorApi, final GetPersonInPort getPersonInPort, final GetPersonErweitertInPort getPersonErweitertInPort, final SearchPersonInPort searchPersonInPort, final SearchPersonErweitertInPort searchPersonErweitertInPort) { - return new MessageProcessor( - integrationOutPort, + return new StreamingAdapter( + processApi, + errorApi, getPersonInPort, getPersonErweitertInPort, searchPersonInPort, @@ -129,22 +123,22 @@ public MessageProcessor messageProcessor(final IntegrationOutPort integrationOut } @Bean - public Consumer> getPerson(final MessageProcessor messageProcessor) { - return messageProcessor.getPerson(); + public Consumer> getPerson(final StreamingAdapter streamingAdapter) { + return streamingAdapter.getPerson(); } @Bean - public Consumer> searchPerson(final MessageProcessor messageProcessor) { - return messageProcessor.searchPerson(); + public Consumer> searchPerson(final StreamingAdapter streamingAdapter) { + return streamingAdapter.searchPerson(); } @Bean - public Consumer> getPersonErweitert(final MessageProcessor messageProcessor) { - return messageProcessor.getPersonErweitert(); + public Consumer> getPersonErweitert(final StreamingAdapter streamingAdapter) { + return streamingAdapter.getPersonErweitert(); } @Bean - public Consumer> searchPersonErweitert(final MessageProcessor messageProcessor) { - return messageProcessor.searchPersonErweitert(); + public Consumer> searchPersonErweitert(final StreamingAdapter streamingAdapter) { + return streamingAdapter.searchPersonErweitert(); } } diff --git a/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-starter/src/test/java/de/muenchen/oss/digiwf/okewo/integration/ArchitectureTest.java b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-starter/src/test/java/de/muenchen/oss/digiwf/okewo/integration/ArchitectureTest.java new file mode 100644 index 0000000000..b0189166f8 --- /dev/null +++ b/digiwf-integrations/digiwf-okewo-integration/digiwf-okewo-integration-starter/src/test/java/de/muenchen/oss/digiwf/okewo/integration/ArchitectureTest.java @@ -0,0 +1,12 @@ +package de.muenchen.oss.digiwf.okewo.integration; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchTests; +import de.muenchen.oss.digiwf.archunit.HexagonalArchitectureTest; + +@AnalyzeClasses +public class ArchitectureTest { + @ArchTest + static final ArchTests hexagonalArchitecture = ArchTests.in(HexagonalArchitectureTest.class); +} diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/OpenAiMapper.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/OpenAiMapper.java index 6cc87d823b..1c90099e2c 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/OpenAiMapper.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/OpenAiMapper.java @@ -1,17 +1,7 @@ package de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.ClassifyDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.ExtractDataDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.GenerateMailDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.PromptDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.SummarizeDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.TranslateDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ChatRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ClassifyRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ExtractDataRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.GenerateMailRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.SummarizeRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.TranslateRequest; +import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.*; +import de.muenchen.oss.digiwf.openai.integration.domain.*; import org.mapstruct.Mapper; @Mapper diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/MessageProcessor.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/StreamingAdapter.java similarity index 59% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/MessageProcessor.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/StreamingAdapter.java index 5ce0336006..682313d1c6 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/MessageProcessor.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/StreamingAdapter.java @@ -1,46 +1,40 @@ package de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming; +import de.muenchen.oss.digiwf.message.common.MessageConstants; +import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.ClassifyDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.ExtractDataDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.GenerateMailDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.PromptDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.SummarizeDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.TranslateDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ChatRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ClassifyRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ExtractDataRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.GenerateMailRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.OpenAiResponse; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.SummarizeRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.TranslateRequest; +import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.*; import de.muenchen.oss.digiwf.openai.integration.application.port.in.OpenAiInPort; -import de.muenchen.oss.digiwf.openai.integration.application.port.out.IntegrationOutPort; +import de.muenchen.oss.digiwf.openai.integration.domain.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.lang.NonNull; import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; +import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.function.Consumer; @RequiredArgsConstructor @Slf4j -public class MessageProcessor { +public class StreamingAdapter { + private static final String RESPONSE = "response"; + private final ProcessApi processApi; + private final ErrorApi errorApi; private final OpenAiInPort openAiInPort; - private final IntegrationOutPort integrationOutPort; - private final OpenAiMapper openAiMapper; - private static final String RESPONSE = "response"; - public Consumer> basicChat() { return message -> withErrorHandling(message, () -> { log.debug(message.toString()); final ChatRequest model = this.openAiMapper.dto2Model(message.getPayload()); final OpenAiResponse result = this.openAiInPort.chat(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); }); } @@ -49,7 +43,7 @@ public Consumer> translate() { log.debug(message.toString()); final TranslateRequest model = this.openAiMapper.dto2Model(message.getPayload()); final OpenAiResponse result = this.openAiInPort.translate(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); }); } @@ -58,7 +52,7 @@ public Consumer> summarize() { log.debug(message.toString()); final SummarizeRequest model = this.openAiMapper.dto2Model(message.getPayload()); final OpenAiResponse result = this.openAiInPort.summarize(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); }); } @@ -67,7 +61,7 @@ public Consumer> generateMail() { log.debug(message.toString()); final GenerateMailRequest model = this.openAiMapper.dto2Model(message.getPayload()); final OpenAiResponse result = this.openAiInPort.generateMail(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); }); } @@ -76,7 +70,7 @@ public Consumer> extractData() { log.debug(message.toString()); final ExtractDataRequest model = this.openAiMapper.dto2Model(message.getPayload()); final OpenAiResponse result = this.openAiInPort.extractData(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); }); } @@ -85,7 +79,7 @@ public Consumer> classify() { log.debug(message.toString()); final ClassifyRequest model = this.openAiMapper.dto2Model(message.getPayload()); final OpenAiResponse result = this.openAiInPort.classify(model); - this.integrationOutPort.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); + this.correlateProcessMessage(message.getHeaders(), Map.of(RESPONSE, result.getAnswer())); }); } @@ -94,9 +88,19 @@ private void withErrorHandling(final Message message, final Runnable runnable try { runnable.run(); } catch (final BpmnError bpmnError) { - this.integrationOutPort.handleBpmnError(message.getHeaders(), bpmnError); + this.errorApi.handleBpmnError(message.getHeaders(), bpmnError); } catch (final IncidentError incidentError) { - this.integrationOutPort.handleIncident(message.getHeaders(), incidentError); + this.errorApi.handleIncident(message.getHeaders(), incidentError); + } + } + + public void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload) { + final String processInstanceId = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_PROCESS_INSTANCE_ID)).toString(); + final String integrationName = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_INTEGRATION_NAME)).toString(); + final String type = Objects.requireNonNull(headers.get(MessageConstants.TYPE)).toString(); + if (payload == null) { + payload = new HashMap<>(); } + this.processApi.correlateMessage(processInstanceId, type, integrationName, payload); } } diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/IntegrationOutAdapter.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/IntegrationOutAdapter.java deleted file mode 100644 index ea70ba354c..0000000000 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/IntegrationOutAdapter.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out; - -import de.muenchen.oss.digiwf.message.common.MessageConstants; -import de.muenchen.oss.digiwf.message.process.api.ErrorApi; -import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import de.muenchen.oss.digiwf.openai.integration.application.port.out.IntegrationOutPort; -import lombok.RequiredArgsConstructor; -import org.springframework.lang.NonNull; -import org.springframework.messaging.MessageHeaders; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -@RequiredArgsConstructor -public class IntegrationOutAdapter implements IntegrationOutPort { - private final ProcessApi processApi; - private final ErrorApi errorApi; - - @Override - public void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload) { - final String processInstanceId = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_PROCESS_INSTANCE_ID)).toString(); - final String integrationName = Objects.requireNonNull(headers.get(MessageConstants.DIGIWF_INTEGRATION_NAME)).toString(); - final String type = Objects.requireNonNull(headers.get(MessageConstants.TYPE)).toString(); - if (payload == null) { - payload = new HashMap<>(); - } - this.processApi.correlateMessage(processInstanceId, type, integrationName, payload); - } - - @Override - public void handleBpmnError(@NonNull MessageHeaders headers, @NonNull BpmnError bpmnError) { - this.errorApi.handleBpmnError(headers, bpmnError); - } - - @Override - public void handleIncident(@NonNull MessageHeaders headers, @NonNull IncidentError incidentError) { - this.errorApi.handleIncident(headers, incidentError); - } -} diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/Assistant.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/ai/Assistant.java similarity index 96% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/Assistant.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/ai/Assistant.java index 616e0aeea5..ffaf5599f9 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/Assistant.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/ai/Assistant.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out; +package de.muenchen.oss.digiwf.openai.integration.adapter.out.ai; import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.UserMessage; diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/OpenAiClientOutAdapter.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/ai/OpenAiClientOutAdapter.java similarity index 80% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/OpenAiClientOutAdapter.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/ai/OpenAiClientOutAdapter.java index 313a2daa62..a29124e1c0 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/OpenAiClientOutAdapter.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/ai/OpenAiClientOutAdapter.java @@ -1,15 +1,9 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out; +package de.muenchen.oss.digiwf.openai.integration.adapter.out.ai; import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ChatRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ClassifyRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ExtractDataRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.GenerateMailRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.OpenAiResponse; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.SummarizeRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.TranslateRequest; import de.muenchen.oss.digiwf.openai.integration.application.port.out.OpenAiClientOutPort; +import de.muenchen.oss.digiwf.openai.integration.domain.*; import lombok.NonNull; import lombok.RequiredArgsConstructor; diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/in/OpenAiInPort.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/in/OpenAiInPort.java index be5ba14679..4e14e6359e 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/in/OpenAiInPort.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/in/OpenAiInPort.java @@ -2,13 +2,7 @@ import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ChatRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ClassifyRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ExtractDataRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.GenerateMailRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.OpenAiResponse; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.SummarizeRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.TranslateRequest; +import de.muenchen.oss.digiwf.openai.integration.domain.*; /** * Port to integration infrastructure. diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/out/IntegrationOutPort.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/out/IntegrationOutPort.java deleted file mode 100644 index 7b2ff96c11..0000000000 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/out/IntegrationOutPort.java +++ /dev/null @@ -1,38 +0,0 @@ -package de.muenchen.oss.digiwf.openai.integration.application.port.out; - -import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; -import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import org.springframework.lang.NonNull; -import org.springframework.messaging.MessageHeaders; - -import java.util.Map; - -/** - * Port to integration infrastructure. - */ -public interface IntegrationOutPort { - - /** - * Correlates message with a process. - * - * @param headers headers describing correlation properties. - * @param payload payload to pass during correlation. - */ - void correlateProcessMessage(@NonNull MessageHeaders headers, Map payload); - - /** - * Handles BPMN error. - * - * @param headers headers for error details. - * @param bpmnError error to handle. - */ - void handleBpmnError(@NonNull MessageHeaders headers, @NonNull BpmnError bpmnError); - - /** - * Handles incident. - * - * @param headers headers for error details. - * @param incidentError incident to handle. - */ - void handleIncident(@NonNull MessageHeaders headers, @NonNull IncidentError incidentError); -} diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/out/OpenAiClientOutPort.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/out/OpenAiClientOutPort.java index d3033f6fb9..e02f3b352d 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/out/OpenAiClientOutPort.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/port/out/OpenAiClientOutPort.java @@ -2,13 +2,7 @@ import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ChatRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ClassifyRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ExtractDataRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.GenerateMailRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.OpenAiResponse; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.SummarizeRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.TranslateRequest; +import de.muenchen.oss.digiwf.openai.integration.domain.*; /** * Port to integration infrastructure. diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/usecase/OpenAiUseCase.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/usecase/OpenAiUseCase.java index 633d62cfee..d1b0e3f686 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/usecase/OpenAiUseCase.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/application/usecase/OpenAiUseCase.java @@ -2,15 +2,9 @@ import de.muenchen.oss.digiwf.message.process.api.error.BpmnError; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ChatRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ClassifyRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ExtractDataRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.GenerateMailRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.OpenAiResponse; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.SummarizeRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.TranslateRequest; import de.muenchen.oss.digiwf.openai.integration.application.port.in.OpenAiInPort; import de.muenchen.oss.digiwf.openai.integration.application.port.out.OpenAiClientOutPort; +import de.muenchen.oss.digiwf.openai.integration.domain.*; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/ChatRequest.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/ChatRequest.java similarity index 56% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/ChatRequest.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/ChatRequest.java index 5673b12ff5..e639cda025 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/ChatRequest.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/ChatRequest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out.dto; +package de.muenchen.oss.digiwf.openai.integration.domain; import lombok.Value; diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/ClassifyRequest.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/ClassifyRequest.java similarity index 63% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/ClassifyRequest.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/ClassifyRequest.java index 80a0cc173e..ba1926c7d4 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/ClassifyRequest.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/ClassifyRequest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out.dto; +package de.muenchen.oss.digiwf.openai.integration.domain; import lombok.Value; diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/ExtractDataRequest.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/ExtractDataRequest.java similarity index 63% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/ExtractDataRequest.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/ExtractDataRequest.java index 660a96da83..f801c07e77 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/ExtractDataRequest.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/ExtractDataRequest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out.dto; +package de.muenchen.oss.digiwf.openai.integration.domain; import lombok.Value; diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/GenerateMailRequest.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/GenerateMailRequest.java similarity index 69% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/GenerateMailRequest.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/GenerateMailRequest.java index 17099c0657..3ab748addc 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/GenerateMailRequest.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/GenerateMailRequest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out.dto; +package de.muenchen.oss.digiwf.openai.integration.domain; import lombok.Value; diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/OpenAiResponse.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/OpenAiResponse.java similarity index 57% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/OpenAiResponse.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/OpenAiResponse.java index 1ef3d94a93..ae2032dc06 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/OpenAiResponse.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/OpenAiResponse.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out.dto; +package de.muenchen.oss.digiwf.openai.integration.domain; import lombok.Value; diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/SummarizeRequest.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/SummarizeRequest.java similarity index 62% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/SummarizeRequest.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/SummarizeRequest.java index 213c4790a0..30373454bb 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/SummarizeRequest.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/SummarizeRequest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out.dto; +package de.muenchen.oss.digiwf.openai.integration.domain; import lombok.Value; diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/TranslateRequest.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/TranslateRequest.java similarity index 63% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/TranslateRequest.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/TranslateRequest.java index 7c136212a6..dcb2082b64 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/dto/TranslateRequest.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/main/java/de/muenchen/oss/digiwf/openai/integration/domain/TranslateRequest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out.dto; +package de.muenchen.oss.digiwf.openai.integration.domain; import lombok.Value; diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/MessageProcessorTest.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/StreamingAdapterTest.java similarity index 60% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/MessageProcessorTest.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/StreamingAdapterTest.java index 2984c044cc..7dbc801ace 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/MessageProcessorTest.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/in/streaming/StreamingAdapterTest.java @@ -1,21 +1,12 @@ package de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming; +import de.muenchen.oss.digiwf.message.process.api.ErrorApi; +import de.muenchen.oss.digiwf.message.process.api.ProcessApi; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.ClassifyDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.ExtractDataDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.GenerateMailDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.PromptDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.SummarizeDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.TranslateDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ChatRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ClassifyRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ExtractDataRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.GenerateMailRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.OpenAiResponse; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.SummarizeRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.TranslateRequest; +import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.*; import de.muenchen.oss.digiwf.openai.integration.application.port.in.OpenAiInPort; -import de.muenchen.oss.digiwf.openai.integration.application.port.out.IntegrationOutPort; +import de.muenchen.oss.digiwf.openai.integration.domain.*; +import lombok.val; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -24,23 +15,19 @@ import java.util.Map; -import static de.muenchen.oss.digiwf.message.common.MessageConstants.DIGIWF_INTEGRATION_NAME; -import static de.muenchen.oss.digiwf.message.common.MessageConstants.DIGIWF_PROCESS_DEFINITION; -import static de.muenchen.oss.digiwf.message.common.MessageConstants.DIGIWF_PROCESS_INSTANCE_ID; -import static de.muenchen.oss.digiwf.message.common.MessageConstants.TYPE; +import static de.muenchen.oss.digiwf.message.common.MessageConstants.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; -class MessageProcessorTest { +class StreamingAdapterTest { + private static final String RESPONSE = "response"; + private final ProcessApi processApi = Mockito.mock(ProcessApi.class); + private final ErrorApi errorApi = Mockito.mock(ErrorApi.class); private final OpenAiInPort openAiInPort = Mockito.mock(OpenAiInPort.class); - private final IntegrationOutPort integrationOutPort = Mockito.mock(IntegrationOutPort.class); private final OpenAiMapper openAiMapper = new OpenAiMapperImpl(); - - private final MessageProcessor unitUnderTest = new MessageProcessor(openAiInPort, integrationOutPort, openAiMapper); - - private static final String RESPONSE = "response"; + private final StreamingAdapter unitUnderTest = new StreamingAdapter(processApi, errorApi, openAiInPort, openAiMapper); @Test void basicChat() { @@ -64,18 +51,19 @@ public MessageHeaders getHeaders() { unitUnderTest.basicChat().accept(message); Mockito.verify(openAiInPort).chat(new ChatRequest("this is a test")); - Mockito.verify(integrationOutPort).correlateProcessMessage(any(), eq(Map.of(RESPONSE, "this is an answer"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(processApi).correlateMessage(any(), any(), any(), eq(Map.of(RESPONSE, "this is an answer"))); + Mockito.verifyNoMoreInteractions(openAiInPort, processApi); - Mockito.reset(openAiInPort, integrationOutPort); + Mockito.reset(openAiInPort, processApi); - when(openAiInPort.chat(any())).thenThrow(new IncidentError("Some error")); + val error = new IncidentError("Some error"); + when(openAiInPort.chat(any())).thenThrow(error); unitUnderTest.basicChat().accept(message); Mockito.verify(openAiInPort).chat(new ChatRequest("this is a test")); - Mockito.verify(integrationOutPort).handleIncident(any(), eq(new IncidentError("Some error"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(errorApi).handleIncident(any(), eq(error)); + Mockito.verifyNoMoreInteractions(openAiInPort, errorApi); } @Test @@ -100,18 +88,19 @@ public MessageHeaders getHeaders() { unitUnderTest.translate().accept(message); Mockito.verify(openAiInPort).translate(new TranslateRequest("this is a test", "en")); - Mockito.verify(integrationOutPort).correlateProcessMessage(any(), eq(Map.of(RESPONSE, "this is an answer"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(processApi).correlateMessage(any(), any(), any(), eq(Map.of(RESPONSE, "this is an answer"))); + Mockito.verifyNoMoreInteractions(openAiInPort, processApi); - Mockito.reset(openAiInPort, integrationOutPort); + Mockito.reset(openAiInPort, processApi); - when(openAiInPort.translate(any())).thenThrow(new IncidentError("Some error")); + val error = new IncidentError("Some error"); + when(openAiInPort.translate(any())).thenThrow(error); unitUnderTest.translate().accept(message); Mockito.verify(openAiInPort).translate(new TranslateRequest("this is a test", "en")); - Mockito.verify(integrationOutPort).handleIncident(any(), eq(new IncidentError("Some error"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(errorApi).handleIncident(any(), eq(error)); + Mockito.verifyNoMoreInteractions(openAiInPort, errorApi); } @Test @@ -136,18 +125,19 @@ public MessageHeaders getHeaders() { unitUnderTest.summarize().accept(message); Mockito.verify(openAiInPort).summarize(new SummarizeRequest("this is a test", 1)); - Mockito.verify(integrationOutPort).correlateProcessMessage(any(), eq(Map.of(RESPONSE, "this is an answer"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(processApi).correlateMessage(any(), any(), any(), eq(Map.of(RESPONSE, "this is an answer"))); + Mockito.verifyNoMoreInteractions(openAiInPort, processApi); - Mockito.reset(openAiInPort, integrationOutPort); + Mockito.reset(openAiInPort, processApi); - when(openAiInPort.summarize(any())).thenThrow(new IncidentError("Some error")); + val error = new IncidentError("Some error"); + when(openAiInPort.summarize(any())).thenThrow(error); unitUnderTest.summarize().accept(message); Mockito.verify(openAiInPort).summarize(new SummarizeRequest("this is a test", 1)); - Mockito.verify(integrationOutPort).handleIncident(any(), eq(new IncidentError("Some error"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(errorApi).handleIncident(any(), eq(error)); + Mockito.verifyNoMoreInteractions(openAiInPort, errorApi); } @Test @@ -171,19 +161,20 @@ public MessageHeaders getHeaders() { unitUnderTest.generateMail().accept(message); - Mockito.verify(openAiInPort).generateMail(new GenerateMailRequest("{\"name\": \"Rene\"}", "de", "Hallo {name}")); - Mockito.verify(integrationOutPort).correlateProcessMessage(any(), eq(Map.of(RESPONSE, "Hallo Rene"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(openAiInPort).generateMail(new GenerateMailRequest("{\"name\": \"Rene\"}", "de", "Hallo {name}")); + Mockito.verify(processApi).correlateMessage(any(), any(), any(), eq(Map.of(RESPONSE, "Hallo Rene"))); + Mockito.verifyNoMoreInteractions(openAiInPort, processApi); - Mockito.reset(openAiInPort, integrationOutPort); + Mockito.reset(openAiInPort, processApi); - when(openAiInPort.generateMail(any())).thenThrow(new IncidentError("Some error")); + val error = new IncidentError("Some error"); + when(openAiInPort.generateMail(any())).thenThrow(error); unitUnderTest.generateMail().accept(message); - Mockito.verify(openAiInPort).generateMail(new GenerateMailRequest("{\"name\": \"Rene\"}", "de", "Hallo {name}")); - Mockito.verify(integrationOutPort).handleIncident(any(), eq(new IncidentError("Some error"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(openAiInPort).generateMail(new GenerateMailRequest("{\"name\": \"Rene\"}", "de", "Hallo {name}")); + Mockito.verify(errorApi).handleIncident(any(), eq(error)); + Mockito.verifyNoMoreInteractions(openAiInPort, errorApi); } @Test @@ -208,18 +199,19 @@ public MessageHeaders getHeaders() { unitUnderTest.extractData().accept(message); Mockito.verify(openAiInPort).extractData(new ExtractDataRequest("{\"name\": \"Rene\", \"language\": \"de\"}", "name")); - Mockito.verify(integrationOutPort).correlateProcessMessage(any(), eq(Map.of(RESPONSE, "{\"name\": \"Rene\"}"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(processApi).correlateMessage(any(), any(), any(), eq(Map.of(RESPONSE, "{\"name\": \"Rene\"}"))); + Mockito.verifyNoMoreInteractions(openAiInPort, processApi); - Mockito.reset(openAiInPort, integrationOutPort); + Mockito.reset(openAiInPort, processApi); - when(openAiInPort.extractData(any())).thenThrow(new IncidentError("Some error")); + val error = new IncidentError("Some error"); + when(openAiInPort.extractData(any())).thenThrow(error); unitUnderTest.extractData().accept(message); Mockito.verify(openAiInPort).extractData(new ExtractDataRequest("{\"name\": \"Rene\", \"language\": \"de\"}", "name")); - Mockito.verify(integrationOutPort).handleIncident(any(), eq(new IncidentError("Some error"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(errorApi).handleIncident(any(), eq(error)); + Mockito.verifyNoMoreInteractions(openAiInPort, errorApi); } @Test @@ -244,17 +236,18 @@ public MessageHeaders getHeaders() { unitUnderTest.classify().accept(message); Mockito.verify(openAiInPort).classify(new ClassifyRequest("{\"name\": \"Rene\", \"language\": \"deutsch\"}", "de, en")); - Mockito.verify(integrationOutPort).correlateProcessMessage(any(), eq(Map.of(RESPONSE, "de"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(processApi).correlateMessage(any(), any(), any(), eq(Map.of(RESPONSE, "de"))); + Mockito.verifyNoMoreInteractions(openAiInPort, processApi); - Mockito.reset(openAiInPort, integrationOutPort); + Mockito.reset(openAiInPort, processApi); - when(openAiInPort.classify(any())).thenThrow(new IncidentError("Some error")); + val error = new IncidentError("Some error"); + when(openAiInPort.classify(any())).thenThrow(error); unitUnderTest.classify().accept(message); Mockito.verify(openAiInPort).classify(new ClassifyRequest("{\"name\": \"Rene\", \"language\": \"deutsch\"}", "de, en")); - Mockito.verify(integrationOutPort).handleIncident(any(), eq(new IncidentError("Some error"))); - Mockito.verifyNoMoreInteractions(openAiInPort, integrationOutPort); + Mockito.verify(errorApi).handleIncident(any(), eq(error)); + Mockito.verifyNoMoreInteractions(openAiInPort, errorApi); } } \ No newline at end of file diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/OpenAiClientOutAdapterTest.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/ai/OpenAiClientOutAdapterTest.java similarity index 88% rename from digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/OpenAiClientOutAdapterTest.java rename to digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/ai/OpenAiClientOutAdapterTest.java index 13c1112cbb..40c7b3e764 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/OpenAiClientOutAdapterTest.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-core/src/test/java/de/muenchen/oss/digiwf/openai/integration/adapter/out/ai/OpenAiClientOutAdapterTest.java @@ -1,13 +1,7 @@ -package de.muenchen.oss.digiwf.openai.integration.adapter.out; +package de.muenchen.oss.digiwf.openai.integration.adapter.out.ai; import de.muenchen.oss.digiwf.message.process.api.error.IncidentError; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ChatRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ClassifyRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.ExtractDataRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.GenerateMailRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.OpenAiResponse; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.SummarizeRequest; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.dto.TranslateRequest; +import de.muenchen.oss.digiwf.openai.integration.domain.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-starter/src/main/java/de/muenchen/oss/digiwf/openai/integration/configuration/OpenAIIntegrationAutoConfiguration.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-starter/src/main/java/de/muenchen/oss/digiwf/openai/integration/configuration/OpenAIIntegrationAutoConfiguration.java index 67116dd396..60436d43d5 100644 --- a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-starter/src/main/java/de/muenchen/oss/digiwf/openai/integration/configuration/OpenAIIntegrationAutoConfiguration.java +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-starter/src/main/java/de/muenchen/oss/digiwf/openai/integration/configuration/OpenAIIntegrationAutoConfiguration.java @@ -2,19 +2,12 @@ import de.muenchen.oss.digiwf.message.process.api.ErrorApi; import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.MessageProcessor; import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.OpenAiMapper; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.ClassifyDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.ExtractDataDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.GenerateMailDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.PromptDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.SummarizeDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.TranslateDto; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.Assistant; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.IntegrationOutAdapter; -import de.muenchen.oss.digiwf.openai.integration.adapter.out.OpenAiClientOutAdapter; +import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.StreamingAdapter; +import de.muenchen.oss.digiwf.openai.integration.adapter.in.streaming.dto.*; +import de.muenchen.oss.digiwf.openai.integration.adapter.out.ai.Assistant; +import de.muenchen.oss.digiwf.openai.integration.adapter.out.ai.OpenAiClientOutAdapter; import de.muenchen.oss.digiwf.openai.integration.application.port.in.OpenAiInPort; -import de.muenchen.oss.digiwf.openai.integration.application.port.out.IntegrationOutPort; import de.muenchen.oss.digiwf.openai.integration.application.port.out.OpenAiClientOutPort; import de.muenchen.oss.digiwf.openai.integration.application.usecase.OpenAiUseCase; import de.muenchen.oss.digiwf.openai.integration.properties.AzureIntegrationProperties; @@ -88,12 +81,6 @@ public OpenAiClientOutPort addressClientOutPort(Assistant assistant) { return new OpenAiClientOutAdapter(assistant); } - @Bean - @ConditionalOnMissingBean - public IntegrationOutPort integrationOutPort(final ProcessApi processApi, final ErrorApi errorApi) { - return new IntegrationOutAdapter(processApi, errorApi); - } - @Bean @ConditionalOnMissingBean public OpenAiInPort openAiInPort(final OpenAiClientOutPort addressClientOutPort) { @@ -104,45 +91,47 @@ public OpenAiInPort openAiInPort(final OpenAiClientOutPort addressClientOutPort) @ConditionalOnMissingBean @Bean - public MessageProcessor messageProcessor( + public StreamingAdapter streamingAdapter( + final ProcessApi processApi, + final ErrorApi errorApi, final OpenAiInPort addressGermanyInPort, - final IntegrationOutPort integrationOutPort, final OpenAiMapper addressServiceMapper ) { - return new MessageProcessor( + return new StreamingAdapter( + processApi, + errorApi, addressGermanyInPort, - integrationOutPort, addressServiceMapper ); } @Bean - public Consumer> basicChat(final MessageProcessor messageProcessor) { - return messageProcessor.basicChat(); + public Consumer> basicChat(final StreamingAdapter streamingAdapter) { + return streamingAdapter.basicChat(); } @Bean - public Consumer> translate(final MessageProcessor messageProcessor) { - return messageProcessor.translate(); + public Consumer> translate(final StreamingAdapter streamingAdapter) { + return streamingAdapter.translate(); } @Bean - public Consumer> summarize(final MessageProcessor messageProcessor) { - return messageProcessor.summarize(); + public Consumer> summarize(final StreamingAdapter streamingAdapter) { + return streamingAdapter.summarize(); } @Bean - public Consumer> generateMail(final MessageProcessor messageProcessor) { - return messageProcessor.generateMail(); + public Consumer> generateMail(final StreamingAdapter streamingAdapter) { + return streamingAdapter.generateMail(); } @Bean - public Consumer> extractData(final MessageProcessor messageProcessor) { - return messageProcessor.extractData(); + public Consumer> extractData(final StreamingAdapter streamingAdapter) { + return streamingAdapter.extractData(); } @Bean - public Consumer> classify(final MessageProcessor messageProcessor) { - return messageProcessor.classify(); + public Consumer> classify(final StreamingAdapter streamingAdapter) { + return streamingAdapter.classify(); } } diff --git a/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-starter/src/test/java/de/muenchen/oss/digiwf/openai/integration/ArchitectureTest.java b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-starter/src/test/java/de/muenchen/oss/digiwf/openai/integration/ArchitectureTest.java new file mode 100644 index 0000000000..26e2c1d036 --- /dev/null +++ b/digiwf-integrations/digiwf-openai-integration/digiwf-openai-integration-starter/src/test/java/de/muenchen/oss/digiwf/openai/integration/ArchitectureTest.java @@ -0,0 +1,12 @@ +package de.muenchen.oss.digiwf.openai.integration; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchTests; +import de.muenchen.oss.digiwf.archunit.HexagonalArchitectureTest; + +@AnalyzeClasses +public class ArchitectureTest { + @ArchTest + static final ArchTests hexagonalArchitecture = ArchTests.in(HexagonalArchitectureTest.class); +} diff --git a/digiwf-integrations/digiwf-s3-integration/digiwf-s3-integration-core/pom.xml b/digiwf-integrations/digiwf-s3-integration/digiwf-s3-integration-core/pom.xml index ca60bebe5d..f4f4fe5cfd 100644 --- a/digiwf-integrations/digiwf-s3-integration/digiwf-s3-integration-core/pom.xml +++ b/digiwf-integrations/digiwf-s3-integration/digiwf-s3-integration-core/pom.xml @@ -1,5 +1,5 @@ - 4.0.0 @@ -60,14 +60,6 @@ minio ${minio.version} - - - - de.muenchen.oss.digiwf - digiwf-unit-test - ${project.version} - test - diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/pom.xml b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/pom.xml index 6dea569dad..66e48751e3 100644 --- a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/pom.xml +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/pom.xml @@ -43,14 +43,6 @@ digiwf-ticket-integration-zammad-api ${project.version} - - - - de.muenchen.oss.digiwf - digiwf-unit-test - ${project.version} - test - diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/streaming/TicketMessageProcessor.java b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/streaming/TicketStreamingAdapter.java similarity index 99% rename from digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/streaming/TicketMessageProcessor.java rename to digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/streaming/TicketStreamingAdapter.java index fe2577f49f..cb7752e6b1 100644 --- a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/streaming/TicketMessageProcessor.java +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/streaming/TicketStreamingAdapter.java @@ -30,7 +30,7 @@ @Slf4j @RequiredArgsConstructor -public class TicketMessageProcessor { +public class TicketStreamingAdapter { private static final String VALIDATION_ERROR_CODE = "VALIDATION_ERROR"; diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/out/zammad/ZammadAdapter.java b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/out/zammad/ZammadAdapter.java index 8e82dfd081..0c49ba5e24 100644 --- a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/out/zammad/ZammadAdapter.java +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/adapter/out/zammad/ZammadAdapter.java @@ -1,9 +1,9 @@ package de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.api.TicketsApi; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.model.AttachmentDTO; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.model.UpdateTicketArticleDTO; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.model.UpdateTicketDTO; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.api.TicketsApi; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.model.AttachmentDTO; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.model.UpdateTicketArticleDTO; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.model.UpdateTicketDTO; import de.muenchen.oss.digiwf.ticket.integration.application.port.out.TicketOutPort; import de.muenchen.oss.digiwf.ticket.integration.domain.model.Article; import de.muenchen.oss.digiwf.ticket.integration.domain.model.FileContent; diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/application/WriteArticleUseCase.java b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/application/usecase/WriteArticleUseCase.java similarity index 95% rename from digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/application/WriteArticleUseCase.java rename to digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/application/usecase/WriteArticleUseCase.java index f171a2295f..8a3a622513 100644 --- a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/application/WriteArticleUseCase.java +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/main/java/de/muenchen/oss/digiwf/ticket/integration/application/usecase/WriteArticleUseCase.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.ticket.integration.application; +package de.muenchen.oss.digiwf.ticket.integration.application.usecase; import de.muenchen.oss.digiwf.ticket.integration.application.port.in.WriteArticleInPort; import de.muenchen.oss.digiwf.ticket.integration.application.port.out.LoadFileOutPort; diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/WriteArticleMessageProcessorTest.java b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/streaming/WriteArticleStreamingAdapterTest.java similarity index 87% rename from digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/WriteArticleMessageProcessorTest.java rename to digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/streaming/WriteArticleStreamingAdapterTest.java index a7b541b636..c429876846 100644 --- a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/WriteArticleMessageProcessorTest.java +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/in/streaming/WriteArticleStreamingAdapterTest.java @@ -1,9 +1,7 @@ -package de.muenchen.oss.digiwf.ticket.integration.adapter.in; +package de.muenchen.oss.digiwf.ticket.integration.adapter.in.streaming; import de.muenchen.oss.digiwf.message.process.api.ErrorApi; import de.muenchen.oss.digiwf.message.process.api.ProcessApi; -import de.muenchen.oss.digiwf.ticket.integration.adapter.in.streaming.TicketMessageProcessor; -import de.muenchen.oss.digiwf.ticket.integration.adapter.in.streaming.WriteArticleDto; import de.muenchen.oss.digiwf.ticket.integration.application.port.in.WriteArticleInPort; import de.muenchen.oss.digiwf.ticket.integration.domain.model.Article; import de.muenchen.oss.digiwf.ticket.integration.domain.model.TicketStatus; @@ -20,7 +18,7 @@ import static de.muenchen.oss.digiwf.message.common.MessageConstants.*; import static org.mockito.ArgumentMatchers.any; -class WriteArticleMessageProcessorTest { +class WriteArticleStreamingAdapterTest { private final WriteArticleInPort writeArticleInPort = Mockito.mock(WriteArticleInPort.class); @@ -28,7 +26,7 @@ class WriteArticleMessageProcessorTest { private final ErrorApi errorApi = Mockito.mock(ErrorApi.class); - private final TicketMessageProcessor messageProcessor = new TicketMessageProcessor( + private final TicketStreamingAdapter messageProcessor = new TicketStreamingAdapter( writeArticleInPort, processApi, errorApi); diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/out/zammad/ZammadAdapterTest.java b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/out/zammad/ZammadAdapterTest.java index 48328cdad1..f87f35d2a9 100644 --- a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/out/zammad/ZammadAdapterTest.java +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/adapter/out/zammad/ZammadAdapterTest.java @@ -1,9 +1,9 @@ package de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.api.TicketsApi; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.model.AttachmentDTO; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.model.UpdateTicketArticleDTO; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.model.UpdateTicketDTO; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.api.TicketsApi; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.model.AttachmentDTO; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.model.UpdateTicketArticleDTO; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.model.UpdateTicketDTO; import de.muenchen.oss.digiwf.ticket.integration.domain.model.Article; import de.muenchen.oss.digiwf.ticket.integration.domain.model.FileContent; import de.muenchen.oss.digiwf.ticket.integration.domain.model.TicketStatus; @@ -20,7 +20,7 @@ class ZammadAdapterTest { - private TicketsApi ticketsApi = Mockito.mock(TicketsApi.class); + private final TicketsApi ticketsApi = Mockito.mock(TicketsApi.class); private final ZammadAdapter zammadAdapter = new ZammadAdapter(ticketsApi); diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/application/WriteArticleUseCaseTest.java b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/application/usecase/WriteArticleUseCaseTest.java similarity index 97% rename from digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/application/WriteArticleUseCaseTest.java rename to digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/application/usecase/WriteArticleUseCaseTest.java index daacbf8f47..d999ffb11b 100644 --- a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/application/WriteArticleUseCaseTest.java +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-core/src/test/java/de/muenchen/oss/digiwf/ticket/integration/application/usecase/WriteArticleUseCaseTest.java @@ -1,4 +1,4 @@ -package de.muenchen.oss.digiwf.ticket.integration.application; +package de.muenchen.oss.digiwf.ticket.integration.application.usecase; import de.muenchen.oss.digiwf.ticket.integration.application.port.out.LoadFileOutPort; import de.muenchen.oss.digiwf.ticket.integration.application.port.out.TicketOutPort; diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-starter/src/main/java/de/muenchen/oss/digiwf/ticket/integration/configuration/TicketIntegrationAutoConfiguration.java b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-starter/src/main/java/de/muenchen/oss/digiwf/ticket/integration/configuration/TicketIntegrationAutoConfiguration.java index fe81b282f7..f0ee4fcddb 100644 --- a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-starter/src/main/java/de/muenchen/oss/digiwf/ticket/integration/configuration/TicketIntegrationAutoConfiguration.java +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-starter/src/main/java/de/muenchen/oss/digiwf/ticket/integration/configuration/TicketIntegrationAutoConfiguration.java @@ -10,18 +10,18 @@ import de.muenchen.oss.digiwf.s3.integration.client.properties.SupportedFileExtensions; import de.muenchen.oss.digiwf.s3.integration.client.repository.DocumentStorageFileRepository; import de.muenchen.oss.digiwf.s3.integration.client.repository.DocumentStorageFolderRepository; -import de.muenchen.oss.digiwf.s3.integration.client.service.S3DomainProvider; import de.muenchen.oss.digiwf.s3.integration.client.service.FileExtensionService; +import de.muenchen.oss.digiwf.s3.integration.client.service.S3DomainProvider; import de.muenchen.oss.digiwf.s3.integration.client.service.S3StorageUrlProvider; -import de.muenchen.oss.digiwf.ticket.integration.adapter.in.streaming.TicketMessageProcessor; +import de.muenchen.oss.digiwf.ticket.integration.adapter.in.streaming.TicketStreamingAdapter; import de.muenchen.oss.digiwf.ticket.integration.adapter.in.streaming.WriteArticleDto; import de.muenchen.oss.digiwf.ticket.integration.adapter.out.s3.S3Adapter; import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.ZammadAdapter; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.api.TicketsApi; -import de.muenchen.oss.digiwf.ticket.integration.application.WriteArticleUseCase; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.api.TicketsApi; import de.muenchen.oss.digiwf.ticket.integration.application.port.in.WriteArticleInPort; import de.muenchen.oss.digiwf.ticket.integration.application.port.out.LoadFileOutPort; import de.muenchen.oss.digiwf.ticket.integration.application.port.out.TicketOutPort; +import de.muenchen.oss.digiwf.ticket.integration.application.usecase.WriteArticleUseCase; import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -43,8 +43,8 @@ public TicketOutPort ticketOutPort(final TicketsApi ticketsApi) { @Bean public LoadFileOutPort loadFileOutPort(final DocumentStorageFileRepository documentStorageFileRepository, - final DocumentStorageFolderRepository documentStorageFolderRepository, final FileExtensionService fileExtensionService, - final S3StorageUrlProvider s3StorageUrlProvider) { + final DocumentStorageFolderRepository documentStorageFolderRepository, final FileExtensionService fileExtensionService, + final S3StorageUrlProvider s3StorageUrlProvider) { return new S3Adapter(documentStorageFileRepository, documentStorageFolderRepository, fileExtensionService, s3StorageUrlProvider); } @@ -55,14 +55,14 @@ public WriteArticleInPort writeArticleUseCase(final TicketOutPort ticketOutPort, @ConditionalOnMissingBean @Bean - public TicketMessageProcessor messageProcessor(final WriteArticleInPort writeArticleInPort, - final ProcessApi processApi, - final ErrorApi errorApi) { - return new TicketMessageProcessor(writeArticleInPort, processApi, errorApi); + public TicketStreamingAdapter ticketStreamingAdapter(final WriteArticleInPort writeArticleInPort, + final ProcessApi processApi, + final ErrorApi errorApi) { + return new TicketStreamingAdapter(writeArticleInPort, processApi, errorApi); } @Bean - public Consumer> writeArticle(final TicketMessageProcessor messageProcessor) { + public Consumer> writeArticle(final TicketStreamingAdapter messageProcessor) { return messageProcessor.writeArticle(); } diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-starter/src/test/java/de/muenchen/oss/digiwf/ticket/integration/ArchitectureTest.java b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-starter/src/test/java/de/muenchen/oss/digiwf/ticket/integration/ArchitectureTest.java new file mode 100644 index 0000000000..409b0a27fa --- /dev/null +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-starter/src/test/java/de/muenchen/oss/digiwf/ticket/integration/ArchitectureTest.java @@ -0,0 +1,12 @@ +package de.muenchen.oss.digiwf.ticket.integration; + +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchTests; +import de.muenchen.oss.digiwf.archunit.HexagonalArchitectureTest; + +@AnalyzeClasses +public class ArchitectureTest { + @ArchTest + static final ArchTests hexagonalArchitecture = ArchTests.in(HexagonalArchitectureTest.class); +} diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-zammad-api/pom.xml b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-zammad-api/pom.xml index dc9abf49e3..bf8d1f9ec3 100644 --- a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-zammad-api/pom.xml +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-zammad-api/pom.xml @@ -82,9 +82,11 @@ webclient java - de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.api - de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.model - de.muenchen.oss.digiwf.ticket.integration.adapter.zammad + de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.api + de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.model + + de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad + false false diff --git a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-zammad-api/src/main/java/de/muenchen/oss/digiwf/zammad/ZammadAutoConfiguration.java b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-zammad-api/src/main/java/de/muenchen/oss/digiwf/zammad/ZammadAutoConfiguration.java index ea46fde00e..74aadbcd1a 100644 --- a/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-zammad-api/src/main/java/de/muenchen/oss/digiwf/zammad/ZammadAutoConfiguration.java +++ b/digiwf-integrations/digiwf-ticket-integration/digiwf-ticket-integration-zammad-api/src/main/java/de/muenchen/oss/digiwf/zammad/ZammadAutoConfiguration.java @@ -4,9 +4,9 @@ */ package de.muenchen.oss.digiwf.zammad; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.ApiClient; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.api.ArticlesApi; -import de.muenchen.oss.digiwf.ticket.integration.adapter.zammad.api.TicketsApi; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.ApiClient; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.api.ArticlesApi; +import de.muenchen.oss.digiwf.ticket.integration.adapter.out.zammad.api.TicketsApi; import lombok.RequiredArgsConstructor; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; diff --git a/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/Adapters.java b/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/Adapters.java deleted file mode 100644 index 6366bd336e..0000000000 --- a/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/Adapters.java +++ /dev/null @@ -1,74 +0,0 @@ -package de.muenchen.oss.digiwf.archunit; - -import com.tngtech.archunit.core.domain.JavaClasses; - -import java.util.ArrayList; -import java.util.List; - -public class Adapters extends ArchitectureElement { - - private final HexagonalArchitecture parentContext; - private List incomingAdapterPackages = new ArrayList<>(); - private List outgoingAdapterPackages = new ArrayList<>(); - - Adapters(HexagonalArchitecture parentContext, String basePackage) { - super(basePackage); - this.parentContext = parentContext; - } - - public Adapters outgoing(String packageName) { - this.outgoingAdapterPackages.add(fullQualifiedPackage(packageName)); - return this; - } - - public Adapters incoming(String packageName) { - this.incomingAdapterPackages.add(fullQualifiedPackage(packageName)); - return this; - } - - List allAdapterPackages() { - List allAdapters = new ArrayList<>(); - allAdapters.addAll(incomingAdapterPackages); - allAdapters.addAll(outgoingAdapterPackages); - return allAdapters; - } - - public HexagonalArchitecture and() { - return parentContext; - } - - String getBasePackage() { - return basePackage; - } - - void dontDependOnEachOther(JavaClasses classes) { - List allAdapters = allAdapterPackages(); - for (String adapter1 : allAdapters) { - for (String adapter2 : allAdapters) { - if (!adapter1.equals(adapter2)) { - denyDependency(adapter1, adapter2, classes); - } - } - } - } - - void doesNotDependOn(String packageName, JavaClasses classes) { - denyDependency(this.basePackage, packageName, classes); - } - - void incomingDoesNotDependOn(String packageName, JavaClasses classes) { - this.incomingAdapterPackages.forEach(obj -> - denyDependency(obj, packageName, classes) - ); - } - - void outgoingDoesNotDependOn(String packageName, JavaClasses classes) { - this.outgoingAdapterPackages.forEach(obj -> - denyDependency(obj, packageName, classes) - ); - } - - void doesNotContainEmptyPackages() { - denyEmptyPackages(allAdapterPackages()); - } -} diff --git a/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/ApplicationLayer.java b/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/ApplicationLayer.java deleted file mode 100644 index 1bc89b4bb9..0000000000 --- a/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/ApplicationLayer.java +++ /dev/null @@ -1,66 +0,0 @@ -package de.muenchen.oss.digiwf.archunit; - - -import com.tngtech.archunit.core.domain.JavaClasses; -import lombok.Getter; - -import java.util.ArrayList; -import java.util.List; - -public class ApplicationLayer extends ArchitectureElement { - - private final HexagonalArchitecture parentContext; - - @Getter - private List incomingPortsPackages = new ArrayList<>(); - - @Getter - private List outgoingPortsPackages = new ArrayList<>(); - private List servicePackages = new ArrayList<>(); - - public ApplicationLayer(String basePackage, HexagonalArchitecture parentContext) { - super(basePackage); - this.parentContext = parentContext; - } - - public ApplicationLayer incomingPorts(String packageName) { - this.incomingPortsPackages.add(fullQualifiedPackage(packageName)); - return this; - } - - public ApplicationLayer outgoingPorts(String packageName) { - this.outgoingPortsPackages.add(fullQualifiedPackage(packageName)); - return this; - } - - public ApplicationLayer services(String packageName) { - this.servicePackages.add(fullQualifiedPackage(packageName)); - return this; - } - - public HexagonalArchitecture and() { - return parentContext; - } - - public void doesNotDependOn(String packageName, JavaClasses classes) { - denyDependency(this.basePackage, packageName, classes); - } - - public void incomingAndOutgoingPortsDoNotDependOnEachOther(JavaClasses classes) { - denyAnyDependency(this.incomingPortsPackages, this.outgoingPortsPackages, classes); - denyAnyDependency(this.outgoingPortsPackages, this.incomingPortsPackages, classes); - } - - private List allPackages() { - List allPackages = new ArrayList<>(); - allPackages.addAll(incomingPortsPackages); - allPackages.addAll(outgoingPortsPackages); - allPackages.addAll(servicePackages); - return allPackages; - } - - - void doesNotContainEmptyPackages() { - denyEmptyPackages(allPackages()); - } -} \ No newline at end of file diff --git a/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/ArchitectureElement.java b/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/ArchitectureElement.java deleted file mode 100644 index 0dec2bd73c..0000000000 --- a/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/ArchitectureElement.java +++ /dev/null @@ -1,65 +0,0 @@ -package de.muenchen.oss.digiwf.archunit; - - -import com.tngtech.archunit.core.domain.JavaClasses; -import com.tngtech.archunit.core.importer.ClassFileImporter; - -import java.util.List; - -import static com.tngtech.archunit.base.DescribedPredicate.*; -import static com.tngtech.archunit.lang.conditions.ArchConditions.*; -import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.*; - -abstract class ArchitectureElement { - - final String basePackage; - - public ArchitectureElement(String basePackage) { - this.basePackage = basePackage; - } - - static void denyDependency(String fromPackageName, String toPackageName, JavaClasses classes) { - noClasses() - .that() - .resideInAPackage(matchAllClassesInPackage(fromPackageName)) - .should() - .dependOnClassesThat() - .resideInAnyPackage(matchAllClassesInPackage(toPackageName)) - .check(classes); - } - - static void denyAnyDependency( - List fromPackages, List toPackages, JavaClasses classes) { - for (String fromPackage : fromPackages) { - for (String toPackage : toPackages) { - denyDependency(fromPackage, toPackage, classes); - } - } - } - - static String matchAllClassesInPackage(String packageName) { - return packageName + ".."; - } - - String fullQualifiedPackage(String relativePackage) { - return this.basePackage + "." + relativePackage; - } - - void denyEmptyPackage(String packageName) { - classes() - .that() - .resideInAPackage(matchAllClassesInPackage(packageName)) - .should(containNumberOfElements(greaterThanOrEqualTo(1))) - .check(classesInPackage(packageName)); - } - - private JavaClasses classesInPackage(String packageName) { - return new ClassFileImporter().importPackages(packageName); - } - - void denyEmptyPackages(List packages) { - for (String packageName : packages) { - denyEmptyPackage(packageName); - } - } -} diff --git a/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/HexagonalArchitecture.java b/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/HexagonalArchitecture.java deleted file mode 100644 index d45dc71ea1..0000000000 --- a/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/HexagonalArchitecture.java +++ /dev/null @@ -1,66 +0,0 @@ -package de.muenchen.oss.digiwf.archunit; - -import com.tngtech.archunit.core.domain.JavaClasses; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class HexagonalArchitecture extends ArchitectureElement { - - private Adapters adapters; - private ApplicationLayer applicationLayer; - private String configurationPackage; - private List domainPackages = new ArrayList<>(); - - public HexagonalArchitecture(String basePackage) { - super(basePackage); - } - - public static HexagonalArchitecture basePackage(String basePackage) { - return new HexagonalArchitecture(basePackage); - } - - public Adapters withAdaptersLayer(String adaptersPackage) { - this.adapters = new Adapters(this, fullQualifiedPackage(adaptersPackage)); - return this.adapters; - } - - public HexagonalArchitecture withDomainLayer(String domainPackage) { - this.domainPackages.add(fullQualifiedPackage(domainPackage)); - return this; - } - - public ApplicationLayer withApplicationLayer(String applicationPackage) { - this.applicationLayer = new ApplicationLayer(fullQualifiedPackage(applicationPackage), this); - return this.applicationLayer; - } - - public HexagonalArchitecture withConfiguration(String packageName) { - this.configurationPackage = fullQualifiedPackage(packageName); - return this; - } - - private void domainDoesNotDependOnAdapters(JavaClasses classes) { - denyAnyDependency( - this.domainPackages, Collections.singletonList(adapters.basePackage), classes); - } - - public void check(JavaClasses classes) { - this.adapters.doesNotContainEmptyPackages(); - this.adapters.dontDependOnEachOther(classes); - this.adapters.doesNotDependOn(this.configurationPackage, classes); - - this.applicationLayer.getIncomingPortsPackages().forEach(obj -> - this.adapters.outgoingDoesNotDependOn(obj, classes)); - - this.applicationLayer.getOutgoingPortsPackages().forEach(obj -> - this.adapters.incomingDoesNotDependOn(obj, classes)); - - this.applicationLayer.doesNotContainEmptyPackages(); - this.applicationLayer.doesNotDependOn(this.adapters.getBasePackage(), classes); - this.applicationLayer.doesNotDependOn(this.configurationPackage, classes); - this.applicationLayer.incomingAndOutgoingPortsDoNotDependOnEachOther(classes); - this.domainDoesNotDependOnAdapters(classes); - } -} diff --git a/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/HexagonalArchitectureTest.java b/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/HexagonalArchitectureTest.java new file mode 100644 index 0000000000..e6acbdd54d --- /dev/null +++ b/digiwf-libs/digiwf-testing/digiwf-unit-test/src/main/java/de/muenchen/oss/digiwf/archunit/HexagonalArchitectureTest.java @@ -0,0 +1,94 @@ +package de.muenchen.oss.digiwf.archunit; + +import com.tngtech.archunit.base.DescribedPredicate; +import com.tngtech.archunit.core.domain.JavaClass; +import com.tngtech.archunit.core.domain.JavaClasses; +import com.tngtech.archunit.junit.ArchTest; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; +import static com.tngtech.archunit.library.dependencies.SlicesRuleDefinition.slices; + +public class HexagonalArchitectureTest { + private static final String ADAPTER = "..adapter.."; + private static final String ADAPTER_IN = "..adapter.in.(*).."; + private static final String ADAPTER_OUT = "..adapter.out.(*).."; + private static final String APPLICATION_PORT_IN = "..application.port.in.."; + private static final String APPLICATION_PORT_OUT = "..application.port.out.."; + private static final String APPLICATION_USE_CASE = "..application.usecase.."; + private static final String DOMAIN = "..domain.."; + + @ArchTest + public void structure(final JavaClasses classes) { + // adapter + classes().that().resideInAPackage(ADAPTER) + .should().resideInAnyPackage(ADAPTER_IN, ADAPTER_OUT).check(classes); + } + + @ArchTest + public void packagesExist(final JavaClasses classes) { + // adapter in + classes().that().resideInAPackage(ADAPTER_IN) + .should().containNumberOfElements(DescribedPredicate.greaterThan(0)).check(classes); + // adapter out + classes().that().resideInAPackage(ADAPTER_OUT) + .should().containNumberOfElements(DescribedPredicate.greaterThan(0)).check(classes); + // port in + classes().that().resideInAPackage(APPLICATION_PORT_IN) + .should().containNumberOfElements(DescribedPredicate.greaterThan(0)).check(classes); + // port out + classes().that().resideInAPackage(APPLICATION_PORT_OUT) + .should().containNumberOfElements(DescribedPredicate.greaterThan(0)).check(classes); + // use case + classes().that().resideInAPackage(APPLICATION_USE_CASE) + .should().containNumberOfElements(DescribedPredicate.greaterThan(0)).check(classes); + } + + @ArchTest + public void namingConventions(final JavaClasses classes) { + // adapter in + classes().that().resideInAPackage(ADAPTER_IN).and().haveSimpleNameEndingWith("Adapter") + .and().areTopLevelClasses() + .should().containNumberOfElements(DescribedPredicate.greaterThan(0)).check(classes); + // adapter out + classes().that().resideInAPackage(ADAPTER_OUT).and().haveSimpleNameEndingWith("Adapter") + .and().areTopLevelClasses() + .should().containNumberOfElements(DescribedPredicate.greaterThan(0)).check(classes); + // port in + classes().that().resideInAPackage(APPLICATION_PORT_IN) + .and().areTopLevelClasses() + .should().haveSimpleNameEndingWith("InPort").check(classes); + // port out + classes().that().resideInAPackage(APPLICATION_PORT_OUT) + .and().areTopLevelClasses() + .should().haveSimpleNameEndingWith("OutPort").check(classes); + // use case + classes().that().resideInAPackage(APPLICATION_USE_CASE) + .and().areTopLevelClasses() + .should().haveSimpleNameEndingWith("UseCase").check(classes); + } + + @ArchTest + public void dependencies(final JavaClasses classes) { + // adapter in + classes().that().resideInAPackage(ADAPTER_IN).and().haveSimpleNameEndingWith("Adapter") + .should().dependOnClassesThat().resideInAPackage(APPLICATION_PORT_IN).check(classes); + noClasses().that().resideInAPackage(ADAPTER_IN) + .should().dependOnClassesThat() + .resideInAnyPackage(APPLICATION_PORT_OUT, APPLICATION_USE_CASE, ADAPTER_OUT).check(classes); + slices().matching(ADAPTER_IN).should().notDependOnEachOther(); + // adapter out + classes().that().resideInAPackage(ADAPTER_OUT).and().haveSimpleNameEndingWith("Adapter") + .should().implement(JavaClass.Predicates.resideInAPackage(APPLICATION_PORT_OUT)).check(classes); + noClasses().that().resideInAPackage(ADAPTER_OUT) + .should().dependOnClassesThat() + .resideInAnyPackage(APPLICATION_PORT_IN, APPLICATION_USE_CASE, ADAPTER_IN).check(classes); + slices().matching(ADAPTER_IN).should().notDependOnEachOther(); + // use case + classes().that().resideInAPackage(APPLICATION_USE_CASE) + .should().implement(JavaClass.Predicates.resideInAPackage(APPLICATION_PORT_IN)).check(classes); + noClasses().that().resideInAPackage(APPLICATION_USE_CASE) + .should().dependOnClassesThat() + .resideInAnyPackage(ADAPTER_OUT, ADAPTER_IN).check(classes); + } +}