SI-745 automatischer Meldungsversand
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java
index 80acae3..ae4196a7 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java
@@ -66,12 +66,14 @@
         DecisionTask<GfiProcessSubject> decideUpdated = new DecideFailureInfoUpdated();
         ProcessTask storeEditStatusUpdated = new ShortcutTask( UPDATED );
         ProcessTask resetPublishedFlagOnChannels = new ResetPublishedFlagOnChannelsTask();
+        ProcessTask rePublishToMailChannelsUpdated = new RePublishFailureToMailChannelsTask(UPDATED);
 
         DecisionTask<GfiProcessSubject> decideHasSubordinatedInfos = new DecideFailureInfoHasSubordinatedInfos();
         ProcessTask storeEditStatusOfParentForChildren = new StoreEditStatusOfParentToChildrenTask();
 
         ProcessTask completedEndpoint = register( COMPLETED,
                 new UIStoreFailureInformationTask( "State COMPETED UI Task", true));
+        ProcessTask rePublishToMailChannelsCompleted = new RePublishFailureToMailChannelsTask(COMPLETED);
 
         ProcessTask setEndDate = new SetEndDateTask();
 
@@ -95,8 +97,10 @@
         decideUpdated.connectOutputTo(PORT1, storeEditStatusUpdated);
         decideUpdated.connectOutputTo(PORT2, setEndDate);
         decideUpdated.connectOutputTo(PORT3, storeEditStatusCanceled);
-        setEndDate.connectOutputTo(decidePublishedOnComplete);
+        setEndDate.connectOutputTo(rePublishToMailChannelsCompleted);
+        rePublishToMailChannelsCompleted.connectOutputTo(decidePublishedOnComplete);
         decidePublishedOnComplete.connectOutputTo(YES, storePublicationStatusWithdrawn);
+        //for complete republishTask
         decidePublishedOnComplete.connectOutputTo(NO, decideHasSubordinatedInfos);
         storePublicationStatusWithdrawn.connectOutputTo(decideHasSubordinatedInfos);
         decideHasSubordinatedInfos.connectOutputTo(NO, completedEndpoint);
@@ -112,7 +116,9 @@
         storePublicationStatusPublished.connectOutputTo(updateMessage);
 
         storeEditStatusUpdated.connectOutputTo(resetPublishedFlagOnChannels);
-        resetPublishedFlagOnChannels.connectOutputTo(qualifyMessage);
+        resetPublishedFlagOnChannels.connectOutputTo(rePublishToMailChannelsUpdated);
+        //for updated republishTask
+        rePublishToMailChannelsUpdated.connectOutputTo(qualifyMessage);
 
     }
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java
index 4c74443..588a4d0 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java
@@ -5,6 +5,7 @@
 import org.eclipse.openk.gridfailureinformation.bpmn.base.ProcessState;
 import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessEnvironment;
 import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessState;
+import org.eclipse.openk.gridfailureinformation.constants.Constants;
 import org.eclipse.openk.gridfailureinformation.exceptions.InternalServerErrorException;
 import org.eclipse.openk.gridfailureinformation.exceptions.NotFoundException;
 import org.eclipse.openk.gridfailureinformation.model.RefFailureClassification;
@@ -17,6 +18,7 @@
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
@@ -64,14 +66,20 @@
         return environment.getFailureInformationService().storeFailureInfo(dto, GfiProcessState.NEW);
     }
 
-    public void publishFailureInformation( FailureInformationDto dto ) {
+    public void publishFailureInformation(FailureInformationDto dto, boolean onlyMail, GfiProcessState processState) {
 
         TblFailureInformation tblFailureInfo = environment.getFailureInformationRepository().findByUuid(dto.getUuid()).orElseThrow(()-> new NotFoundException(""));
         List<TblFailureInformationPublicationChannel> channelList = environment.getChannelRepository().findByTblFailureInformation(tblFailureInfo);
+        List<String> finalChannelList = new ArrayList<>();
 
-        String[] channels = new String[channelList.size()];
-        environment.getExportService().exportFailureInformation(dto.getUuid(),
-                channelList.stream().map(TblFailureInformationPublicationChannel::getPublicationChannel).collect(Collectors.toList()).toArray(channels));
+        if (onlyMail){
+            //finalChannelList = channelList.stream().map(TblFailureInformationPublicationChannel::getPublicationChannel).filter(c -> c.equals(Constants.PUBLICATION_CHANNEL_MAIL)).collect(Collectors.toList());
+            finalChannelList.add(Constants.PUBLICATION_CHANNEL_MAIL);
+        } else {
+            finalChannelList = channelList.stream().map(TblFailureInformationPublicationChannel::getPublicationChannel).collect(Collectors.toList());
+        }
+
+        environment.getExportService().exportFailureInformation(dto.getUuid(), finalChannelList.toArray(new String[0]), processState);
 
     }
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/PublishFailureToChannelsTask.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/PublishFailureToChannelsTask.java
index a3185e8..d24d3a3 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/PublishFailureToChannelsTask.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/PublishFailureToChannelsTask.java
@@ -28,7 +28,7 @@
 
     @Override
     protected void onLeaveStep(GfiProcessSubject subject) {
-        subject.getProcessHelper().publishFailureInformation( subject.getFailureInformationDto() );
+        subject.getProcessHelper().publishFailureInformation( subject.getFailureInformationDto(), false, null );
 
         log.debug("PublishFailureToChannelsTask onLeaveStep");
     }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/RePublishFailureToMailChannelsTask.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/RePublishFailureToMailChannelsTask.java
new file mode 100644
index 0000000..600424f
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/RePublishFailureToMailChannelsTask.java
@@ -0,0 +1,39 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+
+package org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks;
+
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.ServiceTask;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessState;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessSubject;
+
+@Log4j2
+public class RePublishFailureToMailChannelsTask extends ServiceTask<GfiProcessSubject> {
+
+    private GfiProcessState processState;
+
+    public RePublishFailureToMailChannelsTask(GfiProcessState processState) {
+        super("Meldung an Kanäle veröffentlichen");
+        this.processState = processState;
+    }
+
+    @Override
+    protected void onLeaveStep(GfiProcessSubject subject) {
+        subject.getProcessHelper().publishFailureInformation( subject.getFailureInformationDto(), true , processState );
+
+        log.debug("PublishFailureToChannelsTask onLeaveStep");
+    }
+}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/constants/Constants.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/constants/Constants.java
index 1d9872b..400a2bb 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/constants/Constants.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/constants/Constants.java
@@ -42,6 +42,8 @@
     public static final String S = "S";
     public static final String CHANNEL_NOT_EXISTING = "channel.not.existing";
 
+    public static final String PUBLICATION_CHANNEL_MAIL = "Mail";
+
     private Constants() {
         // empty Constructor for the sake of SONAR
     }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/ExportController.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/ExportController.java
index a892078..6a02b9b 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/ExportController.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/ExportController.java
@@ -31,7 +31,7 @@
     })
     public ResponseEntity exportFailureInformation (@PathVariable UUID failureInfoUuid, @RequestBody String[] channels) {
 
-        exportService.exportFailureInformation(failureInfoUuid, channels);
+        exportService.exportFailureInformation(failureInfoUuid, channels, null);
 
         return ResponseEntity.ok().build();
     }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblDistributionGroup.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblDistributionGroup.java
index d00dd60..b94a859 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblDistributionGroup.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblDistributionGroup.java
@@ -25,11 +25,20 @@
     @Id
     @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_distribution_group_id_seq")
     @SequenceGenerator(name = "tbl_distribution_group_id_seq", sequenceName = "tbl_distribution_group_id_seq", allocationSize = 1)
+
     @Column(name = "id", updatable = false)
     private Long id;
     private UUID uuid;
     private String name;
-    private String distributionText;
-    private String emailSubject;
+
+    private String emailSubjectPublish;
+    private String distributionTextPublish;
+
+    private String emailSubjectUpdate;
+    private String distributionTextUpdate;
+
+    private String emailSubjectComplete;
+    private String distributionTextComplete;
+
 
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/DistributionGroupService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/DistributionGroupService.java
index 3089e0f..b215289 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/DistributionGroupService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/DistributionGroupService.java
@@ -83,8 +83,6 @@
                 .orElseThrow(() -> new NotFoundException("distribution.group.uuid.not.existing"));
 
         TblDistributionGroup groupToSave = distributionGroupMapper.toTblDistributionGroup(distributionGroupDto);
-        groupToSave.setName(distributionGroupDto.getName());
-        groupToSave.setDistributionText(distributionGroupDto.getDistributionText());
         groupToSave.setId(group.getId());
 
         TblDistributionGroup savedGroup = distributionGroupRepository.save(groupToSave);
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
index 6eb80a2..935734a 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.log4j.Log4j2;
 import org.eclipse.openk.gridfailureinformation.api.SitCacheApi;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessState;
 import org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks.ProcessHelper;
 import org.eclipse.openk.gridfailureinformation.config.ResourceConfig;
 import org.eclipse.openk.gridfailureinformation.config.rabbitMq.RabbitMqChannel;
@@ -91,7 +92,7 @@
     @Value("${distribution-group-publisher.name}")
     private String publisherDistributionGroup;
 
-    public boolean exportFailureInformation(UUID uuid, String[] targetChannels){
+    public boolean exportFailureInformation(UUID uuid, String[] targetChannels, GfiProcessState processState){
         log.info("Start exporting failureInformation with uuid: " + uuid);
         countExportedMessages = 0;
         for(String targetChannel: targetChannels){
@@ -108,7 +109,8 @@
             TblFailureInformation existingTblFailureInfo = failureInformationRepository.findByUuid( uuid )
                     .orElseThrow(NotFoundException::new);
 
-            if( !isChannelAlreadyPublished( targetChannel, existingTblFailureInfo)) {
+            //Wenn State mitgeliefert wird dann sende mail (zb. bei Update oder Complete State)
+            if( !isChannelAlreadyPublished( targetChannel, existingTblFailureInfo) || processState != null) {
 
                 //Nullsafe check
                 if (Boolean.TRUE.equals(rChannel.getIsMailType())) {
@@ -122,7 +124,7 @@
                         return false;
                     }
 
-                    distributionGroups.forEach( x -> prepareMessage(existingTblFailureInfo, x, rChannel));
+                    distributionGroups.forEach( x -> prepareMessage(existingTblFailureInfo, x, rChannel, processState));
 
                 }
                 else {
@@ -134,8 +136,12 @@
                     sendMessageToRabbitMq(rabbitMqMessageDto, rChannel);
                 }
 
-                // mark channel as published
-                markChannelAsPublished(targetChannel, existingTblFailureInfo);
+                // State wird nur beim RePublishFailureToMailChannelsTask für Update und Complete mitgegeben,
+                // hier nicht zurücksetzen (dies passiert immer noch beim resetPublishedFlagOnChannels Task)
+                if (processState == null) {
+                    markChannelAsPublished(targetChannel, existingTblFailureInfo);
+                }
+
             }
 
         }
@@ -146,7 +152,7 @@
 
     public boolean exportFailureInformationReminderMail(UUID uuid){
 
-        String targetChannel = "Mail";
+        String targetChannel = Constants.PUBLICATION_CHANNEL_MAIL;
 
         RabbitMqChannel rChannel = getAvailableRabbitMqChannel(targetChannel);
         if(getAvailableRabbitMqChannel(targetChannel) == null){
@@ -168,7 +174,7 @@
 
             TblDistributionGroup distributionGroup = distributionGroupOptional.get();
 
-            prepareMessage(existingTblFailureInfo, distributionGroup, rChannel);
+            prepareMessage(existingTblFailureInfo, distributionGroup, rChannel, null);
 
         return true;
     }
@@ -264,7 +270,7 @@
 
     }
 
-    private void prepareMessage(TblFailureInformation existingTblFailureInfo, TblDistributionGroup distributionGroup, RabbitMqChannel rabbitMqChannel){
+    private void prepareMessage(TblFailureInformation existingTblFailureInfo, TblDistributionGroup distributionGroup, RabbitMqChannel rabbitMqChannel, GfiProcessState processState){
 
         List<String> mailAddresses= new ArrayList<>();
 
@@ -288,20 +294,34 @@
             return;
         }
         rabbitMqMessageDto.setMailAddresses(mailAddresses);
-
-
-        //Holen des zum Verteiler zugehörigen Textes
-        //Ersatz der gekennzeichneten Stellen im Text mit vorhandenen Infos und Eintrag ins MessageDto
-        String distributionText = distributionGroup.getDistributionText();
-        String preparedBody = replacePlaceholders(distributionText, existingTblFailureInfo);
-        String emailSubject = replacePlaceholders(distributionGroup.getEmailSubject(), existingTblFailureInfo);
-        rabbitMqMessageDto.setBody(preparedBody);
-        rabbitMqMessageDto.setEmailSubject(emailSubject);
+        setMailTextAndSubject(existingTblFailureInfo, distributionGroup, processState, rabbitMqMessageDto);
 
         sendMessageToRabbitMq(rabbitMqMessageDto, rabbitMqChannel);
 
     }
 
+    private void setMailTextAndSubject(TblFailureInformation existingTblFailureInfo,
+                                       TblDistributionGroup distributionGroup, GfiProcessState processState,
+                                       RabbitMqMessageDto rabbitMqMessageDto) {
+        //Holen des zum Verteiler zugehörigen Textes
+        //Ersatz der gekennzeichneten Stellen im Text mit vorhandenen Infos und Eintrag ins MessageDto
+        String distributionText = distributionGroup.getDistributionTextPublish();
+        String emailSubject = distributionGroup.getEmailSubjectPublish();
+
+        if (processState == GfiProcessState.COMPLETED) {
+            distributionText = distributionGroup.getDistributionTextComplete();
+            emailSubject = distributionGroup.getEmailSubjectComplete();
+        } else if (processState == GfiProcessState.UPDATED) {
+            distributionText = distributionGroup.getDistributionTextUpdate();
+            emailSubject = distributionGroup.getEmailSubjectUpdate();
+        }
+
+        String finalDistributionText = replacePlaceholders(distributionText, existingTblFailureInfo);
+        String finalEmailSubject = replacePlaceholders(emailSubject, existingTblFailureInfo);
+        rabbitMqMessageDto.setBody(finalDistributionText);
+        rabbitMqMessageDto.setEmailSubject(finalEmailSubject);
+    }
+
     private void sendMessageToRabbitMq(RabbitMqMessageDto rabbitMqMessageDto, RabbitMqChannel rabbitMqChannel){
         try{
             rabbitTemplate.convertAndSend(rabbitMqProperties.getExportExchange(), rabbitMqChannel.getExportKey(), objectMapper.writeValueAsString(rabbitMqMessageDto));
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/DistributionGroupDto.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/DistributionGroupDto.java
index e2d1217..f19d8a3 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/DistributionGroupDto.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/DistributionGroupDto.java
@@ -26,8 +26,15 @@
     @JsonProperty("id")
     private UUID uuid;
     private String name;
-    private String distributionText;
-    private String emailSubject;
+
+    private String emailSubjectPublish;
+    private String distributionTextPublish;
+
+    private String emailSubjectUpdate;
+    private String distributionTextUpdate;
+
+    private String emailSubjectComplete;
+    private String distributionTextComplete;
 
 
 }
diff --git a/gfsBackendService/src/main/resources/db/migration/V0_XX__automatischer_Meldungsversand.sql b/gfsBackendService/src/main/resources/db/migration/V0_XX__automatischer_Meldungsversand.sql
new file mode 100644
index 0000000..1918cff
--- /dev/null
+++ b/gfsBackendService/src/main/resources/db/migration/V0_XX__automatischer_Meldungsversand.sql
@@ -0,0 +1,22 @@
+-----------------------------------------------------------------------------------
+-- *******************************************************************************
+-- * Copyright (c) 2019 Contributors to the Eclipse Foundation
+-- *
+-- * See the NOTICE file(s) distributed with this work for additional
+-- * information regarding copyright ownership.
+-- *
+-- * This program and the accompanying materials are made available under the
+-- * terms of the Eclipse Public License v. 2.0 which is available at
+-- * http://www.eclipse.org/legal/epl-2.0.
+-- *
+-- * SPDX-License-Identifier: EPL-2.0
+-- *******************************************************************************
+-----------------------------------------------------------------------------------
+ALTER TABLE public.TBL_DISTRIBUTION_GROUP RENAME DISTRIBUTION_TEXT TO DISTRIBUTION_TEXT_PUBLISH;
+ALTER TABLE public.TBL_DISTRIBUTION_GROUP RENAME EMAIL_SUBJECT TO EMAIL_SUBJECT_PUBLISH;
+
+ALTER TABLE public.TBL_DISTRIBUTION_GROUP ADD COLUMN EMAIL_SUBJECT_COMPLETE varchar(255);
+ALTER TABLE public.TBL_DISTRIBUTION_GROUP ADD COLUMN DISTRIBUTION_TEXT_COMPLETE varchar(2048);
+
+ALTER TABLE public.TBL_DISTRIBUTION_GROUP ADD COLUMN EMAIL_SUBJECT_UPDATE varchar(255);
+ALTER TABLE public.TBL_DISTRIBUTION_GROUP ADD COLUMN DISTRIBUTION_TEXT_UPDATE varchar(2048);
\ No newline at end of file
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/DistributionGroupControllerTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/DistributionGroupControllerTest.java
index dab7589..90d6855 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/DistributionGroupControllerTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/DistributionGroupControllerTest.java
@@ -89,7 +89,7 @@
                 .contentType(MediaType.APPLICATION_JSON)
                 .content(new ObjectMapper().writeValueAsString(groupDto)))
                 .andExpect(jsonPath("$.name", is(groupDto.getName())))
-                .andExpect(jsonPath("$.distributionText", is(groupDto.getDistributionText())))
+                .andExpect(jsonPath("$.distributionTextPublish", is(groupDto.getDistributionTextPublish())))
                 .andExpect(status().is2xxSuccessful());
     }
 
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/ExportControllerTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/ExportControllerTest.java
index 99d5b48..2ee5479 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/ExportControllerTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/ExportControllerTest.java
@@ -16,11 +16,10 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.eclipse.openk.gridfailureinformation.GridFailureInformationApplication;
-import org.eclipse.openk.gridfailureinformation.service.AddressService;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessState;
 import org.eclipse.openk.gridfailureinformation.service.ExportService;
 import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
 import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
-import org.eclipse.openk.gridfailureinformation.viewmodel.HousenumberUuidDto;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
@@ -30,14 +29,11 @@
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.web.servlet.MockMvc;
 
-import java.util.List;
-import java.util.Optional;
 import java.util.UUID;
 
 import static org.mockito.Mockito.*;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
 @SpringBootTest(classes = GridFailureInformationApplication.class)
@@ -58,7 +54,7 @@
         FailureInformationDto failureInfoDto = MockDataHelper.mockFailureInformationDto();
         String[] channels = {"[\"TEST\"]"};
 
-        when( exportService.exportFailureInformation(any(UUID.class), any(String[].class))).thenReturn(true);
+        when( exportService.exportFailureInformation(any(UUID.class), any(String[].class), any(GfiProcessState.class))).thenReturn(true);
 
         mockMvc.perform(put("/export/{failureInfoUuid}", failureInfoDto.getUuid().toString())
                 .contentType(MediaType.APPLICATION_JSON)
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ExportServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ExportServiceTest.java
index 3044024..bbd6986 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ExportServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ExportServiceTest.java
@@ -117,7 +117,7 @@
 
         String[] channels = {"Mail"};
 
-        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels);
+        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
         Mockito.verify(rabbitTemplate, times(0)).convertAndSend(any(), any(), any(Object.class));
         assertFalse(isMailPushed);
@@ -150,7 +150,7 @@
 
         String[] channels = {"Mail"};
 
-        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels);
+        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
         Mockito.verify(rabbitTemplate, times(0)).convertAndSend(any(), any(), any(Object.class));
         assertFalse(isMailPushed);
@@ -179,7 +179,7 @@
 
         String[] channels = {"Mail"};
 
-        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels);
+        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
         Mockito.verify(rabbitTemplate, times(2)).convertAndSend(any(), any(), any(Object.class));
         assertTrue(isMailPushed);
@@ -216,7 +216,7 @@
 
         String[] channels = {"Mail"};
 
-        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels);
+        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
         Mockito.verify(rabbitTemplate, times(2)).convertAndSend(any(), any(), any(Object.class));
         assertTrue(isMailPushed);
@@ -264,7 +264,7 @@
 
         String[] channels = {"Mail"};
 
-        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels);
+        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
         Mockito.verify(rabbitTemplate, times(2)).convertAndSend(any(), any(), any(Object.class));
         assertTrue(isMailPushed);
@@ -294,7 +294,7 @@
 
         String[] channels = {"Störungsauskunft.de"};
 
-        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels);
+        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
         Mockito.verify(rabbitTemplate, times(1)).convertAndSend(any(), any(), any(Object.class));
         assertTrue(isMailPushed);
@@ -320,7 +320,7 @@
 
         String[] channels = {"Mail"};
 
-        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels);
+        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
         assertFalse(isMailPushed);
 
@@ -344,7 +344,7 @@
 
         String[] channels = {"Mail"};
 
-        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels);
+        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
         assertFalse(isMailPushed);
 
@@ -367,7 +367,7 @@
 
         String[] channels = {"TEST", "TEST2"};
 
-        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels);
+        boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
         assertFalse(isMailPushed);
 
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
index cca4f1e..221d688 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
@@ -1207,8 +1207,8 @@
         tblDistributionGroup.setId(1L);
         tblDistributionGroup.setUuid(UUID.randomUUID());
         tblDistributionGroup.setName("Testverteiler - Abteilung intern");
-        tblDistributionGroup.setDistributionText("Liebe Kollegen blabla ...");
-        tblDistributionGroup.setEmailSubject("Betreff Test");
+        tblDistributionGroup.setDistributionTextPublish("Liebe Kollegen blabla ...");
+        tblDistributionGroup.setEmailSubjectPublish("Betreff Test");
 
         return tblDistributionGroup;
     }
@@ -1219,7 +1219,7 @@
         tblDistributionGroup.setId(2L);
         tblDistributionGroup.setUuid(UUID.randomUUID());
         tblDistributionGroup.setName("Testverteiler - Gruppe intern");
-        tblDistributionGroup.setDistributionText("Liebste Kollegen blabla ...");
+        tblDistributionGroup.setDistributionTextPublish("Liebste Kollegen blabla ...");
 
         return tblDistributionGroup;
     }
@@ -1238,8 +1238,8 @@
         DistributionGroupDto distributionGroupDto = new DistributionGroupDto();
         distributionGroupDto.setUuid(UUID.randomUUID());
         distributionGroupDto.setName("Testverteiler - Abteilung intern");
-        distributionGroupDto.setDistributionText("Liebe Kollegen blabla ...");
-        distributionGroupDto.setEmailSubject("TestBetreff");
+        distributionGroupDto.setDistributionTextPublish("Liebe Kollegen blabla ...");
+        distributionGroupDto.setEmailSubjectPublish("TestBetreff");
         return distributionGroupDto;
     }
 
@@ -1249,7 +1249,7 @@
         DistributionGroupDto distributionGroupDto = new DistributionGroupDto();
         distributionGroupDto.setUuid(UUID.randomUUID());
         distributionGroupDto.setName("Testverteiler - Kunden extern");
-        distributionGroupDto.setDistributionText("Sehr geehrte Damen und Herren blabla ...");
+        distributionGroupDto.setDistributionTextPublish("Sehr geehrte Damen und Herren blabla ...");
 
         return distributionGroupDto;
     }