Merge branch 'SI-753_Mehrere_Stationen' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.backend into DEVELOP
diff --git a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/repository/StationRepository.java b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/repository/StationRepository.java
index f4d1ad8..030d2db 100644
--- a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/repository/StationRepository.java
+++ b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/repository/StationRepository.java
@@ -27,5 +27,5 @@
 
     List<TblStation> findAll();
 
-    Optional<TblStation> findByG3efid(Long g3efid);
+    Optional<TblStation> findByStationId(String stationId);
 }
diff --git a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationService.java b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationService.java
index 8e937cd..7464a76 100644
--- a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationService.java
+++ b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationService.java
@@ -46,11 +46,18 @@
     public StationDto updateOrInsertStationByG3efid(StationDto stationDto) {
 
         try {
-            Optional<TblStation> optTblStation = stationRepository.findByG3efid(stationDto.getG3efid());
+            Optional<TblStation> optTblStation = stationRepository.findByStationId(stationDto.getStationId());
 
             if (optTblStation.isPresent() ) {
                 TblStation tblStationToSave =  optTblStation.get();
 
+                tblStationToSave.setSdox1(stationDto.getSdox1());
+                tblStationToSave.setSdoy1(stationDto.getSdoy1());
+                tblStationToSave.setG3efid(stationDto.getG3efid());
+                tblStationToSave.setStationName(stationDto.getStationName());
+                tblStationToSave.setLatitude(stationDto.getLatitude());
+                tblStationToSave.setLongitude(stationDto.getLongitude());
+
                 TblStation savedStation = stationRepository.save(tblStationToSave);
                 return stationMapper.toStationDto(savedStation);
             } else {
diff --git a/addressImport/src/test/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationServiceTest.java b/addressImport/src/test/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationServiceTest.java
index 414bab9..f5855c9 100644
--- a/addressImport/src/test/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationServiceTest.java
+++ b/addressImport/src/test/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationServiceTest.java
@@ -59,7 +59,7 @@
         StationDto stationDto = MockDataHelper.mockStationDto(1);
         stationDto.setUuid(null);
 
-        when(stationRepository.findByG3efid(any(Long.class))).thenReturn(Optional.empty());
+        when(stationRepository.findByStationId(any(String.class))).thenReturn(Optional.empty());
         when(stationRepository.save(any(TblStation.class)))
                 .then((Answer<TblStation>) invocation -> {
                     Object[] args = invocation.getArguments();
@@ -79,7 +79,7 @@
         TblStation tblStation = stationMapper.toTableStation(stationDto);
 
 
-        when(stationRepository.findByG3efid(any(Long.class))).thenReturn(Optional.of(tblStation));
+        when(stationRepository.findByStationId(any(String.class))).thenReturn(Optional.of(tblStation));
         when(stationRepository.save(any(TblStation.class)))
                 .then((Answer<TblStation>) invocation -> {
                     Object[] args = invocation.getArguments();
@@ -97,7 +97,7 @@
         StationDto stationDto = MockDataHelper.mockStationDto(1);
         TblStation tblStation = stationMapper.toTableStation(stationDto);
 
-        when(stationRepository.findByG3efid(any(Long.class))).thenReturn(Optional.of(tblStation));
+        when(stationRepository.findByStationId(any(String.class))).thenReturn(Optional.of(tblStation));
         when(stationRepository.save(any(TblStation.class)))
                 .thenThrow(new IllegalArgumentException());
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java
index ae2714f..be1ad8f 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java
@@ -24,6 +24,7 @@
 
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
@@ -80,9 +81,9 @@
     }
     @AfterMapping
     default void populateStationIds(TblFailureInformation source, @MappingTarget FailureInformationDto failureInformationDto){
-        List<TblStation> sourceList = source.getStations();
+        Set<TblStation> stations = source.getStations();
 
-        failureInformationDto.setStationIds( sourceList != null ? sourceList.stream().map(TblStation::getUuid).collect(Collectors.toList()) : new LinkedList<>());
+        failureInformationDto.setStationIds( stations != null ? stations.stream().map(TblStation::getUuid).collect(Collectors.toList()) : new LinkedList<>());
     }
     @AfterMapping
     default void populatePublicationChannels(TblFailureInformation source, @MappingTarget FailureInformationDto failureInformationDto){
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 1d4e91f..3ae1c6b 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
@@ -120,13 +120,13 @@
     )
    private List<TblDistributionGroup> distributionGroups = new LinkedList<>();
 
-    @ManyToMany
+    @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(
             name = "tblFailureInformationStation",
             joinColumns = {@JoinColumn(name = "fkTblFailureInformation")},
             inverseJoinColumns = {@JoinColumn(name = "stationStationId", referencedColumnName="stationId") }
     )
-    private List<TblStation> stations = new LinkedList<>();
+    private Set<TblStation> stations = new HashSet<>();
 
     @OneToOne(mappedBy = "tblFailureInformation")
     private TblFailureInformationReminderMailSent failureInformationReminderMailSent;
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/StationRepository.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/StationRepository.java
index f00a4c9..990acf7 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/StationRepository.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/StationRepository.java
@@ -17,8 +17,6 @@
 
 import org.eclipse.openk.gridfailureinformation.model.TblStation;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -32,9 +30,6 @@
 
     Optional<TblStation> findByUuid(UUID uuid);
 
-    @Query("select s from TblStation s where s.stationId = :stationid and s.stationName = :stationname")
-    List<TblStation> findStationsByIdAndName(@Param("stationid") String stationid, @Param("stationname") String stationname);
-
     Optional<TblStation> findByStationId(String stationId);
 
 
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 f3262f1..c279114 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
@@ -354,6 +354,8 @@
 
     protected void updatePublicationChannels(FailureInformationDto sourceDto, TblFailureInformation destTblFailureInformation ){
 
+        if( sourceDto.getStationIds() != null ) {
+            Set<TblStation> stationList = new HashSet<>();
         // Löschen zugeordneter Kanäle mit published = false
         TblFailureInformation existingTblFailureInformation = failureInformationRepository.findByUuid(sourceDto.getUuid())
                 .orElseThrow(() -> new NotFoundException(Constants.FAILURE_INFO_UUID_NOT_EXISTING));
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationService.java
index cf6b66f..f72c773 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationService.java
@@ -33,6 +33,7 @@
 
 import javax.transaction.Transactional;
 import java.util.List;
+import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
 
@@ -75,7 +76,7 @@
         TblStation station = stationRepository.findByUuid(groupDto.getUuid())
                 .orElseThrow(() -> new NotFoundException("station.uuid.not.existing"));
 
-        List<TblStation> stations =  failureInformation.getStations();
+        Set<TblStation> stations =  failureInformation.getStations();
         if (!stations.isEmpty()) {
             for (TblStation group : stations) {
                 if (group.getUuid().equals(groupDto.getUuid())) {
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
index 095edf5..79d56b1 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
@@ -5,14 +5,14 @@
 import org.eclipse.openk.gridfailureinformation.exceptions.InternalServerErrorException;
 import org.eclipse.openk.gridfailureinformation.mapper.FailureInformationMapper;
 import org.eclipse.openk.gridfailureinformation.util.ImportDataValidator;
-import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
-import org.eclipse.openk.gridfailureinformation.viewmodel.ForeignFailureDataDto;
-import org.eclipse.openk.gridfailureinformation.viewmodel.ImportDataDto;
-import org.eclipse.openk.gridfailureinformation.viewmodel.RadiusDto;
+import org.eclipse.openk.gridfailureinformation.viewmodel.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
@@ -34,6 +34,9 @@
     StatusService statusService;
 
     @Autowired
+    StationService stationService;
+
+    @Autowired
     FailureInformationMapper failureInformationMapper;
 
     @Autowired
@@ -52,7 +55,7 @@
     }
 
 
-
+    @Transactional
     private FailureInformationDto doImport(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto) {
         FailureInformationDto existingDto = failureInformationService.findByObjectReferenceExternalSystem(importDataDto.getAssembledRefId());
 
@@ -117,7 +120,13 @@
         failureInformationDto.setPostcode(foreignFailureDataDto.getPostcode());
         failureInformationDto.setPressureLevel(foreignFailureDataDto.getPressureLevel());
         failureInformationDto.setStationDescription(foreignFailureDataDto.getStationDescription());
-        failureInformationDto.setStationId(foreignFailureDataDto.getStationId());
+        String foreignStationId = foreignFailureDataDto.getStationId();
+        failureInformationDto.setStationId(foreignStationId);
+        failureInformationDto.setStationIds(new LinkedList<>());
+        if( foreignStationId != null && !foreignStationId.isEmpty()) {
+            importStation(failureInformationDto.getStationIds(), foreignStationId);
+        }
+
         failureInformationDto.setStreet(foreignFailureDataDto.getStreet());
         failureInformationDto.setVoltageLevel(foreignFailureDataDto.getVoltageLevel());
 
@@ -134,6 +143,16 @@
         failureInformationDto.setObjectReferenceExternalSystem(importDataDto.getAssembledRefId());
     }
 
+    private void importStation(List<UUID> targetList, String stationIdToImport) {
+        StationDto selectedStation = stationService.getStationsById( stationIdToImport );
+        if( selectedStation != null ) {
+            targetList.add(selectedStation.getUuid());
+        }
+        if( !stationIdToImport.isEmpty() && targetList.isEmpty() ) {
+            log.warn("Import message delivered a stationId("+stationIdToImport+") that could not be resolved!");
+        }
+    }
+
     private void importRadius(long foreignRadius, FailureInformationDto failureInformationDto) {
         Optional<RadiusDto> bestFitHigh = radiusService.getRadii().stream()
                 .filter( r -> r.getRadius() >= foreignRadius )
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/StationService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/StationService.java
index 03d2cf8..db229af 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/StationService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/StationService.java
@@ -15,12 +15,14 @@
 package org.eclipse.openk.gridfailureinformation.service;
 
 import org.eclipse.openk.gridfailureinformation.mapper.StationMapper;
+import org.eclipse.openk.gridfailureinformation.model.TblStation;
 import org.eclipse.openk.gridfailureinformation.repository.StationRepository;
 import org.eclipse.openk.gridfailureinformation.viewmodel.StationDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 @Service
@@ -39,10 +41,12 @@
     }
 
 
-    public List<StationDto> getStationsByIdAndName(String stationId, String stationName) {
-        return stationRepository.findStationsByIdAndName(stationId, stationName).stream()
-                .map(stationMapper::toStationDto)
-                .collect(Collectors.toList());
+    public StationDto getStationsById(String stationId) {
+        Optional<TblStation> tblStation = stationRepository.findByStationId(stationId);
+        if( tblStation.isPresent()) {
+            return stationMapper.toStationDto(tblStation.get());
+        }
+        return null;
     }
 
 }
diff --git a/gfsBackendService/src/main/resources/application_localdev.yml b/gfsBackendService/src/main/resources/application_localdev.yml
index 9400b00..e686c93 100644
--- a/gfsBackendService/src/main/resources/application_localdev.yml
+++ b/gfsBackendService/src/main/resources/application_localdev.yml
@@ -23,9 +23,9 @@
     port: 5672
     username: ${GFI_RABBITMQ_USERNAME}
     password: ${GFI_RABBITMQ_PASSWORD}
-    import_exchange: importExchangeLocalDev
-    failure_import_queue: failureImportQueueLocalDev
-    failure_import_routingkey: importExchangeLocalDev.failureImportKeyLocalDev
+    import_exchange: importExchangeLocalDev_fd
+    failure_import_queue: failureImportQueueLocalDev_fd
+    failure_import_routingkey: importExchangeLocalDev.failureImportKeyLocalDev_fd
     export_exchange: exportExchangeLocalDev
     channels:
       - name: MAIL
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/StationServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/StationServiceTest.java
index 56f4dc5..242a4e2 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/StationServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/StationServiceTest.java
@@ -27,6 +27,7 @@
 import org.springframework.test.context.ContextConfiguration;
 
 import java.util.List;
+import java.util.Optional;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
@@ -58,13 +59,10 @@
     @Test
     public void shouldFindASingleBranchByIdAndName() {
         TblStation mockTblStation = MockDataHelper.mockTblStation();
-        List<TblStation> mockTblStationList = MockDataHelper.mockTblStationList();
-        when(stationRepository.findStationsByIdAndName(any(String.class), any(String.class))).thenReturn(mockTblStationList);
-        List<StationDto> stationDtoList = stationService.getStationsByIdAndName("xyz", "abc");
+        when(stationRepository.findByStationId(any(String.class))).thenReturn(Optional.of(mockTblStation));
+        StationDto stationDto = stationService.getStationsById("xyz");
 
-        assertEquals(stationDtoList.size(), mockTblStationList.size());
-        assertEquals(2, stationDtoList.size());
-        assertEquals(stationDtoList.get(1).getUuid(), mockTblStationList.get(1).getUuid());
+        assertEquals(stationDto.getUuid(), mockTblStation.getUuid());
     }
 
 
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 da03d99..a207f20 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
@@ -29,6 +29,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import static org.eclipse.openk.gridfailureinformation.constants.Constants.INTERNAL_SHORT;
 
@@ -152,7 +153,7 @@
         obj.setRefStatusIntern(mockRefStatus());
 
         obj.setDistributionGroups(mockDistributionGroupList());
-        obj.setStations(mockTblStationList());
+        obj.setStations(mockTblStationList().stream().collect(Collectors.toSet()));
 
         return obj;
     }
@@ -200,7 +201,7 @@
 
         obj.setRefStatusIntern(mockRefStatus());
         obj.setDistributionGroups(mockDistributionGroupList());
-        obj.setStations(mockTblStationList());
+        obj.setStations(mockTblStationList().stream().collect(Collectors.toSet()));
         return obj;
     }
 
@@ -974,7 +975,7 @@
 
     public static List<TblStation> mockTblStationList(){
 
-        List<TblStation> stationList = new ArrayList();
+        List<TblStation> stationList = new LinkedList();
         stationList.add(mockTblStation());
         stationList.add(mockTblStation2());
         return  stationList;