Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.backend into SI-1020-Detailansicht-Radius-Polygon
merge conflicts resolved
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/StationController.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/StationController.java
index 51d2f2a..16ff8a4 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/StationController.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/StationController.java
@@ -15,6 +15,7 @@
package org.eclipse.openk.gridfailureinformation.controller;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.log4j.Log4j2;
@@ -22,11 +23,12 @@
import org.eclipse.openk.gridfailureinformation.viewmodel.StationDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.annotation.Secured;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
@Log4j2
@RestController
@@ -43,4 +45,14 @@
public List<StationDto> findStations() {
return stationService.getStations();
}
+
+ @Secured({"ROLE_GRID-FAILURE-ADMIN", "ROLE_GRID-FAILURE-READER", "ROLE_GRID-FAILURE-CREATOR", "ROLE_GRID-FAILURE-QUALIFIER", "ROLE_GRID-FAILURE-PUBLISHER"})
+ @ApiOperation(value = "Holen der Polygon-Koordinaten für die übergebenen Stationen")
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
+ @PostMapping("/polygon-coordinates")
+ public List<ArrayList<BigDecimal>> getPolygonCoordinates(
+ @ApiParam(name="listStationUuids", value= "Liste der Stationen, für die gemeinsame Polygon-Koordinaten erstellt werden sollen", required = true)
+ @RequestBody List<UUID> listStationUuids) {
+ return stationService.getPolygonCoordinates(listStationUuids);
+ }
}
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 e3a8d09..c72720e 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
@@ -16,10 +16,8 @@
import org.eclipse.openk.gridfailureinformation.model.TblDistributionGroup;
import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
-import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationPublicationChannel;
import org.eclipse.openk.gridfailureinformation.model.TblStation;
-import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
-import org.eclipse.openk.gridfailureinformation.viewmodel.ForeignFailureDataDto;
+import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationPublicationChannel;import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;import org.eclipse.openk.gridfailureinformation.viewmodel.ForeignFailureDataDto;
import org.mapstruct.*;
import java.util.LinkedList;
@@ -81,6 +79,15 @@
failureInformationDto.setStationIds( stations != null ? stations.stream().map(TblStation::getUuid).collect(Collectors.toList()) : new LinkedList<>());
}
+
+// @AfterMapping
+// default void populateStationUuids(TblFailureInformation source, @MappingTarget FailureInformationDto failureInformationDto){
+// Set<TblStation> sourceList = source.getStations();
+//
+// failureInformationDto.setStationUuids( sourceList != null ? sourceList.stream().map(TblStation::getUuid).collect(Collectors.toList()) : new LinkedList<>());
+// }
+
+
@AfterMapping
default void populatePublicationChannels(TblFailureInformation source, @MappingTarget FailureInformationDto failureInformationDto){
List<TblFailureInformationPublicationChannel> sourceList = source.getPublicationChannelList();
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 6e536ab..bdcb5b2 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
@@ -314,7 +314,7 @@
destTblFailureInformation.setRefStatusExtern(null);
}
}
-
+
private void resolveFailureClassification(TblFailureInformation destTblFailureInformation, FailureInformationDto sourceDto) {
if( sourceDto.getFailureClassificationId() != null ) {
destTblFailureInformation.setRefFailureClassification( failureClassificationRepository
@@ -633,57 +633,65 @@
return;
}
- List<TblAddress> allAdresses = new ArrayList<TblAddress>();
-
- // Holen der Adressen, die fuer die Stoerungsinformation relevant sind
- for (UUID stationUuid : stationUuids ) {
- TblStation tblStation = stationRepository
- .findByUuid(stationUuid)
- .orElse( null );
-
- if( tblStation == null ) {
- log.warn("station "+ stationUuid.toString() + "not found ");
- } else {
- List<TblAddress> addressListForStation = addressRepository.findByStationId(tblStation.getStationId());
- if (addressListForStation.isEmpty()) {
- log.debug("Station " + stationUuid.toString() + "has no addresses.");
-
- } else {
- allAdresses.addAll(addressListForStation);
- }
- }
- }
-
- List<Point> addressPoints = new LinkedList<>();
- // Hinzufügen der gefundenen Adressen zur Liste der Adresspunkte
- // (Multiplikation mit 1000000 notwendig zur Erlangung von ganzzahligen Werten für die Übergabe an GrahamScan)
- allAdresses
- .forEach(x->addressPoints.add
- (new Point(( x.getLatitude().setScale(6,RoundingMode.FLOOR).movePointRight(6)).intValue(),
- (x.getLongitude().setScale(6,RoundingMode.FLOOR).movePointRight(6)).intValue())));
-
- if( addressPoints.isEmpty()) {
- log.debug("Failure information " + failureInformationDto.getUuid().toString() + " has no addresses");
- return;
- }
-
- // GrahamScan über die Adresspunkte zum Erhalt der äußeren Punkte, die ein Polygon bilden
- List<Point> polygonPoints = GrahamScan.getConvexHull(addressPoints);
-
- List<ArrayList<BigDecimal>> addressPolygonPoints = new LinkedList<>();
- // Verpacken der Polygonpunkte in eine Liste von Arrays (longitude/latitude) die ins DTO der Störungsmeldung geschrieben wird
- // (Division durch 1000000 notwendig zur Wiedererlangung der ursprünglichen Werte)
-
- for( Point point: polygonPoints ){
- ArrayList<BigDecimal> twoValues = new ArrayList<>();
- twoValues.add(BigDecimal.valueOf(point.getX()).movePointLeft(6));
- twoValues.add(BigDecimal.valueOf(point.getY()).movePointLeft(6));
- addressPolygonPoints.add(twoValues);
- }
+ List<ArrayList<BigDecimal>> addressPolygonPoints = getPolygonCoordinatesForStationUuids(stationUuids);
if(!addressPolygonPoints.isEmpty()) {
failureInformationDto.setAddressPolygonPoints(addressPolygonPoints);
}
}
+
+public List<ArrayList<BigDecimal>> getPolygonCoordinatesForStationUuids (List<UUID> stationUuids) {
+
+ List<TblAddress> allAdresses = new ArrayList<TblAddress>();
+ List<ArrayList<BigDecimal>> addressPolygonPoints = new LinkedList<>();
+
+ // Holen der Adressen, die fuer die Stoerungsinformation relevant sind
+ for (UUID stationUuid : stationUuids) {
+ TblStation tblStation = stationRepository
+ .findByUuid(stationUuid)
+ .orElse(null);
+
+ if (tblStation == null) {
+ log.warn("station " + stationUuid.toString() + "not found ");
+ } else {
+ List<TblAddress> addressListForStation = addressRepository.findByStationId(tblStation.getStationId());
+ if (addressListForStation.isEmpty()) {
+ log.debug("Station " + stationUuid.toString() + "has no addresses.");
+
+ } else {
+ allAdresses.addAll(addressListForStation);
+ }
+ }
+ }
+
+ List<Point> addressPoints = new LinkedList<>();
+ // Hinzufügen der gefundenen Adressen zur Liste der Adresspunkte
+ // (Multiplikation mit 1000000 notwendig zur Erlangung von ganzzahligen Werten für die Übergabe an GrahamScan)
+ allAdresses
+ .forEach(x -> addressPoints.add
+ (new Point((x.getLatitude().setScale(6, RoundingMode.FLOOR).movePointRight(6)).intValue(),
+ (x.getLongitude().setScale(6, RoundingMode.FLOOR).movePointRight(6)).intValue())));
+
+ if (addressPoints.isEmpty()) {
+ log.debug("No addresses for the given stations available");
+ return addressPolygonPoints;
+ }
+
+ // GrahamScan über die Adresspunkte zum Erhalt der äußeren Punkte, die ein Polygon bilden
+ List<Point> polygonPoints = GrahamScan.getConvexHull(addressPoints);
+
+
+ // Verpacken der Polygonpunkte in eine Liste von Arrays (longitude/latitude) die ins DTO der Störungsmeldung geschrieben wird
+ // (Division durch 1000000 notwendig zur Wiedererlangung der ursprünglichen Werte)
+ for (Point point : polygonPoints) {
+ ArrayList<BigDecimal> twoValues = new ArrayList<>();
+ twoValues.add(BigDecimal.valueOf(point.getX()).movePointLeft(6));
+ twoValues.add(BigDecimal.valueOf(point.getY()).movePointLeft(6));
+ addressPolygonPoints.add(twoValues);
+ }
+
+ return addressPolygonPoints;
+}
+
}
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 db229af..2e833ae 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
@@ -21,8 +21,11 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import java.util.UUID;
import java.util.stream.Collectors;
@Service
@@ -34,6 +37,9 @@
@Autowired
private StationMapper stationMapper;
+ @Autowired
+ private FailureInformationService failureInformationService;
+
public List<StationDto> getStations() {
return stationRepository.findAll().stream()
.map(stationMapper::toStationDto)
@@ -49,4 +55,9 @@
return null;
}
+ public List<ArrayList<BigDecimal>> getPolygonCoordinates(List<UUID> stationUuids) {
+ List<ArrayList<BigDecimal>> polygonPoints = failureInformationService.getPolygonCoordinatesForStationUuids(stationUuids);
+ return polygonPoints;
+ }
+
}
diff --git a/gfsBackendService/src/main/resources/db/migration/V0_34__CREATE_GFI_DB.sql b/gfsBackendService/src/main/resources/db/migration/V0_34__CREATE_GFI_DB.sql
index 3aa153e..21d275b 100644
--- a/gfsBackendService/src/main/resources/db/migration/V0_34__CREATE_GFI_DB.sql
+++ b/gfsBackendService/src/main/resources/db/migration/V0_34__CREATE_GFI_DB.sql
@@ -51,7 +51,7 @@
DROP SEQUENCE IF EXISTS public.TBL_FAILURE_INFORMATION_DISTRIBUTION_GROUP_ID_SEQ;
DROP TABLE IF EXISTS public.TBL_FAILURE_INFORMATION_PUBLICATION_CHANNEL;
-DROP SEQUENCE IF EXISTS public.TBL_FAILURE_INFORMATION_PUBLICATION_CHANNEL_SEQ
+DROP SEQUENCE IF EXISTS public.TBL_FAILURE_INFORMATION_PUBLICATION_CHANNEL_SEQ;
-- ---------------------------------------------
-- TABLE VERSION
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/StationControllerTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/StationControllerTest.java
index 54e1c64..7969038 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/StationControllerTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/StationControllerTest.java
@@ -14,7 +14,9 @@
*/
package org.eclipse.openk.gridfailureinformation.controller;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.eclipse.openk.gridfailureinformation.GridFailureInformationApplication;
+import org.eclipse.openk.gridfailureinformation.service.FailureInformationService;
import org.eclipse.openk.gridfailureinformation.service.StationService;
import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
import org.eclipse.openk.gridfailureinformation.viewmodel.StationDto;
@@ -27,10 +29,15 @@
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
+import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
+import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -42,6 +49,9 @@
@MockBean
private StationService stationService;
+ @MockBean
+ private FailureInformationService failureInformationService;
+
@Autowired
private MockMvc mockMvc;
@@ -56,4 +66,17 @@
.andExpect(content().contentType(MediaType.APPLICATION_JSON));
}
+ @Test
+ public void shouldReturnPolygonCoordinates() throws Exception {
+ List<ArrayList<BigDecimal>> coordinatesList = MockDataHelper.mockPolygonCoordinatesList();
+ when(failureInformationService.getPolygonCoordinatesForStationUuids(anyList())).thenReturn(coordinatesList);
+
+ List<UUID> uuidList = MockDataHelper.mockUuidList();
+
+ mockMvc.perform(post("/stations/polygon-coordinates")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(new ObjectMapper().writeValueAsString(uuidList)))
+ .andExpect(status().is2xxSuccessful());
+ }
+
}
\ No newline at end of file
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 242a4e2..6447bdf 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
@@ -26,11 +26,15 @@
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ContextConfiguration;
+import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import java.util.UUID;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.when;
//@RunWith(SpringRunner.class)
@@ -43,6 +47,9 @@
private StationService stationService;
@MockBean
+ private FailureInformationService failureInformationService;
+
+ @MockBean
private StationRepository stationRepository;
@Test
@@ -65,5 +72,17 @@
assertEquals(stationDto.getUuid(), mockTblStation.getUuid());
}
+ @Test
+ public void shouldGetPolygonCoordinates() {
+
+ List<UUID> uuidList = MockDataHelper.mockUuidList();
+ List<ArrayList<BigDecimal>> mockPolygonCoordinatesList = MockDataHelper.mockPolygonCoordinatesList();
+
+ when(failureInformationService.getPolygonCoordinatesForStationUuids((anyList()))).thenReturn(mockPolygonCoordinatesList);
+
+ List<ArrayList<BigDecimal>> polygonCoordinatesList = stationService.getPolygonCoordinates(uuidList);
+
+ assertEquals(mockPolygonCoordinatesList.size(), polygonCoordinatesList.size());
+ }
}
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 dad19bd..51bb487 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
@@ -1266,4 +1266,36 @@
return tfipChannel;
}
+ public static List<ArrayList<BigDecimal>> mockPolygonCoordinatesList(){
+
+ List<ArrayList<BigDecimal>> cordinatesList = new LinkedList<>();
+
+ ArrayList<BigDecimal> firstCoordinate = new ArrayList<>();
+ firstCoordinate.add(new BigDecimal(53.5));
+ firstCoordinate.add(new BigDecimal(2.7));
+
+ ArrayList<BigDecimal> secondCoordinate = new ArrayList<>();
+ secondCoordinate.add(new BigDecimal(52.8));
+ secondCoordinate.add(new BigDecimal(2.1));
+
+ ArrayList<BigDecimal> thirdCoordinate = new ArrayList<>();
+ thirdCoordinate.add(new BigDecimal(53.66));
+ thirdCoordinate.add(new BigDecimal(2.33));
+
+ ArrayList<BigDecimal> fourthCoordinate = new ArrayList<>();
+ fourthCoordinate.add(new BigDecimal(52.9));
+ fourthCoordinate.add(new BigDecimal(2.0));
+
+ ArrayList<BigDecimal> fifthCoordinate = new ArrayList<>();
+ fifthCoordinate.add(new BigDecimal(53.45));
+ fifthCoordinate.add(new BigDecimal(2.77));
+
+ cordinatesList.add(firstCoordinate);
+ cordinatesList.add(secondCoordinate);
+ cordinatesList.add(thirdCoordinate);
+ cordinatesList.add(fourthCoordinate);
+ cordinatesList.add(fifthCoordinate);
+
+ return cordinatesList;
+ }
}