SI-1358: Channels als Rückgabe ins DTO
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 2e35f34..3e8635e 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
@@ -10,14 +10,17 @@
 import org.eclipse.openk.gridfailureinformation.model.RefFailureClassification;
 import org.eclipse.openk.gridfailureinformation.model.RefStatus;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationPublicationChannel;
 import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 @Log4j2
 @RequiredArgsConstructor
@@ -62,9 +65,14 @@
     }
 
     public void publishFailureInformation( FailureInformationDto dto ) {
-        String[] channels = new String[dto.getPublicationChannels().size()];
+
+        TblFailureInformation tblFailureInfo = environment.getFailureInformationRepository().findByUuid(dto.getUuid()).orElseThrow(()-> new NotFoundException(""));
+        List<TblFailureInformationPublicationChannel> channelList = environment.getChannelRepository().findByTblFailureInformation(tblFailureInfo);
+
+        String[] channels = new String[channelList.size()];
         environment.getExportService().exportFailureInformation(dto.getUuid(),
-                dto.getPublicationChannels().toArray(channels));
+                channelList.stream().map(x->x.getPublicationChannel()).collect(Collectors.toList()).toArray(channels));
+
     }
 
     public void resetPublishedStateForChannels( FailureInformationDto dto ) {
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
index cc9fbca..08ba8d2 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
@@ -14,7 +14,9 @@
 */
 package org.eclipse.openk.gridfailureinformation.model;
 
+import lombok.AccessLevel;
 import lombok.Data;
+import lombok.Setter;
 import org.springframework.data.annotation.CreatedBy;
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.LastModifiedBy;
@@ -110,21 +112,24 @@
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(
             name = "tblFailureInformationDistributionGroup",
-            joinColumns = {@JoinColumn(name = "fkTblFailureInformation")},
+            joinColumns = {@JoinColumn(updatable = false, name = "fkTblFailureInformation")},
             inverseJoinColumns = {@JoinColumn(name = "fkTblDistributionGroup")}
     )
-   private List<TblDistributionGroup> distributionGroups = new LinkedList<>();
+
+    private List<TblDistributionGroup> distributionGroups = new LinkedList<>();
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(
             name = "tblFailureInformationStation",
-            joinColumns = {@JoinColumn(name = "fkTblFailureInformation")},
+            joinColumns = {@JoinColumn(updatable = false, name = "fkTblFailureInformation")},
             inverseJoinColumns = {@JoinColumn(name = "stationStationId", referencedColumnName="stationId") }
     )
     private Set<TblStation> stations = new HashSet<>();
 
     @OneToOne(mappedBy = "tblFailureInformation")
     private TblFailureInformationReminderMailSent failureInformationReminderMailSent;
+
+    //@Setter(AccessLevel.NONE)
     @OneToMany(cascade=CascadeType.ALL, mappedBy="tblFailureInformation", orphanRemoval = true)
     private List<TblFailureInformationPublicationChannel> publicationChannelList = new ArrayList<>();
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationPublicationChannel.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationPublicationChannel.java
index 326103b..d199e12 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationPublicationChannel.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationPublicationChannel.java
@@ -32,7 +32,7 @@
     private Long id;
 
     @ManyToOne
-    @JoinColumn( name = "fk_tbl_failure_information")
+    @JoinColumn( name = "fkTblFailureInformation")
     //@NotNull
     private TblFailureInformation tblFailureInformation;
     //@NotNull
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
index 942f8aa..d7783c7 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
@@ -159,7 +159,9 @@
         if( getRefStatus(failureInformationDto).getId() != GfiProcessState.QUALIFIED.getStatusValue()) {
             throw new BadRequestException("Publishing is only possible with state 'qualified'");
         }
-        if( failureInformationDto.getPublicationChannels().isEmpty()) {
+        TblFailureInformation tblFailureInfo = failureInformationRepository.findByUuid(failureInformationDto.getUuid()).orElseThrow(()-> new NotFoundException(""));
+        List<TblFailureInformationPublicationChannel>  channelList = failureInformationPublicationChannelRepository.findByTblFailureInformation(tblFailureInfo);
+        if(  channelList.isEmpty()) {
             throw new BadRequestException("Publishing is only possible with at least one selected channel");
         }
         return processGrid(failureInformationDto, GfiProcessState.CHECKED_FOR_PUBLISH_);
@@ -238,11 +240,20 @@
 //        if(sourceDto.getPublicationChannels() != null){
 //            updatePublicationChannels(sourceDto, destTblFailureInformation);
 //        }
-
+        resolvePublicationChannels(destTblFailureInformation);
         resolveStationIds(destTblFailureInformation, sourceDto);
         resolveDistributionGroups(destTblFailureInformation, sourceDto);
     }
 
+    private void resolvePublicationChannels(TblFailureInformation destTblFailureInformation) {
+
+        List<TblFailureInformationPublicationChannel> channelList = failureInformationPublicationChannelRepository.findByTblFailureInformation(destTblFailureInformation);
+
+           if(!channelList.isEmpty()){
+               destTblFailureInformation.setPublicationChannelList(channelList);
+           }
+    }
+
     private void resolveDistributionGroups(TblFailureInformation destTblFailureInformation, FailureInformationDto sourceDto) {
         if( sourceDto.getDistributionGroupUuids() != null ) {
             resolveDistributionGroupUuids(destTblFailureInformation, sourceDto);
@@ -270,6 +281,8 @@
         for (UUID distributionGroupUuid : sourceDto.getDistributionGroupUuids()) {
             distributionGroupList.add(distributionGroupRepository.findByUuid(distributionGroupUuid).orElseThrow(() -> new NotFoundException("distribution.group.uuid.not.existing")));
         }
+
+        destTblFailureInformation.setDistributionGroups(distributionGroupList.stream().collect(Collectors.toList()));
     }
 
     private void resolveCondensed(TblFailureInformation destTblFailureInformation, FailureInformationDto sourceDto) {
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
index 136fe7c..4a190cb 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
@@ -69,6 +69,8 @@
     private AddressRepository addressRepository;
     @MockBean
     private DistributionGroupRepository distributionGroupRepository;
+    @MockBean
+    private FailureInformationPublicationChannelRepository failureInformationPublicationChannelRepository;
 
     @Test
     public void shouldFindFailureInformations() {
@@ -487,6 +489,7 @@
         RefExpectedReason refExpectedReason = MockDataHelper.mockRefExpectedReason();
         TblStation tblStation = MockDataHelper.mockTblStation();
         TblDistributionGroup tblDistributionGroup = MockDataHelper.mockTblDistributionGroup();
+        List<TblFailureInformationPublicationChannel> publicationChannelList = MockDataHelper.mockTblFailureInformationPublicationChannelList();
 
         when(statusRepository.findById(anyLong())).thenReturn(Optional.of(refStatus));
         when(failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(fiTbl), Optional.of(fiTbl));
@@ -497,6 +500,7 @@
         when(expectedReasonRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(refExpectedReason));
         when(stationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(tblStation));
         when(distributionGroupRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(tblDistributionGroup));
+        when(failureInformationPublicationChannelRepository.findByTblFailureInformation(any(TblFailureInformation.class))).thenReturn(publicationChannelList);
 
         fiDto.setUuid(null);
 
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 ebb0b2f..1361769 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
@@ -1279,6 +1279,14 @@
         return tfipChannel;
     }
 
+    public static List<TblFailureInformationPublicationChannel> mockTblFailureInformationPublicationChannelList(){
+        List<TblFailureInformationPublicationChannel> channelList = new LinkedList<>();
+        channelList.add(mockTblFailureInformationPublicationChannel());
+        channelList.add(mockTblFailureInformationPublicationChannel2());
+
+        return channelList;
+    }
+
     public static List<ArrayList<BigDecimal>> mockPolygonCoordinatesList(){
 
         List<ArrayList<BigDecimal>> cordinatesList = new LinkedList<>();